0

我报告了使用 Jena 在 Java 代码中执行 SPARQL 查询的问题。本体在此处可用(请更正第 798545 行的额外空白)。从 Jena 模型上的 N-Triples 文件加载本体后,使用

Model model=ModelFactory.createDefaultModel();
model.read("minerva-dataset.nt");

我尝试使用 SPARQL 对模型进行查询:

String queryString = "PREFIX owl: <http://www.w3.org/2002/07/owl#> \n"
            + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"
            + "PREFIX dcterms:<http://purl.org/dc/terms/>\n"
            + "SELECT  ?title WHERE { \n" + "?book rdf:type owl:Thing .\n" + "?book dcterms:title ?title.\n"+"}";

    System.out.println(queryString);  //I used this to see if the query was correctly parsed

    Query query = QueryFactory.create(queryString);
    QueryExecution qe = QueryExecutionFactory.create(query, model);
    ResultSet rs = qe.execSelect();
    ResultSetFormatter.out(System.out, rs);

但是,即使尝试另一个查询,ResultSet 结果也是空的。我确信查询有结果,因为我还在 Protegé 上运行了它,它与我在 Jena 模型中加载的同一个本体上运行。然后我在加载过程中搜索了一个错误,但是使用

FileOutputStream test=new FileOutputStream("test.txt");
model.write(test,"N-TRIPLES");

我看到在输出文件中公理的数量与本体的原始文件相同(即使顺序不同)。

所以我认为错误是在查询的执行中(也考虑到在 Eclipse 控制台中没有出现任何解析错误),但我无法理解它的原因。

4

0 回答 0