繁体   English   中英

如何在Jena中将SPARQL查询转换为RDF文件?

[英]How to convert a SPARQL query into an RDF file in Jena?

我正在尝试直接从Oracle数据库的SPARQL查询中输出RDF / XML文件。 由于我已验证ResultSet对象中的结果,因此查询工作正常。

但是,我不确定如何从那里继续。 我想我想为每个QuerySolution创建一个Statement,然后将其添加到Model中。 但是,我找不到解决方法,因为我找不到获取谓词值的方法。

任何帮助将不胜感激,并暗示我是否走了正确的道路。

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

您尚未显示查询,但是大概是以下形式:

SELECT ?s ?p ?o
WHERE {
    ...
}

如果将SELECT替换为CONSTRUCTCONSTRUCT实现的目标很简单:

CONSTRUCT { ?s ?p ?o }
WHERE {
    ...
}

CONSTRUCT一个三重模板并将每个解决方案绑定到该模型,然后将其添加到结果模型中, CONSTRUCT可以创建(构建)模型。 在这种情况下,该模板只是{ ?s ?p ?o } ,即使用?s作为主题,等等。但是,可以使用更精细的模式,只需将期望的RDF写入位置中的变量中即可得到查询结果。

最终代码:

QueryExecution qe = QueryExecutionFactory.create(query, oracleSemModel) ;
Model model = qe.execConstruct();
// there is no step 3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM