我报告了使用Jena在Java代码中执行SPARQL查询时出现的问题。本体是可用的here(请在798545行更正额外的空白区域)。 从Jena Model上的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结果为空。 我确信查询HAS的结果是因为我也在Protegé上运行了我在Jena模型中加载的相同本体。 然后我在加载过程中搜索了一个错误,但是使用了
FileOutputStream test=new FileOutputStream("test.txt");
model.write(test,"N-TRIPLES");
我在输出文件中看到公理的数量与本体的原始文件相同(即使顺序不相同)。
所以我认为错误在于查询的执行(也考虑到在Eclipse控制台中没有出现任何解析错误),但我无法理解它是由什么造成的。