0

所以我有这段 Jena 代码,它基本上尝试使用 a 构建查询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)
  ))

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

4

0 回答 0