跳到主要内容

紧凑存储:JSON-LD To 紧凑形式 — Numio

使用 jsonld.compact,按你提供的 context 压缩 JSON-LD 文档。完整 IRI 变为你定义的术语或 prefix:suffix 形式的名称,单元素数组折叠为普通值。

将 RDF 工具输出的冗长展开形式 JSON-LD 转为由自己的 context 定义的简短易读的键。

JSON-LD

Context

Compacted

适用场景

  • 将 RDF 工具输出的冗长展开形式 JSON-LD 转为由自己的 context 定义的简短易读的键。
  • 发布 context 之前,确认它是否把 IRI 映射成了预期的术语。

使用方法

  1. 将文档(展开形式或使用任意 context 的形式)粘贴到 JSON-LD 编辑器。
  2. 在 Context 编辑器中填入目标 context,格式为带 @context 键的对象。
  3. 查看结果:context 位于顶部,属性使用其中定义的术语。

JSON-LD + context

// JSON-LD editor
{
  "@id": "http://example.org/book/1",
  "@type": "http://schema.org/Book",
  "http://schema.org/name": "Dune",
  "http://schema.org/author": {"@id": "http://example.org/frank-herbert"},
  "http://schema.org/datePublished": {"@value": "1965", "@type": "http://www.w3.org/2001/XMLSchema#gYear"}
}

// Context editor
{"@context": {"schema": "http://schema.org/", "title": "schema:name",
  "author": {"@id": "schema:author", "@type": "@id"}}}

压缩后的 JSON-LD

{
  "@context": {
    "schema": "http://schema.org/",
    "title": "schema:name",
    "author": {
      "@id": "schema:author",
      "@type": "@id"
    }
  },
  "@id": "http://example.org/book/1",
  "@type": "schema:Book",
  "author": "http://example.org/frank-herbert",
  "schema:datePublished": {
    "@type": "http://www.w3.org/2001/XMLSchema#gYear",
    "@value": "1965"
  },
  "title": "Dune"
}

功能与限制

没有匹配术语的属性,如果定义了前缀就使用前缀(schema:datePublished),否则保留完整 IRI。

带有 "@type": "@id" 的术语可以让引用压缩为普通字符串,如上例中的 author。

使用 jsonld.js 在浏览器中运行。两个编辑器都必须包含有效的 JSON;远程 context URL 由浏览器获取。下载失败时,页面会显示包含该 context URL 的错误。

FAQ

为什么带类型的值仍然是对象?

带 @type 的值(如 xsd:gYear 日期)会保持 {"@type", "@value"} 形式,除非 context 为该属性定义了具有相同 @type 的术语。

Context 编辑器中可以写 URL 吗?

可以,写成 {"@context": "https://..."}。浏览器会下载它,因此服务器必须允许跨域请求;使用内联 context 可以避免这个问题。

压缩会改变数据吗?

不会。压缩只改变 IRI 和值的写法;将结果展开后得到的是同一个图。

规范与参考资料