2

我正在尝试直接从 Oracle 数据库的 SPARQL 查询中输出 RDF/XML 文件。查询工作正常,因为我已经验证了 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");
4

1 回答 1

6

您还没有显示查询,但它可能是以下形式:

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
于 2013-03-12T21:02:11.157 回答