SPARQL RDF/JS 语言
Comunica SPARQL 是 JavaScript 用于查询 RDF/JS 源的 SPARQL 查询引擎 执行 源接口。 。 。 .
此软件包在Web应用程序中被使用时,已优化为小捆绑大小. 在撰写时,这个包的精密尺寸为1.09 MB (gzipped时为225.21 KB).
此包排除了通过 SPARQL 外部端点查询的能力 SERVICE 关键词,
并且不允许将结果序列化为SPARQL/JSON和SPARQL/XML等格式.
如果需要这种功能, SPARQL RDF/JS
应代之以使用.
这个模块是 通信框架。 。 。 .
安装
$ yarn add @comunica/query-sparql-rdfjs-lite
查询
const QueryEngine = require('@comunica/query-sparql-rdfjs-lite').QueryEngine;
const N3Store = require('n3').Store;
const DataFactory = require('n3').DataFactory;
// This can be any RDFJS source
const store = new N3Store();
store.addQuad(DataFactory.quad(
DataFactory.namedNode('a'), DataFactory.namedNode('b'), DataFactory.namedNode('http://dbpedia.org/resource/Belgium')));
store.addQuad(DataFactory.quad(
DataFactory.namedNode('a'), DataFactory.namedNode('b'), DataFactory.namedNode('http://dbpedia.org/resource/Ghent')));
// Create our engine, and query it.
// If you intend to query multiple times, be sure to cache your engine for optimal performance.
const myEngine = new QueryEngine();
const bindingsStream = await myEngine.queryBindings(`
SELECT ?s ?p ?o WHERE {
?s ?p <http://dbpedia.org/resource/Belgium>.
?s ?p ?o
} LIMIT 100`, {
sources: [store],
});
// Consume results as a stream (best performance)
bindingsStream.on('data', (binding) => {
console.log(binding.toString()); // Quick way to print bindings for testing
console.log(binding.has('s')); // Will be true
// Obtaining values
console.log(binding.get('s').value);
console.log(binding.get('s').termType);
console.log(binding.get('p').value);
console.log(binding.get('o').value);
});
bindingsStream.on('end', () => {
// The data-listener will not be called anymore once we get here.
});
bindingsStream.on('error', (error) => {
console.error(error);
});
// Consume results as async iterable (easier)
for await (const binding of bindingsStream) {
console.log(binding.toString());
}
// Consume results as an array (easier)
const bindings = await bindingsStream.toArray();
console.log(bindings[0].get('s').value);
console.log(bindings[0].get('s').termType);
更多信息 关于在应用程序中查询。 。 。 .
更新
const QueryEngine = require('@comunica/query-sparql-rdfjs-lite').QueryEngine;
const N3Store = require('n3').Store;
// This can be any RDFJS store
const store = new N3Store();
// Create our engine, and query it.
const myEngine = new QueryEngine();
const query = `
PREFIX dc: <http://purl.org/dc/elements/1.1/>
INSERT DATA
{
<http://example/book1> dc:title "A new book" ;
dc:creator "A.N.Other" .
}
`;
// Execute the update
await myEngine.queryVoid(query, {
sources: [store],
});
// Prints '2' => the store is updated
console.log(store.size);
更多信息 在应用程序中更新。 。 。 .
优化
卢旺达国防军 源接口 默认情况下只曝光 match 方法.
为了使Comunica能够制作更有效率的查询计划,
你可以选择曝光一个 countQuads 具有与 match, (中文(简体) ),
返回一个 number 或者说 Promise<number> (估计数)
与给定的四分位图案相匹配的四分位数.
当然 Source 实施方法也许能够有效地实施这种方法,
这样可以提高查询性能.
如果Comunica没有检测到 countQuads 方法,它会回落到低于最佳的计数机制
地点 match 将再次调用,以便手动计算匹配次数.