让我们考虑一个没有上下文的简单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)
答案 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处测试不同算法效果的好方法。