2014-02-05 27 views
1

讓我們考慮一個簡單的JSON-LD文檔不利用上下文:JSON-LD壓縮操作特性歧義

[ 
    { 
     "@id": "http://stackoverflow.com/#users", 
     "http://rdfs.org/sioc/ns#name": "SO Users", 
     "http://xmlns.com/foaf/0.1/member": 
     { 
     "@id": "http://example.com/me#me" 
     } 
    }, 
    { 
     "@id": "http://example.com/me#me", 
     "http://xmlns.com/foaf/0.1/givenName": "Tomasz" 
    } 
] 

我想一個@context添加到該文件得到類似如下:

{ 
    "@context": { /* what here? */ }, 
    "@graph": [ 
    { 
     "@id": "http://stackoverflow.com/#users", 
     "Name": "SO Users", 
     "Members": [ "http://example.com/me#me" ] 
    }, 
    { 
     "@id": "http://example.com/me#me", 
     "Name": "Tomasz" 
    }] 
} 

這裏的問題是foaf:givenName和sioc:name屬性都映射到json中的Name鍵。手動編寫此文檔時不會有問題,因爲可以使用嵌套的@context來覆蓋屬性。

然而,如果使用JSON-LD規範定義的精簡操作,它可能嗎?或者是將每個謂詞映射到明確屬性的唯一選項(在這種情況下,可能是Name和GivenName)

回答

4

對於Name映射到每個對象內的不同IRI需要您在每個對象中有單獨的上下文,或者是一個主要的背景和一個覆蓋你想要的東西不同的地方。但是,壓縮算法爲整個文檔使用單個上下文,所以我擔心你不能用標準算法來做到這一點。

你想使用什麼獨立的環境中的一個例子可能是以下幾點:

{ 
    "@context": { 
     "Name": "http://rdfs.org/sioc/ns#name", 
     "Members": "http://xmlns.com/foaf/0.1/member" }, 
    "@graph": [ 
    { 
     "@id": "http://stackoverflow.com/#users", 
     "Name": "SO Users", 
     "Members": [ "http://example.com/me#me" ] 
    }, 
    { 
     "@context": {"Name": "http://xmlns.com/foaf/0.1/givenName"}, 
     "@id": "http://example.com/me#me", 
     "Name": "Tomasz" 
    }] 
} 

我們正在考慮取景功能,將允許定義和使用對象嵌入文檔的不同框架內使用上下文,但這只是一個現在的建議。

http://json-ld.org/playground上測試不同算法效果的好玩法。

+0

這就是我的想法。然而,很高興知道你確實考慮過這樣的功能。 –