Как преобразовать запрос SPARQL в файл RDF в Йене?
Я пытаюсь вывести файл RDF/XML напрямую из запроса SPARQL из базы данных Oracle. Запрос работает нормально, так как я проверил результаты в объекте ResultSet.
Однако я не уверен, что делать дальше. Я думаю, что я хочу создать оператор для каждого QuerySolution и затем добавить его в модель. Однако я не могу найти способ сделать это, потому что я не могу найти способ получить значение предиката.
Буду признателен за любую помощь, а также намеки, иду ли я по правильному пути.
QueryExecution qe = QueryExecutionFactory.create(query, oracleSemModel) ;
ResultSet results = qe.execSelect();
Model model = ModelFactory.createDefaultModel();
while (results.hasNext())
{
QuerySolution result = results.next();
Resource subject = result.getResource("s"); // get the subject
Property predicate = result.getProperty("p"); // <-- THIS FUNCTION DOESN'T EXIST
RDFNode object = result.get("o"); // get the object
Statement stmt = ResourceFactory.createStatement(subject, predicate, object);
model.add(stmt);
}
model.write(System.out, "RDF/XML-ABBREV");
1 ответ
Вы не показали запрос, но он предположительно имеет вид:
SELECT ?s ?p ?o
WHERE {
...
}
То, что вы хотите достичь, просто, если вы замените SELECT
с CONSTRUCT
:
CONSTRUCT { ?s ?p ?o }
WHERE {
...
}
CONSTRUCT
создает (конструирует) модель в результате, беря тройной шаблон и привязывая к нему каждое решение, а затем добавляя его в модель результата. В вашем случае этот шаблон просто { ?s ?p ?o }
то есть используйте? s в качестве субъекта и т. д. Однако можно использовать более сложные шаблоны, просто запишите ожидаемый RDF с переменными в позициях для значений из результатов запроса.
Финальный код:
QueryExecution qe = QueryExecutionFactory.create(query, oracleSemModel) ;
Model model = qe.execConstruct();
// there is no step 3