如何使用 jena 查询生成器构建此查询?

问题描述 投票:0回答:1

我正在尝试使用 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)
  }
}
java sparql jena jena-querybuilder
1个回答
0
投票

尝试如下所示:

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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.