2016-05-02 13 views
1

Ich habe eine Ontologie mit den Objekten (NamedIndividual) und deren Koordinaten (X, Y) in Form von datatype. Die einzelnen sieht wie folgt aus:Abrufen von Daten aus SPARQL-Ergebnissatz

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

Ich mache eine SPARQL-Abfrage:

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#> 
PREFIX onto: <http://www.semanticweb.org/PredefinedOntology#> 

SELECT ?objects ?X ?Y 
    WHERE { 
?objects rdf:type owl:NamedIndividual 
; onto:X ?X 
; onto:Y ?Y 
FILTER regex(str(?objects),"Door1") 
} 

Meine Abfrage in Eclipse ist dies:

Model model = FileManager.get().loadModel("/home/aidos/workspace/OntologicalFramework/files/ontologies/NewOnt.owl"); 
String queryString = "//THE QUERY I'VE WRITTEN ABOVE IN A STRING FORM" 
Query query = QueryFactory.create(queryString); 
QueryExecution qexec = QueryExecutionFactory.create(query, model); 
ResultSet results = qexec.execSelect(); 
ResultSetFormatter.out(System.out, results, query); 

Das gibt mir eine Ergebnismenge zurück zu bedruckenden die Konsole meiner IDE, wie:

-------------------------- 
| objects  | X | Y | 
========================== 
| onto:Window1 | 56 | 28 | 
-------------------------- 

Was ich brauche, ist diese Ganzzahlen 56 und 28 zu bekommen und sie in den int x und int y zu speichern. Könnte mir jemand helfen zu verstehen, wie ich sie bekommen kann? Während Prozess Debuggen habe ich die DataSetImpl genannt dataset im Zweig jeden Zugriffs ResultSet bietet ResultSet result

Antwort

3

gefunden jede Zeile als QuerySolution durch die Verwendung der next() Methode. Dann können Sie Methoden wie getLiteral(String) verwenden, um den Literalwert der Variablen mit einem angegebenen Namen abzurufen. Es gibt einige andere Methoden für die Variablenwerte bekommen, auch: get (String) eine RDFNode kehrt und getResource (String) eine Ressource zurückgibt.

In diesem Fall könnten Sie get() oder getLiteral() verwenden, da die Zahlen sind Literale und damit RDF Knoten, aber Sie können getResource nicht verwenden(), da die Zahlen aren‘ t Ressourcen (dh nicht IRIs).

+0

Gute Erklärung. Einige Ergänzungen: Erstens würde ich für Situationen, in denen Sie nicht sicher sein können - für welche Vernunft überhaupt - dass ein Literal oder eine Ressource zurückgegeben wird, vorschlagen, "get()" zu verwenden, um zu prüfen, ob es ein Literal ist RDFNode'-Objekt vor der Konvertierung. Zweitens, um Probleme im obigen Beispielcode zu vermeiden, können Sie nach dem Drucken des Resultsets nicht erneut darauf iterieren. Ah, und last but not least, Jena ARQ-Dokumente sind ein guter Anfangspunkt. – AKSW