2016-05-02 6 views
1

У меня есть онтология с объектами (NamedIndividual) и их координаты (X, Y) в форме datatype. Индивид выглядеть следующим образом:Извлечение данных из набора результатов SPARQL

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

я сделать запрос SPARQL:

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

Мой запрос в затмении это:

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

Это дает мне обратно результирующий набор, выводимой консоль моей IDE, например:

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

Мне нужно получить эти целые числа 56 и 28 и сохранить их в int x и int y. Может кто-нибудь помочь мне понять, как я могу их получить? В то время как процесс отладки Я нашел DataSetImpl под названием dataset в ветви ResultSet result

ответ

3

Каждый ResultSet обеспечивает доступ к каждой строке в качестве QuerySolution посредством использования метода next(). Затем вы можете использовать такие методы, как getLiteral(String), чтобы получить буквальное значение переменной с указанным именем. Есть и другие методы для получения значений переменных, тоже: прибудет (String) возвращает RDFNode и getResource (String) возвращает ресурса.

В этом случае, вы можете использовать Get() или getLiteral() так как числа являются литералы, и, таким образом, RDF узлы, но вы не можете использовать getResource(), так как числа Арен» т ресурсов (т. е. не IRI).

+0

Хорошее объяснение. Некоторые дополнения: во-первых, для ситуаций, когда вы не можете быть уверены - для какого бы то ни было разумного - что будет возвращен литерал или ресурс, я бы предложил использовать 'get()' с проверкой, является ли он литералом на ' RDFNode' перед преобразованием. Во-вторых, просто чтобы избежать проблем в случае приведенного выше кода примера, как только вы напечатали результирующий набор, вы не сможете повторять его снова. Ах, и последнее, но не менее важное, Jena ARQ docs - хороший момент для начала. – AKSW

Смежные вопросы