2014-01-17 5 views
6

Ich habe Probleme herauszufinden, wie Ressourcen disambiguiert werden, die das gleiche Prädikat im Voraus verwenden. Ich bin ein RDF-Neuling, also bitte entschuldigen Sie meine Terminologie: Ich werde versuchen zu erklären, was ich mit Beispielen meine.Ressourcen mit dem gleichen Prädikat in JSON-LD disqualifizieren

Ich habe eine Interview Ressource/Modell mit einer (vereinfachten) Kontext wie folgt aus:

{ 
    "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" 
    } 
} 

Mein Interviewer und Interviewee Ressourcen haben Kontexten wie folgt aus:

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

ich eine Ressource dann erstellen, die sieht so aus:

{ 
    "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" 
    ] 
} 

Alles ist gut, und ich kann dieses "Objekt" in meinem Repository speichern (ich verwende RDF.rb-Bibliotheken). Es treten jedoch Probleme auf, wenn ich dann versuche, das Objekt zu extrahieren und es "neu zu serialisieren". Zum Beispiel (den Ruby-Code entschuldigen),

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

extrahieren Diese Zeilen relevante Aussagen aus dem Repository, und sie dann Maische in eine JSON-LD „Ressource“ mit dem entsprechenden Kontext. Sowohl Befragte als auch Interviewer werden jedoch in das Attribut interviewees verschoben.

Natürlich macht dies durchaus Sinn, da beide interviewers und interviewees zur interview Ressource mit dem dc:contributor Prädikat verwendet sind (sie von ihren einzelnen Typen nur auszeichnen).

Ich muss den dump Prozess der zugehörigen Ressourcentypen bewusst machen, aber ich weiß keine Möglichkeit, diese Informationen dem Kontext des Interviews hinzuzufügen.

Ich weiß nicht, ob dies gemäß den aktuellen JSON-LS-Spezifikationen überhaupt möglich ist. This issue scheint, dass es relevant sein könnte, aber ich weiß nicht wirklich genug über RDF/JSON-LD, um sicher zu wissen.

Ich könnte verschiedene Prädikate für interviewers und interviewees verwenden, aber es scheint nicht wie ich es tun sollte. Irgendwelche Vorschläge?

Hinweis: Ich habe diese Frage auch unter answers.semanticweb.com gestellt.

WEITERE INFORMATIONEN

Ich habe auf diese Weise meine contributor Beziehungen modelliert (wo ein interviewer ist ein contributor mit einem Typ http://id.loc.gov/vocabulary/relators/ivr), basierend auf einer der empfohlenen Wege für Eigenschaften DC qualifizieren. Zum Beispiel kann man ein MESH Thema auf einer Ressource wie ausdrücken:

<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> 

glaube, ich hatte:

<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> 

Ich möchte in der Lage sein, ein lcsh_subjects „Eigentum“ zu verweisen, wo lcsh_subjects diejenigen darstellen, Knoten, die mit dc:subject UND mit dem Typ dcterms:LCSH zu der Ressource verwandt sind. Ich stelle jedoch fest, dass ich wahrscheinlich über das JSON-LD-Modell falsch nachdenke.

+1

AFAIK der '„@type“:„@id“' bedeutet im Zusammenhang, dass die Eigenschaft einen String-Typ hat, und sein Wert sollte als interpretiert werden IRI. Der "http: // purl.org/dc/terms/contributor" scheint ein Typ (Objekt) und kein Eigenschaftsname (Prädikat) zu sein. Also ich denke dein Kontext ist fehlerhaft. Aber ich bin auch neu in JSON-LD ... – inf3rno

+0

Ich denke, der '@ type' ist das Äquivalent von' rdf: type' und die '@ id' ist äquivalent zum eigentlichen Betreff zumindest durch die Eigenschaftsdefinitionen, aber es ist schwer, etwas darüber zu finden ...: S – inf3rno

Antwort

7

Sie sind möglicherweise verwirrt über die @id für Interviewer und Interviewpartner zu verwenden. Sie haben beide mit der gleichen @id definiert, was bedeutet, dass sie dasselbe Prädikat sind. Sie sind so definiert, dass sie zu der Ressource beitragen, aber sie unterscheiden sich nicht voneinander. Sie können bedenken, dass das, was Sie unter "Interviewer" verstehen, ein Prädikat ist, das eine Untereigenschaft von dc: contributor ist, und dasselbe für "interviewte". Es könnte besser sein, ein vorhandenes Vokabular zu wählen, das bereits den Begriff Interviewer und Befragte hat. Erstellen Sie alternativ Ihr eigenes Vokabular, das die benötigten Begriffe definiert und verwendet, um Kontexttypen zu erstellen.

Sie entgehen auch den URIs, die in Ihrem Objekt verwendet werden (zB "http://purl.org/dc/terms/identifier"), was möglicherweise nicht das ergibt, was Sie wollen, verwenden Sie nur normale URIs wie " http://purl.org/dc/terms/identifier ".

(Sie verwenden auch ein Präfix "info", das nicht definiert ist. Und es ist nicht notwendig @context auf jeder Ebene zu deklarieren).

Zum Beispiel könnten Sie die http://example.foo/my-vocab# Erstellen und Definieren Eigenschaften innerhalb dieser (mit Ihrem eigenen dereferencable IRI, natürlich):

{ 
    "@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" 
     } 
    } 
    ] 
} 

Sie dann dies mit dem Kontext des Objekts verwenden könnte wie folgt:

{ 
    "@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" 
    ] 
} 

(auch diese Besuche auf dem JSON-LD playground

Wenn Sie dies in so etwas wie Turtle drehen (versuchen http://rdf.greggkellogg.net/), würden Sie die folgende:

@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

danke für die Antwort. Ich schätze deine Eingabe sehr. Sie haben wahrscheinlich Recht, dass die Verwendung unterschiedlicher Prädikate die beste Lösung ist, aber ich habe oben ein wenig mehr Details hinzugefügt. Ich entschuldige mich für die entflohenen URIs: Das Entkommen wurde gerade von dem JSON-Pretty-Drucker hinzugefügt, den ich benutzte. –

Verwandte Themen