# @rudof/rudof 中文文档

规范地址：https://npmcn.com/package/%40rudof/rudof/

版本：0\.3\.36
npm 元数据更新时间：2026-11-02T08:55:04.408Z
中文译文更新时间：2026-11-02T09:02:24.590Z
软件包许可：MIT OR Apache-2\.0

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40rudof/rudof
原文对照：https://npmcn.com/package/%40rudof/rudof/?lang=original
项目主页：https://rudof-project.github.io/rudof
源码仓库：https://github.com/rudof-project/rudof

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：13.3 MB，20 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=18
- 运行依赖：0 个
- 首次发布：2026-09-27T10:23:03.757Z
- 最新版本发布：2026-11-02T08:55:04.089Z
- 已发布版本数：16（近 12 个月 16 个）

## 中文简介

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

## 安装

```sh
npm install @rudof/rudof
```

也可以使用：`pnpm add @rudof/rudof`、`yarn add @rudof/rudof`、`bun add @rudof/rudof`

## README

# @rudof / rudof

验证RDF数据 **ShEx** 和 **SHACL**，并使用 **SPARQL**， 在浏览器和Node.js中。

的JavaScript包 [rudof](https://github.com/rudof-project/rudof)， 编译成WebAssembly。它的API反映了rudof的API [Python绑定](https://pypi.org/project/pyrudof/)，它还附带TypeScript 声明。

```sh
npm install @rudof/rudof
```

## node . js

```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模块是异步加载的，所以调用 默认导出一次，然后再执行其他操作：

```js
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` 文件:

```js
await init({ module_or_path: "/assets/rudof_wasm_bg.wasm" });
```

导出文件为 `@rudof/rudof/rudof_wasm_bg.wasm`.

## 会话

`validateShex` 和 `validateShacl` 在一次调用中完成整个验证。这个 `Rudof` 类保存会话（数据、模式、形状映射、查询和结果） 跨调用，如Python绑定：

```js
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的声明会列出每个方法，而 [存储库](https://github.com/rudof-project/rudof/tree/master/bindings/wasm) 有一个总结。

## 远程SPARQL端点

`@rudof/rudof/endpoints` 包的单独构建是否也可以 使用异步方式验证和查询远程SPARQL端点的数据 方法。它依赖于WebAssembly JSPI (JavaScript Promise Integration)，所以它 只在支持它的运行时加载，例如Chrome/Edge 137+和Node.js 25+ （不是Firefox或Safari）：

```js
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模式 `IMPORT`s，获取导入的模式（解析相对的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`． 看到 [存储库](https://github.com/rudof-project/rudof/tree/master/bindings/wasm#remote-sparql-endpoints) 有关详细信息。

## 限制

一切都以字符串形式传递：读取文件、获取或解引用 IRIs、渲染图像和属性图数据库不可用，并且 远程SPARQL端点和ShEx `IMPORT`S只在 `@rudof/rudof/endpoints` (见上图)。自己获取远程文档(例如使用 `fetch`)，并将他们的文本传递给老师。SPARQL对加载的数据(查询、 （sql - sparql约束，shapmap查询选择器）运行在嵌入的 Oxigraph商店。

## 许可证

MIT或Apache-2.0，由您选择。

## 常见问题

### @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 和提交记录判断。

