blob: fb7f4b2a8c89abd182e30a979400467408614ff6 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Apache Jena - SPARQL Tutorial - Filters</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-extension.css" rel="stylesheet" type="text/css">
<link href="/css/jena.css" rel="stylesheet" type="text/css">
<link rel="shortcut icon" href="/images/favicon.ico" />
<script src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
crossorigin="anonymous"></script>
<script src="/js/jena-navigation.js" type="text/javascript"></script>
<script src="/js/bootstrap.min.js" type="text/javascript"></script>
<script src="/js/improve.js" type="text/javascript"></script>
</head>
<body>
<nav class="navbar navbar-default" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></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 navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li id="homepage"><a href="/index.html"><span class="glyphicon glyphicon-home"></span> Home</a></li>
<li id="download"><a href="/download/index.cgi"><span class="glyphicon glyphicon-download-alt"></span> Download</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-book"></span> Learn <b class="caret"></b></a>
<ul class="dropdown-menu">
<li class="dropdown-header">Tutorials</li>
<li><a href="/tutorials/index.html">Overview</a></li>
<li><a href="/documentation/fuseki2/index.html">Fuseki Triplestore</a></li>
<li><a href="/documentation/notes/index.html">How-To's</a></li>
<li><a href="/documentation/query/manipulating_sparql_using_arq.html">Manipulating SPARQL using ARQ</a></li>
<li><a href="/tutorials/rdf_api.html">RDF core API tutorial</a></li>
<li><a href="/tutorials/sparql.html">SPARQL tutorial</a></li>
<li><a href="/tutorials/using_jena_with_eclipse.html">Using Jena with Eclipse</a></li>
<li class="divider"></li>
<li class="dropdown-header">References</li>
<li><a href="/documentation/index.html">Overview</a></li>
<li><a href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
<li><a href="/documentation/assembler/index.html">Assembler</a></li>
<li><a href="/documentation/tools/index.html">Command-line tools</a></li>
<li><a href="/documentation/rdfs/">Data with RDFS Inferencing</a></li>
<li><a href="/documentation/geosparql/index.html">GeoSPARQL</a></li>
<li><a href="/documentation/inference/index.html">Inference API</a></li>
<li><a href="/documentation/javadoc.html">Javadoc</a></li>
<li><a href="/documentation/ontology/">Ontology API</a></li>
<li><a href="/documentation/permissions/index.html">Permissions</a></li>
<li><a href="/documentation/extras/querybuilder/index.html">Query Builder</a></li>
<li><a href="/documentation/rdf/index.html">RDF API</a></li>
<li><a href="/documentation/rdfconnection/">RDF Connection - SPARQL API</a></li>
<li><a href="/documentation/io/">RDF I/O</a></li>
<li><a href="/documentation/rdfstar/index.html">RDF-star</a></li>
<li><a href="/documentation/shacl/index.html">SHACL</a></li>
<li><a href="/documentation/shex/index.html">ShEx</a></li>
<li><a href="/documentation/jdbc/index.html">SPARQL over JDBC</a></li>
<li><a href="/documentation/tdb/index.html">TDB</a></li>
<li><a href="/documentation/tdb2/index.html">TDB2</a></li>
<li><a href="/documentation/query/text-query.html">Text Search</a></li>
</ul>
</li>
<li class="drop down">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-book"></span> Javadoc <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/documentation/javadoc.html">All Javadoc</a></li>
<li><a href="/documentation/javadoc/arq/">ARQ</a></li>
<li><a href="/documentation/javadoc_elephas.html">Elephas</a></li>
<li><a href="/documentation/javadoc/fuseki2/">Fuseki</a></li>
<li><a href="/documentation/javadoc/geosparql/">GeoSPARQL</a></li>
<li><a href="/documentation/javadoc/jdbc/">JDBC</a></li>
<li><a href="/documentation/javadoc/jena/">Jena Core</a></li>
<li><a href="/documentation/javadoc/permissions/">Permissions</a></li>
<li><a href="/documentation/javadoc/extras/querybuilder/">Query Builder</a></li>
<li><a href="/documentation/javadoc/shacl/">SHACL</a></li>
<li><a href="/documentation/javadoc/tdb/">TDB</a></li>
<li><a href="/documentation/javadoc/text/">Text Search</a></li>
</ul>
</li>
<li id="ask"><a href="/help_and_support/index.html"><span class="glyphicon glyphicon-question-sign"></span> Ask</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-bullhorn"></span> Get involved <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/getting_involved/index.html">Contribute</a></li>
<li><a href="/help_and_support/bugs_and_suggestions.html">Report a bug</a></li>
<li class="divider"></li>
<li class="dropdown-header">Project</li>
<li><a href="/about_jena/about.html">About Jena</a></li>
<li><a href="/about_jena/architecture.html">Architecture</a></li>
<li><a href="/about_jena/citing.html">Citing</a></li>
<li><a href="/about_jena/team.html">Project team</a></li>
<li><a href="/about_jena/contributions.html">Related projects</a></li>
<li><a href="/about_jena/roadmap.html">Roadmap</a></li>
<li class="divider"></li>
<li class="dropdown-header">ASF</li>
<li><a href="http://www.apache.org/">Apache Software Foundation</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
<li><a href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li>
<li><a href="http://www.apache.org/security/">Security</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
</ul>
</li>
<li id="edit"><a href="https://github.com/apache/jena-site/edit/main/source/tutorials/sparql_filters.md" title="Edit this page on GitHub"><span class="glyphicon glyphicon-pencil"></span> Edit this page</a></li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-12">
<div id="breadcrumbs">
<ol class="breadcrumb">
<li><a href='/tutorials'>TUTORIALS</a></li>
<li class="active">SPARQL FILTERS</li>
</ol>
</div>
<h1 class="title">SPARQL Tutorial - Filters</h1>
<p>Graph matching allows patterns in the graph to be found. This
section describes how the values in a solution can be restricted.
There are many comparisons available - we just cover two cases
here.</p>
<h2 id="string-matching">String Matching</h2>
<p>SPARQL provides an operation to test strings, based on regular
expressions.  This includes the ability to ask SQL &ldquo;LIKE&rdquo; style
tests, although the syntax of the regular expression is different
from SQL.</p>
<p>The syntax is:</p>
<pre><code>FILTER regex(?x, &quot;pattern&quot; [, &quot;flags&quot;])
</code></pre>
<p>The flags argument is optional.  The flag &ldquo;i&rdquo; means a
case-insensitive pattern match is done.</p>
<p>The example query (<a href="sparql_data/q-f1.rq">q-f1.rq</a>) finds given names with an
&ldquo;r&rdquo; or &ldquo;R&rdquo; in them.</p>
<pre><code>PREFIX vcard: &lt;http://www.w3.org/2001/vcard-rdf/3.0#&gt;
SELECT ?g
WHERE
{ ?y vcard:Given ?g .
FILTER regex(?g, &quot;r&quot;, &quot;i&quot;) }
</code></pre>
<p>with the results:</p>
<pre><code>-------------
| g |
=============
| &quot;Rebecca&quot; |
| &quot;Sarah&quot; |
-------------
</code></pre>
<p>The regular expression language is the same as the
<a href="http://www.w3.org/TR/xpath-functions/#regex-syntax">XQuery regular expression language</a>
which is codified version of that found in Perl.</p>
<h2 id="testing-values">Testing Values</h2>
<p>There are times when the application wants to filter on the value
of a variable.  In the data file <a href="sparql_data/vc-db-2.rdf">vc-db-2.rdf</a>, we
have added an extra field for age.  Age is not defined by the vCard
schema so we have created a new property for the purpose of this
tutorial.  RDF allows such mixing of different definitions of
information because URIs are unique. Note also that the <code>info:age</code>
property value is typed.</p>
<p>In this extract of the data, we show the typed value. It can also
be written plain 23.</p>
<pre><code>&lt;http://somewhere/RebeccaSmith/&gt;
info:age &quot;23&quot;^^xsd:integer ;
vCard:FN &quot;Becky Smith&quot; ;
vCard:N [ vCard:Family &quot;Smith&quot; ;
vCard:Given &quot;Rebecca&quot; ] .
</code></pre>
<p>So, a query (<a href="sparql_data/q-f2.rq">q-f2.rq</a>) to find the names of people who
are older than 24 is:</p>
<pre><code>PREFIX info: &lt;http://somewhere/peopleInfo#&gt;
SELECT ?resource
WHERE
{
?resource info:age ?age .
FILTER (?age &gt;= 24)
}
</code></pre>
<p>The arithmetic expression must be in parentheses (round brackets). 
The only solution is:</p>
<pre><code>---------------------------------
| resource |
=================================
| &lt;http://somewhere/JohnSmith/&gt; |
---------------------------------
</code></pre>
<p>Just one match, resulting in the resource URI for John Smith.
Turning this round to ask for those less than 24 also yields one
match for Rebecca Smith.  Nothing about the Jones&rsquo;s.</p>
<p>The database contains no age information about the Jones: there are
no info:age properties on these vCards so the variable <code>age</code> did
not get a value and so was not tested by the filter.</p>
<p><a href="sparql_optionals.html">Next: Optionals</a></p>
</div>
</div>
</div>
<footer class="footer">
<div class="container" style="font-size:80%" >
<p>
Copyright &copy; 2011&ndash;2022 The Apache Software Foundation, Licensed under the
<a href="http://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 type="text/javascript">
var link = $('a[href="' + this.location.pathname + '"]');
if (link != undefined)
link.parents('li,ul').addClass('active');
</script>
</body>
</html>