0

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

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

4

1 回答 1

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 操场上尝试示例也很好。

于 2015-02-17T23:09:12.463 回答