blob: f18cf358f9579e7e63a43874dace8eafa7824a20 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Apache Jena - Jena Query Builder - A query builder for Jena.</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/css/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="/css/bootstrap-icons.css" rel="stylesheet" media="screen"><link rel="stylesheet" type="text/css" href="https://jena.apache.org/sass/jena.1b17c39a117e22b46db4c66f6395dc27c134a60377d87d2d5745b8600eb69722.css" integrity="sha256-GxfDmhF&#43;IrRttMZvY5XcJ8E0pgN32H0tV0W4YA62lyI=">
<link rel="shortcut icon" href="/images/favicon.ico" />
</head>
<body>
<nav class="navbar navbar-expand-lg bg-body-tertiary" role="navigation">
<div class="container">
<div class="navbar-header">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="/index.html">
<img class="logo-menu" src="/images/jena-logo/jena-logo-notext-small.png" alt="jena logo">Apache Jena</a>
</div>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li id="homepage" class="nav-item"><a class="nav-link" href="/index.html"><span class="bi-house"></span> Home</a></li>
<li id="download" class="nav-item"><a class="nav-link" href="/download/index.cgi"><span class="bi-download"></span> Download</a></li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-journal"></span> Learn <b class="caret"></b></a>
<ul class="dropdown-menu">
<li class="dropdown-header">Tutorials</li>
<li><a class="dropdown-item" href="/tutorials/index.html">Overview</a></li>
<li><a class="dropdown-item" href="/documentation/fuseki2/index.html">Fuseki Triplestore</a></li>
<li><a class="dropdown-item" href="/documentation/notes/index.html">How-To's</a></li>
<li><a class="dropdown-item" href="/documentation/query/manipulating_sparql_using_arq.html">Manipulating SPARQL using ARQ</a></li>
<li><a class="dropdown-item" href="/tutorials/rdf_api.html">RDF core API tutorial</a></li>
<li><a class="dropdown-item" href="/tutorials/sparql.html">SPARQL tutorial</a></li>
<li><a class="dropdown-item" href="/tutorials/using_jena_with_eclipse.html">Using Jena with Eclipse</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">References</li>
<li><a class="dropdown-item" href="/documentation/index.html">Overview</a></li>
<li><a class="dropdown-item" href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
<li><a class="dropdown-item" href="/documentation/io/">RDF I/O</a></li>
<li><a class="dropdown-item" href="/documentation/assembler/index.html">Assembler</a></li>
<li><a class="dropdown-item" href="/documentation/tools/index.html">Command-line tools</a></li>
<li><a class="dropdown-item" href="/documentation/rdfs/">Data with RDFS Inferencing</a></li>
<li><a class="dropdown-item" href="/documentation/geosparql/index.html">GeoSPARQL</a></li>
<li><a class="dropdown-item" href="/documentation/inference/index.html">Inference API</a></li>
<li><a class="dropdown-item" href="/documentation/ontology/">Ontology API</a></li>
<li><a class="dropdown-item" href="/documentation/permissions/index.html">Permissions</a></li>
<li><a class="dropdown-item" href="/documentation/extras/querybuilder/index.html">Query Builder</a></li>
<li><a class="dropdown-item" href="/documentation/rdf/index.html">RDF API</a></li>
<li><a class="dropdown-item" href="/documentation/rdfconnection/">RDF Connection - SPARQL API</a></li>
<li><a class="dropdown-item" href="/documentation/rdfstar/index.html">RDF-star</a></li>
<li><a class="dropdown-item" href="/documentation/shacl/index.html">SHACL</a></li>
<li><a class="dropdown-item" href="/documentation/shex/index.html">ShEx</a></li>
<li><a class="dropdown-item" href="/documentation/tdb/index.html">TDB</a></li>
<li><a class="dropdown-item" href="/documentation/tdb2/index.html">TDB2</a></li>
<li><a class="dropdown-item" href="/documentation/query/text-query.html">Text Search</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-journal-code"></span> Javadoc <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/documentation/javadoc.html">All Javadoc</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/arq/">ARQ</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/fuseki2/">Fuseki</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/geosparql/">GeoSPARQL</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/jena/">Jena Core</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/permissions/">Permissions</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/extras/querybuilder/">Query Builder</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/shacl/">SHACL</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/tdb/">TDB</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/text/">Text Search</a></li>
</ul>
</li>
</ul>
<form class="d-flex" role="search" action="/search" method="GET">
<div class="input-group">
<input class="form-control border-end-0 border m-0" type="search" name="q" id="search-query" placeholder="Search...." aria-label="Search" style="width: 10rem;">
<button class="btn btn-outline-secondary border-start-0 border" type="submit">
<i class="bi-search"></i>
</button>
</div>
</form>
<ul class="navbar-nav">
<li id="ask" class="nav-item"><a class="nav-link" href="/help_and_support/index.html" title="Ask"><span class="bi-patch-question"></span><span class="text-body d-none d-xxl-inline"> Ask</span></a></li>
<li class="nav-item dropdown">
<a href="#" title="Get involved" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-megaphone"></span><span class="text-body d-none d-xxl-inline"> Get involved </span><b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/getting_involved/index.html">Contribute</a></li>
<li><a class="dropdown-item" href="/help_and_support/bugs_and_suggestions.html">Report a bug</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">Project</li>
<li><a class="dropdown-item" href="/about_jena/about.html">About Jena</a></li>
<li><a class="dropdown-item" href="/about_jena/architecture.html">Architecture</a></li>
<li><a class="dropdown-item" href="/about_jena/citing.html">Citing</a></li>
<li><a class="dropdown-item" href="/about_jena/team.html">Project team</a></li>
<li><a class="dropdown-item" href="/about_jena/contributions.html">Related projects</a></li>
<li><a class="dropdown-item" href="/about_jena/roadmap.html">Roadmap</a></li>
<li><a class="dropdown-item" href="/about_jena/security-advisories.html">Security Advisories</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">ASF</li>
<li><a class="dropdown-item" href="https://www.apache.org/">Apache Software Foundation</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/licenses/LICENSE-2.0">License</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/security/">Security</a></li>
<li><a class="dropdown-item" href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
</ul>
</li>
<li class="nav-item" id="edit"><a class="nav-link" href="https://github.com/apache/jena-site/edit/main/source/documentation/extras/querybuilder/__index.md" title="Edit this page on GitHub"><span class="bi-pencil-square"></span><span class="text-body d-none d-xxl-inline"> Edit this page</span></a></li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-12">
<div id="breadcrumbs">
<ol class="breadcrumb mt-4 p-2 bg-body-tertiary">
<li class="breadcrumb-item"><a href='/documentation'>DOCUMENTATION</a></li>
<li class="breadcrumb-item"><a href='/documentation/extras'>EXTRAS</a></li>
<li class="breadcrumb-item active">QUERYBUILDER</li>
</ol>
</div>
<h1 class="title">Jena Query Builder - A query builder for Jena.</h1>
<main class="d-flex flex-xl-row flex-column">
<aside class="text-muted align-self-start mb-3 p-0 d-xl-none d-block">
<h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
<nav id="TableOfContents">
<ul>
<li><a href="#overview">Overview</a></li>
</ul>
<ul>
<li><a href="#update-builder">Update Builder</a></li>
<li><a href="#where-builder">Where Builder</a></li>
<li><a href="#template-usage">Template Usage</a></li>
<li><a href="#prepared-statement-usage">Prepared Statement Usage</a></li>
</ul>
</nav>
</aside>
<article class="flex-column me-lg-4">
<h2 id="overview">Overview</h2>
<p>Query Builder provides implementations of Ask, Construct, Select and Update builders that allow developers to create queries without resorting to StringBuilders or similar solutions. The Query Builder module is an extra package and is found in the <code>jena-querybuilder</code> jar.</p>
<p>Each of the builders has a series of methods to define the query. Each method returns the builder for easy chaining. The example:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>SelectBuilder sb <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> SelectBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span> <span style="color:#b44">&#34;*&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?p&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?o&#34;</span> <span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Query q <span style="color:#666">=</span> sb<span style="color:#666">.</span><span style="color:#b44">build</span><span style="color:#666">()</span> <span style="color:#666">;</span>
</span></span></code></pre></div><p>produces</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sparql" data-lang="sparql"><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">SELECT</span> <span style="color:#666">*</span>
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">WHERE</span>
</span></span><span style="display:flex;"><span> { <span style="color:#b8860b">?s</span> <span style="color:#b8860b">?p</span> <span style="color:#b8860b">?o</span> }
</span></span></code></pre></div><p>Standard Java variables can be used in the various clauses as long as the datatype has a registered Datatype within Jena. For example:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>Integer five <span style="color:#666">=</span> Integer<span style="color:#666">.</span><span style="color:#b44">valueof</span><span style="color:#666">(</span><span style="color:#666">5</span><span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>SelectBuilder sb <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> SelectBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span> <span style="color:#b44">&#34;*&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?p&#34;</span><span style="color:#666">,</span> five <span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Query q <span style="color:#666">=</span> sb<span style="color:#666">.</span><span style="color:#b44">build</span><span style="color:#666">()</span> <span style="color:#666">;</span>
</span></span></code></pre></div><p>produces</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sparql" data-lang="sparql"><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">SELECT</span> <span style="color:#666">*</span>
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">WHERE</span>
</span></span><span style="display:flex;"><span> { <span style="color:#b8860b">?s</span> <span style="color:#b8860b">?p</span> <span style="color:#b44">&#34;5&#34;</span><span style="color:#666">^^</span><span style="color:#a0a000">&lt;http://www.w3.org/2001/XMLSchema#integer&gt;</span> }
</span></span></code></pre></div><p>Java Collections are properly expanded to RDF collections within the query builder provided there is a registered Datatype for the elements. Nested collections are expanded. Collections can also be defined with the standard SPARQL shorthand. So the following produce equivalent queries:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>SelectBuilder sb <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> SelectBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span> <span style="color:#b44">&#34;*&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?p&#34;</span><span style="color:#666">,</span> List<span style="color:#666">.</span><span style="color:#b44">of</span><span style="color:#666">(</span> <span style="color:#b44">&#34;a&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;b&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;c&#34;</span><span style="color:#666">)</span> <span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Query q <span style="color:#666">=</span> sb<span style="color:#666">.</span><span style="color:#b44">build</span><span style="color:#666">()</span> <span style="color:#666">;</span>
</span></span></code></pre></div><p>and</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>SelectBuilder sb <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> SelectBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span> <span style="color:#b44">&#34;*&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?p&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;(&#39;a&#39; &#39;b&#39; &#39;c&#39;)&#34;</span> <span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Query q <span style="color:#666">=</span> sb<span style="color:#666">.</span><span style="color:#b44">build</span><span style="color:#666">()</span> <span style="color:#666">;</span>
</span></span></code></pre></div><p>It is common to create <code>Var</code> objects and use them in complex queries to make the query more readable. For example:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>Var node <span style="color:#666">=</span> Var<span style="color:#666">.</span><span style="color:#b44">alloc</span><span style="color:#666">(</span><span style="color:#b44">&#34;node&#34;</span><span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>Var x <span style="color:#666">=</span> Var<span style="color:#666">.</span><span style="color:#b44">alloc</span><span style="color:#666">(</span><span style="color:#b44">&#34;x&#34;</span><span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>Var y <span style="color:#666">=</span> Var<span style="color:#666">.</span><span style="color:#b44">alloc</span><span style="color:#666">(</span><span style="color:#b44">&#34;y&#34;</span><span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>SelectBuilder sb <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> SelectBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span>x<span style="color:#666">).</span><span style="color:#b44">addVar</span><span style="color:#666">(</span>y<span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span>node<span style="color:#666">,</span> RDF<span style="color:#666">.</span><span style="color:#b44">type</span><span style="color:#666">,</span> Namespace<span style="color:#666">.</span><span style="color:#b44">Obst</span><span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span>node<span style="color:#666">,</span> Namespace<span style="color:#666">.</span><span style="color:#b44">x</span><span style="color:#666">,</span> x<span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span>node<span style="color:#666">,</span> Namespace<span style="color:#666">.</span><span style="color:#b44">y</span><span style="color:#666">,</span> y<span style="color:#666">);</span>
</span></span></code></pre></div><h1 id="constructing-expressions">Constructing Expressions</h1>
<p>Expressions are primarily used in <code>filter</code> and <code>bind</code> statements as well as in select clauses. All the standard expressions are implemented in the <code>ExprFactory</code> class. An <code>ExprFactory</code> can be retrieved from any Builder by calling the <code>getExprFactory()</code> method. This will create a Factory that has the same prefix mappings and the query. An alternative is to construct the <code>ExprFactory</code> directly, this factory will not have the prefixes defined in <code>PrefixMapping.Extended</code>.</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>SelectBuilder builder <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> SelectBuilder<span style="color:#666">();</span>
</span></span><span style="display:flex;"><span>ExprFactory exprF <span style="color:#666">=</span> builder<span style="color:#666">.</span><span style="color:#b44">getExprFactory</span><span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span> <span style="color:#b44">&#34;cf&#34;</span><span style="color:#666">,</span>
</span></span><span style="display:flex;"><span> <span style="color:#b44">&#34;http://vocab.nerc.ac.uk/collection/P07/current/CFSN0023/&#34;</span><span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>builder<span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span> exprF<span style="color:#666">.</span><span style="color:#b44">floor</span><span style="color:#666">(</span> <span style="color:#666">?</span>v <span style="color:#666">),</span> <span style="color:#666">?</span>floor <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#666">?</span>s<span style="color:#666">,</span> <span style="color:#b44">&#34;cf:air_temperature&#34;</span><span style="color:#666">,</span> <span style="color:#666">?</span>v <span style="color:#666">);</span>
</span></span></code></pre></div><h2 id="update-builder">Update Builder</h2>
<p>The <code>UpdateBuilder</code> is used to create <code>Update</code>, <code>UpdateDeleteWhere</code> or <code>UpdateRequest</code> objects. When an <code>UpdateRequest</code> is built is contains a single <code>Update</code> object as defined by the <code>UpdateBuilder</code>. <code>Update</code> objects can be added to an UpdateRequest using the <code>appendTo()</code> method.</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>Var subj <span style="color:#666">=</span> Var<span style="color:#666">.</span><span style="color:#b44">alloc</span><span style="color:#666">(</span> <span style="color:#b44">&#34;s&#34;</span> <span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>Var obj <span style="color:#666">=</span> Var<span style="color:#666">.</span><span style="color:#b44">alloc</span><span style="color:#666">(</span> <span style="color:#b44">&#34;o&#34;</span> <span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>UpdateBuilder builder <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> UpdateBuilder<span style="color:#666">(</span> PrefixMapping<span style="color:#666">.</span><span style="color:#b44">Standard</span><span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addInsert</span><span style="color:#666">(</span> subj<span style="color:#666">,</span> <span style="color:#b44">&#34;rdfs:comment&#34;</span><span style="color:#666">,</span> obj <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> subj<span style="color:#666">,</span> <span style="color:#b44">&#34;dc:title&#34;</span><span style="color:#666">,</span> obj<span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>UpdateRequest req <span style="color:#666">=</span> builder<span style="color:#666">.</span><span style="color:#b44">buildRequest</span><span style="color:#666">();</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>UpdateBuilder builder2 <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> UpdateBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span> <span style="color:#b44">&#34;dc&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;http://purl.org/dc/elements/1.1/&#34;</span><span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addDelete</span><span style="color:#666">(</span> subj<span style="color:#666">,</span> <span style="color:#b44">&#34;?p&#34;</span><span style="color:#666">,</span> obj<span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">where</span><span style="color:#666">(</span> subj<span style="color:#666">,</span> dc<span style="color:#666">:</span>creator<span style="color:#666">,</span> <span style="color:#b44">&#34;me&#34;</span><span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">appendTo</span><span style="color:#666">(</span> req <span style="color:#666">);</span>
</span></span></code></pre></div><h2 id="where-builder">Where Builder</h2>
<p>In some use cases it is desirable to create a where clause without constructing an entire query. The <code>WhereBuilder</code> is designed to fit this need. For example to construct the query:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sparql" data-lang="sparql"><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">PREFIX</span> <span style="color:#00f;font-weight:bold">rdfs</span>: <span style="color:#a0a000">&lt;http://www.w3.org/2000/01/rdf-schema#&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">PREFIX</span> <span style="color:#00f;font-weight:bold">foaf</span>: <span style="color:#a0a000">&lt;http://xmlns.com/foaf/0.1/&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">SELECT</span> <span style="color:#b8860b">?page</span> <span style="color:#b8860b">?type</span> <span style="color:#a2f;font-weight:bold">WHERE</span>
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#b8860b">?s</span> <span style="color:#00f;font-weight:bold">foaf</span>:<span style="color:#008000;font-weight:bold">page</span> <span style="color:#b8860b">?page</span> .
</span></span><span style="display:flex;"><span> { <span style="color:#b8860b">?s</span> <span style="color:#00f;font-weight:bold">rdfs</span>:<span style="color:#008000;font-weight:bold">label</span> <span style="color:#b44">&#34;Microsoft&#34;</span><span style="color:#666">@</span><span style="color:#00a000">en</span> . <span style="color:#a2f;font-weight:bold">BIND</span> (<span style="color:#b44">&#34;A&#34;</span> <span style="color:#a2f;font-weight:bold">as</span> <span style="color:#b8860b">?type</span>) }
</span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">UNION</span>
</span></span><span style="display:flex;"><span> { <span style="color:#b8860b">?s</span> <span style="color:#00f;font-weight:bold">rdfs</span>:<span style="color:#008000;font-weight:bold">label</span> <span style="color:#b44">&#34;Apple&#34;</span><span style="color:#666">@</span><span style="color:#00a000">en</span> . <span style="color:#a2f;font-weight:bold">BIND</span> (<span style="color:#b44">&#34;B&#34;</span> <span style="color:#a2f;font-weight:bold">as</span> <span style="color:#b8860b">?type</span>) }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>You could use a WhereBuilder to construct the union queries and add them to a Select or other query builder.</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>WhereBuilder whereBuilder <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> WhereBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span> <span style="color:#b44">&#34;rdfs&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;http://www.w3.org/2000/01/rdf-schema#&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> addWhere<span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;rdfs:label&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;&#39;Microsoft&#39;@en&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addBind</span><span style="color:#666">(</span> <span style="color:#b44">&#34;&#39;A&#39;&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?type&#34;</span><span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addUnion</span><span style="color:#666">(</span> <span style="color:#a2f;font-weight:bold">new</span> WhereBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span> <span style="color:#b44">&#34;rdfs&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;http://www.w3.org/2000/01/rdf-schema#&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;rdfs:label&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;&#39;Apple&#39;@en&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addBind</span><span style="color:#666">(</span> <span style="color:#b44">&#34;&#39;B&#39;&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?type&#34;</span><span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>SelectBuilder builder <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> SelectBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span> <span style="color:#b44">&#34;rdfs&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;http://www.w3.org/2000/01/rdf-schema#&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span> <span style="color:#b44">&#34;foaf&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;http://xmlns.com/foaf/0.1/&#34;</span> <span style="color:#666">);</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?page&#34;</span><span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?type&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;foaf:page&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?page&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> whereBuilder <span style="color:#666">);</span>
</span></span></code></pre></div><p>The where clauses could be built inline as:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>SelectBuilder builder <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> SelectBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addPrefixs</span><span style="color:#666">(</span> PrefixMapping<span style="color:#666">.</span><span style="color:#b44">Standard</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span> <span style="color:#b44">&#34;foaf&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;http://xmlns.com/foaf/0.1/&#34;</span> <span style="color:#666">);</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?page&#34;</span><span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?type&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;foaf:page&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?page&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#a2f;font-weight:bold">new</span> WhereBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span> <span style="color:#b44">&#34;rdfs&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;http://www.w3.org/2000/01/rdf-schema#&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;rdfs:label&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;&#39;Microsoft&#39;@en&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addBind</span><span style="color:#666">(</span> <span style="color:#b44">&#34;&#39;A&#39;&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?type&#34;</span><span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addUnion</span><span style="color:#666">(</span> <span style="color:#a2f;font-weight:bold">new</span> WhereBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span> <span style="color:#b44">&#34;rdfs&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;http://www.w3.org/2000/01/rdf-schema#&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;rdfs:label&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;&#39;Apple&#39;@en&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addBind</span><span style="color:#666">(</span> <span style="color:#b44">&#34;&#39;B&#39;&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?type&#34;</span><span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">);</span>
</span></span></code></pre></div><h2 id="template-usage">Template Usage</h2>
<p>In addition to making it easier to build valid queries the QueryBuilder has a clone method.
Using this a developer can create as &ldquo;Template&rdquo; query and add to it as necessary.</p>
<p>For example using the above query as the &ldquo;template&rdquo; with this code:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>SelectBuilder sb2 <span style="color:#666">=</span> sb<span style="color:#666">.</span><span style="color:#b44">clone</span><span style="color:#666">();</span>
</span></span><span style="display:flex;"><span>sb2<span style="color:#666">.</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span> <span style="color:#b44">&#34;foaf&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;http://xmlns.com/foaf/0.1/&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#666">?</span>s<span style="color:#666">,</span> RDF<span style="color:#666">.</span><span style="color:#b44">type</span><span style="color:#666">,</span> <span style="color:#b44">&#34;foaf:Person&#34;</span><span style="color:#666">)</span> <span style="color:#666">;</span>
</span></span></code></pre></div><p>produces</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sparql" data-lang="sparql"><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">PREFIX</span> <span style="color:#00f;font-weight:bold">foaf</span>: <span style="color:#a0a000">&lt;http://xmlns.com/foaf/0.1/&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">SELECT</span> <span style="color:#666">*</span>
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">WHERE</span>
</span></span><span style="display:flex;"><span> { <span style="color:#b8860b">?s</span> <span style="color:#b8860b">?p</span> <span style="color:#b8860b">?o</span> .
</span></span><span style="display:flex;"><span> <span style="color:#b8860b">?s</span> <span style="color:#a0a000">&lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#type&gt;</span> <span style="color:#00f;font-weight:bold">foaf</span>:<span style="color:#008000;font-weight:bold">person</span> .
</span></span><span style="display:flex;"><span> }
</span></span></code></pre></div><h2 id="prepared-statement-usage">Prepared Statement Usage</h2>
<p>The query builders have the ability to replace variables with other values. This can be</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>SelectBuilder sb <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> SelectBuilder<span style="color:#666">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addVar</span><span style="color:#666">(</span> <span style="color:#b44">&#34;*&#34;</span> <span style="color:#666">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">.</span><span style="color:#b44">addWhere</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?s&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?p&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;?o&#34;</span> <span style="color:#666">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sb<span style="color:#666">.</span><span style="color:#b44">setVar</span><span style="color:#666">(</span> Var<span style="color:#666">.</span><span style="color:#b44">alloc</span><span style="color:#666">(</span> <span style="color:#b44">&#34;?o&#34;</span> <span style="color:#666">),</span> NodeFactory<span style="color:#666">.</span><span style="color:#b44">createURI</span><span style="color:#666">(</span> <span style="color:#b44">&#34;http://xmlns.com/foaf/0.1/Person&#34;</span> <span style="color:#666">)</span> <span style="color:#666">)</span> <span style="color:#666">;</span>
</span></span><span style="display:flex;"><span>Query q <span style="color:#666">=</span> sb<span style="color:#666">.</span><span style="color:#b44">build</span><span style="color:#666">();</span>
</span></span></code></pre></div><p>produces</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sparql" data-lang="sparql"><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">SELECT</span> <span style="color:#666">*</span>
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">WHERE</span>
</span></span><span style="display:flex;"><span> { <span style="color:#b8860b">?s</span> <span style="color:#b8860b">?p</span> <span style="color:#a0a000">&lt;http://xmlns.com/foaf/0.1/Person&gt;</span> }
</span></span></code></pre></div>
</article>
<aside class="text-muted align-self-start mb-3 mb-xl-5 p-0 d-none d-xl-flex flex-column sticky-top">
<h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
<nav id="TableOfContents">
<ul>
<li><a href="#overview">Overview</a></li>
</ul>
<ul>
<li><a href="#update-builder">Update Builder</a></li>
<li><a href="#where-builder">Where Builder</a></li>
<li><a href="#template-usage">Template Usage</a></li>
<li><a href="#prepared-statement-usage">Prepared Statement Usage</a></li>
</ul>
</nav>
</aside>
</main>
</div>
</div>
</div>
<footer class="bd-footer py-4 py-md-5 mt-4 mt-lg-5 bg-body-tertiary">
<div class="container" style="font-size:80%" >
<p>
Copyright &copy; 2011&ndash;2024 The Apache Software Foundation, Licensed under the
<a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
</p>
<p>
Apache Jena, Jena, the Apache Jena project logo, Apache and the Apache feather logos are trademarks of
The Apache Software Foundation.
<br/>
<a href="https://privacy.apache.org/policies/privacy-policy-public.html"
>Apache Software Foundation Privacy Policy</a>.
</p>
</div>
</footer>
<script src="/js/popper.min.js.js" type="text/javascript"></script>
<script src="/js/bootstrap.min.js" type="text/javascript"></script>
<script src="/js/improve.js" type="text/javascript"></script>
<script type="text/javascript">
(function() {
'use strict'
const links = document.querySelectorAll(`a[href="${window.location.pathname}"]`)
if (links !== undefined && links !== null) {
for (const link of links) {
link.classList.add('active')
let parentElement = link.parentElement
let count = 0
const levelsLimit = 4
while (['UL', 'LI'].includes(parentElement.tagName) && count <= levelsLimit) {
if (parentElement.tagName === 'LI') {
parentElement.querySelector('a:first-child').classList.add('active')
}
parentElement = parentElement.parentElement
count++
}
}
}
})()
</script>
</body>
</html>