我正在尝试使用 JAVA 中的 Jena 查询生成器构建以下查询。我尝试了多种不同的方法来构建它,但似乎没有任何效果。在图表内添加值块似乎是不可能的。谁能建议如何做到这一点?
我们目前使用 jena 查询生成器 3.5。哪个没有
WhereBuilder
SELECT ?subject ?predicate ?object ?graph
WHERE {
{
GRAPH <G1> {
?subject ?predicate ?object
VALUES (?subject ?predicate ?object) {
(<S1> <P1> <O1>)
(<S2> <P2> <O2>)
(<S3> <P3> <O3>)
}
BIND(<G1> AS ?graph)
}
}
UNION
{
GRAPH <G2 > {
?subject ?predicate ?object
VALUES (?subject ?predicate ?object) {
(<S4> <P4> <O4>)
(<S5> <P4> <O5>)
(<S6> <P4> <O6>)
}
BIND(<G2> AS ?graph)
}
}
尝试如下所示:
import org.apache.jena.arq.querybuilder.SelectBuilder;
import org.apache.jena.arq.querybuilder.WhereBuilder;
import org.apache.jena.query.Query;
public class JenaQueryBuilderExample {
public static void main(String[] args) {
SelectBuilder select = new SelectBuilder();
select.addVar("?subject").addVar("?predicate").addVar("?object").addVar("?graph");
WhereBuilder where1 = new WhereBuilder();
where1.addGraph("<G1>", graph -> graph.addTriple("?subject", "?predicate", "?object"));
where1.addValues("?subject ?predicate ?object", "(<S1> <P1> <O1>)", "(<S2> <P2> <O2>)", "(<S3> <P3> <O3>)");
where1.addBind("<G1>", "?graph");
WhereBuilder where2 = new WhereBuilder();
where2.addGraph("<G2>", graph -> graph.addTriple("?subject", "?predicate", "?object"));
where2.addValues("?subject ?predicate ?object", "(<S4> <P4> <O4>)", "(<S5> <P4> <O5>)", "(<S6> <P4> <O6>)");
where2.addBind("<G2>", "?graph");
select.addUnion(where1, where2);
Query query = select.build();
System.out.println(query);
}
}