Json LD 处理库
此包以纯 Dart 实现了 JSON-LD 处理算法 1.1 和 URDNA2015 规范化 算法。
重要提示:此包尚在开发中。并非所有算法都已实现,并非所有功能都能完美运行(参见实现状态)。但总的来说,它是可用的。
用法
Map<String, dynamic> input = {}; //a valid Json-ld document
//expansion
var expanded = await JsonLdProcessor.expand(input);
//flattening
var flattened = await JsonLdProcessor.flatten(input);
//toRdf
var rdf = await JsonLdProcessor.toRdf(input);
//normalize (URDNA2015) with additional options
var normalized = await JsonLdProcessor.normalize(input, options: JsonLdOptions(safeMode: true));
安全模式选项
正如 java 中 URDNA2015 和 URGNA2012 规范化算法的实现者 在其仓库中所示,使用 json-ld 和规范化进行签名存在一些安全漏洞。在某些情况下,文档可能会被篡改,而签名仍然有效。原因之一可以在展开算法中找到。如果输入文档的属性无法展开为 IRI 或关键字,它将被删除,因此不会包含在规范化数据集中。为了在这种情况下抛出异常,我们提供了一个 safeMode 选项。它默认设置为 false。但如果设置为 true,就会抛出异常。如果不设置,属性将按标准删除。我建议在为 json-ld 文档签名之前对其进行规范化时将其设置为 true。
注意: 此选项的构想来源于 JavaScript 实现,该实现也支持 JSON-LD Playground。此选项尚未成为标准的一部分。
实现状态和测试覆盖率
| 算法 | 通过的测试 | 失败的测试 | 注意事项 |
|---|---|---|---|
| expand | 363 | 8 | |
| flatten | 55 | 1 | 有一个失败,因为缺少压缩算法 |
| compact | 0 | 0 | 尚未实现 |
| fromRdf | 0 | 0 | 尚未实现 |
| toRdf | 397 | 39 |
|
| normalize | 62 | 1 |
运行测试
测试数据来自 此处 的 json-ld API 测试,以及 此处 的规范化测试。因此,如果您想运行测试,需要将这两个仓库克隆到此旁边。
未来计划
- 移除 bug
- 实现 Compaction 和 toRdf
- 支持 framing