跳到主要内容

数据规范化:JSON-LD To 标准化形式 — Numio

使用 jsonld.normalize 及其默认的 URDNA2015 算法,将 JSON-LD 规范化为排好序的 N-Quads。空白节点获得确定的标签(_:c14n0、_:c14n1),因此相同的图会得到完全相同的文本。

生成 Verifiable Credentials 和 Linked Data Proofs 中用于哈希或签名的规范形式。

JSON-LD

Normalized

适用场景

  • 生成 Verifiable Credentials 和 Linked Data Proofs 中用于哈希或签名的规范形式。
  • 检查布局或 context 不同的两个 JSON-LD 文档是否描述同一个图。

使用方法

  1. 将 JSON-LD 文档粘贴到 JSON-LD 编辑器。
  2. 查看规范化的 N-Quads:每行一个三元组,已排序,空白节点重命名为 _:c14nN。
  3. 对输出文本做 diff 或哈希来比较图。

JSON-LD

{
  "@context": {"@vocab": "http://schema.org/"},
  "@type": "Person",
  "name": "Jane Doe",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Seattle"
  }
}

规范化 N-Quads

_:c14n0 <http://schema.org/addressLocality> "Seattle" .
_:c14n0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/PostalAddress> .
_:c14n1 <http://schema.org/address> _:c14n0 .
_:c14n1 <http://schema.org/name> "Jane Doe" .
_:c14n1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person> .

功能与限制

页面调用 normalize 时不传选项,因此 jsonld.js 使用 URDNA2015 并输出 N-Quads。

空白节点标签取决于图的内容,而不是 JSON 中键的顺序。

在浏览器中运行;远程 @context URL 由浏览器获取。下载失败时,页面会显示包含该 context URL 的错误。

FAQ

这与 JSON-LD to N-Quads 页面有什么区别?

两者都输出 N-Quads。本页面会以规范方式重新标记空白节点(_:c14n0)并对行排序;N-Quads 页面保留处理器分配的 _:b0 这类标签。

使用的是哪种规范化算法?

URDNA2015,即 jsonld.js 的默认算法,已由 W3C 标准化为 RDF Dataset Canonicalization(RDFC-1.0)。

为什么输出中缺少某个属性?

未在 @context 中定义的键无法展开为 IRI,在转换为 quad 之前就被丢弃了。

规范与参考资料