JSON-LD中的@vocab有什么用,和@context有什么区别?

What is the use of @vocab in JSON-LD and what is the difference to @context?

JSON-LD 中的 @vocab 属性有什么用?正如我所见,您可以 "import" 一个远程词汇表,但这与您可以使用 @context 做的不一样吗?如果我没记错的话,那么您也可以 "import" @context 的远程资源。那么@vocab@context的区别在哪里呢?

附加问题:我可以多一个@vocab吗?例如第一个引用 schema.org 而另一个引用 rdfs?

@vocab 专门用于声明一个 default 词汇表,所有术语都从该词汇表派生,而不必为每个术语声明特定的映射(就像您通常在@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 只是一种有用的简短表达方式:"if I don't have an explicit mapping for a term, this is what it maps to".

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