SPARQL ARQ查询执行

时间:2016-03-11 11:43:34

标签: java sparql jena lubm

所以我有一段Jena代码,基本上尝试使用Triple ElementTriplesBlock构建查询,最后使用QueryFactory.make()。现在我设置了本地Virtuoso实例,因此我的SPARQL端点是localhost。即只http://localhost:8890/sparql。我查询的RDF是从Lehigh University Benchmark generator生成的。现在我试图根据一些条件替换查询模式中的三元组。也就是说,如果查询是由两个BGP或三重模式构成的,并且如果其中一个三重模式给出零结果,我想将该三重模式更改为其他模式。我如何在耶拿实现这一目标? 。我的代码看起来像

//Create your triples
Triple pattern1 = Triple.create(Var.alloc("X"),Node.createURI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),Node.createURI("http://swat.cse.lehigh.edu/onto/univ-bench.owl#AssociateProfessor"));
Triple pattern = Triple.create(Var.alloc("X"), Node.createURI("http://swat.cse.lehigh.edu/onto/univ-bench.owl#emailAddress"), Var.alloc("Y2"));

ElementTriplesBlock block = new ElementTriplesBlock();
block.addTriple(pattern1);
block.addTriple(pattern);

ElementGroup body = new ElementGroup();
body.addElement(block); 

//Build a Query here

Query q = QueryFactory.make();
q.setPrefix("ub", "http://swat.cse.lehigh.edu/onto/univ-bench.owl#");

q.setQueryPattern(body);

q.setQuerySelectType();
q.addResultVar("X");

//?X ub:emailAddress ?Y2 .  
//Query to String
System.out.println(q.toString());



QueryExecution qexec = QueryExecutionFactory.sparqlService("http://localhost:8890/sparql", q);
Op op = Algebra.optimize(Algebra.compile(q));
System.out.println(op.toString());

所以要清楚我能够通过使用Op op = Algebra.optimize(Algebra.compile(q))行实际看到关系代数形式的BGP。输出看起来像

(project (?X)
  (bgp
    (triple ?X <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#AssociateProfessor>)
    (triple ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#emailAddress> ?Y2)
  ))

现在我将如何评估每个三元组的执行情况?在这种情况下,如果我只想在查询模式执行的每一步打印结果数量,我该怎么做?我确实阅读了一些例子here。我想我必须使用OpExecutorQueryIterator,但我不确定它们是如何组合在一起的。在这种情况下,我只想迭代每个基本图形模式,然后输出基本图形模式和它从结束点返回的结果数。任何帮助或指示将不胜感激。

0 个答案:

没有答案