机械装订厂
这个包提供了工厂 Bindings 对象,可以将变量映射到 RDF 术语.
此套件执行 RDF/ JS BindingsFactory
财务报告和审定财务报表 Bindings 接口.
在内部,它利用 immutable
以确保诸如 set 财务报告和审定财务报表 delete 尽可能重新使用内部内存.
这个模块是 通信框架, (中文(简体) ), 并且只能用于 想要建立自己的查询引擎的开发者。 。 。 .
如果您想要询问Comunica, 请点击这里。 。 。 .
安装
$ yarn add @comunica/utils-bindings-factory
使用量
import * as RDF from '@rdfjs/types';
import { DataFactory } from 'rdf-data-factory';
import { BindingsFactory } from '@comunica/utils-bindings-factory';
const DF = new DataFactory();
const BF = new BindingsFactory(DF);
const bindings1: RDF.Bindings = BF.bindings([
[ DF.variable('var1'), DF.literal('abc') ],
[ DF.variable('var2'), DF.literal('def') ],
]);
const bindings2: RDF.Bindings = BF.fromRecord({
var1: DF.literal('abc'),
var2: DF.literal('def'),
});
工厂方法
工厂实例如下.
创建新的约束
绑定可以通过传出密钥值对来创建,也可以以记录形式:
const bindings1: RDF.Bindings = BF.bindings([
[ DF.variable('var1'), DF.literal('abc') ],
[ DF.variable('var2'), DF.literal('def') ],
]);
const bindings2: RDF.Bindings = BF.fromRecord({
var1: DF.literal('abc'),
var2: DF.literal('def'),
});
克隆装订
捆绑可以克隆如下:
const clonedBindings = BF.fromBindings(otherBindings);
约束方法
以下方法被暴露在由工厂创建的捆绑上.
由于所有约束都是不可改变的,所以原来的约束实例永远不会被改变.
Bindings.has()
这个 has() 方法用于检查给定变量是否存在值.
变量可以作为字符串提供( 不包含 ? 前缀),或作为RDF/JS变量.
if (bindings.has('var1')) {
console.log('Has var1!');
}
if (bindings.has(DF.variable('var2'))) {
console.log('Has var2!');
}
Bindings.get()
这个 get() 方法用于读取变量的约束值.
变量可以作为字符串提供( 不包含 ? 前缀),或作为RDF/JS变量.
const term1: RDF.Term | undefined = bindings.get('var1');
const term2: RDF.Term | undefined = bindings.get(DF.variable('var2'));
Bindings.set()
这个 set() 方法用于创建当前绑定对象的副本,并添加一个新的可变绑定.
变量可以作为字符串提供( 不包含 ? 前缀),或作为RDF/JS变量.
const newBindings = bindings
.set('var1', DF.namedNode('ex:term1'))
.set(DF.variable('var2'), DF.namedNode('ex:term2'));
Bindings.delete()
这个 delete() 方法用于创建当前绑定对象的副本,并去除可变绑定.
变量可以作为字符串提供( 不包含 ? 前缀),或作为RDF/JS变量.
const newBindings = bindings
.delete('var1')
.delete(DF.variable('var2'));
Bindings.keys()
这个 keys() 方法返回对所有 RDF/JS 变量键的可执行性,这些键在此绑定对象中具有值.
for (const variable of bindings.keys()) {
console.log(variable);
}
Bindings.values()
这个 values() 方法返回所有 RDF/JS 术语中在此绑定对象中有密钥的可移动值.
for (const term of bindings.values()) {
console.log(term);
}
Bindings.forEach()
这个 forEach() 方法在此绑定对象中的所有条目上延展
并引用每个条目的RDF/JS词组值和RDF/JS可变键的回调.
bindings.forEach((value, key) => {
console.log(key);
console.log(value);
})
Bindings.size
这个 size 字段返回绑定对象中键值条目的数量.
console.log(bindings.size);
条目迭代
每个绑定对象都是可以移动的,
每一个条目都是二重奏 [RDF.Variable, RDF.Term]。 。 。 .
// Iterate over all entries
for (const [ key, value ] of bindings) {
console.log(key);
console.log(value);
}
// Save the entries in an array
const entries = [ ...bindings ];
Bindings.equals
这个 equals() 如果此绑定对象的条目等于另一个绑定对象的条目,则方法检查.
bindings1.equals(bindings2);
Bindings.filter
这个 filter() 方法通过使用回调过滤条目来创建新的绑定对象.
每个条目都适用回调.
返回真值表示此条目必须包含在产生的绑定对象中.
const filteredBindings = bindings.filter((value, key) => {
return key.value !== 'abc';
});
Bindings.map
这个 map() 方法通过使用回调绘图条目来创建新的绑定对象.
召回对每个被返回的值所取代的原始值的条目适用.
const mappedBindings = bindings.map((value, key) => {
return DF.namedNode(value.value + '_modified');
});
Bindings.merge
这个 merge() 方法将这个绑定对象的条目与另一个绑定对象的所有条目合并.
如果发生合并冲突(此等同变量与等同值),则返回未定义的变量.
const mergedBindings = bindings1.merge(bindings2);
Bindings.mergeWith
这个 mergeWith() 方法将此绑定对象与另一个对象合并
其中合并冲突可以使用回调函数解决.
合并冲突发生时引用的回调功能,
中,返回的值被视为合并值.
const mergedBindings = bindings1.mergeWith((self, other, key) => {
return DF.namedNode(self.value + other.value);
}, bindings2);
Bindings.toString
这个 toString() 方法返回约束对象的紧凑字符串表示,
用于调试.
console.log(bindings.toString());
/*
Can output in the form of:
{
"a": "ex:a",
"b": "ex:b",
"c": "ex:c"
}
*/