【发布时间】:2015-11-08 00:22:47
【问题描述】:
TL;DR
如果我有一个像
这样的 JSON 文档{
"policyid": "http://example.com/policy:0099",
"policytype": "http://www.w3.org/ns/odrl/2/Set"
}
我想要一个类似于
的 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"
}
是否可以不将名称/值对 { "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"
}
我正在浏览规范示例,但找不到如何做到这一点。
更多上下文
假设我们有一个具有 RDF 和 JSON 编码规范的模型,例如 ODRL 2.1 Ontology 和 ODRL Version 2.1 JSON Encoding。
我想从 JSON 开始,通过将 JSON Encoding 映射到 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"
}]
}
以下是我想将此 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> .
我几乎可以通过以下上下文进行最少的更改。
{
"@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" }]
}
但如果我想保持原来的 JSON 原样,有没有办法在上下文中说“policyid”->“@id”?
非常感谢!
【问题讨论】:
-
也许你可以使用这个库 -> github.com/digitalbazaar/jsonld.js
jsonld.compact()函数似乎是你正在寻找的...... -
非常感谢大卫!这正是我需要的功能,我发现 jsonld.js 非常有用。我的疑问是如何生成 jsonld.compact() 在这种特殊情况下需要作为输入的上下文。