2016-07-28 27 views
0

Ich stehe vor dem Problem, mehrere Klassen im Bereich einer Objekteigenschaft mithilfe der spark-Abfrage in Java-Code abzurufen (Protege 3.4.8).Abrufen mehrerer Klassen im Bereich einer Objekteigenschaft mit Hilfe der Sparql-Abfrage in Java (Protege 3.4.8)

Result1_Layer = 
        "PREFIX uni:<http://www.owl-ontologies.com/Ontology1469701449.owl#>" 
       +"PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>" 
       + "select ?range1 " 
       + "where { uni:hasS_Layer " 
    + "rdfs:range ?range1}"; 


I am getting output as:| range1        | 
========================================= 
| <http://www.w3.org/2002/07/owl#Thing> | 
| _:b0         | 
| rdfs:Resource       | 
----------------------------------------- 

Aber die Ausgabe zwei Klassen enthalten: Usability, Reliabilty statt b0. In Ontologie gibt es eine Objekteigenschaft hasS_Layer, deren Domäne ist Layer und Bereich ist Schnittpunkt Usability, Zuverlässigkeit Diese Abfrage abrufen korrektes Ergebnis, wenn in Reichweite gibt es nur eine einzige Klasse. Gleiche Abfrage funktioniert gut, wenn ich Protey Version 4.3 verwenden. Aber in Protege 3.4.8 zeigt es nicht korrekte Ausgabe für mehrere Klassen im Bereich. Bitte helfen.

+0

http://stackoverflow.com/questions/19524838/retrieve-the-collection-of-union-und-intersectionof-for-each-owl kann hier relevant sein. Es scheint, als ob Sie versuchen, die Teile einer Kreuzungsklasse zu finden. –

Antwort

2

Eine OWL Kreuzung, wenn in RDF dargestellt wird, sieht wie folgt aus:

_:b0 a owl:Class; 
     owl:intersectionOf (ex:Usability, ex:Reliability) . 

Oder noch Dinkel (wenn wir die interne Darstellung eines RDF-Sammlung erweitern):

_:b0 a owl:Class; 
     owl:intersectionOf _:b1 . 
    _:b1 rdf:first ex:Usability ; 
     rdf:rest _:b2 . 
    _:b2 rdf:first ex:Reliability ; 
     rdf:rest rdf:nil . 

Ihre Abfrage gibt den Wert der rdfs:range-Eigenschaft zurück, die _:b0 ist - das ist die anonyme Klasse, die dem Schnittpunkt der zwei Klassen entspricht.

Wenn Sie die Klassen zurück bekommen möchten, dass die Kreuzung bilden, müssen Sie eine andere Abfrage tun, zum Beispiel:

SELECT ?c 
WHERE { uni:hasS_Layer rdfs:range ?r . 
     ?r owl:intersectionOf/rdf:rest*/rdf:first ?c . 
} 

Die owl:intersectionOf/rdf:rest*/rdf:first als Ausdruck Pfad bekannt ist, und es Abfragen für jede Ressource ?r, die eine owl:intersection Eigenschaft hat, die zu 0 oder mehr rdf:rest Eigenschaften verbindet, die wiederum zu einer rdf:first Eigenschaft verbindet. Es sind die Werte der rdf:first Eigenschaften, die wir wollen.