@vocab在JSON-LD中的用途是什么?与@context的区别是什么?

时间:2015-06-19 19:29:01

标签: rdf json-ld

JSON-LD中的@vocab属性是什么?我认为你可以"导入"远程词汇,但这与@context相同吗?如果我没有错,那么你可以"导入" @context的远程来源。那么@vocab@context之间的区别在哪里?

额外的问题:我可以拥有多个@vocab吗?例如,第一个引用到schema.org,另一个引用到rdfs?

1 个答案:

答案 0 :(得分:12)

@vocab专门用于声明所有术语派生的默认词汇表,而不必为每个术语声明特定的映射(正如@context中通常所做的那样)。

例如,请参阅此代码段(取自JSON-LD 1.0 spec):

{
  "@context": {
    "@vocab": "http://schema.org/"
  }
  "@id": "http://example.org/places#BrewEats",
  "@type": "Restaurant",
  "name": "Brew Eats"
  ...
}

在这个片段中,@vocab用于定义在此上下文中,所有术语都来自schema.org词汇表。因此,在以下片段中,Restaurant映射到http://schema.org/Restaurantname映射到http://schema.org/name。当然,您也可以使用@context中的显式映射来完成此操作:

{
  "@context": {
    "Restaurant": "http://schema.org/Restaurant",
    "name" : "http://schema.org/name" 
  }
  "@id": "http://example.org/places#BrewEats",
  "@type": "Restaurant",
  "name": "Brew Eats"
  ...
}

但是当您开始使用来自相同词汇表的越来越多的术语时,这很快变得乏味。 @vocab只是一个有用的简短说法:"如果我没有明确的术语映射,这就是它映射到"。

至于您是否可以使用多个@vocab:您可以在JSON-LD文档中拥有多个@vocab(就像您可以拥有多个@context一样) ,但你不能在同一个@context中拥有多个。我相信它定义默认值的解释也清楚地说明了为什么你不能在同一个上下文中有两个。