Author: buildbot
Date: Mon Aug 17 08:43:01 2015
New Revision: 962090

Log:
Staging update by buildbot for jena

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

Propchange: websites/staging/jena/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Mon Aug 17 08:43:01 2015
@@ -1 +1 @@
-1696214
+1696218

Modified: 
websites/staging/jena/trunk/content/documentation/query/construct-quad.html
==============================================================================
--- websites/staging/jena/trunk/content/documentation/query/construct-quad.html 
(original)
+++ websites/staging/jena/trunk/content/documentation/query/construct-quad.html 
Mon Aug 17 08:43:01 2015
@@ -162,11 +162,115 @@ result is an RDF graph formed by taking
 sequence, substituting for the variables in the graph template, and
 combining the triples into a single RDF graph by set union.  However, it
 does not directly generate quads or 
-<a href="http://www.w3.org/TR/sparql11-query/#rdfDataset";>RDF datasets</a>.  
</p>
-<p>In order to
+<a href="http://www.w3.org/TR/sparql11-query/#rdfDataset";>RDF datasets</a>.<br 
/>
+In order to
 eliminate this limitation, Jena ARQ extends the grammar of the CONSTRUCT
 query form and provides the according components, which brings more
 conveniences for the users manipulating RDF datasets with SPARQL.</p>
+<h2 id="query-syntax">Query Syntax<a class="headerlink" href="#query-syntax" 
title="Permanent link">&para;</a></h2>
+<p>A CONSTRUST template of the SPARQL 1.1 query String is
+<a href="http://www.w3.org/TR/turtle/";>Turtle</a> format with possible 
variables.  The
+syntax for this extension follows that style in ARQ, using
+<a href="http://www.w3.org/TR/trig/";>TriG</a> plus variables.  Just like 
SPARQL 1.1,
+there're 2 forms for ARQ Contruct Quad query String:</p>
+<h3 id="complete-form">Complete Form<a class="headerlink" 
href="#complete-form" title="Permanent link">&para;</a></h3>
+<div class="codehilite"><pre><span class="n">CONSTRUCT</span> <span 
class="p">{</span>
+    # <span class="n">Named</span> <span class="n">graph</span>
+    <span class="n">GRAPH</span> <span class="p">:</span><span 
class="n">g</span> <span class="p">{</span> ?<span class="n">s</span> <span 
class="p">:</span><span class="n">p</span> ?<span class="n">o</span> <span 
class="p">}</span>
+    # <span class="n">Default</span> <span class="n">graph</span>
+    <span class="p">{</span> ?<span class="n">s</span> <span 
class="p">:</span><span class="n">p</span> ?<span class="n">o</span> <span 
class="p">}</span>
+    # <span class="n">Named</span> <span class="n">graph</span>
+    ?<span class="n">g</span> <span class="p">{</span> <span 
class="p">:</span><span class="n">s</span> ?<span class="n">p</span> <span 
class="p">:</span><span class="n">o</span> <span class="p">}</span>
+    # <span class="n">Default</span> <span class="n">graph</span>
+    <span class="p">:</span><span class="n">s</span> ?<span class="n">p</span> 
<span class="p">:</span><span class="n">o</span>
+<span class="p">}</span> <span class="n">WHERE</span> <span class="p">{</span> 
+    # <span class="n">SPARQL</span> 1<span class="p">.</span>1 <span 
class="n">WHERE</span> <span class="n">Clause</span>
+<span class="p">...</span> 
+<span class="p">}</span>
+</pre></div>
+
+
+<p>The default graphs and the named graphs can be constructed within the
+CONSTRUCT clause in the above way.  Note that, for constructing the named
+graph, the token of GRAPH can be optional.  The brackets of the triples to
+be constructed in the default graph can also be optional.</p>
+<h3 id="short-form">Short Form<a class="headerlink" href="#short-form" 
title="Permanent link">&para;</a></h3>
+<div class="codehilite"><pre><span class="n">CONSTRUCT</span> <span 
class="n">WHERE</span> <span class="p">{</span> 
+    # <span class="n">Basic</span> <span class="n">dataset</span> <span 
class="n">pattern</span> <span class="p">(</span><span class="n">only</span> 
<span class="n">the</span> <span class="n">default</span> <span 
class="n">graph</span> <span class="n">and</span> <span class="n">the</span> 
<span class="n">named</span> <span class="n">graphs</span><span 
class="p">)</span>
+<span class="p">...</span> 
+<span class="p">}</span>
+</pre></div>
+
+
+<p>A short form is provided for the case where the template and the pattern
+are the same and the pattern is just a basic dataset pattern (no FILTERs
+and no complex graph patterns are allowed in the short form). The keyword
+WHERE is required in the short form.</p>
+<h3 id="grammar">Grammar<a class="headerlink" href="#grammar" title="Permanent 
link">&para;</a></h3>
+<p>The normative definition of the syntax grammar of the query string is 
defined in this table:</p>
+<div class="codehilite"><pre><span class="n">ConstructQuery</span>            
<span class="o">|</span> <span class="p">::=</span> <span 
class="s">&#39;CONSTRUCT&#39;</span> <span class="p">(</span> <span 
class="n">ConstructTemplate</span> <span class="n">DatasetClause</span><span 
class="o">*</span> <span class="n">WhereClause</span> <span 
class="n">SolutionModifier</span> <span class="o">|</span> <span 
class="n">DatasetClause</span><span class="o">*</span> <span 
class="s">&#39;WHERE&#39;</span>  <span class="s">&#39;{&#39;</span> <span 
class="n">ConstructQuads</span> <span class="s">&#39;}&#39;</span> <span 
class="n">SolutionModifier</span> <span class="p">)</span>
+<span class="n">ConstructTemplate</span>         <span class="o">|</span> 
<span class="p">::=</span> <span class="s">&#39;{&#39;</span> <span 
class="n">ConstructQuads</span> <span class="s">&#39;}¡¯</span>
+<span class="s">ConstructQuads            | ::= TriplesTemplate? ( 
ConstructQuadsNotTriples &#39;</span><span class="p">.</span><span 
class="s">&#39;? TriplesTemplate? )*</span>
+<span class="s">ConstructQuadsNotTriples  | ::= ( &#39;</span><span 
class="n">GRAPH</span><span class="o">&#39;</span>  <span 
class="n">VarOrIri</span> <span class="p">)</span>?   <span 
class="s">&#39;{&#39;</span> <span class="n">TriplesTemplate</span>? <span 
class="s">&#39;}&#39;</span>
+<span class="n">TriplesTemplate</span>           <span class="o">|</span> 
<span class="p">::=</span> <span class="n">TriplesSameSubject</span> <span 
class="p">(</span> <span class="s">&#39;.&#39;</span> <span 
class="n">TriplesTemplate</span>? <span class="p">)</span>?
+</pre></div>
+
+
+<p><code>DatasetClause</code>, <code>WhereClause</code>, 
<code>SolutionModifier</code>, <code>TriplesTemplate</code>, 
<code>VarOrIri</code>,
+<code>TriplesSameSubject</code> are as for the <a 
href="http://www.w3.org/TR/sparql11-query/#grammar";>SPARQL 1.1 Grammar</a></p>
+<h2 id="programming-api">Programming API<a class="headerlink" 
href="#programming-api" title="Permanent link">&para;</a></h2>
+<p>ARQ provides 2 additional methods in QueryExecution for Construct Quad.</p>
+<div class="codehilite"><pre><span class="n">Iterator</span><span 
class="o">&lt;</span><span class="n">Quad</span><span class="o">&gt;</span> 
<span class="n">QueryExecution</span><span class="p">.</span><span 
class="n">execConstructQuads</span><span class="p">()</span> <span 
class="o">//</span> <span class="n">allow</span> <span 
class="n">duplication</span>
+<span class="n">Dataset</span> <span class="n">QueryExecution</span><span 
class="p">.</span><span class="n">execConstructDataset</span><span 
class="p">()</span> <span class="o">//</span> <span class="n">no</span> <span 
class="n">duplication</span>
+</pre></div>
+
+
+<p>One difference of the 2 methods is: 
+The method of execConstructQuads() returns an Iterator of Quad, allowing 
duplication.
+But execConstructDataset() constructs the desired Dataset object with only 
unique Quads.</p>
+<p>In order to use these methods, it's required to swtich on the query syntax
+of ARQ beforehead, when creating the Query object:</p>
+<div class="codehilite"><pre><span class="n">Query</span> <span 
class="n">query</span> <span class="p">=</span> <span 
class="n">QueryFactory</span><span class="p">.</span><span 
class="n">create</span><span class="p">(</span><span 
class="n">queryString</span><span class="p">,</span> <span 
class="n">Syntax</span><span class="p">.</span><span 
class="n">syntaxARQ</span><span class="p">);</span>
+</pre></div>
+
+
+<p>If the query is supposed to construct only triples, not quads, the triples
+will be constructed in the default graph. For example:</p>
+<div class="codehilite"><pre><span class="n">String</span> <span 
class="n">queryString</span> <span class="p">=</span> &quot;<span 
class="n">CONSTRUCT</span> <span class="p">{</span> ?<span class="n">s</span> 
?<span class="n">p</span> ?<span class="n">o</span> <span class="p">}</span> 
<span class="n">WHERE</span> <span class="p">...</span> &quot;
+<span class="p">...</span>
+<span class="o">//</span> <span class="n">The</span> <span 
class="n">graph</span> <span class="n">node</span> <span class="n">of</span> 
<span class="n">the</span> <span class="n">quads</span> <span 
class="n">are</span> <span class="n">the</span> <span class="n">default</span> 
<span class="n">graph</span> <span class="p">(</span><span class="n">ARQ</span> 
<span class="n">uses</span> <span class="o">&lt;</span><span 
class="n">urn</span><span class="p">:</span><span class="n">x</span><span 
class="o">-</span><span class="n">arq</span><span class="p">:</span><span 
class="n">DefaultGraphNode</span><span class="o">&gt;</span><span 
class="p">).</span>
+<span class="n">Iterator</span><span class="o">&lt;</span><span 
class="n">Quad</span><span class="o">&gt;</span> <span class="n">quads</span> 
<span class="p">=</span> <span class="n">qexec</span><span 
class="p">.</span><span class="n">execConstructQuads</span><span 
class="p">();</span>
+</pre></div>
+
+
+<p>If the query string stands for constructing quads while the method of
+exeConstructTriples() are called, it returns only the triples in the
+default graph of the CONSTRUCT query template. It's called a "projection"
+on the default graph. For instance:</p>
+<div class="codehilite"><pre><span class="n">String</span> <span 
class="n">queryString</span> <span class="p">=</span> &quot;<span 
class="n">CONSTRUCT</span> <span class="p">{</span> ?<span class="n">s</span> 
?<span class="n">p</span> ?<span class="n">o</span> <span class="p">.</span> 
<span class="n">GRAPH</span> ?<span class="n">g1</span> <span 
class="p">{</span> ?<span class="n">s1</span> ?<span class="n">p1</span> ?<span 
class="n">o1</span> <span class="p">}</span> <span class="p">}</span> <span 
class="n">WHERE</span> <span class="p">...</span>&quot;
+<span class="p">...</span>
+<span class="o">//</span> <span class="n">The</span> <span 
class="n">part</span> <span class="n">of</span> &quot;<span 
class="n">GRAPH</span> ?<span class="n">g1</span> <span class="p">{</span> 
?<span class="n">s1</span> ?<span class="n">p1</span> ?<span 
class="n">o1</span> <span class="p">}</span>&quot; <span class="n">will</span> 
<span class="n">be</span> <span class="n">ignored</span><span 
class="p">.</span> <span class="n">Only</span> &quot;?<span class="n">s</span> 
?<span class="n">p</span> ?<span class="n">o</span>&quot; <span 
class="n">in</span> <span class="n">the</span> <span class="n">default</span> 
<span class="n">graph</span> <span class="n">will</span> <span 
class="n">be</span> <span class="n">returned</span><span class="p">.</span>
+<span class="n">Iterator</span><span class="o">&lt;</span><span 
class="n">Triple</span><span class="o">&gt;</span> <span 
class="n">triples</span> <span class="p">=</span> <span 
class="n">qexec</span><span class="p">.</span><span 
class="n">exeConstructTriples</span><span class="p">();</span>
+</pre></div>
+
+
+<p>More examples can be found at 
jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java</p>
+<h2 id="fuseki-support">Fuseki Support<a class="headerlink" 
href="#fuseki-support" title="Permanent link">&para;</a></h2>
+<p>Jena [Fuseki] is also empowed with Construct Quad query as a built-in
+function. No more addtional configuration is required to switch it on.
+Because
+<a 
href="http://jena.apache.org/documentation/javadoc/arq/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.html";>QueryEngineHTTP</a>
+is just an implementation of QueryExcecution, there's no much difference
+for the client users to manipulate the programming API described in the
+previous sections, e.g.</p>
+<div class="codehilite"><pre><span class="n">String</span> <span 
class="n">queryString</span> <span class="p">=</span> &quot; <span 
class="n">CONSTRUCT</span> <span class="p">{</span> <span 
class="n">GRAPH</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="o">/</span><span class="n">ns</span>#<span 
class="n">g1</span><span class="o">&gt;</span> <span class="p">{</span>?<span 
class="n">s</span> ?<span class="n">p</span> ?<span class="n">o</span><span 
class="p">}</span> <span class="p">}</span> <span class="n">WHERE</span> <span 
class="p">{</span>?<span class="n">s</span> ?<span class="n">p</span> ?<span 
class="n">o</span><span class="p">}</span>&quot; <span class="p">;</span>
+<span class="n">Query</span> <span class="n">query</span> <span 
class="p">=</span> <span class="n">QueryFactory</span><span 
class="p">.</span><span class="n">create</span><span class="p">(</span><span 
class="n">queryString</span><span class="p">,</span> <span 
class="n">Syntax</span><span class="p">.</span><span 
class="n">syntaxARQ</span><span class="p">);</span>
+<span class="k">try</span> <span class="p">(</span> <span 
class="n">QueryExecution</span> <span class="n">qExec</span> <span 
class="p">=</span> <span class="n">QueryExecutionFactory</span><span 
class="p">.</span><span class="n">sparqlService</span><span 
class="p">(</span><span class="n">serviceQuery</span><span class="p">,</span> 
<span class="n">query</span><span class="p">)</span> <span class="p">)</span> 
<span class="p">{</span> <span class="o">//</span> <span 
class="n">serviceQuery</span> <span class="n">is</span> <span 
class="n">the</span> <span class="n">URL</span> <span class="n">of</span> <span 
class="n">the</span> <span class="n">remote</span> <span 
class="n">service</span>
+    <span class="n">Iterator</span><span class="o">&lt;</span><span 
class="n">Quad</span><span class="o">&gt;</span> <span class="n">result</span> 
<span class="p">=</span> <span class="n">qExec</span><span 
class="p">.</span><span class="n">execConstructQuads</span><span 
class="p">();</span>
+<span class="p">...</span>
+<span class="p">}</span>
+<span class="p">...</span>
+</pre></div>
   </div>
 </div>
 


Reply via email to