Reputation: 1
I am trying to construct the below query using the Jena query builder in JAVA. I have tried multiple different ways to build it, but nothing seems to work. Adding values block inside Graph seems to be not possible. Can anyone suggest how this can be done?
We are currently using jena query builder 3.5. Which does not have 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)
}
}
Upvotes: 0
Views: 161
Reputation: 6858
Try something like below :
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);
}
}
Upvotes: 0