Lio Kishan
Lio Kishan

Reputation: 1

How to build this query using jena query builder?

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

Answers (1)

SELA
SELA

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

Related Questions