JSON-LD:麻烦生成三元组,没有IRI作为json doc中的@id

时间:2015-02-17 20:54:22

标签: java json-ld

我正在使用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 .

任何指针或建议都会很棒。

1 个答案:

答案 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上试用示例也很不错。