我正在使用https://github.com/jsonld-java/jsonld-java从JSON文档生成三元组。我是json-ld的新手,我想知道是否有一种方法可以生成三元组,其中@id是文字或@id需要一个IRI。?
示例Json输入:
[
{
"@context": {
"@vocab": "http://schema.org/",
"@base": "test.com"
},
"@graph": [
{
"@type": [
"Person",
"Entity"
],
"@id": "abcdef",
"personName": "David"
}
]
}
]
代码段:
JsonLdProcessor.toRDF(obj, options)
对于选项,我使用以下JsonLd选项配置
this.format = "application/nquads"
上述文件不产生任何三元组。当我将上面的json文档中的@id字段更改为“@id”:“http://abcdef”时,它会生成以下三元组。
<http://abcdef> <http://schema.org/personName> "David" _:b0 .
<http://abcdef> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Entity> _:b0 .
<http://abcdef> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person> _:b0 .
任何指针或建议都会很棒。
答案 0 :(得分:0)
由于您正在谈论NQuads,因此主题始终需要是IRI或BNode。由于JSON-LD的数据模型是RDF,因此更普遍适用于@id的值。
但是,可以仅使用一个字符串来指定@id,根据文档的位置或上下文中的@base将其视为路径组件。请注意,这是一种称为相对IRI 的IRI形式,因此存在基于URI / IRI规范的语法限制。通常情况下,JSON-LD并不关心,并且很乐意生成非法的IRI。但是,如果没有文档库,它将默默地删除主题节点。
您在上下文中使用@base,但它不是绝对IRI,因此会产生错误。您可以使用类似http://test.com/
的内容将其转换为绝对IRI(请注意尾部斜杠)。这可能是你正在寻找的更多。
在JSON-LD playground上试用示例也很不错。