2016-04-28 2 views
1

Ich habe eine OWL-Datei mit einer Unterklasse von owl:Thing "Objects".Wie schreibe ich eine SPARQL-Abfrage, um die Werte aus einer OWL-Datei zu nehmen

<rdf:RDF xmlns="http://www.semanticweb.org/PredefinedOntology#" 
    xml:base="http://www.semanticweb.org/PredefinedOntology" 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:xml="http://www.w3.org/XML/1998/namespace" 
    xmlns:swrlb="http://www.w3.org/2003/11/swrlb#" 
    xmlns:swrl="http://www.w3.org/2003/11/swrl#" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> 
    <owl:Ontology rdf:about="http://www.semanticweb.org/PredefinedOntology"/> 

Diese Unterklasse besteht aus drei Personen (Door1, Coridor1, Window1) mit DataProperty Behauptungen (X und Y mit den Werten Koordinaten). Einer der Menschen sieht wie folgt aus:

<!-- http://www.semanticweb.org/PredefinedOntology#Door1 --> 

    <owl:NamedIndividual rdf:about="http://www.semanticweb.org/PredefinedOntology#Door1"> 
     <rdf:type rdf:resource="http://www.semanticweb.org/PredefinedOntology#Objects"/> 
     <X rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">2</X> 
     <Y rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">20</Y> 
    </owl:NamedIndividual> 

ich die Werte des Individuums erhalten müssen (wir Door1 sagen). Wie kann ich das mit SPARQL machen? Ich habe versucht:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
SELECT ?X ?datatype 
WHERE {?X rdf:datatype ?datatype} 

Aber es scheint wie meine Abfrage ist völlig falsch. Könnte mir bitte jemand erklären, wie man diese Abfrage schreibt (oder sogar wichtiger liest oder denkt), um die Werte X=2 und Y=20 aus der Ontologie zu finden?

Danke

Antwort

3

OK, Stufe 1 ist die RDF/XML-Text-Serialisierung zu verlieren. Verwenden Sie noch etwas, aber Turtle ist SPARQL am nächsten. Jeder RDF-Editor kann zum Konvertieren in Turtle verwendet werden. Die äquivalente Text Serialisierung für Door1 in Schildkröte ist:

:Door1 
    rdf:type :Objects ; 
    rdf:type owl:NamedIndividual ; 
    :X 2 ; 
    :Y 20 . 

Ein Teil dieser Syntax, die nicht offensichtlich sein kann, ist, dass jede Zeile ist ein Tripel (Subjekt, Prädikat, Objekt) und die ; bedeutet, dass der Gegenstand aus Die vorherige Zeile wird verwendet. Ein Vorteil dieser Syntax ist, dass RDF-Ressourcen als Objekt mit Eigenschaften angezeigt werden können.

Schritt 2 ist, dass die SPARQL-Abfrage offensichtlich wird, weil Sie in Turtelt die dreifachen Muster mit dem Tripel angegebenen Zeile können:

SELECT ?X ?Y ?inst 
WHERE { 
    ?inst rdf:type owl:NamedIndividual ; 
     :X ?X ; 
     :Y ?Y . 
} 
+0

danke sehr! Diese Version hat mir am Anfang einige Fehler beschert, aber dann habe ich sie ein bisschen wie folgt eingestellt: PREFIX my: SELECT? Objekte? X? Y \t WHERE { ? Objekte rdf: Typ Eule: NamedIndividual ; mein: X? X ; mein: Y? Y } und es funktionierte – Fabi

+0

Tut mir leid für eine dumme Frage, aber: in diesem Fall, wenn ich ein bisschen den Code geändert habe, den Sie mir zur Verfügung gestellt haben, aber Ihre Antwort ist immer noch die richtige, sollte Ich drücke auch auf "Beantworte deine Frage" und füge die Änderungen hinzu? Sorry, ich bin nicht wirklich erfahren in stackoverflow Website) – Fabi

+1

Ich denke, das wäre durchaus akzeptabel. Ein Ziel von SO ist zu erziehen, also wenn Sie etwas zu bieten haben, von dem andere lernen, dann wird es als ein guter Beitrag betrachtet. – scotthenninger

Verwandte Themen