Json LD 处理库

此包以纯 Dart 实现了 JSON-LD 处理算法 1.1URDNA2015 规范化 算法。

重要提示:此包尚在开发中。并非所有算法都已实现,并非所有功能都能完美运行(参见实现状态)。但总的来说,它是可用的。

用法

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
  • 尚未实现 respect rdfDirection 选项
  • 为了检查生成的 n-quads 列表是否正确,我只使用字符串比较,没有进行图同构测试。因此,如果您自己运行测试,12 个测试将被错误地报告为未通过。
normalize 62 1

运行测试

测试数据来自 此处 的 json-ld API 测试,以及 此处 的规范化测试。因此,如果您想运行测试,需要将这两个仓库克隆到此旁边。

未来计划

  • 移除 bug
  • 实现 Compaction 和 toRdf
  • 支持 framing

GitHub

查看 Github