You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by gi...@apache.org on 2021/08/06 21:11:22 UTC

[jena-site] branch asf-staging updated: Staged site from sparql-apis (28ffae4ab41f60a59ef8b6432d5a31aeb56f8c05)

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/jena-site.git


The following commit(s) were added to refs/heads/asf-staging by this push:
     new 851dabb  Staged site from sparql-apis (28ffae4ab41f60a59ef8b6432d5a31aeb56f8c05)
851dabb is described below

commit 851dabbbf926fa2c9d2ca53f3bfb1dfec9c5fbbb
Author: jenkins <bu...@apache.org>
AuthorDate: Fri Aug 6 21:11:19 2021 +0000

    Staged site from sparql-apis (28ffae4ab41f60a59ef8b6432d5a31aeb56f8c05)
---
 .../documentation/geosparql/geosparql-fuseki.html  |  40 +-
 content/documentation/index.html                   |   4 +-
 content/documentation/index.xml                    |  44 +-
 content/documentation/shacl/index.html             |  18 +-
 content/documentation/sparql-apis/index.html       | 522 +++++++++++++++++++++
 content/index.xml                                  |  44 +-
 content/sitemap.xml                                |  21 +-
 7 files changed, 631 insertions(+), 62 deletions(-)

diff --git a/content/documentation/geosparql/geosparql-fuseki.html b/content/documentation/geosparql/geosparql-fuseki.html
index 357ef13..68df1e8 100644
--- a/content/documentation/geosparql/geosparql-fuseki.html
+++ b/content/documentation/geosparql/geosparql-fuseki.html
@@ -179,18 +179,38 @@
             
 	<p>This application provides a HTTP server compliant with the GeoSPARQL standard.
 It uses the embedded server Fuseki and provides additional parameters for dataset loading.</p>
-<p>The project uses the GeoSPARQL implementation from the <a href="index">GeoSPARQL Jena project</a>.
-Currently, there is no GUI interface as provided in the Fuseki distribution.</p>
+<p>The project uses the GeoSPARQL implementation from the <a href="index">GeoSPARQL Jena module</a>, which includes a range of functions in addition to those from the GeoSPARQL standard.</p>
+<p>Currently, <strong>there is no GUI interface</strong> as provided in the Fuseki distribution.</p>
+<p>The intended usage is to specify a TDB folder (either TDB1 or TDB2, created if required) for persistent storage of the dataset. File loading, inferencing and data conversion operations can also be specified to load and manipulate data into the dataset. When the server is restarted these conversion operations are not required again (as they have been stored in the dataset) unless there are relevant changes. The TDB dataset can also be prepared and manipulated programatically using the  [...]
+<p>Updates can be made to the dataset while the Fuseki server is running. However, these changes will not be applied to inferencing and spatial indexes until the server restarts (any default or specified spatial index file must not exists to trigger building). This is due to the current implementation of RDFS inferencing in Jena (and is required in any Fuseki server with inferencing) and the selected spatial index.</p>
 <p>A subset of the EPSG spatial/coordinate reference systems are included by default from the Apache SIS project (<a href="http://sis.apache.org">http://sis.apache.org</a>).
 The full EPSG dataset is not distributed due to the EPSG terms of use being incompatible with the Apache Licence.
 Several options are available to include the EPSG dataset by setting the <code>SIS_DATA</code> environment variable (<a href="http://sis.apache.org/epsg.html)">http://sis.apache.org/epsg.html)</a>.</p>
-<p>It is expected that at least one Geometry Literal or Geo Predicate is present in a dataset.
+<p>It is expected that at least one Geometry Literal or Geo Predicate is present in a dataset (otherwise a standard Fuseki server can be used).
 A spatial index is created and new data cannot be added to the index once built.
 The spatial index can optionally be stored for future usage and needs to removed from a TDB folder if the index is to rebuilt.</p>
+<h2 id="clarifications-on-geosparql">Clarifications on GeoSPARQL</h2>
+<h3 id="geographic-markup-language-gml">Geographic Markup Language (GML)</h3>
+<p>GeoSPARQL refers to the Geographic Markup Language (GML) as one format for <code>GeometryLiterals</code>. This does not mean that GML is part of the GeoSPARQL standard. Instead a subset of geometry encodings from the GML standards are permitted (specifically the <code>GML 2.0 Simple Features Profile (10-100r3)</code> is supported by GeoSPARQL Jena). The expected encoding of data is in RDF triples and can be loaded from any RDF file format supported by Apache Jena. Conversion of GML to [...]
+<h3 id="geo-predicates-latlon">Geo Predicates Lat/Lon</h3>
+<p>Historically, geopsatial data has frequently been encoded as Latitude/Longitude coordinates in the WGS84 coordinate reference system. The GeoSPARQL standard specifically chooses not to adopt this approach and instead uses the more versatile <code>GeomtryLiteral</code>, which permits multiple encoding formats that support multiple coordinate reference systems and geometry shapes. Therefore, Lat/Lon Geo Predicates are not part of the GeoSPARQL standard. However, GeoSPARQL Jena provides  [...]
+<ul>
+<li>
+<ol>
+<li>Conversion of Geo Predicates to the GeoSPARQL data structure (encoding the Lat/Lon as a Point geometry).</li>
+</ol>
+</li>
+<li>
+<ol start="2">
+<li>Spatial extension which provides property and filter functions accepting Lat/Lon arguments.</li>
+</ol>
+</li>
+</ul>
+<p>The Spatial extension functions (documented in the <a href="index">GeoSPARQL Jena module</a>) support triples in either GeoSPARQL data structure or Geo Predicates. Therefore, converting a dataset to GeoSPARQL will not lose functionality. By converting to the GeoSPARQL data structure, datasets can include a broader range of geospatial data.</p>
 <h2 id="getting-started">Getting Started</h2>
 <p>GeoSPARQL Fuseki can be accessed as an embedded server using Maven etc. from Maven Central or run from the command line.
 SPARQL queries directly on Jena Datasets and Models can be done using
-the <a href="index">GeoSPARQL Jena project</a>.</p>
+the <a href="index">GeoSPARQL Jena module</a>.</p>
 <pre><code>&lt;dependency&gt;
   &lt;groupId&gt;org.apache.jena&lt;/groupId&gt;
   &lt;artifactId&gt;fuseki-geosparql&lt;/artifactId&gt;
@@ -293,7 +313,7 @@ Release v1.0.6 and earlier use the form &ldquo;&ndash;option true&rdquo;.</p>
 <h3 id="5-tdb-folder">5) TDB folder</h3>
 <pre><code>--tdb, -t
 </code></pre>
-<p>An existing or new TDB folder used for the dataset. Default set to memory dataset.
+<p>An existing or new TDB folder used to persist the dataset. Default set to memory dataset.
 If accessing a dataset for the first time with GeoSPARQL then consider the <code>--inference</code>, <code>--default_geometry</code> and <code>--validate</code> options. These operations may add additional statements to the dataset. TDB1 Dataset will be used by default, use <code>-t &lt;folder_path&gt; -t2</code> options for TDB2 Dataset.</p>
 <h3 id="6-load-rdf-file-into-dataset">6) Load RDF file into dataset</h3>
 <pre><code>--rdf_file, -rf
@@ -301,6 +321,7 @@ If accessing a dataset for the first time with GeoSPARQL then consider the <code
 <p>Comma separated list of [RDF file path#graph name&amp;RDF format] to load into dataset. Graph name is optional and will use default graph. RDF format is optional (default: ttl) or select from one of the following: json-ld, json-rdf, nt, nq, thrift, trig, trix, ttl, ttl-pretty, xml, xml-plain, xml-pretty.
 e.g. <code>test.rdf#test&amp;xml,test2.rdf</code> will load <em>test.rdf</em> file into <em>test</em> graph as <em>RDF/XML</em> and <em>test2.rdf</em> into <em>default</em> graph as <em>TTL</em>.</p>
 <p>Consider the <code>--inference</code>, <code>--default_geometry</code> and <code>--validate</code> options. These operations may add additional statements to the dataset.</p>
+<p>The combination of specifying <code>-t</code> TDB folder and <code>-rf</code> loading RDF file will store the triples in the persistent TDB dataset. Therefore, loading the RDF file would only be required once.</p>
 <h3 id="7-load-tabular-file-into-dataset">7) Load Tabular file into dataset</h3>
 <pre><code>--tabular_file, -tf
 </code></pre>
@@ -308,14 +329,17 @@ e.g. <code>test.rdf#test&amp;xml,test2.rdf</code> will load <em>test.rdf</em> fi
 e.g. <code>test.rdf#test|TAB,test2.rdf</code> will load <em>test.rdf</em> file into <em>test</em> graph as <em>TAB</em> delimited and <em>test2.rdf</em> into <em>default</em> graph as <em>COMMA</em> delimited.</p>
 <p>See RDF Tables project (<a href="https://github.com/galbiston/rdf-tables">https://github.com/galbiston/rdf-tables</a>) for more details on tabular format.</p>
 <p>Consider the <code>--inference</code>, <code>--default_geometry</code> and <code>--validate</code> options. These operations may add additional statements to the dataset.</p>
+<p>The combination of specifying <code>-t</code> TDB folder and <code>-tf</code> loading tabular file will store the triples in the persistent TDB dataset. Therefore, loading the tabular file would only be required once.</p>
 <h3 id="8-geosparql-rdfs-inference">8) GeoSPARQL RDFS inference</h3>
 <pre><code>--inference, -i
 </code></pre>
 <p>Enable GeoSPARQL RDFS schema and inferencing (class and property hierarchy). Inferences will be applied to the dataset. Updates to dataset may require server restart. Default: false</p>
+<p>The combination of specifying <code>-t</code> TDB folder and <code>-i</code> GeoSPARQL RDFS inference will store the triples in the persistent TDB dataset. Therefore, the GeoSPARL RDFS inference option would only be required when there is a change to the dataset.</p>
 <h3 id="9-apply-hasdefaultgeometry">9) Apply hasDefaultGeometry</h3>
 <pre><code>--default_geometry, -dg
 </code></pre>
 <p>Apply hasDefaultGeometry to single Feature hasGeometry Geometry statements. Additional properties will be added to the dataset. Default: false</p>
+<p>The combination of specifying <code>-t</code> TDB folder and <code>-dg</code> apply hasDefaultGeometry will modify the triples in the persistent TDB dataset. Therefore, applying hasDefaultGeometry would only be required when there is a change to the dataset.</p>
 <h3 id="10-validate-geometry-literals">10) Validate Geometry Literals</h3>
 <pre><code>--validate, -v
 </code></pre>
@@ -324,10 +348,12 @@ e.g. <code>test.rdf#test|TAB,test2.rdf</code> will load <em>test.rdf</em> file i
 <pre><code>--convert_geo, -c
 </code></pre>
 <p>Convert Geo predicates in the data to Geometry with WKT WGS84 Point GeometryLiteral. Default: false</p>
+<p>The combination of specifying <code>-t</code> TDB folder and <code>-c</code> convert Geo predicates will modify the triples in the persistent TDB dataset. Therefore, converting the Geo predicates would only be required once.</p>
 <h3 id="12--remove-geo-predicates">12)  Remove Geo predicates</h3>
 <pre><code>--remove_geo, -rg
 </code></pre>
-<p>Remove Geo predicates in the data after combining to Geometry.</p>
+<p>Remove Geo predicates in the data after combining to Geometry. Default: false</p>
+<p>The combination of specifying <code>-t</code> TDB folder and <code>-rg</code> remove Geo predicates will modify the triples in the persistent TDB dataset. Therefore, removing the Geo predicates would only be required once.</p>
 <h3 id="13-query-rewrite-enabled">13) Query Rewrite enabled</h3>
 <pre><code>--rewrite, -r
 </code></pre>
@@ -348,7 +374,7 @@ See <a href="index">GeoSPARQL Jena project</a> for more details.</p>
 <h3 id="17-spatial-index-file">17) Spatial Index file</h3>
 <pre><code>--spatial_index, -si
 </code></pre>
-<p>File to load or store the spatial index. Default to &ldquo;spatial.index&rdquo; in TDB folder if using TDB and not set. Otherwise spatial index is not stored.</p>
+<p>File to load or store the spatial index. Default to &ldquo;spatial.index&rdquo; in TDB folder if using TDB option and this option is not set. Otherwise spatial index is not stored and rebuilt at start up. The spatial index file must not exist for the index to be built (e.g. following changes to the dataset).</p>
 <h3 id="18-properties-file">18) Properties File</h3>
 <p>Supply the above parameters as a file:</p>
 <pre><code>$ java Main @/tmp/parameters
diff --git a/content/documentation/index.html b/content/documentation/index.html
index 34927e6..464a872 100644
--- a/content/documentation/index.html
+++ b/content/documentation/index.html
@@ -3,7 +3,7 @@
 <head>
     
 
-    <title>Apache Jena - Jena documentation overview</title>
+    <title>Apache Jena - Apache Jena documentation overview</title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
@@ -162,7 +162,7 @@
 
                 
             </div>
-            <h1 class="title">Jena documentation overview</h1>
+            <h1 class="title">Apache Jena documentation overview</h1>
             
 	<p>This section contains detailed information about the various Jena
 sub-systems, aimed at developers using Jena. For more general introductions,
diff --git a/content/documentation/index.xml b/content/documentation/index.xml
index 7523046..30cfc09 100644
--- a/content/documentation/index.xml
+++ b/content/documentation/index.xml
@@ -33,6 +33,16 @@ To do this you will need a Fuseki installation, the Permissions Packages and a S
     </item>
     
     <item>
+      <title>Apache Jena documentation overview</title>
+      <link>https://jena.apache.org/documentation/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      
+      <guid>https://jena.apache.org/documentation/</guid>
+      <description>This section contains detailed information about the various Jena sub-systems, aimed at developers using Jena. For more general introductions, please refer to the Getting started and Tutorial sections.
+Documentation index  The RDF API - the core RDF API in Jena SPARQL - querying and updating RDF models using the SPARQL standards Fuseki - SPARQL server which can present RDF data and answer SPARQL queries over HTTP I/O - reading and writing RDF data RDF Connection - a SPARQL API for local datasets and remote services Assembler - describing recipes for constructing Jena models declaratively using RDF Inference - using the Jena rules engine and other inference algorithms to derive conseque [...]
+    </item>
+    
+    <item>
       <title>Apache Jena Elephas</title>
       <link>https://jena.apache.org/documentation/hadoop/</link>
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -147,9 +157,8 @@ The sequence from core to TDB should be executed before application components.
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
       
       <guid>https://jena.apache.org/documentation/shacl/</guid>
-      <description>jena-shacl is an implementation of the W3C Shapes Constraint Language (SHACL). It implements SHACL Core and SHACL SPARQL Constraints.
-In addition, it provides:
- SHACL Compact Syntax SPARQL-based targets  Command line The command shacl introduces shacl operations; it takes a sub-command argument.
+      <description>jena-shacl is an implementation of the W3C Shapes Constraint Language (SHACL). It implements SHACL Core and SHACL SPARQL Constraints. It also provides a reader and writer for SHACL Compact Syntax.
+Command line The command shacl introduces shacl operations; it takes a sub-command argument.
 To validate:
 shacl validate --shapes SHAPES.ttl --data DATA.ttl shacl v -s SHAPES.ttl -d DATA.ttl The shapes and data files can be the same; the --shapes is optional and defaults to the same as --data.</description>
     </item>
@@ -167,6 +176,20 @@ Not currently supported:
     </item>
     
     <item>
+      <title>Apache Jena SPARQL APIs</title>
+      <link>https://jena.apache.org/documentation/sparql-apis/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      
+      <guid>https://jena.apache.org/documentation/sparql-apis/</guid>
+      <description>TOC
+Overview The SPARQL specifications provide query, update and the graph store protocol (GSP).
+Jena provides a single interface, RDFConnection for working with local and remote RDF data using these protocols in a unified way for local and remote data.
+HTTP Authentication is provided for remote operations.
+Alternatively, applications can also use the various execution engines through QueryExecution, UpdateExecution and ModelStore.
+All the main implementations work at &amp;ldquo;Graph SPI&amp;rdquo; (GPI) level and an application may wish to work with this lower level interface that implements generalized RDF (i.</description>
+    </item>
+    
+    <item>
       <title>ARQ - A SPARQL Processor for Jena</title>
       <link>https://jena.apache.org/documentation/query/</link>
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -835,8 +858,9 @@ The relevant SPARQL standards are:
       
       <guid>https://jena.apache.org/documentation/geosparql/geosparql-fuseki.html</guid>
       <description>This application provides a HTTP server compliant with the GeoSPARQL standard. It uses the embedded server Fuseki and provides additional parameters for dataset loading.
-The project uses the GeoSPARQL implementation from the GeoSPARQL Jena project. Currently, there is no GUI interface as provided in the Fuseki distribution.
-A subset of the EPSG spatial/coordinate reference systems are included by default from the Apache SIS project (http://sis.apache.org). The full EPSG dataset is not distributed due to the EPSG terms of use being incompatible with the Apache Licence.</description>
+The project uses the GeoSPARQL implementation from the GeoSPARQL Jena module, which includes a range of functions in addition to those from the GeoSPARQL standard.
+Currently, there is no GUI interface as provided in the Fuseki distribution.
+The intended usage is to specify a TDB folder (either TDB1 or TDB2, created if required) for persistent storage of the dataset.</description>
     </item>
     
     <item>
@@ -893,16 +917,6 @@ What is an Assembler specification? An Assembler specification is an RDF descrip
     </item>
     
     <item>
-      <title>Jena documentation overview</title>
-      <link>https://jena.apache.org/documentation/</link>
-      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-      
-      <guid>https://jena.apache.org/documentation/</guid>
-      <description>This section contains detailed information about the various Jena sub-systems, aimed at developers using Jena. For more general introductions, please refer to the Getting started and Tutorial sections.
-Documentation index  The RDF API - the core RDF API in Jena SPARQL - querying and updating RDF models using the SPARQL standards Fuseki - SPARQL server which can present RDF data and answer SPARQL queries over HTTP I/O - reading and writing RDF data RDF Connection - a SPARQL API for local datasets and remote services Assembler - describing recipes for constructing Jena models declaratively using RDF Inference - using the Jena rules engine and other inference algorithms to derive conseque [...]
-    </item>
-    
-    <item>
       <title>Jena Extras - Extra packages for Jena development.</title>
       <link>https://jena.apache.org/documentation/extras/</link>
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
diff --git a/content/documentation/shacl/index.html b/content/documentation/shacl/index.html
index 4370d09..6c74ac8 100644
--- a/content/documentation/shacl/index.html
+++ b/content/documentation/shacl/index.html
@@ -174,12 +174,9 @@
             
 	<p><code>jena-shacl</code> is an implementation of the
 W3C <a href="https://www.w3.org/TR/shacl/">Shapes Constraint Language (SHACL)</a>.
-It implements SHACL Core and SHACL SPARQL Constraints.</p>
-<p>In addition, it provides:</p>
-<ul>
-<li><a href="https://w3c.github.io/shacl/shacl-compact-syntax/">SHACL Compact Syntax</a></li>
-<li><a href="https://w3c.github.io/shacl/shacl-af/#SPARQLTarget">SPARQL-based targets</a></li>
-</ul>
+It implements SHACL Core and SHACL SPARQL Constraints.
+It also provides a reader and writer for
+<a href="https://w3c.github.io/shacl/shacl-compact-syntax/">SHACL Compact Syntax</a>.</p>
 <h2 id="command-line">Command line</h2>
 <p>The command <code>shacl</code> introduces shacl operations; it takes a sub-command
 argument.</p>
@@ -277,15 +274,6 @@ When outputting SHACL-C, SHACL shapes not expressible in SHACL-C will cause an
 exception and data in the RDF graph that is not relevant will not be output. In
 other words, SHACL-C is a lossy format for RDF.</p>
 <p>The Jena SHACL-C writer will output any valid SHACL-C document.</p>
-<p>Extensions:</p>
-<ul>
-<li>The <code>constraint</code> grammar rule allows a shape reference to a node shape.</li>
-<li>The <code>propertyParam</code> grammar rule provides &ldquo;group&rdquo;, &ldquo;order&rdquo;, &ldquo;name&rdquo;,
-&ldquo;description&rdquo; and &ldquo;defaultValue&rdquo; to align with <code>nodeParam</code>.</li>
-<li>The <code>nodeParam</code> grammar rule supports &ldquo;targetClass&rdquo; (normally written
-with the shorthand <code>-&gt;</code>) as well as the defined
-&ldquo;targetNode&rdquo;, &ldquo;targetObjectsOf&rdquo;, &ldquo;targetSubjectsOf&rdquo;</li>
-</ul>
 
 
         </div>
diff --git a/content/documentation/sparql-apis/index.html b/content/documentation/sparql-apis/index.html
new file mode 100644
index 0000000..547698c
--- /dev/null
+++ b/content/documentation/sparql-apis/index.html
@@ -0,0 +1,522 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    
+
+    <title>Apache Jena - Apache Jena SPARQL APIs</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="/tutorials/rdf_api.html">RDF core API tutorial</a></li>
+                        <li><a href="/tutorials/sparql.html">SPARQL tutorial</a></li>
+                        <li><a href="/documentation/query/manipulating_sparql_using_arq.html">Manipulating SPARQL using ARQ</a></li>
+                        <li><a href="/tutorials/using_jena_with_eclipse.html">Using Jena with Eclipse</a></li>
+                        <li><a href="/documentation/notes/index.html">How-To's</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/javadoc.html">Javadoc</a></li>
+                        <li><a href="/documentation/rdf/index.html">RDF API</a></li>
+                        <li><a href="/documentation/io/">RDF I/O</a></li>
+                        <li><a href="/documentation/fuseki2/index.html">Fuseki</a></li>
+                        <li><a href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
+                        <li><a href="/documentation/rdfconnection/">RDF Connection - SPARQL API</a></li>
+                        <li><a href="/documentation/rdfs/">Data with RDFS Inferencing</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>
+                        <li><a href="/documentation/shacl/index.html">SHACL</a></li>
+                        <li><a href="/documentation/shex/index.html">ShEx</a></li>
+                        <li><a href="/documentation/rdfstar/index.html">RDF-star</a></li>
+                        <li><a href="/documentation/tools/index.html">Command-line tools</a></li>
+                        <li><a href="/documentation/hadoop/index.html">Elephas - tools for RDF on Hadoop</a></li>
+                        <li><a href="/documentation/jdbc/index.html">SPARQL over JDBC</a></li>
+                        <li><a href="/documentation/permissions/index.html">Permissions</a></li>
+                        <li><a href="/documentation/assembler/index.html">Assembler</a></li>
+                        <li><a href="/documentation/ontology/">Ontology API</a></li>
+                        <li><a href="/documentation/inference/index.html">Inference API</a></li>
+                        <li><a href="/documentation/extras/querybuilder/index.html">Query Builder</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/jena/">Jena Core</a></li>
+                        <li><a href="/documentation/javadoc/arq/">ARQ</a></li>
+                        <li><a href="/documentation/javadoc/tdb/">TDB</a></li>
+                        <li><a href="/documentation/javadoc/fuseki2/">Fuseki</a></li>
+                        <li><a href="/documentation/javadoc_elephas.html">Elephas</a></li>
+                        <li><a href="/documentation/javadoc/text/">Text Search</a></li>
+                        <li><a href="/documentation/javadoc/shacl/">SHACL</a></li>
+                        <li><a href="/documentation/javadoc/geosparql/">GeoSPARQL</a></li>
+                        <li><a href="/documentation/javadoc/permissions/">Permissions</a></li>
+                        <li><a href="/documentation/javadoc/jdbc/">JDBC</a></li>
+                        <li><a href="/documentation/javadoc/extras/querybuilder/">Query Builder</a></li>
+                        <li><a href="/documentation/javadoc.html">All Javadoc</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/roadmap.html">Roadmap</a></li>
+                        <li><a href="/about_jena/architecture.html">Architecture</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 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/licenses/LICENSE-2.0">License</a></li>
+                        <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+                        <li><a href="http://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
+                        <li><a href="http://www.apache.org/security/">Security</a></li>
+                    </ul>
+                </li>
+
+                <li id="edit"><a href="https://github.com/apache/jena-site/edit/main/source/documentation/sparql-apis/__index.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='/documentation'>DOCUMENTATION</a></li>
+            
+            
+        
+    
+        
+        
+            
+                <li class="active">SPARQL APIS</li>
+            
+            
+        
+    
+</ol>
+
+
+
+
+                
+            </div>
+            <h1 class="title">Apache Jena SPARQL APIs</h1>
+            
+	<p>TOC</p>
+<h2 id="overview">Overview</h2>
+<p>The SPARQL specifications provide
+<a href="https://www.w3.org/TR/sparql11-query/">query</a>,
+<a href="https://www.w3.org/TR/sparql11-update/">update</a> and the
+<a href="https://www.w3.org/TR/sparql11-http-rdf-update/">graph store protocol</a> (GSP).</p>
+<p>Jena provides a single interface, <a href="../rdfconnection"><code>RDFConnection</code></a> for working
+with local and remote RDF data using these protocols in a unified way for local
+and remote data.</p>
+<p>HTTP Authentication is provided for remote operations.</p>
+<p>Alternatively, applications can also use the various execution engines through <code>QueryExecution</code>, <code>UpdateExecution</code> and <code>ModelStore</code>.</p>
+<p>All the main implementations work at &ldquo;Graph SPI&rdquo; (GPI) level and an application may wish to work with this lower level interface that implements generalized RDF (i.e. a triple is any three nodes, including ones like variables, and subsystem extension nodes).</p>
+<p>For working with RDF data:
+| API  | GPI  |
+| &mdash;- | &mdash;- |
+| <code>Model</code>       | <code>Graph</code>        |
+| <code>Statement</code>   | <code>Triple</code>       |
+| <code>Resource</code>    | <code>Node</code>         |
+| <code>Literal</code>     | <code>Node</code>         |
+| <code>String</code>      | <code>Var</code>          |
+| <code>Dataset</code>     | <code>DatasetGraph</code> |
+|               | <code>Quad</code> |</p>
+<p>and for SPARQL,</p>
+<table>
+<thead>
+<tr>
+<th>API</th>
+<th>GPI</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code>RDFConnection</code></td>
+<td><code>RDFLink</code></td>
+</tr>
+<tr>
+<td><code>QueryExecution</code></td>
+<td><code>QueryExec</code></td>
+</tr>
+<tr>
+<td><code>UpdateExecution</code></td>
+<td><code>UpdateExec</code></td>
+</tr>
+<tr>
+<td><code>ResultSet</code></td>
+<td><code>RowSet</code></td>
+</tr>
+<tr>
+<td><code>ModelStore</code></td>
+<td><code>GSP</code></td>
+</tr>
+</tbody>
+</table>
+<p>The GPI version is the main machinery working at the storage and network level,
+and the API version is an adapter to convert to the Model API and related
+classes.</p>
+<p>This documentation describes the API classes - the GPI companion classes are the
+same style, sometimes with slightly changed naming.</p>
+<p><code>UpdateProcessor</code> is a legacy name for <code>UpdateExecution</code></p>
+<p><code>GSP</code> provides the SPARQL Graph Store Protocol, including extensions for sending
+and receiving datasets, rather than individual graphs.</p>
+<p>Both API and GPI provide builders for detailed setup, particularly for remote usage over HTTP and HTTPS where detailed control fo the HTTP requests is sometimes necessary to work with other triple stores.</p>
+<p>HTTP authentication support is provided, supporting both basic and digest authentication in challenge-response scenarios.</p>
+<p>Factory style functions for many common usage patterns are retained in <code>QueryExecutionFactory</code>, <code>UpdateExecutionFactory</code>.</p>
+<h2 id="changes-from-jena-410-to-jena-420">Changes from Jena 4.1.0 to Jena 4.2.0</h2>
+<ul>
+<li>
+<p>Execution objects have a companion builder. This is especially important of HTTP as there many configuration options that may be needed. Local use is still covered by the existing <code>QueryExecutionFactory</code> as well as the new <code>QueryExecutionBuilder</code>.</p>
+</li>
+<li>
+<p>HTTP usage provided by the JDK <code>java.net.http</code> package, with challenge-based
+authentication provides on top by Jena. <a href="#auth">See below</a>.</p>
+</li>
+<li>
+<p>Authentication support is uniformly applied to query, update GSP and SPARQL <code>SERVICE</code>.</p>
+</li>
+<li>
+<p>HTTP/2 support (Fuseki to follow unless done and tested in time).</p>
+</li>
+<li>
+<p>Remove Apache HttpClient usage</p>
+<ul>
+<li>When using this for authentication, application code changes wil be
+necessary.</li>
+</ul>
+</li>
+<li>
+<p>Deprecate modifying <code>QueryExecution</code> after it is built.
+This is still supported for local <code>QueryExecution</code>.</p>
+</li>
+<li>
+<p>Parameterization for remote queries</p>
+</li>
+<li>
+<p><code>HttpOp</code> is split into <code>HttpRDF</code> for GET/POST/PUT/DELETE of graphs and
+datasets and new <code>HttpOp</code> for packaged-up common patterns of HTTP usage.</p>
+</li>
+<li>
+<p>DatasetAccessors will be removed.</p>
+</li>
+<li>
+<p>GSP - support for dataset operations as well as graphs (also supported by Fuseki).</p>
+</li>
+</ul>
+<h2 id="ttrdfconnectiontt"><tt>RDFConnection</tt></h2>
+<p><a href="../rdfconnection/">RDFConnection</a></p>
+<pre><code>example with builder.
+</code></pre><pre><code>example with factory
+</code></pre><h2 id="query-execution">Query Execution</h2>
+<p>Factory Examples</p>
+<pre><code>Dataset dataset = ...
+Query query = ...
+try ( QueryExecution qExec = QueryExecutionFactory.create(query, dataset) ) {
+     ResultSet results = qExec.execSelect();
+    ... use results ...
+}
+</code></pre><p>Builder Examples
+Builders are reusable and modifiable after a &ldquo;build&rdquo; operation.</p>
+<pre><code>Dataset dataset = ...
+Query query = ...
+try ( QueryExecution qExec = QueryExecution.create()
+                                 .dataset(dataset)
+                                 .query(query)
+                                 .build() ) {
+    ResultSet results = qExec.execSelect();
+    ... use results ...
+}
+</code></pre><pre><code>try ( QueryExecution qExec = QueryExecutionHTTP.service(&quot;http://....&quot;)
+                                 .query(query)
+                                 .build() ) {
+    ResultSet results = qExec.execSelect();
+    ... use results ...
+}
+</code></pre><pre><code>// JDK HttpClient
+HttpClient httpClient = HttpClient.newBuilder()
+                .connectTimeout(Duration.ofSeconds(10))  // Timeout to connect
+                .followRedirects(Redirect.NORMAL)
+                .build();
+try ( QueryExecution qExec = QueryExecutionHTTP.create()
+                                 .service(&quot;http:// ....&quot;)
+                                 .httpClient(httpClient)
+                                 .query(query)
+                                 .sendMode(QuerySendMode.asPost)
+                                 .timeout(30, TimeUnit.SECONDS) // Timeout of request
+                                 .build() ) {
+    ResultSet results = qExec.execSelect();
+    ... use results ...
+}
+</code></pre><p>There is only one timeout setting for HTTP query execution. The &ldquo;time to
+connect&rdquo; is handled by the JDK <code>HttpClient</code>. Timeouts for local execution are
+&ldquo;time to first result&rdquo; and &ldquo;time to all results&rdquo; as before.</p>
+<h2 id="ttgsptt"><tt>GSP</tt></h2>
+<p><tt>ModelStore</tt></p>
+<pre><code>  Graph graph = GSP.serbvice(&quot;http://fuseki/dataset&quot;).defaultGraph().GET();
+</code></pre><pre><code>  Graph graph = ... ; 
+  GSP.request(&quot;http://fuseki/dataset&quot;).graphName(&quot;http;//data/myGraph&quot;).POST(graph);
+</code></pre><pre><code>  DatasetGraph dataset = GSP.request(&quot;http://fuseki/dataset&quot;).getDataset();
+</code></pre><h2 id="environment">Environment</h2>
+<p>AuthEnv - passwordRegistry , authModifiers
+RegistryHttpClient</p>
+<h2 id="customization-of-http-requests">Customization of HTTP requests</h2>
+<p>@@</p>
+<p>Params (e.g. apikey)</p>
+<p>ARQ.httpRequestModifer</p>
+<h2 id="queryexecution">QueryExecution</h2>
+<h2 id="updateexecution">UpdateExecution</h2>
+<h2 id="ttservicett"><tt>SERVICE</tt></h2>
+<p>@@
+<a href="../query/service.html">Old documentation </a> - passing parameters has changed.</p>
+<h2 id="misc">Misc</h2>
+<p>###Params</p>
+<h3 id="service-configuration">SERVICE configuration</h3>
+<p>See below for more on HTTP authentication with <code>SERVICE</code>.</p>
+<p>@@</p>
+<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java"> <span style="color:#080;font-style:italic">//Symbol                Usage           Default
+</span><span style="color:#080;font-style:italic"></span> <span style="color:#080;font-style:italic">//[ ] srv:queryTimeout      Set timeouts -- There is only one time out now.
+</span><span style="color:#080;font-style:italic"></span> <span style="color:#080;font-style:italic">//[ ] srv:queryCompression  Enable use of deflate and GZip -- unsupported (didn&#39;t work!)
+</span><span style="color:#080;font-style:italic"></span> <span style="color:#080;font-style:italic">//[ ] srv:queryClient       Enable use of a specific client -- unsupported
+</span><span style="color:#080;font-style:italic"></span> <span style="color:#080;font-style:italic">//[ ] srv:serviceContext    Per-endpoint configuration -- Legacy
+</span><span style="color:#080;font-style:italic"></span> <span style="color:#080;font-style:italic">// + srv:serviceAllowed
+</span></code></pre></div><p>Old names</p>
+<p>@@check</p>
+<table>
+<thead>
+<tr>
+<th>Symbol</th>
+<th>Java Constant</th>
+<th>Usage</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code>arq:httpServiceAllowed</code></td>
+<td><code>ARQ.httpServiceAllowed</code></td>
+<td>Yes or No</td>
+</tr>
+<tr>
+<td><code>arq:serviceParams</code></td>
+<td><code>ARQ.serviceParams</code></td>
+<td>Map</td>
+</tr>
+<tr>
+<td><code>arq:httpQueryTimeout</code></td>
+<td><code>ARQ.httpQueryTimeout</code></td>
+<td>Request timeout (time to completion)</td>
+</tr>
+<tr>
+<td><code>arq:httpQueryClient</code></td>
+<td><code>ARQ.httpQueryTimeout</code></td>
+<td>Set the java.net.http.HttpClient</td>
+</tr>
+<tr>
+<td><code>arq:httpQueryCompression</code></td>
+<td></td>
+<td>no-op</td>
+</tr>
+</tbody>
+</table>
+<p>where <code>arq:</code> is prefix for <code>&lt;http://jena.apache.org/ARQ#&gt;</code>.</p>
+<h3 id="arqhttprequestmodifier">ARQ.httpRequestModifier</h3>
+<p>There is a mechanism to modify HTTP requests to specific endpoints or to a collection of endpoints with teh same prefix.</p>
+<p>For example, to add a header <code>X-Tracker</code> to each request:</p>
+<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java">    AtomicLong counter <span style="color:#666">=</span> <span style="color:#a2f;font-weight:bold">new</span> AtomicLong<span style="color:#666">(</span>0<span style="color:#666">);</span>
+
+    HttpRequestModifier modifier <span style="color:#666">=</span> <span style="color:#666">(</span>params<span style="color:#666">,</span> headers<span style="color:#666">)-&gt;{</span>
+        <span style="color:#0b0;font-weight:bold">long</span> x <span style="color:#666">=</span> counter<span style="color:#666">.</span><span style="color:#b44">incrementAndGet</span><span style="color:#666">();</span>
+        headers<span style="color:#666">.</span><span style="color:#b44">put</span><span style="color:#666">(</span><span style="color:#b44">&#34;X-Tracker&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;Call=&#34;</span><span style="color:#666">+</span>x<span style="color:#666">);</span>
+    <span style="color:#666">};</span>
+    RegistryRequestModifier<span style="color:#666">.</span><span style="color:#b44">get</span><span style="color:#666">().</span><span style="color:#b44">addPrefix</span><span style="color:#666">(</span>serverURL<span style="color:#666">,</span> modifier<span style="color:#666">);</span>
+</code></pre></div><h2 id="auth">Authentication</h2>
+<p>For any use of users-password information, and especially HTTP basic
+authentication, information is visible in the HTTP headers. Using HTTPS is
+necessary to avoid snooping.  Digest authentication is also stronger over HTTPS
+because it protects against man-in-the-middle attacks.</p>
+<p>There are 5 variations:</p>
+<ol>
+<li>Basic authentication</li>
+<li>Challenge-Basic authentication</li>
+<li>Challenge-Digest authentication</li>
+<li>URL user (that is, <code>user@host.net</code> in the URL)</li>
+<li>URL user and password in the URL (that is, <code>user:password@host.net</code> in the URL)</li>
+</ol>
+<p>Basic authentication occurs where the app provides the users and password
+information to the JDK <code>HttpClient</code> and that information is always used when
+sending HTTP requests with that <code>HttpClient</code>. It does not require an initial
+request-challenge-resend to initiate. This is provided natively by the <code>java.net.http</code>
+JDK code. See <code>HttpClient.newBuilder().authenticate(...)</code>.</p>
+<p>Challenge based authentication, for &ldquo;basic&rdquo; or &ldquo;digest&rdquo;, are provided by Jena.
+The challenge happens on the first contact with the remote endpoint and the
+server returns a 401 response with an HTTP header saying which style of
+authentication is required. There is a registry of users name and password for
+endpoints which is consulted and the appropriate
+<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization"><code>Authorization:</code></a>
+header is generated then the request resent. If no registration matches, the 401
+is passed back to the application as an exception.</p>
+<p>Because it is a challenge response to an request, the first request must be
+repeated, first to trigger the challenge and then again with the HTTP
+authentication information.  To make this automatic, the first request must not be a streaming
+request (the stream is not repeatable). All HTTP request generated by Jena are repeatable.</p>
+<p>The URL can contain a <code>userinfo</code> part, either the <code>users@host</code> form, or the <code>user:password@host</code> form.
+If just the user is given, the authentication environment is consulted for registered users-password information. If user and password is given, the details as given are used. This latter form is not recommended and should only be used if necessary because the password is in-clear in the SPARQL
+query.</p>
+<p>Move page: <a href="/documentation/query/http-auth">/documentation/query/http-auth</a>
+Link to</p>
+<h3 id="jdk-httpclientauthenticator">JDK HttpClient.authenticator</h3>
+<p>The java platform provides basic authentication.</p>
+<p>This is not challenge based - any request sent using a <code>HttpClient</code> configured with an authenticator will include the authentication details. (Caution- - including sending username/password to the wrong site!).</p>
+<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java">    Authenticator authenticator <span style="color:#666">=</span> AuthLib<span style="color:#666">.</span><span style="color:#b44">authenticator</span><span style="color:#666">(</span><span style="color:#b44">&#34;user&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;password&#34;</span><span style="color:#666">);</span>
+    HttpClient httpClient <span style="color:#666">=</span> HttpClient<span style="color:#666">.</span><span style="color:#b44">newBuilder</span><span style="color:#666">()</span>
+            <span style="color:#666">.</span><span style="color:#b44">connectTimeout</span><span style="color:#666">(</span>Duration<span style="color:#666">.</span><span style="color:#b44">ofSeconds</span><span style="color:#666">(</span>10<span style="color:#666">))</span>
+            <span style="color:#666">.</span><span style="color:#b44">authenticator</span><span style="color:#666">(</span>authenticator<span style="color:#666">)</span>
+            <span style="color:#666">.</span><span style="color:#b44">build</span><span style="color:#666">();</span>
+</code></pre></div><div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java">        <span style="color:#080;font-style:italic">// Use with RDFConnection      
+</span><span style="color:#080;font-style:italic"></span>        <span style="color:#a2f;font-weight:bold">try</span> <span style="color:#666">(</span> RDFConnection conn <span style="color:#666">=</span> RDFConnectionRemote<span style="color:#666">.</span><span style="color:#b44">service</span><span style="color:#666">(</span>dataURL<span style="color:#666">)</span>
+                <span style="color:#666">.</span><span style="color:#b44">httpClient</span><span style="color:#666">(</span>httpClient<span style="color:#666">)</span>
+                <span style="color:#666">.</span><span style="color:#b44">build</span><span style="color:#666">())</span> <span style="color:#666">{</span>
+            conn<span style="color:#666">.</span><span style="color:#b44">queryAsk</span><span style="color:#666">(</span><span style="color:#b44">&#34;ASK{}&#34;</span><span style="color:#666">);</span>
+        <span style="color:#666">}</span>
+</code></pre></div><div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java">        <span style="color:#080;font-style:italic">// Use with QueryExecution
+</span><span style="color:#080;font-style:italic"></span>        System<span style="color:#666">.</span><span style="color:#b44">out</span><span style="color:#666">.</span><span style="color:#b44">println</span><span style="color:#666">(</span><span style="color:#b44">&#34;HttpClient + QueryExecutionHTTP&#34;</span><span style="color:#666">);</span>
+        <span style="color:#a2f;font-weight:bold">try</span> <span style="color:#666">(</span> QueryExecution qExec <span style="color:#666">=</span> QueryExecutionHTTP<span style="color:#666">.</span><span style="color:#b44">service</span><span style="color:#666">(</span>dataURL<span style="color:#666">)</span>
+                <span style="color:#666">.</span><span style="color:#b44">httpClient</span><span style="color:#666">(</span>httpClient<span style="color:#666">)</span>
+                <span style="color:#666">.</span><span style="color:#b44">endpoint</span><span style="color:#666">(</span>dataURL<span style="color:#666">)</span>
+                <span style="color:#666">.</span><span style="color:#b44">queryString</span><span style="color:#666">(</span><span style="color:#b44">&#34;ASK{}&#34;</span><span style="color:#666">)</span>
+                <span style="color:#666">.</span><span style="color:#b44">build</span><span style="color:#666">())</span> <span style="color:#666">{</span>
+            qExec<span style="color:#666">.</span><span style="color:#b44">execAsk</span><span style="color:#666">();</span>
+        <span style="color:#666">}</span>
+</code></pre></div><h3 id="challenge-registration">Challenge registration</h3>
+<p><code>AuthEnv</code> maintains a registry of credentials and also a registry of which service URLs
+the credentials should be used form. It supports registration of endpoint prefixes so that one
+registration will apply to all URLs starting with a common root.</p>
+<p>The main function is <code>AuthEnv.get().registerUsernamePassword</code>.</p>
+<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java">   <span style="color:#080;font-style:italic">// Application setup code 
+</span><span style="color:#080;font-style:italic"></span>   AuthEnv<span style="color:#666">.</span><span style="color:#b44">get</span><span style="color:#666">().</span><span style="color:#b44">registerUsernamePassword</span><span style="color:#666">(</span><span style="color:#b44">&#34;username&#34;</span><span style="color:#666">,</span> <span style="color:#b44">&#34;password&#34;</span><span style="color:#666">);</span>
+</code></pre></div><div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-java" data-lang="java">   <span style="color:#666">...</span>
+   <span style="color:#a2f;font-weight:bold">try</span> <span style="color:#666">(</span> QueryExecution qExec <span style="color:#666">=</span> QueryExecutionHTTP<span style="color:#666">.</span><span style="color:#b44">service</span><span style="color:#666">(</span>dataURL<span style="color:#666">)</span>
+        <span style="color:#080;font-style:italic">// No httpClient
+</span><span style="color:#080;font-style:italic"></span>        <span style="color:#666">.</span><span style="color:#b44">endpoint</span><span style="color:#666">(</span>dataURL<span style="color:#666">)</span>
+        <span style="color:#666">.</span><span style="color:#b44">queryString</span><span style="color:#666">(</span><span style="color:#b44">&#34;ASK{}&#34;</span><span style="color:#666">)</span>
+        <span style="color:#666">.</span><span style="color:#b44">build</span><span style="color:#666">())</span> <span style="color:#666">{</span>
+       qExec<span style="color:#666">.</span><span style="color:#b44">execAsk</span><span style="color:#666">();</span>
+   <span style="color:#666">}</span>
+</code></pre></div><p>When a HTTP 401 response with an <code>WWW-Authenticate</code> header is received, the Jena http handling code
+will will look for a suitable authentication registration (exact or longest prefix), and retry the
+request. If it succeeds, a modifier is installed so all subsequent request to the same endpoint will
+have the authentication header added and there is no challenge round-trip.</p>
+<h3 id="ttservicett-1"><tt>SERVICE</tt></h3>
+<p>The same mechanism is used for the URL in a SPARQL <code>SERVICE</code> clause.  If there is a 401 challenge,
+the registry is consulted and authetication applied.</p>
+<p>In addition, if the SERVICE URL has a usename as the <code>userinfo</code> (that is, <code>https://users@some.host/...</code>),
+that user name is used to look in the authentication registry.</p>
+<p>If the <code>userinfo</code> is of the form &ldquo;username:password&rdquo; then the information as given in the URL is used.</p>
+<p>Old still supported:
+source/documentation/query/http-auth.md</p>
+<h2 id="heading">@@</h2>
+<p>Links:</p>
+<p>source/documentation/query/<br>
+source/documentation/query/service.html<br>
+source/documentation/rdfconnection/</p>
+
+
+        </div>
+    </div>
+
+</div>
+
+<footer class="footer">
+    <div class="container">
+        <p>
+            Copyright &copy; 2011&ndash;2021 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.
+        </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>
diff --git a/content/index.xml b/content/index.xml
index c1c217c..5a24b47 100644
--- a/content/index.xml
+++ b/content/index.xml
@@ -63,6 +63,16 @@ Implementing too quickly, without first understanding the RDF data model, leads
     </item>
     
     <item>
+      <title>Apache Jena documentation overview</title>
+      <link>https://jena.apache.org/documentation/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      
+      <guid>https://jena.apache.org/documentation/</guid>
+      <description>This section contains detailed information about the various Jena sub-systems, aimed at developers using Jena. For more general introductions, please refer to the Getting started and Tutorial sections.
+Documentation index  The RDF API - the core RDF API in Jena SPARQL - querying and updating RDF models using the SPARQL standards Fuseki - SPARQL server which can present RDF data and answer SPARQL queries over HTTP I/O - reading and writing RDF data RDF Connection - a SPARQL API for local datasets and remote services Assembler - describing recipes for constructing Jena models declaratively using RDF Inference - using the Jena rules engine and other inference algorithms to derive conseque [...]
+    </item>
+    
+    <item>
       <title>Apache Jena Elephas</title>
       <link>https://jena.apache.org/documentation/hadoop/</link>
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -198,9 +208,8 @@ Download Mirrors [if-any logo] [end] The currently selected mirror is [preferred
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
       
       <guid>https://jena.apache.org/documentation/shacl/</guid>
-      <description>jena-shacl is an implementation of the W3C Shapes Constraint Language (SHACL). It implements SHACL Core and SHACL SPARQL Constraints.
-In addition, it provides:
- SHACL Compact Syntax SPARQL-based targets  Command line The command shacl introduces shacl operations; it takes a sub-command argument.
+      <description>jena-shacl is an implementation of the W3C Shapes Constraint Language (SHACL). It implements SHACL Core and SHACL SPARQL Constraints. It also provides a reader and writer for SHACL Compact Syntax.
+Command line The command shacl introduces shacl operations; it takes a sub-command argument.
 To validate:
 shacl validate --shapes SHAPES.ttl --data DATA.ttl shacl v -s SHAPES.ttl -d DATA.ttl The shapes and data files can be the same; the --shapes is optional and defaults to the same as --data.</description>
     </item>
@@ -218,6 +227,20 @@ Not currently supported:
     </item>
     
     <item>
+      <title>Apache Jena SPARQL APIs</title>
+      <link>https://jena.apache.org/documentation/sparql-apis/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      
+      <guid>https://jena.apache.org/documentation/sparql-apis/</guid>
+      <description>TOC
+Overview The SPARQL specifications provide query, update and the graph store protocol (GSP).
+Jena provides a single interface, RDFConnection for working with local and remote RDF data using these protocols in a unified way for local and remote data.
+HTTP Authentication is provided for remote operations.
+Alternatively, applications can also use the various execution engines through QueryExecution, UpdateExecution and ModelStore.
+All the main implementations work at &amp;ldquo;Graph SPI&amp;rdquo; (GPI) level and an application may wish to work with this lower level interface that implements generalized RDF (i.</description>
+    </item>
+    
+    <item>
       <title>ARQ - A SPARQL Processor for Jena</title>
       <link>https://jena.apache.org/documentation/query/</link>
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -895,8 +918,9 @@ The relevant SPARQL standards are:
       
       <guid>https://jena.apache.org/documentation/geosparql/geosparql-fuseki.html</guid>
       <description>This application provides a HTTP server compliant with the GeoSPARQL standard. It uses the embedded server Fuseki and provides additional parameters for dataset loading.
-The project uses the GeoSPARQL implementation from the GeoSPARQL Jena project. Currently, there is no GUI interface as provided in the Fuseki distribution.
-A subset of the EPSG spatial/coordinate reference systems are included by default from the Apache SIS project (http://sis.apache.org). The full EPSG dataset is not distributed due to the EPSG terms of use being incompatible with the Apache Licence.</description>
+The project uses the GeoSPARQL implementation from the GeoSPARQL Jena module, which includes a range of functions in addition to those from the GeoSPARQL standard.
+Currently, there is no GUI interface as provided in the Fuseki distribution.
+The intended usage is to specify a TDB folder (either TDB1 or TDB2, created if required) for persistent storage of the dataset.</description>
     </item>
     
     <item>
@@ -1015,16 +1039,6 @@ What is an Assembler specification? An Assembler specification is an RDF descrip
     </item>
     
     <item>
-      <title>Jena documentation overview</title>
-      <link>https://jena.apache.org/documentation/</link>
-      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-      
-      <guid>https://jena.apache.org/documentation/</guid>
-      <description>This section contains detailed information about the various Jena sub-systems, aimed at developers using Jena. For more general introductions, please refer to the Getting started and Tutorial sections.
-Documentation index  The RDF API - the core RDF API in Jena SPARQL - querying and updating RDF models using the SPARQL standards Fuseki - SPARQL server which can present RDF data and answer SPARQL queries over HTTP I/O - reading and writing RDF data RDF Connection - a SPARQL API for local datasets and remote services Assembler - describing recipes for constructing Jena models declaratively using RDF Inference - using the Jena rules engine and other inference algorithms to derive conseque [...]
-    </item>
-    
-    <item>
       <title>Jena Extras - Extra packages for Jena development.</title>
       <link>https://jena.apache.org/documentation/extras/</link>
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
diff --git a/content/sitemap.xml b/content/sitemap.xml
index d6d08e7..764640e 100644
--- a/content/sitemap.xml
+++ b/content/sitemap.xml
@@ -38,6 +38,11 @@
   </url>
   
   <url>
+    <loc>https://jena.apache.org/documentation/</loc>
+    <lastmod>2021-07-21T19:48:13+01:00</lastmod>
+  </url>
+  
+  <url>
     <loc>https://jena.apache.org/documentation/hadoop/</loc>
     <lastmod>2021-02-20T13:42:28+00:00</lastmod>
   </url>
@@ -99,7 +104,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/shacl/</loc>
-    <lastmod>2021-06-28T10:19:22+01:00</lastmod>
+    <lastmod>2021-02-19T15:39:55+13:00</lastmod>
   </url>
   
   <url>
@@ -108,6 +113,11 @@
   </url>
   
   <url>
+    <loc>https://jena.apache.org/documentation/sparql-apis/</loc>
+    <lastmod>2021-07-21T19:48:13+01:00</lastmod>
+  </url>
+  
+  <url>
     <loc>https://jena.apache.org/documentation/query/</loc>
     <lastmod>2021-06-22T11:19:55+01:00</lastmod>
   </url>
@@ -319,7 +329,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation.html</loc>
-    <lastmod>2021-06-28T10:19:22+01:00</lastmod>
+    <lastmod>2021-07-21T19:48:13+01:00</lastmod>
   </url>
   
   <url>
@@ -429,7 +439,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/geosparql/geosparql-fuseki.html</loc>
-    <lastmod>2020-10-20T20:10:23+01:00</lastmod>
+    <lastmod>2021-07-16T18:35:45+01:00</lastmod>
   </url>
   
   <url>
@@ -503,11 +513,6 @@
   </url>
   
   <url>
-    <loc>https://jena.apache.org/documentation/</loc>
-    <lastmod>2021-06-22T21:19:37+01:00</lastmod>
-  </url>
-  
-  <url>
     <loc>https://jena.apache.org/documentation/extras/</loc>
     <lastmod>2020-02-28T13:09:12+01:00</lastmod>
   </url>