@rudof/rudof

中文文档
0.3.36发布于 2026/11/02MIT OR Apache-2.0TypeScriptESM + CJS零依赖构建来源已验证

使用ShEx和SHACL验证RDF数据,并在浏览器和Node.js中使用SPARQL进行查询

中文使用文档
文档目录6 节
  1. node . js
  2. 浏览器和捆绑器
  3. 会话
  4. 远程SPARQL端点
  5. 限制
  6. 许可证

@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,由您选择。

版本与发布记录

@rudof/rudof 共发布 16 个版本,首次发布于 2026/09/27;过去 12 个月发布了 16 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.3.36latest2026/11/021 天前
0.3.352026/10/2311 天前
0.3.342026/10/2311 天前
0.3.332026/10/2211 天前
0.3.322026/10/2212 天前
0.3.312026/10/2112 天前

关于 @rudof/rudof 的常见问题

@rudof/rudof 是什么?

使用ShEx和SHACL验证RDF数据,并在浏览器和Node.js中使用SPARQL进行查询

如何安装 @rudof/rudof?

在项目目录运行 npm install @rudof/rudof,或使用 pnpm add / yarn add / bun add。

@rudof/rudof 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@rudof/rudof 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@rudof/rudof 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@rudof/rudof 可以商用吗?

@rudof/rudof 使用 MIT OR Apache-2.0 许可。可在 MIT、Apache-2.0 中任选其一遵守。选择 MIT 时,宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@rudof/rudof 还在维护吗?

最新版本 0.3.36 发布于 2026/11/02(1 天前);至今共发布 16 个版本,其中过去 12 个月发布了 16 个;首次发布于 2026/09/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。