2016-05-05 16 views
1

Ich habe eine Klasse namens WeatherPatterns, es hat viele Unterklassen und die Unterklassen haben Einzelpersonen/Instanzen benannt.Erhalten Sie Beziehungen zwischen direkten und indirekten Instanzen einer Klasse?

Ich möchte eine Sparql-Abfrage alle Instanzen von WeatherPatterns abzurufen, die Beziehung zueinander haben. Zum Beispiel sollten die Ausgangsdreier wie folgt aufgelistet werden.

Cloud produces Rain 
Rain causes Flood 

Wie wird diese Abfrage durchgeführt? Vielen Dank im Voraus

+0

" Unterklassen/Instanzen von WeatherPatterns, die miteinander in Beziehung stehen "Unterklassen und Instanzen sind nicht das Gleiche. Und typischerweise haben nur Instanzen Beziehungen zwischen ihnen; Klassen nicht. Wie sagen Sie in Ihren Daten, dass "Wolke Regen erzeugt"? Ohne ein Beispiel für Ihre Daten können wir keine Abfrage schreiben, die Informationen daraus abruft. –

Antwort

3

Ohne Ihre Daten können wir keine genaue Abfrage, machen aber wenn Sie für Beziehungen zwischen den Dingen, die direkten oder indirekten Instanzen von WeatherPatterns, das ist nicht zu hart suchen:

select ?s ?p ?o { 
    #-- Make sure that ?s and ?o are 
    #-- instance of WeatherPatterns 
    #-- or its subclasses. 
    ?s a/rdfs:subClassOf* :WeatherPatterns . 
    ?o a/rdfs:subClassOf* :WeatherPatterns . 

    #-- Find relationships between 
    #-- ?s and ?o. 
    ?s ?p ?o . 
} 
?

die Eigenschaft Pfad sa/rdfs: subClassOf *: WeatherPatterns verwendet eine als Standard Abkürzung für rdf: type und Streichhölzer, wenn s gehört zu einer Klasse, die relat ist? ed von einer Kette von rdfs: subClassOf Eigenschaften zu : WeatherPatterns. (Die Kette kann mit einer Länge von Null sein, was bedeutet, dass s ist eine direkte Instanz :. WeatherPatterns) Wenn Sie die beiden Kontrollen zu einem kombinieren möchten, können Sie auch tun:

:WeatherPatterns ^(a/rdfs:subClassOf*) ?s, ?o . 
+0

danke Joshua, es hat funktioniert! –