在JSON-LD中,是否可以扩展上下文?

时间:2014-10-07 09:02:11

标签: semantic-web linked-data json-ld

我有一个JSON-LD文档。

{
  "@id": "VDWW1LL3MZ",
  "first_name": "Vincent",
  "last_name": "Willems",
  "knows":["MartyP"],
  "@context": {
    "foaf": "http://xmlns.com/foaf/0.1/",
    "first_name": "foaf:givenName",
    "last_name": "foaf:familyName",
    "knows": "foaf:knows",
    "MartyP": { 
      "@id": "http://example.com/martyp",
      "first_name": "Marty",
      "last_name": "P"
    }
  }
}

现在,本文档的部分上下文是在运行时生成的(Marty P对象),但foaf前缀定义是静态的,并为每个文档重复。

如果我有10个前缀定义,那么将它们放在每个文档中会感到浪费。所以我想做一些像

这样的事情

generated document

{
  "@id": "VDWW1LL3MZ",
  "first_name": "Vincent",
  "last_name": "Willems",
  "knows":["MartyP"],
  "@context": {
    "@extends": "http://example.com/base_context.jsonld",
    "MartyP": { 
      "@id": "http://example.com/martyp",
      "first_name": "Marty",
      "last_name": "P"
    }
  }
}

base_context.jsonld

  {
    "foaf": "http://xmlns.com/foaf/0.1/",
    "first_name": "foaf:givenName",
    "last_name": "foaf:familyName",
    "knows": "foaf:knows"
  }

这可能吗?

1 个答案:

答案 0 :(得分:6)

每个@context实际上可以是多个对象(或网址),然后按照它们出现的顺序进行组合(这样就可以更改术语的含义 - 谨慎 )。

为此,您使用数组,您可以在其中混合本地和外部上下文。这是你的例子

{
  "@context": 
  [
    "http://example.com/base_context.jsonld",
    {
      "@vocab": "http://example.com/"
    }
  ]
}

section 6.7的JSON-LD规范中描述了它。