JSON-LD中的@vocab属性是什么?正如我所看到的,你可以“导入”一个远程词汇表,但这与@context可以做的不一样吗?如果我没错,那么你也可以“导入”@context的远程源代码.那么@vocab和@context之间的区别在哪里?
额外的问题:我可以拥有一个以上的@vocab吗?例如,第一个引用到schema.org,另一个引用到rdfs?
解决方法
@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,并将地图命名为http://schema.org/name.您当然也可以在@context中使用显式映射来完成此操作:
{ "@context": { "Restaurant": "http://schema.org/Restaurant","name" : "http://schema.org/name" } "@id": "http://example.org/places#BrewEats","name": "Brew Eats" ... }
但是当你开始使用来自相同词汇表的越来越多的术语时,这很快变得乏味. @vocab只是一个有用的简短方法:“如果我没有明确的术语映射,这就是它映射到的”.
至于你是否可以使用多个@vocab:你可以在JSON-LD文档中拥有多个@vocab(就像你可以拥有多个@context一样),但你不能同时拥有多个@vocab @context.我相信它定义默认值的解释也清楚地表明为什么你不能在同一个上下文中有两个.