2014-01-17 63 views
6

我很難弄清楚如何消除事先使用相同謂詞的資源的歧義。我是RDF新手,請原諒我的術語:我會試着用例子來解釋我的意思。在JSON-LD中使用相同謂詞對歧義資源進行歧義消除

我有一個(簡單)情況下像這樣的Interview資源/型號:

{ 
    "id": { 
    "@id": "http://purl.org/dc/terms/identifier" 
    }, 
    "interviewers": { 
    "@id": "http://purl.org/dc/terms/contributor", 
    "@type": "@id", 
    "@container": "@set" 
    }, 
    "title": { 
    "@id": "http://purl.org/dc/terms/title" 
    }, 
    "interviewees": { 
    "@id": "http://purl.org/dc/terms/contributor", 
    "@type": "@id", 
    "@container": "@set" 
    } 
} 

InterviewerInterviewee資源有背景是這樣的:

{ 
    "id": { 
    "@id": "http://purl.org/dc/terms/identifier" 
    }, 
    "name": { 
    "@id": "info:repository/ive/name" 
    } 
} 

我然後創建一種資源,看起來像這樣:

{ 
    "id": "06bad25f-83c1-4ee5-b055-0cb87d4c06be", 
    "interviewers": [ 
    { 
     "id": "b0c262ce-7eb3-47f2-b212-a0e71cca0c92", 
     "name": "Somebody", 
     "@context": { 
     ... 
     }, 
     "@id": "urn:uuid:b0c262ce-7eb3-47f2-b212-a0e71cca0c92", 
     "@type": [ 
     "http://id.loc.gov/vocabulary/relators/ivr" 
     ] 
    } 
    ], 
    "title": "Interview with So and So", 
    "interviewees": [ 
    { 
     "id": "bd6bb9ec-f417-4f81-af69-e3d191e3f73b", 
     "name": "A third person", 
     "gender": "male", 
     "@context": { 
     ... 
     }, 
     "@id": "urn:uuid:bd6bb9ec-f417-4f81-af69-e3d191e3f73b", 
     "@type": [ 
     "http://id.loc.gov/vocabulary/relators/ive" 
     ] 
    } 
    ], 
    "@context": { 
    ... 
    }, 
    "@id": "urn:uuid:06bad25f-83c1-4ee5-b055-0cb87d4c06be", 
    "@type": [ 
    "info:repository/interview" 
    ] 
} 

一切都很好,我可以將此「對象」存儲到我的存儲庫(我正在使用RDF.rb庫)。但是,當我嘗試提取對象並「重新序列化」它時,會出現問題。例如(原諒Ruby代碼),

query = repository.query(:subject => RDF::URI(uri)) 
JSON.parse(query.dump(:jsonld, :context => Interview.context)) 

這些行提取倉庫相關語句,然後將它們搗碎成JSON-LD「資源」與適當的上下文。但是,受訪者和採訪者都被轉移到interviewees屬性中。

當然,這非常有意義,因爲這兩個interviewersinterviewees都涉及到與dc:contributor謂詞interview資源(他們只是通過他們各自的類型來區分)。

我需要讓dump進程知道相關的資源類型,但我不知道有什麼方法可以將這些信息添加到採訪的上下文中。

根據目前的JSON-LS規格,我不知道這是否可能。 This issue看起來好像可能是相關的,但我對RDF/JSON-LD確切知之甚少。

我可以對interviewersinterviewees使用不同的謂詞,但似乎並不需要這樣做。有什麼建議麼?

注意:我也在answers.semanticweb.com提問這個問題。

附加信息

我模仿我的contributor關係以這種方式(其中一個interviewercontributor與類型http://id.loc.gov/vocabulary/relators/ivr)基礎上,對符合條件的DC性能所推薦的方法之一。例如,人們可以表達對像資源的MESH主題:

<rdf:Description> 
    <dc:subject> 
    <dcterms:MESH> 
     <rdf:value>D08.586.682.075.400</rdf:value> 
     <rdfs:label>Formate Dehydrogenase</rdfs:label> 
    </dcterms:MESH> 
    </dc:subject> 
</rdf:Description> 

假設我有:

<rdf:Description> 
    <dc:subject> 
    <dcterms:MESH> 
     <rdf:value>D08.586.682.075.400</rdf:value> 
     <rdfs:label>Formate Dehydrogenase</rdfs:label> 
    </dcterms:MESH> 
    </dc:subject> 
    <dc:subject> 
    <dcterms:LCSH> 
     <rdf:value>Formate Dehydrogenase</rdf:value> 
    </dcterms:LCSH> 
    </dc:subject> 
</rdf:Description> 

我希望能夠引用lcsh_subjects「屬性」,其中lcsh_subjects代表那些與dc:subject相關的資源並且類型爲dcterms:LCSH的節點。但是,我意識到我可能以錯誤的方式思考JSON-LD模型。

+1

AFAIK的'「@type」:「@id」'意味着你的背景下,該屬性有一個字符串類型,它的價值應該被解釋爲IRI。 'http:// purl.org/dc/terms/contributor'似乎是一個類型(對象),而不是屬性名稱(謂詞)。所以我認爲你的背景是有缺陷的。但我在JSON-LD中也是新的... – inf3rno

+0

我猜'@type'等同於'rdf:type'謂詞,'@ id'至少等價於屬性定義的實際主題,但很難找到任何關於這個...:S – inf3rno

回答

7

您可能會對面試官和受訪者使用的@id感到困惑。你已經用相同的@id來定義它們,這意味着它們是相同的謂詞。它們被定義爲資源的貢獻者,但沒有什麼能夠使它們彼此不同。你可能會認爲「採訪者」的意思是一個謂詞,它是dc:contributor的一個子屬性,對於「受訪者」也是一樣。選擇一個已經有采訪者和受訪者概念的現有詞彙可能會更好。或者,創建自己的詞彙表,定義您需要的術語,並將其用於創建上下文類型。

你也在逃避你的對象中使用的URI(例如「http://purl.org/dc/terms/identifier」),它可能不會產生你想要的,只是使用常規的URI,如「 http://purl.org/dc/terms/identifier「。 (另外,你使用了一個「info」前綴,它是未定義的,並且沒有必要在每個級別聲明@context)。

例如,您可以考慮創建http://example.foo/my-vocab#和定義範圍內的性能(使用您自己的dereferencable IRI,當然):

{ 
    "@context": { 
    "dc": "dc:identifier", 
    "rdf": "URI:http:/www.w3.org/1999/02/22-rdf-syntax-ns#", 
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#" 
    }, 
    "@graph": [ 
    { 
     "@id": "http://example.foo/interviewees", 
     "@type": "rdf:Property", 
     "rdfs:comment": "Interviewee", 
     "rdfs:subPropertyOf": { 
     "@id": "dc:contributor" 
     } 
    }, 
    { 
     "@id": "http://example.foo/interviewers", 
     "@type": "rdf:Property", 
     "rdfs:comment": "Interviewer", 
     "rdfs:subPropertyOf": { 
     "@id": "dc:contributor" 
     } 
    } 
    ] 
} 

然後,您可以與您的目標的情況下使用這個如下:

{ 
    "@context": { 
    "id": "http://purl.org/dc/terms/identifier", 
    "myvocab": "http://example.foo/myvocab#", 
    "info": "http://example.foo/info#", 
    "interviewers": { 
     "@id": "myvocab:interviewers", 
     "@type": "@id", 
     "@container": "@set" 
    }, 
    "title": "http://purl.org/dc/terms/title", 
    "interviewees": { 
     "@id": "myvocab:interviewees", 
     "@type": "@id", 
     "@container": "@set" 
    } 
    }, 
    "id": "06bad25f-83c1-4ee5-b055-0cb87d4c06be", 
    "interviewers": [ 
    { 
     "id": "b0c262ce-7eb3-47f2-b212-a0e71cca0c92", 
     "name": "Somebody", 
     "@id": "urn:uuid:b0c262ce-7eb3-47f2-b212-a0e71cca0c92", 
     "@type": [ 
     "http://id.loc.gov/vocabulary/relators/ivr" 
     ] 
    } 
    ], 
    "title": "Interview with So and So", 
    "interviewees": [ 
    { 
     "id": "bd6bb9ec-f417-4f81-af69-e3d191e3f73b", 
     "name": "A third person", 
     "gender": "male", 
     "@id": "urn:uuid:bd6bb9ec-f417-4f81-af69-e3d191e3f73b", 
     "@type": [ 
     "http://id.loc.gov/vocabulary/relators/ive" 
     ] 
    } 
    ], 
    "@id": "urn:uuid:06bad25f-83c1-4ee5-b055-0cb87d4c06be", 
    "@type": [ 
    "info:repository/interview" 
    ] 
} 

(此外,檢查了這一點上JSON-LD playground

如果你把它變成像龜(試行http://rdf.greggkellogg.net/),你會得到如下:

@prefix dc: <http://purl.org/dc/terms/> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 

<urn:uuid:06bad25f-83c1-4ee5-b055-0cb87d4c06be> a <http://example.foo/info#repository/interview>; 
    dc:title "Interview with So and So"; 
    <http://example.foo/myvocab#interviewees> <urn:uuid:bd6bb9ec-f417-4f81-af69-e3d191e3f73b>; 
    <http://example.foo/myvocab#interviewers> <urn:uuid:b0c262ce-7eb3-47f2-b212-a0e71cca0c92>; 
    dc:identifier "06bad25f-83c1-4ee5-b055-0cb87d4c06be" . 

<urn:uuid:b0c262ce-7eb3-47f2-b212-a0e71cca0c92> a <http://id.loc.gov/vocabulary/relators/ivr>; 
    dc:identifier "b0c262ce-7eb3-47f2-b212-a0e71cca0c92" . 

<urn:uuid:bd6bb9ec-f417-4f81-af69-e3d191e3f73b> a <http://id.loc.gov/vocabulary/relators/ive>; 
    dc:identifier "bd6bb9ec-f417-4f81-af69-e3d191e3f73b" . 
+0

感謝您的答案。我真的很感激你的意見。你可能是正確的,使用不同的謂詞是最好的解決方案,但我已經在上面添加了更多的細節。我對轉義的URI表示歉意:轉義只是由我使用的JSON漂亮打印機添加的。 –