4

我在此处复制了json-ld 标准中示例的一部分:

{
  "@context": {
    "foaf": "http://xmlns.com/foaf/0.1/",
    "picture": { "@id": "foaf:depiction", "@type": "@id" }
  },
  "picture": "http://twitter.com/account/profile_image/markuslanthaler"
}

我不明白,为什么我们应该@id@context. 它应该是:

{
  "@context": {
    "foaf": "http://xmlns.com/foaf/0.1/",
    "picture": {
      "@type": [ "@id", "foaf:depiction" ]
    }
  },
  "picture": "http://twitter.com/account/profile_image/markuslanthaler"
}

你有什么解释吗?

几年过后

我想上面的意思是以更可重用的形式表示以下内容:

{
  "http://xmlns.com/foaf/0.1/depiction": "http://twitter.com/account/profile_image/markuslanthaler"
}

如果我们先检查扁平形式并尝试逐渐压缩它,则更容易理解。所以 the@id是属性的 IRI,而 the@type是值的类型,这里是@id,这可能会令人困惑,但这只是意味着我们期望 IRI 作为值。

4

1 回答 1

5

@id告诉 JSON-LD 处理器如何扩展术语。如果使用@vocab,则可以省略它,或者该术语采用紧凑 IRI 的形式。

@type如果是 JSON-LD 文档,则告诉处理器如何处理正文中使用的该术语的纯字符串值。它可以是XSD 数据类型@id也可以是@vocab. 最后两个非常相似,除了一个针对文档库进行评估,另一个作为词汇术语进行评估。

如果上下文中术语定义的值是一个字符串,而不是一个对象,那么它是用@id. 不要将上下文视为RDFS / OWL词汇,而是将其视为一种前缀机制。

于 2014-06-20T05:06:49.700 回答