在将未编辑的JSON数据转换为JSON-LD时,我有一个问题使用前缀和数据值为对象构造IRI。我正在运行的示例代码是:
{
"@context" :
{ "prefix" : "http://www.gerastree.at/",
"rdfs" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"@vocab" : "http://example.com/" ,
"load" : "prefix:load"
"items" : "prefix:item"
},
"@type" : "tree",
"@id" : "prefix:t1" ,
"items" :
[
{ "@id" : "prefix:t2",
"@type" : "item",
"load" : "some111"
},
{ "@id" : "prefix:t3",
"@type" : "item",
"load" : "some2222"
}
]
}
但是当我将@id
的值从“ prefix:t1”更改为原始JSON中具有的纯数据值(即,仅更改为“ t1”,“ t2”和“ t3”)时,对象就是不再处理了。
不正确的JSON-LD代码(至少未被riot
读取)
{
"@context" :
{ "prefix" : "http://www.gerastree.at/",
"rdfs" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"@vocab" : "http://example.com/" ,
"load" : "prefix:load"
"items" : "prefix:item"
},
"@type" : "tree",
"@id" : "t1" ,
"items" :
[
{ "@id" : "t2",
"@type" : "item",
"load" : "some111"
},
{ "@id" : "t3",
"@type" : "item",
"load" : "some2222"
}
]
}
值“ t1”等是唯一的,我想使用它们作为IRI前缀来链接数据和其他数据。有没有一种方法可以在不更改生成JSON数据或编辑文件的程序的情况下,对上下文添加一些IRI。
我找到了一个解决方案(基于Json-LD > Define a "person" for easy reuse as values on different keys for WebPage schema的解决方案),但是不明白为什么它起作用。
{
"@context" :
{ "prefix" : "http://www.gerastree.at/",
"rdfs" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"@base" : "http://example.com/" ,
"load" : "prefix:load",
"items" : "prefix:item"
},
"@type" : "tree",
"@id" : "t1" ,
"items" :
[
{ "@id" : "t2",
"@type" : "item",
"load" : "some111"
},
{ "@id" : "t3",
"@type" : "item",
"load" : "some2222"
}
]
}
我认为这不是Any way to specify the default URI for the @id of a @type or the values of a property?的重复。
需要对上下文进行哪些添加和更改?
答案 0 :(得分:1)
通过更多阅读JSON-LD建议和实验,我找到了解释为什么我的第三个版本可以按预期工作的原因。
@vocab
仅应用于属性和对象
@base
用于完成该主题的IRI。
不是很明显,但对于我的应用程序来说足够灵活。