JSON到JSON LD,对原始JSON的更改很少(JSON-LD上下文中的所有更改)

Nan*_*ana 4 json rdf json-ld

TL; DR

如果我有一个像JSON文件

{
  "policyid": "http://example.com/policy:0099",
  "policytype": "http://www.w3.org/ns/odrl/2/Set" 
}
Run Code Online (Sandbox Code Playgroud)

我想要一个类似的JSON-LD文档

{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "policytype": { "@id": "rdf:type",  "@type": "@id" }
   }
   "@id" : "http://example.com/policy:0099",
   "policytype": "http://www.w3.org/ns/odrl/2/Set"
}
Run Code Online (Sandbox Code Playgroud)

是否可以不将名称/值对{{policyid":" http://example.com/policy:0099 "} 更改为{"@ id ":" http://example.com/policy:0099 "而是在上下文中说出"policyid" - >"@ id".

{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "policytype": { "@id": "rdf:type",  "@type": "@id" },
    #### something here that says "policyid" -> "@id"
   }
   "policyid" : "http://example.com/policy:0099",
   "policytype": "http://www.w3.org/ns/odrl/2/Set"
}
Run Code Online (Sandbox Code Playgroud)

我正在通过规范示例,但无法找到如何做到这一点.

更多背景

假设我们有一个具有RDF规范和JSON编码的模型,例如ODRL 2.1 OntologyODRL Version 2.1 JSON Encoding.

我想从JSON开始,通过将JSON编码映射到ODRL本体来生成JSON-LD.

{
  "policyid": "http://example.com/policy:0099",
  "policytype": "http://www.w3.org/ns/odrl/2/Set",  
  "permissions": [{
     "target": "http://example.com/asset:9898",
     "action": "http://www.w3.org/ns/odrl/2/reproduce"
  }]
}
Run Code Online (Sandbox Code Playgroud)

以下是我希望将此json转换为的RDF模型.(我将使用Turtle序列化使其更具可读性).

@prefix odrl: <http://www.w3.org/ns/odrl/2/> .

<http://example.com/policy:0099> a odrl:Set .
<http://example.com/policy:0099> odrl:permission _:perm0 .
_:perm0 odrl:action <http://www.w3.org/ns/odrl/2/reproduce> .
_:perm0 odrl:target <http://example.com/asset:9898> . 
Run Code Online (Sandbox Code Playgroud)

我几乎可以通过上下文进行最小的更改来完成此操作,如下所示.

{
  "@context": { 
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "odrl": "http://www.w3.org/ns/odrl/2/",
    "policytype": { "@id": "rdf:type",  "@type": "@id" },
    "permissions": { "@id": "odrl:permission",  "@type": "@id"},
     "target" : {"@id": "odrl:target",  "@type": "@id" },
     "action" : {"@id": "odrl:action",  "@type": "@id" }
  },
  "@id": "http://example.com/policy:0099",
  "policytype": "http://www.w3.org/ns/odrl/2/Set",
  "permissions": [{ 
       "target": "http://example.com/asset:9898",
       "action": "http://www.w3.org/ns/odrl/2/reproduce" }]
}
Run Code Online (Sandbox Code Playgroud)

但是如果我想保留原来的JSON,有没有办法在上下文中说"policyid" - >"@ id"?

非常感谢!

Mar*_*ler 7

是否可以不将名称/值对{{policyid":" http://example.com/policy:0099 "} 更改为{"@ id ":" http://example.com/policy:0099 "而是在上下文中说出"policyid" - >"@ id".

是的,您只需将policyid映射到@id.这在规范中称为关键字别名.所以你的例子看起来像这样:

{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "policyid": "@id",
    "policytype": { "@id": "rdf:type",  "@type": "@id" }
   },
   "policyid" : "http://example.com/policy:0099",
   "policytype": "http://www.w3.org/ns/odrl/2/Set"
}
Run Code Online (Sandbox Code Playgroud)