JSON-LD紧凑的操作属性消歧

时间:2014-02-05 09:19:43

标签: rdf semantic-web json-ld

让我们考虑一个没有上下文的简单JSON-LD文档:

[
   {
      "@id": "http://stackoverflow.com/#users",
      "http://rdfs.org/sioc/ns#name": "SO Users",
      "http://xmlns.com/foaf/0.1/member":
      {
         "@id": "http://example.com/me#me"
      }
   },
   {
      "@id": "http://example.com/me#me",
      "http://xmlns.com/foaf/0.1/givenName": "Tomasz"
   }
]

我想在本文档中添加一个@context,以获得如下内容:

{
   "@context": { /* what here? */ },
   "@graph": [
   {
      "@id": "http://stackoverflow.com/#users",
      "Name": "SO Users",
      "Members": [ "http://example.com/me#me" ]
   },
   {
      "@id": "http://example.com/me#me",
      "Name": "Tomasz"
   }]
}

这里的问题是foaf:givenName和sioc:name属性都映射到json中的Name键。手动创作此文档时不会出现问题,因为嵌套的@context可用于覆盖属性。

然而,JSON-LD规范定义的Compact操作是否可行?或者是将每个谓词映射到明确属性的唯一选项(在这种情况下可以是Name和GivenName)

1 个答案:

答案 0 :(得分:4)

要使Name映射到每个对象中的不同IRI,需要在每个对象中有一个单独的上下文,或者一个主上下文,以及一个覆盖您希望它表示不同内容的位置。但是,压缩算法对整个文档使用单个上下文,所以我担心你不能用标准算法做到这一点。

使用单独的上下文所需的示例如下:

{
   "@context": {
      "Name": "http://rdfs.org/sioc/ns#name",
      "Members": "http://xmlns.com/foaf/0.1/member" },
   "@graph": [
   {
      "@id": "http://stackoverflow.com/#users",
      "Name": "SO Users",
      "Members": [ "http://example.com/me#me" ]
   },
   {
      "@context": {"Name": "http://xmlns.com/foaf/0.1/givenName"},
      "@id": "http://example.com/me#me",
      "Name": "Tomasz"
   }]
}

我们正在考虑一种框架功能,允许在使用对象嵌入的文档的不同框架中定义和使用上下文,但这只是一个提议。

http://json-ld.org/playground处测试不同算法效果的好方法。