@rudof / rudof
验证RDF数据 ShEx 和 SHACL,并使用 SPARQL, 在浏览器和Node.js中。
的JavaScript包 rudof, 编译成WebAssembly。它的API反映了rudof的API Python绑定,它还附带TypeScript 声明。
npm install @rudof/rudof
node . js
const { validateShex, validateShacl } = require("@rudof/rudof");
// or: import { validateShex, validateShacl } from "@rudof/rudof";
const data = `
prefix : <http://example.org/>
:alice :name "Alice" ; :age 23 .
:bob :name "Bob" ; :age "unknown" .
`;
const schema = `
prefix : <http://example.org/>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>
:Person { :name xsd:string ; :age xsd:integer }
`;
const report = validateShex(data, schema, ":alice@:Person, :bob@:Person");
console.log(report.conforms); // false
for (const e of report.entries) {
console.log(e.node, e.shape, e.status); // ... bob ... nonconformant
}
浏览器和捆绑器
在浏览器中,WebAssembly模块是异步加载的,所以调用 默认导出一次,然后再执行其他操作:
import init, { validateShacl } from "@rudof/rudof";
await init();
const report = validateShacl(data, shapes);
理解的捆绑者 new URL("...", import.meta.url) (Vite, webpack 5,
包,Rollup与URL插件,esbuild与文件加载器)包括
.wasm 自动文件。如果没有捆绑器,就导入
@rudof/rudof/web/rudof_wasm.js 从CDN或从您自己的包副本,或
给 init 的URL(或字节) .wasm 文件:
await init({ module_or_path: "/assets/rudof_wasm_bg.wasm" });
导出文件为 @rudof/rudof/rudof_wasm_bg.wasm.
会话
validateShex 和 validateShacl 在一次调用中完成整个验证。这个
Rudof 类保存会话(数据、模式、形状映射、查询和结果)
跨调用,如Python绑定:
import { Rudof, RudofConfig } from "@rudof/rudof";
const rudof = new Rudof(RudofConfig.fromToml('base_iri = "http://example.org/"'));
rudof.readData(data); // Turtle by default
rudof.readShex(schema); // ShExC by default
rudof.readShapemap("{FOCUS :name _}@:Person");
const report = rudof.validateShex(); // { conforms, entries, violations }
console.log(rudof.serializeShexValidationResults("compact"));
rudof.readShacl(shapes);
const shaclReport = rudof.validateShacl();
rudof.readQuery("SELECT ?s WHERE { ?s ?p ?o }");
const results = rudof.runQuery(); // { kind: "select", variables, rows }
错误被抛出 Error年代的 name 说什么失败了(ShExError,
DataError, QueryError,……)。
会话还转换和比较模式,并读取DCTAP配置文件, Rdf-config文档、服务描述和属性图模式。这个 TypeScript的声明会列出每个方法,而 存储库 有一个总结。
远程SPARQL端点
@rudof/rudof/endpoints 包的单独构建是否也可以
使用异步方式验证和查询远程SPARQL端点的数据
方法。它依赖于WebAssembly JSPI (JavaScript Promise Integration),所以它
只在支持它的运行时加载,例如Chrome/Edge 137+和Node.js 25+
(不是Firefox或Safari):
import { Rudof } from "@rudof/rudof/endpoints"; // in browsers, `await init()` first, as above
const rudof = new Rudof();
rudof.useEndpoint("https://query.wikidata.org/sparql"); // or a known name, e.g. "wikidata"
rudof.readShex(schema);
rudof.readShapemap("<http://www.wikidata.org/entity/Q80>@<Human>");
const report = await rudof.validateShexAsync();
rudof.readQuery("SELECT ?p ?o WHERE { <http://www.wikidata.org/entity/Q80> ?p ?o } LIMIT 10");
const results = await rudof.runQueryAsync();
validateShaclAsync 和 nodeInfoAsync 以同样的方式工作。在这个建筑中,
await rudof.readShexAsync(schema, format, base) 也加载了ShEx模式
IMPORTs,获取导入的模式(解析相对的IRIs)
base); readShex 扔给他们。 setFetch
替换用于HTTP请求的函数(例如添加标头或go)
通过代理)。默认情况下,rudof在两个请求之间等待1100毫秒
远程端点(无 localhost); 对于您自己的端点,传递如下选项
作为 rudof.useEndpoint(url, "sparql", { minRequestIntervalMs: 0, maxConcurrentRequests: 4 }).
rudof.requestCount() 返回到目前为止发送的请求数。来验证多个节点
端点与SHACL, await rudof.validateShaclAsync("native", "by-shape") 获取
数据按形状排列,每个查询有许多节点,而不是按节点排列。一切
其他的和主建筑一样;它的 .wasm 文件是
导出为 @rudof/rudof/endpoints/rudof_wasm_bg.wasm. 看到
存储库
有关详细信息。
限制
一切都以字符串形式传递:读取文件、获取或解引用
IRIs、渲染图像和属性图数据库不可用,并且
远程SPARQL端点和ShEx IMPORTS只在 @rudof/rudof/endpoints
(见上图)。自己获取远程文档(例如使用
fetch),并将他们的文本传递给老师。SPARQL对加载的数据(查询、
(sql - sparql约束,shapmap查询选择器)运行在嵌入的
Oxigraph商店。
许可证
MIT或Apache-2.0,由您选择。