JSON-LD中的@vocab
属性是什么?我认为你可以"导入"远程词汇,但这与@context
相同吗?如果我没有错,那么你可以"导入" @context
的远程来源。那么@vocab
和@context
之间的区别在哪里?
额外的问题:我可以拥有多个@vocab
吗?例如,第一个引用到schema.org,另一个引用到rdfs?
答案 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/Restaurant
,name
映射到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
中拥有多个。我相信它定义默认值的解释也清楚地说明了为什么你不能在同一个上下文中有两个。