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

el-*_*ugy 10 rdf json-ld

@vocabJSON-LD中的属性是什么?在我看来,你可以"导入"一个远程词汇表,但这与你能做的不一样@context吗?如果我没错,那么你也可以"导入"远程源@context.那么@vocab和之间的区别在@context哪里?

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

Jee*_*tra 14

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

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

{
  "@context": {
    "@vocab": "http://schema.org/"
  }
  "@id": "http://example.org/places#BrewEats",
  "@type": "Restaurant",
  "name": "Brew Eats"
  ...
}
Run Code Online (Sandbox Code Playgroud)

在此片段中,@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"
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 换句话说:这就是你定义空前缀的方式?希望你明白什么意思。 (3认同)