You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Jena Query Builder 3.5(无WhereBuilder)构建目标SPARQL查询?

Jena Query Builder 3.5 实现GRAPH块内嵌入VALUES的SPARQL查询

针对你需要构建的包含UNION、GRAPH块内VALUES的SPARQL查询,在Jena Query Builder 3.5版本(无WhereBuilder类)中,可以通过链式调用的方式实现,核心是利用graph()方法进入GRAPH上下文后,直接在该块内添加VALUES和BIND语句。

目标SPARQL查询

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代码实现

import org.apache.jena.query.Query;
import org.apache.jena.querybuilder.QueryBuilder;
import org.apache.jena.rdf.model.ResourceFactory;

public class SparqlQueryBuilderExample {
    public static void main(String[] args) {
        // 初始化QueryBuilder
        QueryBuilder qb = new QueryBuilder();
        
        // 构建查询
        qb.select("?subject", "?predicate", "?object", "?graph")
           // 第一个GRAPH分支
           .where()
              .graph(ResourceFactory.createResource("G1"))
                 // 添加三元组模板
                 .add("?subject", "?predicate", "?object")
                 // 添加VALUES子句
                 .values("?subject", "?predicate", "?object")
                     .value("<S1>", "<P1>", "<O1>")
                     .value("<S2>", "<P2>", "<O2>")
                     .value("<S3>", "<P3>", "<O3>")
                 .end() // 结束VALUES子句
                 // 添加BIND语句
                 .bind(ResourceFactory.createResource("G1"), "?graph")
              .end() // 结束GRAPH块
           // UNION分隔两个分支
           .union()
              // 第二个GRAPH分支
              .graph(ResourceFactory.createResource("G2"))
                 .add("?subject", "?predicate", "?object")
                 .values("?subject", "?predicate", "?object")
                     .value("<S4>", "<P4>", "<O4>")
                     .value("<S5>", "<P4>", "<O5>")
                     .value("<S6>", "<P4>", "<O6>")
                 .end()
                 .bind(ResourceFactory.createResource("G2"), "?graph")
              .end();
        
        // 构建并输出查询
        Query query = qb.build();
        System.out.println(query.toString());
    }
}

关键实现说明

  • GRAPH块上下文:调用graph()方法后,后续的add()、values()、bind()操作都被限定在当前GRAPH块内,直到调用end()退出该上下文。
  • VALUES子句构建:通过values()指定要绑定的变量,再逐个调用value()添加三元组行,完成后用end()闭合VALUES子句。
  • UNION分支:使用union()方法分隔两个独立的GRAPH查询分支,确保两个分支的逻辑正确合并。

内容的提问来源于stack exchange,提问作者Lio Kishan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:33:12