Author: buildbot
Date: Mon Nov  4 09:37:07 2013
New Revision: 885381

Log:
Staging update by buildbot for jena

Modified:
    websites/staging/jena/trunk/content/   (props changed)
    websites/staging/jena/trunk/content/documentation/query/negation.html

Propchange: websites/staging/jena/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Mon Nov  4 09:37:07 2013
@@ -1 +1 @@
-1537713
+1538538

Modified: websites/staging/jena/trunk/content/documentation/query/negation.html
==============================================================================
--- websites/staging/jena/trunk/content/documentation/query/negation.html 
(original)
+++ websites/staging/jena/trunk/content/documentation/query/negation.html Mon 
Nov  4 09:37:07 2013
@@ -127,31 +127,37 @@
        <div class="col-md-12">
        <div id="breadcrumbs"></div>
        <h1 class="title">ARQ - Negation</h1>
-  <p>Standard SPARQL 1.0 can perform negation using the idiom of
+  <h3 id="negation-by-failure-optional-bound">Negation by Failure (OPTIONAL + 
!BOUND)</h3>
+<p>Standard SPARQL 1.0 can perform negation using the idiom of
 <code>OPTIONAL</code>/<code>!BOUND</code>. It is inconvenient and can be hard 
to use as
 complexity increases. SPARQL 1.1 supports additional operators for
 negation.</p>
-<p>The <code>EXISTS</code> and <code>NOT EXISTS</code> are now legal SPARQL 
1.1 when used inside a <code>FILTER</code>, 
-they may be used as bare graph patterns only when 
<code>Syntax.syntaxARQ</code> is used</p>
 <div class="codehilite"><pre><span class="c"># Names of people who have not 
stated that they know anyone</span>
 <span class="n">PREFIX</span> <span class="n">foaf</span><span 
class="p">:</span> <span class="o">&lt;</span><span class="n">http</span><span 
class="p">:</span><span class="o">//</span><span class="n">xmlns</span><span 
class="p">.</span><span class="n">com</span><span class="o">/</span><span 
class="n">foaf</span><span class="o">/</span>0<span class="p">.</span>1<span 
class="o">/&gt;</span>
 <span class="n">SELECT</span> ?<span class="n">name</span>
-<span class="n">WHERE</span> <span class="p">{</span> ?<span 
class="n">x</span> <span class="n">foaf</span><span class="p">:</span><span 
class="n">givenName</span>  ?<span class="n">name</span> <span 
class="p">.</span>
-    <span class="n">OPTIONAL</span> <span class="p">{</span> ?<span 
class="n">x</span> <span class="n">foaf</span><span class="p">:</span><span 
class="n">knows</span> ?<span class="nb">who</span> <span class="p">}</span> 
<span class="p">.</span>
-    <span class="n">FILTER</span> <span class="p">(</span><span 
class="o">!</span><span class="n">BOUND</span><span class="p">(</span>?<span 
class="nb">who</span><span class="p">))</span>
+<span class="n">WHERE</span>
+<span class="p">{</span> 
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">givenName</span>  ?<span 
class="n">name</span> <span class="p">.</span>
+  <span class="n">OPTIONAL</span> <span class="p">{</span> ?<span 
class="n">x</span> <span class="n">foaf</span><span class="p">:</span><span 
class="n">knows</span> ?<span class="nb">who</span> <span class="p">}</span> 
<span class="p">.</span>
+  <span class="n">FILTER</span> <span class="p">(</span><span 
class="o">!</span><span class="n">BOUND</span><span class="p">(</span>?<span 
class="nb">who</span><span class="p">))</span>
 <span class="p">}</span>
 </pre></div>
 
 
+<h3 id="exists-and-not-exists">EXISTS and NOT EXISTS</h3>
+<p>The <code>EXISTS</code> and <code>NOT EXISTS</code> are now legal SPARQL 
1.1 when used inside a <code>FILTER</code>, 
+they may be used as bare graph patterns only when 
<code>Syntax.syntaxARQ</code> is used</p>
 <p>There is the <code>NOT EXISTS</code> operator which acts at the point in 
the query where it is
-written. It does not bind any variables but variables aready boudn
+written. It does not bind any variables but variables aready bound
 in the query will have their bound value.</p>
 <div class="codehilite"><pre><span class="c"># Names of people who have not 
stated that they know anyone</span>
 <span class="n">PREFIX</span> <span class="n">foaf</span><span 
class="p">:</span> <span class="o">&lt;</span><span class="n">http</span><span 
class="p">:</span><span class="o">//</span><span class="n">xmlns</span><span 
class="p">.</span><span class="n">com</span><span class="o">/</span><span 
class="n">foaf</span><span class="o">/</span>0<span class="p">.</span>1<span 
class="o">/&gt;</span>
 <span class="n">SELECT</span> ?<span class="n">name</span>
-<span class="n">WHERE</span> <span class="p">{</span> ?<span 
class="n">x</span> <span class="n">foaf</span><span class="p">:</span><span 
class="n">givenName</span> ?<span class="n">name</span> <span class="p">.</span>
-        <span class="n">FILTER</span> <span class="n">NOT</span> <span 
class="n">EXISTS</span> <span class="p">{</span> ?<span class="n">x</span> 
<span class="n">foaf</span><span class="p">:</span><span class="n">knows</span> 
?<span class="nb">who</span> <span class="p">}</span>
-      <span class="p">}</span>
+<span class="n">WHERE</span> 
+<span class="p">{</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">givenName</span> ?<span class="n">name</span> 
<span class="p">.</span>
+  <span class="n">FILTER</span> <span class="n">NOT</span> <span 
class="n">EXISTS</span> <span class="p">{</span> ?<span class="n">x</span> 
<span class="n">foaf</span><span class="p">:</span><span class="n">knows</span> 
?<span class="nb">who</span> <span class="p">}</span>
+<span class="p">}</span>
 </pre></div>
 
 
@@ -159,9 +165,11 @@ in the query will have their bound value
 <div class="codehilite"><pre><span class="c"># Names of people where it is 
stated that they know at least one other person.</span>
 <span class="n">PREFIX</span> <span class="n">foaf</span><span 
class="p">:</span> <span class="o">&lt;</span><span class="n">http</span><span 
class="p">:</span><span class="o">//</span><span class="n">xmlns</span><span 
class="p">.</span><span class="n">com</span><span class="o">/</span><span 
class="n">foaf</span><span class="o">/</span>0<span class="p">.</span>1<span 
class="o">/&gt;</span>
 <span class="n">SELECT</span> ?<span class="n">name</span>
-<span class="n">WHERE</span> <span class="p">{</span> ?<span 
class="n">x</span> <span class="n">foaf</span><span class="p">:</span><span 
class="n">givenName</span> ?<span class="n">name</span> <span class="p">.</span>
-        <span class="n">FILTER</span> <span class="n">EXISTS</span> <span 
class="p">{</span> ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="nb">who</span> 
<span class="p">.</span> <span class="n">FILTER</span><span 
class="p">(</span>?<span class="nb">who</span> <span class="o">!=</span> ?<span 
class="n">x</span><span class="p">)</span> <span class="p">}</span>
-      <span class="p">}</span>
+<span class="n">WHERE</span> 
+<span class="p">{</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">givenName</span> ?<span class="n">name</span> 
<span class="p">.</span>
+  <span class="n">FILTER</span> <span class="n">EXISTS</span> <span 
class="p">{</span> ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="nb">who</span> 
<span class="p">.</span> <span class="n">FILTER</span><span 
class="p">(</span>?<span class="nb">who</span> <span class="o">!=</span> ?<span 
class="n">x</span><span class="p">)</span> <span class="p">}</span>
+<span class="p">}</span>
 </pre></div>
 
 
@@ -174,19 +182,23 @@ graph pattern in which they occur.</p>
 <div class="codehilite"><pre><span class="c"># Names of people who have not 
stated that they know anyone</span>
 <span class="n">PREFIX</span> <span class="n">foaf</span><span 
class="p">:</span> <span class="o">&lt;</span><span class="n">http</span><span 
class="p">:</span><span class="o">//</span><span class="n">xmlns</span><span 
class="p">.</span><span class="n">com</span><span class="o">/</span><span 
class="n">foaf</span><span class="o">/</span>0<span class="p">.</span>1<span 
class="o">/&gt;</span>
 <span class="n">SELECT</span> ?<span class="n">name</span>
-<span class="n">WHERE</span> <span class="p">{</span> ?<span 
class="n">x</span> <span class="n">foaf</span><span class="p">:</span><span 
class="n">givenName</span> ?<span class="n">name</span> <span class="p">.</span>
-    <span class="n">FILTER</span> <span class="p">(</span><span 
class="n">NOT</span> <span class="n">EXISTS</span> <span class="p">{</span> 
?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="nb">who</span> 
<span class="p">})</span>
-      <span class="p">}</span>
+<span class="n">WHERE</span> 
+<span class="p">{</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">givenName</span> ?<span class="n">name</span> 
<span class="p">.</span>
+  <span class="n">FILTER</span> <span class="p">(</span><span 
class="n">NOT</span> <span class="n">EXISTS</span> <span class="p">{</span> 
?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="nb">who</span> 
<span class="p">})</span>
+ <span class="p">}</span>
 </pre></div>
 
 
 <p>A note of caution:</p>
 <div class="codehilite"><pre><span class="n">PREFIX</span> <span 
class="n">foaf</span><span class="p">:</span> <span class="o">&lt;</span><span 
class="n">http</span><span class="p">:</span><span class="o">//</span><span 
class="n">xmlns</span><span class="p">.</span><span class="n">com</span><span 
class="o">/</span><span class="n">foaf</span><span class="o">/</span>0<span 
class="p">.</span>1<span class="o">/&gt;</span>
 <span class="n">SELECT</span> ?<span class="n">name</span>
-<span class="n">WHERE</span> <span class="p">{</span> ?<span 
class="n">x</span> <span class="n">foaf</span><span class="p">:</span><span 
class="n">givenName</span> ?<span class="n">name</span> <span class="p">.</span>
-    <span class="n">FILTER</span> <span class="p">(</span><span 
class="n">NOT</span> <span class="n">EXISTS</span> <span class="p">{</span> 
?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="n">y</span> <span 
class="p">})</span>
-        ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="n">who</span>
-      <span class="p">}</span>
+<span class="n">WHERE</span> 
+<span class="p">{</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">givenName</span> ?<span class="n">name</span> 
<span class="p">.</span>
+  <span class="n">FILTER</span> <span class="p">(</span><span 
class="n">NOT</span> <span class="n">EXISTS</span> <span class="p">{</span> 
?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="n">y</span> <span 
class="p">})</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="n">who</span>
+<span class="p">}</span>
 </pre></div>
 
 
@@ -194,16 +206,53 @@ graph pattern in which they occur.</p>
 not break it in two):</p>
 <div class="codehilite"><pre><span class="n">PREFIX</span> <span 
class="n">foaf</span><span class="p">:</span> <span class="o">&lt;</span><span 
class="n">http</span><span class="p">:</span><span class="o">//</span><span 
class="n">xmlns</span><span class="p">.</span><span class="n">com</span><span 
class="o">/</span><span class="n">foaf</span><span class="o">/</span>0<span 
class="p">.</span>1<span class="o">/&gt;</span>
 <span class="n">SELECT</span> ?<span class="n">name</span>
-<span class="n">WHERE</span> <span class="p">{</span> ?<span 
class="n">x</span> <span class="n">foaf</span><span class="p">:</span><span 
class="n">givenName</span> ?<span class="n">name</span> <span class="p">.</span>
-        ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="n">y</span> <span 
class="p">.</span>
-    <span class="n">FILTER</span> <span class="p">(</span><span 
class="n">NOT</span> <span class="n">EXISTS</span> <span class="p">{</span> 
?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="n">who</span> 
<span class="p">})</span>
-      <span class="p">}</span>
+<span class="n">WHERE</span> 
+<span class="p">{</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">givenName</span> ?<span class="n">name</span> 
<span class="p">.</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="n">y</span> <span 
class="p">.</span>
+  <span class="n">FILTER</span> <span class="p">(</span><span 
class="n">NOT</span> <span class="n">EXISTS</span> <span class="p">{</span> 
?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="n">who</span> 
<span class="p">})</span>
+<span class="p">}</span>
 </pre></div>
 
 
 <p>and the <code>FILTER</code> will always be false (<code>{ ?x foaf:knows ?y 
}</code> must
-have matched to get to this point in the query and useing ?who
+have matched to get to this point in the query and using <code>?who</code>
 instead makes no difference).</p>
+<h3 id="minus">MINUS</h3>
+<p>SPARQL 1.1 also provides a <code>MINUS</code> keyword which is broadly 
similar to
+<code>NOT EXISTS</code> though does have some key differences as explained in 
the <a 
href="http://www.w3.org/TR/sparql11-query/#neg-notexists-minus";>specification</a>:</p>
+<div class="codehilite"><pre><span class="n">PREFIX</span> <span 
class="n">foaf</span><span class="p">:</span> <span class="o">&lt;</span><span 
class="n">http</span><span class="p">:</span><span class="o">//</span><span 
class="n">xmlns</span><span class="p">.</span><span class="n">com</span><span 
class="o">/</span><span class="n">foaf</span><span class="o">/</span>0<span 
class="p">.</span>1<span class="o">/&gt;</span>
+<span class="n">SELECT</span> ?<span class="n">name</span>
+<span class="n">WHERE</span>
+<span class="p">{</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">givenName</span> ?<span class="n">name</span> 
<span class="p">.</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="n">y</span> <span 
class="p">.</span>
+  <span class="n">MINUS</span> <span class="p">{</span> ?<span 
class="n">x</span> <span class="n">foaf</span><span class="p">:</span><span 
class="n">knows</span> <span class="o">&lt;</span><span 
class="n">http</span><span class="p">:</span><span class="o">//</span><span 
class="n">example</span><span class="p">.</span><span class="n">org</span><span 
class="o">/</span><span class="n">A</span><span class="o">&gt;</span> <span 
class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>Here we subtract any solutions where <code>?x</code> also knows 
<code>http://example.org/A</code></p>
+<p>One of the key differences between <code>MINUS</code> and <code>NOT 
EXISTS</code> is that it is a child graph pattern and so breaks 
+the graph pattern and so the result of the query can change depending where 
the <code>MINUS</code> is placed.  This is 
+unlike the earlier <code>NOT EXISTS</code> examples where moving the position 
of the <code>FILTER</code> resulted
+in equivalent queries.</p>
+<h3 id="not-in">NOT IN</h3>
+<p>SPARQL 1.1 also has a simpler form of negation for when you simply 
+need to restrict a variable to not being in a given set of values, this is the
+<code>NOT IN</code> function:</p>
+<div class="codehilite"><pre><span class="n">PREFIX</span> <span 
class="n">foaf</span><span class="p">:</span> <span class="o">&lt;</span><span 
class="n">http</span><span class="p">:</span><span class="o">//</span><span 
class="n">xmlns</span><span class="p">.</span><span class="n">com</span><span 
class="o">/</span><span class="n">foaf</span><span class="o">/</span>0<span 
class="p">.</span>1<span class="o">/&gt;</span>
+<span class="n">SELECT</span> ?<span class="n">name</span>
+<span class="n">WHERE</span>
+<span class="p">{</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">givenName</span> ?<span class="n">name</span> 
<span class="p">.</span>
+  ?<span class="n">x</span> <span class="n">foaf</span><span 
class="p">:</span><span class="n">knows</span> ?<span class="n">y</span> <span 
class="p">.</span>
+  <span class="n">FILTER</span><span class="p">(</span>?<span 
class="n">y</span> <span class="n">NOT</span> <span class="n">IN</span> <span 
class="p">(</span><span class="o">&lt;</span><span class="n">http</span><span 
class="p">:</span><span class="o">//</span><span class="n">example</span><span 
class="p">.</span><span class="n">org</span><span class="o">/</span><span 
class="n">A</span><span class="o">&gt;</span><span class="p">,</span> <span 
class="o">&lt;</span><span class="n">http</span><span class="p">:</span><span 
class="o">//</span><span class="n">example</span><span class="p">.</span><span 
class="n">org</span><span class="o">/</span><span class="n">B</span><span 
class="o">&gt;</span><span class="p">))</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>This would filter out matches where the value of <code>?y</code> is either 
<code>http://example.org/A</code> or <code>http://example.org/B</code> </p>
 <p><a href="index.html">ARQ documentation index</a></p>
   </div>
 </div>


Reply via email to