2015-02-17 49 views
0

我正在使用https://github.com/jsonld-java/jsonld-java從JSON文檔生成三元組。我是json-ld的新手,我想知道是否有一種方法可以用@id生成三元組作爲文字,或者@id需要一個IRI。JSON-LD:在沒有IRI的情況下產生三元組,在json文檔中沒有@id

樣品的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

由於您在談論NQuads,因此主題總是需要是IRI或者是一個BNode。由於JSON-LD的數據模型是RDF,它更一般地應用於@id的值。

但是,可以僅使用一個字符串來指定@id,該字符串將根據上下文中文檔或@base的位置被視爲路徑組件。請注意,這是一種IRI形式,稱爲相對IRI,因此存在基於URI/IRI規範的語法限制。通常情況下,JSON-LD並不關心,而且很樂意生成非法的IRI。但是,如果沒有文檔庫,它會自動放棄主題節點。

您在上下文中使用@base,但它不是絕對的IRI,因此會生成錯誤。你可以把它變成一個絕對的IRI,使用類似http://test.com/(注意尾部斜線)。這可能更符合你的要求。

JSON-LD playground上嘗試示例也很好。

+0

完美。非常感謝您的回覆。根據設計,上下文中的@ base在所有json文檔中使用URN而不是URI。我試圖用新的JsonLdOptions(「http://test.com/」)覆蓋@base。 jsonLd選項不會覆蓋json文檔提供的@ base。你知道如何繼續這個嗎? – Sathibhu 2015-02-18 00:29:35

+0

如果您可以修改源,那麼。您可以使用新的@base添加上下文。否則,沒有辦法修改如何生成IRI。 – 2015-02-19 07:20:23

相關問題