Как преобразовать запрос 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
Другие вопросы по тегам