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 2023/01/07 15:50:37 UTC

[jena-site] branch asf-staging updated: Staged site from system-init (e1a8753d838b2c885cc985d16ebdc15141b4c3b8)

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 4b27f9457 Staged site from system-init (e1a8753d838b2c885cc985d16ebdc15141b4c3b8)
4b27f9457 is described below

commit 4b27f945793e4d060086721a3e0ea9287971afa7
Author: jenkins <bu...@apache.org>
AuthorDate: Sat Jan 7 15:50:33 2023 +0000

    Staged site from system-init (e1a8753d838b2c885cc985d16ebdc15141b4c3b8)
---
 .../fuseki2/fuseki-server-protocol.html            |  7 ++
 content/documentation/index.xml                    | 32 ++++----
 content/documentation/io/rdf-input.html            | 32 +++++++-
 content/documentation/javadoc.html                 |  1 +
 content/documentation/notes/jena-repack.html       | 48 ++++++------
 content/documentation/notes/rdf-frames.html        |  2 +-
 .../documentation/notes/system-initialization.html | 88 +++++++---------------
 content/documentation/query/lateral-join.html      | 12 ++-
 content/documentation/query/service_enhancer.html  | 38 ++++++----
 .../rdf-patch/{__index.html => index.html}         | 22 ++----
 content/documentation/rdfpatch/index.html          |  1 +
 content/documentation/shex/index.html              |  6 +-
 content/index.xml                                  | 32 ++++----
 content/sitemap.xml                                | 30 ++++----
 14 files changed, 181 insertions(+), 170 deletions(-)

diff --git a/content/documentation/fuseki2/fuseki-server-protocol.html b/content/documentation/fuseki2/fuseki-server-protocol.html
index 54c1aaf2c..535c4aa2e 100644
--- a/content/documentation/fuseki2/fuseki-server-protocol.html
+++ b/content/documentation/fuseki2/fuseki-server-protocol.html
@@ -433,6 +433,13 @@ See <a href="fuseki-server-info.html">Fuseki Server Information</a> for details
 useful for managing the files externally.</p>
 <p>The returned JSON object will have the form <code>{ backups: [ ... ] }</code> where the <code>[]</code> array is
 a list of file names.</p>
+<p>Since 4.7.0 backups are written to a temporary file in the same directory and renamed on completion.
+In case of server crash, it will not be renamed.
+This guarantees backups are complete.
+Cleanup of incomplete backups can be done by users on application / container start: remove all incomplete files.g</p>
+<h3 id="backup-policies">Backup policies</h3>
+<p>Users can use the backup api <a href="/documentation/fuseki2/fuseki-server-protocol.html#backup">the Fuseki HTTP Administration Protocol</a> to build backup policies.
+See issue for more information <a href="https://github.com/apache/jena/issues/1500">https://github.com/apache/jena/issues/1500</a> .</p>
 <h3 id="compact">Compact</h3>
 <p>Pattern: <code>/$/compact/{name}</code></p>
 <p>This operations initiates a database compaction task and returns a JSON object with the task Id in it.</p>
diff --git a/content/documentation/index.xml b/content/documentation/index.xml
index 2ec4c80a6..5622a7f1e 100644
--- a/content/documentation/index.xml
+++ b/content/documentation/index.xml
@@ -10,17 +10,6 @@
 	<atom:link href="https://jena.apache.org/documentation/index.xml" rel="self" type="application/rss+xml" />
     
     
-    <item>
-      <title></title>
-      <link>https://jena.apache.org/documentation/rdf-patch/__index.html</link>
-      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-      
-      <guid>https://jena.apache.org/documentation/rdf-patch/__index.html</guid>
-      <description>f&amp;mdash; title: RDF Patch slug: index This page describes RDF Patch. An RDF Patch is a set of changes to an RDF dataset. The change are for triples, quads and prefixes.
-Changes to triples involving blank nodes are handled by using their system identifier which uniquely identifies a blank node. Unlike RDF syntaxes, blank nodes are not generated afresh each time the document is parsed.
-Example This example ensures certain prefixes are in the dataset and adds some basic triples for a new subclass of &amp;lt;http://example/SUPER_CLASS&amp;gt;.</description>
-    </item>
-    
     <item>
       <title>A brief guide to Jena Eyeball</title>
       <link>https://jena.apache.org/documentation/archive/eyeball/eyeball-guide.html</link>
@@ -145,11 +134,11 @@ Getting Started GeoSPARQL Jena can be accessed as a library using Maven etc. fro
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
       
       <guid>https://jena.apache.org/documentation/notes/system-initialization.html</guid>
-      <description>Jena has a simple initialization sequence that is used to setup components available at runtime.
-Application code is welcome to also use this mechanism. This must be done with care. Java initialization can lead to visibility of uninitialized data.
+      <description>Jena has an initialization sequence that is used to setup components available at runtime.
+Application code is welcome to also use this mechanism. This must be done with care. During Jena initialization, there is visibility of uninitialized data.
 The standard initialization sequence is
 Core -&amp;gt; RIOT -&amp;gt; ARQ -&amp;gt; TDB -&amp;gt; other (including jena text)
-The sequence from core to TDB should be executed before application components. See below for how to control the order.</description>
+The sequence from core to level 500 should be executed before application components. See below for how to control the order.</description>
     </item>
     
     <item>
@@ -1023,7 +1012,7 @@ Throughout this document, the prefix eye: stands for the URL http://jena.</descr
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
       
       <guid>https://jena.apache.org/documentation/javadoc.html</guid>
-      <description> Jena Core JavaDoc ARQ JavaDoc (SPARQL) TDB JavaDoc RDF Connection Fuseki JavaDoc  Fuseki2 Webapp Fuseki2 Main   Text search SHACL ShEx GeoSPARQL Query Builder Service Enhancer Security Permissions JavaDoc JDBC JavaDoc  </description>
+      <description> Jena Core JavaDoc ARQ JavaDoc (SPARQL) TDB JavaDoc RDF Connection Fuseki JavaDoc  Fuseki2 Webapp Fuseki2 Main   Text search SHACL ShEx RDF Patch GeoSPARQL Query Builder Service Enhancer Security Permissions JavaDoc JDBC JavaDoc  </description>
     </item>
     
     <item>
@@ -1276,6 +1265,17 @@ Binary formats are faster to process - they do not incur the parsing costs of te
 Outline RDFConnection provides a number of different styles for working with RDF data in Java.</description>
     </item>
     
+    <item>
+      <title>RDF Patch</title>
+      <link>https://jena.apache.org/documentation/rdf-patch/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      
+      <guid>https://jena.apache.org/documentation/rdf-patch/</guid>
+      <description>This page describes RDF Patch. An RDF Patch is a set of changes to an RDF dataset. The change are for triples, quads and prefixes.
+Changes to triples involving blank nodes are handled by using their system identifier which uniquely identifies a blank node. Unlike RDF syntaxes, blank nodes are not generated afresh each time the document is parsed.
+Example This example ensures certain prefixes are in the dataset and adds some basic triples for a new subclass of &amp;lt;http://example/SUPER_CLASS&amp;gt;.</description>
+    </item>
+    
     <item>
       <title>RDF/XML Handling in Jena</title>
       <link>https://jena.apache.org/documentation/io/arp.html</link>
@@ -1587,7 +1587,7 @@ Serving RDF For any use of users-password information, and especially HTTP basic
       
       <guid>https://jena.apache.org/documentation/query/service_enhancer.html</guid>
       <description>The service enhancer (SE) plugin extends the functionality of the SERVICE clause with:
- Bulk requests Correlated joins also known as lateral joins A streaming cache for SERVICE requests results which can also cope with bulk requests and correlated joins. Furthermore, queries that only differ in limit and offset will result in cache hits for overlapping ranges. At present, the plugin only ships with an in-memory caching provider.  As a fundamental principle, a request making use of cache and bulk should return the exact same result as if those settings were omitted.</description>
+ Bulk requests Correlated joins also known as lateral joins A streaming cache for SERVICE requests results which can also cope with bulk requests and correlated joins. Furthermore, queries that only differ in limit and offset will result in cache hits for overlapping ranges. At present, the plugin only ships with an in-memory cache provider.  As a fundamental principle, a request making use of cache and bulk should return the exact same result as if those settings were omitted.</description>
     </item>
     
     <item>
diff --git a/content/documentation/io/rdf-input.html b/content/documentation/io/rdf-input.html
index c18d03324..790871dc5 100644
--- a/content/documentation/io/rdf-input.html
+++ b/content/documentation/io/rdf-input.html
@@ -460,15 +460,41 @@ this is useful when you don&rsquo;t want to go to the trouble of writing a full
 logic in normal iterator style.</p>
 <p>To do this you use <code>AsyncParser.asyncParseTriples</code> which parses the input on
 another thread:</p>
-<pre><code>    Iterator&lt;Triple&gt; iter = AsyncParser.asyncParseTriples(filename);
+<pre><code>    IteratorCloseable&lt;Triple&gt; iter = AsyncParser.asyncParseTriples(filename);
     iter.forEachRemaining(triple-&gt;{
         // Do something with triple
     });
 </code></pre>
-<p>For N-Triples and N-Quads, you can use
+<p>Calling the iterator&rsquo;s close method stops parsing and closes the involved resources.
+For N-Triples and N-Quads, you can use
 <code>RiotParsers.createIteratorNTriples(input)</code> which parses the input on the
 calling thread.</p>
 <p><a href="https://github.com/apache/jena/blob/main/jena-examples/src/main/java/arq/examples/riot/ExRIOT9_AsyncParser.java">RIOT example 9</a>.</p>
+<p>Additional control over parsing is provided by the <code>AsyncParser.of(...)</code> methods which return <code>AsyncParserBuilder</code> instances.
+The builder features a fluent API that allows for fine-tuning internal buffer sizes as well as eventually obtaining
+a standard Java <code>Stream</code>. Calling the stream&rsquo;s close method stops parsing and closes the involved resources.
+Therefore, these streams are best used in conjunction with try-with-resources blocks:</p>
+<pre><code>    try (Stream&lt;Triple&gt; stream = AsyncParser.of(filename)
+            .setQueueSize(2).setChunkSize(100).streamTriples().limit(1000)) {
+        // Do something with the stream
+    }
+</code></pre>
+<p>The AsyncParser also supports parsing RDF into a stream of <code>EltStreamRDF</code> elements. Each element can hold a triple, quad, prefix, base IRI or exception.
+For all <code>Stream</code>-based methods there also exist <code>Iterator</code>-based versions:</p>
+<pre><code>    IteratorCloseable&lt;EltStreamRDF&gt; it = AsyncParser.of(filename).asyncParseElements();
+    try {
+        while (it.hasNext()) {
+            EltStreamRDF elt = it.next();
+            if (elt.isTriple()) {
+               // Do something with elt.getTriple();
+            } else if (elt.isPrefix()) {
+               // Do something with elt.getPrefix() and elt.getIri();
+            }
+        }
+    } finally {
+        Iter.close(it);
+    }
+</code></pre>
 <h3 id="filter-the-output-of-parsing">Filter the output of parsing</h3>
 <p>When working with very large files, it can be useful to
 process the stream of triples or quads produced
@@ -477,7 +503,7 @@ by the parser so as to work in a streaming fashion.</p>
 <h3 id="add-a-new-language">Add a new language</h3>
 <p>The set of languages is not fixed. A new language,
 together with a parser, can be added to RIOT as shown in
-<a href="https://github.com/apache/jena/tree/main/jena-examples/src/main/java/arq/examples/riot/ExRIOT5_StreamRDFCollect.java">RIOT example 5</a></p>
+<a href="https://github.com/apache/jena/blob/main/jena-examples/src/main/java/arq/examples/riot/ExRIOT6_AddNewReader.java">RIOT example 6</a></p>
 
 
         </div>
diff --git a/content/documentation/javadoc.html b/content/documentation/javadoc.html
index b38b562ac..7ed86d7d1 100644
--- a/content/documentation/javadoc.html
+++ b/content/documentation/javadoc.html
@@ -188,6 +188,7 @@
 <li><a href="javadoc/text/index.html">Text search</a></li>
 <li><a href="javadoc/shacl/index.html">SHACL</a></li>
 <li><a href="javadoc/shex/index.html">ShEx</a></li>
+<li><a href="javadoc/rdfpatch/index.html">RDF Patch</a></li>
 <li><a href="javadoc/geosparql/index.html">GeoSPARQL</a></li>
 <li><a href="javadoc/extras/querybuilder/index.html">Query Builder</a></li>
 <li><a href="javadoc/extras/serviceenhancer/index.html">Service Enhancer</a></li>
diff --git a/content/documentation/notes/jena-repack.html b/content/documentation/notes/jena-repack.html
index cb128666a..a9edb2a87 100644
--- a/content/documentation/notes/jena-repack.html
+++ b/content/documentation/notes/jena-repack.html
@@ -194,41 +194,45 @@ documentation for process in Jena is <a href="system-initialization.html">availa
 dependencies and application code, the contents of the Jena files must
 be combined and be present in the combined jar as a java resource of the
 same name.</p>
+<h4 id="maven">Maven</h4>
 <p>The
 <a href="https://maven.apache.org/plugins/maven-shade-plugin/">maven shade plugin</a>
 is capable of doing this process in a build using a &ldquo;transformer&rdquo;.</p>
 <p>The Apache Jena uses the shade plugin technique itself to make the combined jar
 for Fuseki.  It uses the maven shade plugin with a <code>transformer</code>.</p>
 <p>This is an extract from the POM:</p>
-<pre><code>&lt;plugin&gt;
-  &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
-  &lt;artifactId&gt;maven-shade-plugin&lt;/artifactId&gt;
-  &lt;configuration&gt;
+<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#008000;font-weight:bold">&lt;plugin&gt;</span>
+  <span style="color:#008000;font-weight:bold">&lt;groupId&gt;</span>org.apache.maven.plugins<span style="color:#008000;font-weight:bold">&lt;/groupId&gt;</span>
+  <span style="color:#008000;font-weight:bold">&lt;artifactId&gt;</span>maven-shade-plugin<span style="color:#008000;font-weight:bold">&lt;/artifactId&gt;</span>
+  <span style="color:#008000;font-weight:bold">&lt;configuration&gt;</span>
     ...
-    &lt;transformers&gt;
-      &lt;transformer 
-          implementation=&quot;org.apache.maven.plugins.shade.resource.ServicesResourceTransformer&quot;/&gt;
+    <span style="color:#008000;font-weight:bold">&lt;transformers&gt;</span>
+      <span style="color:#008000;font-weight:bold">&lt;transformer</span> 
+          <span style="color:#b44">implementation=</span><span style="color:#b44">&#34;org.apache.maven.plugins.shade.resource.ServicesResourceTransformer&#34;</span><span style="color:#008000;font-weight:bold">/&gt;</span>
       ... other transformers ...
-    &lt;/transformers&gt;
-</code></pre>
-<p>See
+    <span style="color:#008000;font-weight:bold">&lt;/transformers&gt;</span>
+  <span style="color:#008000;font-weight:bold">&lt;/configuration&gt;</span>
+<span style="color:#008000;font-weight:bold">&lt;/plugin&gt;</span>
+</code></pre></div><p>See
 <a href="https://github.com/apache/jena/blob/main/jena-fuseki2/jena-fuseki-server/pom.xml">jena-fuseki2/jena-fuseki-server/pom.xml</a>
 for the complete shade plugin setup used by Fuseki.</p>
-<p>If doing manually, create a single file in your application jar the
-all lines of all the services resource files. The order does not matter</p>
-<ul>
-<li>Jena calls modules in the right order.</li>
-</ul>
-<p>For Gradle, the <a href="https://imperceptiblethoughts.com/shadow/">shadowJar plugin</a>
+<h4 id="gradle">Gradle</h4>
+<p>For Gradle, the <a href="https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow">shadowJar plugin</a>
 has the
 <a href="https://imperceptiblethoughts.com/shadow/configuration/merging/#merging-service-descriptor-files">mergeServiceFiles</a>
 operation.</p>
-<pre><code>// Merging Service Files
-shadowJar {
-  mergeServiceFiles()
-  . . .
-}
-</code></pre>
+<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-groovy" data-lang="groovy">plugins <span style="color:#666">{</span>
+  <span style="color:#666">...</span>    
+  id <span style="color:#b44">&#34;com.github.johnrengelman.shadow&#34;</span> version <span style="color:#b44">&#34;7.1.2&#34;</span>
+<span style="color:#666">}</span>
+shadowJar <span style="color:#666">{</span>
+  mergeServiceFiles<span style="color:#666">()</span>
+<span style="color:#666">}</span>
+<span style="color:#666">...</span>
+</code></pre></div><h4 id="manual-assembling">Manual assembling</h4>
+<p>If doing manually, create a single file (<code>META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle</code>) in your application jar containing the
+lines of all the services resource files. The order does not matter.
+Jena calls modules in the right order.</p>
 
 
         </div>
diff --git a/content/documentation/notes/rdf-frames.html b/content/documentation/notes/rdf-frames.html
index a74e70337..aa8bcd0cd 100644
--- a/content/documentation/notes/rdf-frames.html
+++ b/content/documentation/notes/rdf-frames.html
@@ -205,7 +205,7 @@ is why the following is not an error:</p>
   &lt;/rdf:Property&gt;
 
   &lt;Truck rdf:ID=&quot;truck1&quot;&gt;
-    &lt;age&gt;2&lt;/a&gt;
+    &lt;age&gt;2&lt;/age&gt;
   &lt;/Truck&gt;
 </code></pre>
 <p>Whereas many object-oriented or frame-oriented representations
diff --git a/content/documentation/notes/system-initialization.html b/content/documentation/notes/system-initialization.html
index 8bf149328..6af12ef10 100644
--- a/content/documentation/notes/system-initialization.html
+++ b/content/documentation/notes/system-initialization.html
@@ -182,23 +182,25 @@
             </div>
             <h1 class="title">Apache Jena Initialization</h1>
             
-	<p>Jena has a simple initialization sequence that is
+	<p>Jena has an initialization sequence that is
 used to setup components available at runtime.</p>
 <p>Application code is welcome to also use this mechanism. This
-must be done with care. Java initialization can lead to
+must be done with care. During Jena initialization, there is
 visibility of uninitialized data.</p>
 <p>The standard initialization sequence is<br>
 Core -&gt; RIOT -&gt; ARQ -&gt; TDB -&gt; other (including jena text)</p>
-<p>The sequence from core to TDB should be executed before application
+<p>The sequence from core to level 500 should be executed before application
 components. See below for how to control the order.</p>
 <p>Initialization occurs when <code>JenaSystem.init()</code> is first called.  Jena ensures that this
 is done when the application first uses any Jena code by using class
 initializers.</p>
+<p>Application can call <code>JenaSystem.init()</code>.</p>
 <p>See <a href="jena-repack.html">notes on repacking Jena code</a> for how to deal
-with ServiceLoader files in repacked jars.</p>
+with <code>ServiceLoader</code> files in repacked jars.</p>
 <h2 id="initialization-code">Initialization code</h2>
-<p>Initialization code is an implementation of <code>JenaSubsystemLifecycle</code>.
-For use in the default initialization, the class must have a zero-argument constructor</p>
+<p>Initialization code is an implementation of <code>JenaSubsystemLifecycle</code> which
+itself extends <code>SubsystemLifecycle</code>.</p>
+<p>For use in the default initialization, the class must have a zero-argument constructor</p>
 <pre><code>public interface JenaSubsystemLifecycle {
     public void start() ;
     public void stop() ;
@@ -210,75 +212,39 @@ The levels used by Jena are:</p>
 <ul>
 <li>0 - reserved</li>
 <li>10 - Used by jena-core</li>
+<li>15 - CLI Commands registry</li>
 <li>20 - RIOT</li>
 <li>30 - ARQ</li>
-<li>40 - TDB</li>
-<li>9999 - other</li>
+<li>40 - Text indexing</li>
+<li>40 - TDB1</li>
+<li>42 - TDB1</li>
+<li>60 - Additional HTTP configuration</li>
+<li>60 - RDFPAtch</li>
+<li>96 - SHACL</li>
+<li>96 - ShEx</li>
+<li>101 - Fuseki</li>
+<li>9999 - Default.</li>
 </ul>
+<p>Levels up to 500 are considered to be &ldquo;Jena system level&rdquo;, Application code
+should use level above 500.</p>
+<p>Fuseki initialization includes <a href="/documentation/fuseki2/fuseki-modules">Fuseki
+Modules</a> which uses <code>SubsystemLifecycle</code>
+for different Java interface.</p>
 <h2 id="the-initialization-process">The Initialization Process</h2>
-<p>The process followed by <code>JenaSystem.init()</code> is to obtain an instance of
-<code>JenaSubsystemRegistry</code>, ask it to <code>load()</code> initialization code, then call
-that code in an order based on declared level. The order of invocation
-of different initialization code within the same level is undefined
-and may be different from run to run.</p>
+<p>The process followed by <code>JenaSystem.init()</code> is to load all java <code>ServiceLoader</code>
+regsitered <code>JenaSubsystemLifecycle</code>, osrt into level order, then call <code>init</code>.
+Initialization code unit at the same level can be called in any order and the
+order may be different between runs.</p>
 <p>Only the first call of <code>JenaSystem.init()</code> causes the process to run.
 Any subsequent calls are cheap, so calling <code>JenaSystem.init()</code>
 when in doubt about the initialization state is safe.</p>
 <p>Overlapping concurrent calls to <code>JenaSystem.init()</code> are thread-safe.
 On a return from <code>JenaSystem.init()</code>, Jena has been initialized at some point.</p>
-<h2 id="the-standard-subsystem-registry">The Standard Subsystem Registry</h2>
-<p>The <code>JenaSubsystemRegistry</code> normally used is based on <code>java.util.ServiceLoader</code>.
-It looks for class resources
-<code>META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle</code>
-on the classpath during the load step.</p>
-<p>See the javadoc for <code>java.util.ServiceLoader</code> for more details.</p>
-<p>See also the javadoc for
-<a href="/documentation/javadoc/jena/org/apache/jena/system/JenaSystem.html">JenaSystem</a>
-and the source code.</p>
 <h2 id="debugging">Debugging</h2>
 <p>There is a flag <code>JenaSystem.DEBUG_INIT</code> to help with development. It is not
 intended for runtime logging.</p>
 <p>Jena components print their initialization beginning and end points on
 <code>System.err</code> to help track down ordering issues.</p>
-<h2 id="modifying-the-standard-process">Modifying the Standard Process</h2>
-<p>It is possible, with care, to alter the way
-that initialization code is discovered.</p>
-<p>An application can change the <code>JenaSubsystemRegistry</code> instance.
-This must be done before any Jena code is called anywhere
-in the current JVM.</p>
-<pre><code>// Example alternative registry.
-JenaSubsystemRegistry r = new JenaSubsystemRegistryBasic() {
-    @Override
-    public void load() {
-        if ( JenaSystem.DEBUG_INIT )
-            System.err.println(&quot;Example custom load&quot;) ;
-        super.load();
-    }
-} ;
-
-// Set the sub-system registry
-JenaSystem.setSubsystemRegistry(r);
-
-// Enable output if required
-// JenaSystem.DEBUG_INIT = true ;
-
-// Initialize Jena
-JenaSystem.init() ;
-</code></pre>
-<h2 id="jena-initialization-in-multi-classloader-environments">Jena initialization in multi-classloader environments</h2>
-<p>In some applications with multiple classloaders, or different classloader strategies, Jena initialization may
-not work as expected. If the Jena initialization debug information shows that components were not loaded correctly,
-trying to switch the context class loader may fix the initialization process.</p>
-<pre><code>ClassLoader contextClassLoader = null;
-try {
-    contextClassLoader = Thread.currentThread().getContextClassLoader();
-    Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
-    JenaSystem.DEBUG_INIT = true;
-    // ...
-} finally {
-    Thread.currentThread().setContextClassLoader(contextClassLoader);
-}
-</code></pre>
 
 
         </div>
diff --git a/content/documentation/query/lateral-join.html b/content/documentation/query/lateral-join.html
index ead2401f9..309487df0 100644
--- a/content/documentation/query/lateral-join.html
+++ b/content/documentation/query/lateral-join.html
@@ -251,7 +251,10 @@ inner <code>?s</code> is not joined to the outer <code>?s</code> but instead is
 </code></pre><p>The inner <code>?s</code> in the <code>SELECT ?label</code> is not the outer <code>?s</code> because the <code>SELECT ?label</code> does not pass out <code>?s</code>. As a sub-query the <code>?s</code> could be any name except
 <code>?label</code> for the same results.</p>
 <h3 id="notes">Notes</h3>
-<p>There is a similarity to filter <code>NOT EXISTS</code>/<code>EXISTS</code> expressed as the non-legal <code>FILTER ( ASK { pattern } )</code> where the variables of the row being filtered are available to &ldquo;pattern&rdquo;. This is similar to an SQL <a href="https://en.wikipedia.org/wiki/Correlated_subquery">correlated subquery</a>.</p>
+<p>There is a similarity to filter <code>NOT EXISTS</code>/<code>EXISTS</code> expressed as the non-legal
+<code>FILTER ( ASK { pattern } )</code> where the variables of the row being filtered are
+available to &ldquo;pattern&rdquo;. This is similar to an SQL
+<a href="https://en.wikipedia.org/wiki/Correlated_subquery">correlated subquery</a>.</p>
 <h2 id="sparql-specification-additional-material">SPARQL Specification Additional Material</h2>
 <h3 id="syntax-1">Syntax</h3>
 <p><code>LATERAL</code> is added to the SPARQL grammar at rule <code>[[56] GraphPatternNotTriples](https://www.w3.org/TR/sparql11-query/#rGraphPatternNotTriples)</code>. As a syntax form, it is similar to <code>OPTIONAL</code>.</p>
@@ -289,9 +292,10 @@ Lateral(Ω, P) = { μ | union of Ω1 where
                Ω1 = eval(D(G), pattern2)
 	       result Ω1
 	   }
-</code></pre><p>where <code>inject</code> is the <a href="https://afs.github.io/substitute.html">corrected <code>substitute</code></a> operation.</p>
-<p>An alternative style is to define Lateral more like &ldquo;evaluate P such that μ is in-scope&rdquo; in some
-way, rather than rely on <code>inject</code> which is a mechanism.</p>
+</code></pre><p>where <code>inject</code> is the <a href="https://afs.github.io/substitute.html">corrected <code>substitute</code></a>
+operation.</p>
+<p>An alternative style is to define Lateral more like &ldquo;evaluate P such that μ is
+in-scope&rdquo; in some way, rather than rely on <code>inject</code> which is a mechanism.</p>
 <pre><code>Definition: Evaluation of Lateral
 
 eval(D(G), Lateral(P1, P2) = Lateral(eval(D(G), P1), P2)
diff --git a/content/documentation/query/service_enhancer.html b/content/documentation/query/service_enhancer.html
index 349665347..c84a84ecb 100644
--- a/content/documentation/query/service_enhancer.html
+++ b/content/documentation/query/service_enhancer.html
@@ -187,11 +187,11 @@
 <li>Bulk requests</li>
 <li>Correlated joins also known as lateral joins</li>
 <li>A streaming cache for <code>SERVICE</code> requests results which can also cope with bulk requests and correlated joins. Furthermore, queries that only differ in limit and offset will result
-in cache hits for overlapping ranges. At present, the plugin only ships with an in-memory caching provider.</li>
+in cache hits for overlapping ranges. At present, the plugin only ships with an in-memory cache provider.</li>
 </ul>
 <p>As a fundamental principle, a request making use of <code>cache</code> and <code>bulk</code> should return the exact same result as if
-those settings were omitted. As a consequence runtime result set size recognition (RRR) is employed to reveal hidden
-result set limits and ensure that always only the appropriate amount of data is returned from the caches.</p>
+those settings were omitted. As a consequence, runtime result set size recognition (RRR) is employed to reveal hidden
+result set limits. This is used to ensure that always only the appropriate amount of data is returned from the caches.</p>
 <p>A correlated join using this plugin is syntactically expressed with <code>SERVICE &lt;loop:&gt; {}</code>.
 It is a binary operation on two graph patterns:
 The operation &ldquo;loops&rdquo; over every binding obtained from evaluation of the left-hand-side (lhs) and uses it as an input to substitute the variables of the right-hand-side (rhs).
@@ -213,7 +213,7 @@ It executes as a single remote request to Wikidata:</p>
   }
 }
 </code></pre></div><details>
-  <summary markdown="span">Click here to view the rewritten Query</summary>
+  <summary>Click here to view the rewritten query</summary>
 <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sparql" data-lang="sparql"><span style="color:#a2f;font-weight:bold">SELECT</span>  <span style="color:#666">*</span>
 <span style="color:#a2f;font-weight:bold">WHERE</span>
   {   {   { { <span style="color:#a2f;font-weight:bold">SELECT</span>  <span style="color:#666">*</span>
@@ -308,7 +308,7 @@ Every obtained binding&rsquo;s <code>?__idx__</code>  value determines the input
 A special value for <code>?__idx__</code> is the  end marker. It is a number higher than any input binding ID and it is used to detect result set size limits: It&rsquo;s absence in a result set
 means that it was cut off. This information is used to ensure that a request using a certain service IRI does not yield more results than limit.</p>
 </details>
-<p>Note that a repeated execution of a query (possibly with different limits/offsets) will serve the data from cache rather than making another remote request.
+<p>Note, that a repeated execution of a query (possibly with different limits/offsets) will serve the data from cache rather than making another remote request.
 The cache operates on a per-input-binding basis: For instance, in the example above it means that when removing bindings from the <code>VALUES</code> block data will
 still be served from the cache. Conversely, adding additional bindings to the <code>VALUES</code> block will only send a (bulk) remote request for those
 that lack cache entries.</p>
@@ -331,10 +331,10 @@ For more details about the transformation see <a href="#programmatic-algebra-tra
 <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:#a2f;font-weight:bold">import</span> <span style="color:#00f;font-weight:bold">org.apache.jena.sparql.service.enhancer.init.ServiceEnhancerInit</span><span style="color:#666">;</span>
 
 ServiceEnhancerInit<span style="color:#666">.</span><span style="color:#b44">wrapOptimizer</span><span style="color:#666">(</span>ARQ<span style="color:#666">.</span><span style="color:#b44">getContext</span><span style="color:#666">());</span>
-</code></pre></div><p>As usual, in order to avoid a global setup, the the context of a dataset or statement execution (i.e. query / update) can be used instead:</p>
+</code></pre></div><p>As usual, in order to avoid a global setup, the context of a dataset or statement execution (i.e. query / update) can be used instead:</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">DatasetFactory dataset <span style="color:#666">=</span> DatasetFactory<span style="color:#666">.</span><span style="color:#b44">create</span><span style="color:#666">();</span>
 ServiceEnhancerInit<span style="color:#666">.</span><span style="color:#b44">wrapOptimizer</span><span style="color:#666">(</span>dataset<span style="color:#666">.</span><span style="color:#b44">getContext</span><span style="color:#666">());</span>
-</code></pre></div><p>The lookup proceduce for which optimizer to wrap first consults the given context and then the global one.
+</code></pre></div><p>The lookup procedure for which optimizer to wrap first consults the given context and then the global one.
 If neither has an optimizer configured then Jena&rsquo;s default one will be used.</p>
 <p>Service requests that do not make use of this plugin&rsquo;s options will not be affected even if the plugin is loaded.
 The plugin registration makes use of the <a href="/documentation/query/custom_service_executors.html">custom service executor extension system</a>.</p>
@@ -342,7 +342,7 @@ The plugin registration makes use of the <a href="/documentation/query/custom_se
 <p>The <code>se:DatasetServiceEnhancer</code> assembler can be used to enable the SE plugin on a dataset.
 This procedure also automatically enables correlated joins using the dataset&rsquo;s context as described in <a href="#programmatic-setup">Programmatic Setup</a>.
 By default, the SE assembler alters the base dataset&rsquo;s context and returns the base dataset again.
-There is one important exception: If <code>se:enableMgmt</code> is true then the assembler&rsquo;s final step it to create a wrapped dataset with a copy of the original dataset&rsquo;s context where <code>enableMgmt</code> is true.
+There is one important exception: If <code>se:enableMgmt</code> is true then the assembler&rsquo;s final step is to create a wrapped dataset with a copy of the original dataset&rsquo;s context where <code>enableMgmt</code> is true.
 This way, management functions are not available in the base dataset.</p>
 <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-ttl" data-lang="ttl"><span style="color:#080;font-style:italic"># assembler.ttl</span><span style="color:#bbb">
 </span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">PREFIX</span><span style="color:#bbb"> </span><span style="color:#00f;font-weight:bold">ja:</span><span style="color:#bbb"> </span><span style="color:#b8860b">&lt;http://jena.hpl.hp.com/2005/11/Assembler#&gt;</span><span style="color:#bbb">
@@ -355,12 +355,16 @@ This way, management functions are not available in the base dataset.</p>
 </span><span style="color:#bbb">                                          </span><span style="color:#080;font-style:italic"># identified by the tuple (service IRI, query, input binding)</span><span style="color:#bbb">
 </span><span style="color:#bbb">  </span><span style="color:#00f;font-weight:bold">se:</span><span style="color:#008000;font-weight:bold">cacheMaxPageCount</span><span style="color:#bbb"> </span><span style="color:#666">15</span><span style="color:#bbb"> </span>;<span style="color:#bbb">               </span><span style="color:#080;font-style:italic"># Maximum number of pages per cache entry</span><span style="color:#bbb">
 </span><span style="color:#bbb">  </span><span style="color:#00f;font-weight:bold">se:</span><span style="color:#008000;font-weight:bold">cachePageSize</span><span style="color:#bbb"> </span><span style="color:#666">10000</span><span style="color:#bbb"> </span>;<span style="color:#bbb">                </span><span style="color:#080;font-style:italic"># Number of bindings per page</span><span style="color:#bbb">
+</span><span style="color:#bbb">  </span><span style="color:#00f;font-weight:bold">se:</span><span style="color:#008000;font-weight:bold">bulkMaxSize</span><span style="color:#bbb"> </span><span style="color:#666">100</span><span style="color:#bbb"> </span>;<span style="color:#bbb">                    </span><span style="color:#080;font-style:italic"># Maximum number of input bindings to group into a bulk request</span><span style="color:#bbb">
+</span><span style="color:#bbb">  </span><span style="color:#00f;font-weight:bold">se:</span><span style="color:#008000;font-weight:bold">bulkSize</span><span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>;<span style="color:#bbb">                        </span><span style="color:#080;font-style:italic"># Default bulk size when not specifying a size</span><span style="color:#bbb">
+</span><span style="color:#bbb">  </span><span style="color:#00f;font-weight:bold">se:</span><span style="color:#008000;font-weight:bold">bulkMaxOutOfBandSize</span><span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>;<span style="color:#bbb">            </span><span style="color:#080;font-style:italic"># Dispatch non-full batches as soon as this number of non-fitting</span><span style="color:#bbb">
+</span><span style="color:#bbb">                                          </span><span style="color:#080;font-style:italic"># input bindings have been encountered</span><span style="color:#bbb">
 </span><span style="color:#bbb">  </span><span style="color:#00f;font-weight:bold">se:</span><span style="color:#008000;font-weight:bold">enableMgmt</span><span style="color:#bbb"> </span>false<span style="color:#bbb">                     </span><span style="color:#080;font-style:italic"># Enables management functions;</span><span style="color:#bbb">
 </span><span style="color:#bbb">                                          </span><span style="color:#080;font-style:italic"># wraps the base dataset with an independent context</span><span style="color:#bbb">
 </span><span style="color:#bbb">  </span>.<span style="color:#bbb">
 </span><span style="color:#bbb">
 </span><span style="color:#bbb"></span><span style="color:#b8860b">&lt;urn:example:base&gt;</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">a</span><span style="color:#bbb"> </span><span style="color:#00f;font-weight:bold">ja:</span><span style="color:#008000;font-weight:bold">MemoryDataset</span><span style="color:#bbb"> </span>.<span style="color:#bbb">
-</span></code></pre></div><p>In the example above, the shown values for <code>se:cacheMaxEntryCount</code>, <code>se:cacheMaxPageCount</code> and <code>se:cachePageSize</code> are the defaults which are used if those options are left unspecified.
+</span></code></pre></div><p>In the example above, the shown values for <code>se:cacheMaxEntryCount</code>, <code>se:cacheMaxPageCount</code>, <code>se:cachePageSize</code>, <code>se:bulkMaxSize</code>, <code>se:bulkSize</code> and <code>se:bulkMaxOutOfBandSize</code> are the defaults which are used if those options are left unspecified.
 They allow for caching up to 45mio bindings (300 x 15 x 10000).
 There is one caveat though: Specifying the cache options puts a new a cache instance in the dataset&rsquo;s context. Without these options the global cache instance that is registered in the ARQ context by the SE plugin during service loading is used.
 Presently, the global instance cannot be configured via the assembler.</p>
@@ -373,7 +377,7 @@ Dataset dataset <span style="color:#666">=</span> DatasetFactory<span style="col
 <p>This section assumes that one of the distributions of <code>apache-jena-fuseki</code> has been downloaded from [https://jena.apache.org/download/].
 The extracted folder should contain the <code>./fuseki-server</code> executable start script which automatically loads all jars (relative to <code>$PWD</code>) under <code>run/extra</code>.
 These folders need to be created e.g. using <code>mkdir -p run/extra</code>. The SE plugin can be manually built or downloaded from maven central (it is self-contained without transitive dependencies).
-Placing it into the <code>run/extra</code> folder makes it available for use with Fuseki. The plugin and Fuseki version should match.</p>
+Placing it into the <code>run/extra</code> folder makes it available for use with Fuseki. The plugin and Fuseki versions should match.</p>
 <h4 id="fuseki-assembler-configuration">Fuseki Assembler Configuration</h4>
 <p>The snippet below shows a simple setup of enabling the SE plugin for a given base dataset.
 Cache management can be performed via SPARQL extension functions. However, usually not every user should be allowed to invalidate caches as this
@@ -419,6 +423,12 @@ The context symbols are in the namespace <code>http://jena.apache.org/service-en
 <td>Maximum number of input bindings to group into a single bulk request; restricts <code>serviceBulkRequestItemCount</code>. When using <code>bulk+n</code> then <code>n</code> will be capped to the configured value.</td>
 </tr>
 <tr>
+<td><code>serviceBulkMaxOutOfBandBindingCount</code></td>
+<td>int</td>
+<td>30</td>
+<td>Dispatch non-full batches as soon as this number of non-fitting bindings have been read from the input iterator</td>
+</tr>
+<tr>
 <td><code>datasetId</code></td>
 <td>String</td>
 <td>null</td>
@@ -558,7 +568,7 @@ and derive a backend request that only fetches the needed parts.</p>
 </code></pre></div><p>Note, that in pathological cases this can require a bulk request to be repeatedly re-executed with disabled caches for each input binding.
 For example, assume that the largest result yet set seen for a service is 1000 and the system is about to serve the 1001st binding from cache for a specific input binding.
 The question is whether this would exceed the service&rsquo;s so far unknown result set size limit. Therefore, in order to answer that question a remote request that bypasses the cache is performed.
-Furthermore, let&rsquo;s assume that request produces 2000 results. Then for the problem repeats once another input binding&rsquo;s 2001st result was about to be served.</p>
+Furthermore, let&rsquo;s assume that another request produced 2000 results. Then the problem repeats once another input binding&rsquo;s 2001st result were about to be served.</p>
 <h3 id="sparql-functions">SPARQL Functions</h3>
 <p>The service enhancer plugin introduces functions and property functions for listing cache content and removing cache entries.
 The namespace is</p>
@@ -614,14 +624,14 @@ The namespace is</p>
 | 2  | &quot;urn:x-arq:self@dataset813601419&quot; | &quot;SELECT  (&lt;urn:x-arq:DefaultGraph&gt; AS ?g) ?p (count(*) AS ?c)\nWHERE\n  { ?s  a  ?o }\nGROUP BY ?p\n&quot; | &quot;( ?p = rdf:type )&quot; |
 | 3  | &quot;urn:x-arq:self@dataset813601419&quot; | &quot;SELECT  ?g ?p (count(*) AS ?c)\nWHERE\n  { GRAPH ?g\n      { ?s  a  ?o }\n  }\nGROUP BY ?g ?p\n&quot;     | &quot;( ?p = rdf:type )&quot; |
 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-</code></pre><h4 id="example-invaliding-all-cache-entries">Example: Invaliding all cache entries</h4>
+</code></pre><h4 id="example-invaliding-all-cache-entries">Example: Invaliding All Cache Entries</h4>
 <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sparql" data-lang="sparql"><span style="color:#a2f;font-weight:bold">PREFIX</span> <span style="color:#00f;font-weight:bold">se</span>: <span style="color:#a0a000">&lt;http://jena.apache.org/service-enhancer#&gt;</span>
 <span style="color:#a2f;font-weight:bold">SELECT</span> (<span style="color:#00f;font-weight:bold">se</span>:<span style="color:#008000;font-weight:bold">cacheRm</span>() <span style="color:#a2f;font-weight:bold">AS</span> <span style="color:#b8860b">?count</span>) { }
-</code></pre></div><h4 id="example-invalidating-specific-cache-entries">Example: Invalidating specific cache entries</h4>
+</code></pre></div><h4 id="example-invalidating-specific-cache-entries">Example: Invalidating Specific Cache Entries</h4>
 <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sparql" data-lang="sparql"><span style="color:#a2f;font-weight:bold">PREFIX</span> <span style="color:#00f;font-weight:bold">se</span>: <span style="color:#a0a000">&lt;http://jena.apache.org/service-enhancer#&gt;</span>
 
 <span style="color:#a2f;font-weight:bold">SELECT</span> <span style="color:#00a000">SUM</span>(<span style="color:#00f;font-weight:bold">se</span>:<span style="color:#008000;font-weight:bold">cacheRm</span>(<span style="color:#b8860b">?id</span>) <span style="color:#a2f;font-weight:bold">AS</span> <span style="color:#b8860b">?count</span>) {
-  <span style="color:#b8860b">?id</span> <span style="color:#00f;font-weight:bold">se</span>:<span style="color:#008000;font-weight:bold">cacheList</span> (<span style="color:#a0a000">&lt;http://dbpedia.org/sparql&gt;</span>)
+  <span style="color:#b8860b">?id</span> <span style="color:#00f;font-weight:bold">se</span>:<span style="color:#008000;font-weight:bold">cacheLs</span> (<span style="color:#a0a000">&lt;http://dbpedia.org/sparql&gt;</span>)
 }
 </code></pre></div><p>For completeness, the functions can be addressed via their fully qualified Java class names:</p>
 <pre><code>&lt;java:org.apache.jena.sparql.service.enhancer.pfunction.cacheLs&gt;
diff --git a/content/documentation/rdf-patch/__index.html b/content/documentation/rdf-patch/index.html
similarity index 97%
rename from content/documentation/rdf-patch/__index.html
rename to content/documentation/rdf-patch/index.html
index ea17419d1..2da1b1554 100644
--- a/content/documentation/rdf-patch/__index.html
+++ b/content/documentation/rdf-patch/index.html
@@ -3,7 +3,7 @@
 <head>
     
 
-    <title>Apache Jena - </title>
+    <title>Apache Jena - RDF Patch</title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
@@ -142,6 +142,9 @@
 
 
 
+    
+    
+
 
 <ol class="breadcrumb">
     
@@ -160,15 +163,7 @@
         
         
             
-                <li><a href='/documentation/rdf-patch'>RDF PATCH</a></li>
-            
-            
-        
-    
-        
-        
-            
-                <li class="active">INDEX</li>
+                <li class="active">RDF PATCH</li>
             
             
         
@@ -180,12 +175,9 @@
 
                 
             </div>
-            <h1 class="title"></h1>
+            <h1 class="title">RDF Patch</h1>
             
-	<h2 id="slug-index">f&mdash;
-title: RDF Patch
-slug: index</h2>
-<p>This page describes RDF Patch. An RDF Patch is a set of changes to an
+	<p>This page describes RDF Patch. An RDF Patch is a set of changes to an
 <a href="https://www.w3.org/TR/rdf11-concepts/#section-dataset">RDF dataset</a>.
 The change are for triples, quads and prefixes.</p>
 <p>Changes to triples involving blank nodes are handled by using their system
diff --git a/content/documentation/rdfpatch/index.html b/content/documentation/rdfpatch/index.html
new file mode 100644
index 000000000..0a09f1d50
--- /dev/null
+++ b/content/documentation/rdfpatch/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html><head><title>https://jena.apache.org/documentation/rdf-patch/</title><link rel="canonical" href="https://jena.apache.org/documentation/rdf-patch/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://jena.apache.org/documentation/rdf-patch/" /></head></html>
\ No newline at end of file
diff --git a/content/documentation/shex/index.html b/content/documentation/shex/index.html
index bda53ac75..e9fdc2be0 100644
--- a/content/documentation/shex/index.html
+++ b/content/documentation/shex/index.html
@@ -197,8 +197,8 @@ scoped to the file, and not retained after the file has been read.</p>
 <p>The command <code>shex</code> introduces shex operations; it takes a sub-command
 argument.</p>
 <p>To validate:</p>
-<pre>shex validate --schema SCHEMA.shex --map MAP.shexmap --data DATA.ttl</pre>
-<pre>shex v -s SCHEMA.shex -m MAp.shexmap -d data.ttl</pre>
+<pre>shex validate --schema SCHEMA.shex --map MAP.smap --data DATA.ttl</pre>
+<pre>shex v -s SCHEMA.shex -m MAP.smap -d data.ttl</pre>
 <p>To parse a file:</p>
 <pre>shex parse <i>FILE</i></pre>
 <pre>shex p <i>FILE</i></pre>
@@ -230,7 +230,7 @@ can be given, separated by "," and format `all` outputs all 3 formats.
 
         // Shapes map.
         System.out.println(&quot;Read shapes map&quot;);
-        ShexMap shapeMap = Shex.readShapeMap(SHAPES_MAP);
+        ShapeMap shapeMap = Shex.readShapeMap(SHAPES_MAP);
 
         // ShexReport
         System.out.println(&quot;Validate&quot;);
diff --git a/content/index.xml b/content/index.xml
index 5b7a73b98..e857c07d9 100644
--- a/content/index.xml
+++ b/content/index.xml
@@ -10,17 +10,6 @@
 	<atom:link href="https://jena.apache.org/index.xml" rel="self" type="application/rss+xml" />
     
     
-    <item>
-      <title></title>
-      <link>https://jena.apache.org/documentation/rdf-patch/__index.html</link>
-      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-      
-      <guid>https://jena.apache.org/documentation/rdf-patch/__index.html</guid>
-      <description>f&amp;mdash; title: RDF Patch slug: index This page describes RDF Patch. An RDF Patch is a set of changes to an RDF dataset. The change are for triples, quads and prefixes.
-Changes to triples involving blank nodes are handled by using their system identifier which uniquely identifies a blank node. Unlike RDF syntaxes, blank nodes are not generated afresh each time the document is parsed.
-Example This example ensures certain prefixes are in the dataset and adds some basic triples for a new subclass of &amp;lt;http://example/SUPER_CLASS&amp;gt;.</description>
-    </item>
-    
     <item>
       <title>A brief guide to Jena Eyeball</title>
       <link>https://jena.apache.org/documentation/archive/eyeball/eyeball-guide.html</link>
@@ -165,11 +154,11 @@ Getting Started GeoSPARQL Jena can be accessed as a library using Maven etc. fro
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
       
       <guid>https://jena.apache.org/documentation/notes/system-initialization.html</guid>
-      <description>Jena has a simple initialization sequence that is used to setup components available at runtime.
-Application code is welcome to also use this mechanism. This must be done with care. Java initialization can lead to visibility of uninitialized data.
+      <description>Jena has an initialization sequence that is used to setup components available at runtime.
+Application code is welcome to also use this mechanism. This must be done with care. During Jena initialization, there is visibility of uninitialized data.
 The standard initialization sequence is
 Core -&amp;gt; RIOT -&amp;gt; ARQ -&amp;gt; TDB -&amp;gt; other (including jena text)
-The sequence from core to TDB should be executed before application components. See below for how to control the order.</description>
+The sequence from core to level 500 should be executed before application components. See below for how to control the order.</description>
     </item>
     
     <item>
@@ -1127,7 +1116,7 @@ Throughout this document, the prefix eye: stands for the URL http://jena.</descr
       <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
       
       <guid>https://jena.apache.org/documentation/javadoc.html</guid>
-      <description> Jena Core JavaDoc ARQ JavaDoc (SPARQL) TDB JavaDoc RDF Connection Fuseki JavaDoc  Fuseki2 Webapp Fuseki2 Main   Text search SHACL ShEx GeoSPARQL Query Builder Service Enhancer Security Permissions JavaDoc JDBC JavaDoc  </description>
+      <description> Jena Core JavaDoc ARQ JavaDoc (SPARQL) TDB JavaDoc RDF Connection Fuseki JavaDoc  Fuseki2 Webapp Fuseki2 Main   Text search SHACL ShEx RDF Patch GeoSPARQL Query Builder Service Enhancer Security Permissions JavaDoc JDBC JavaDoc  </description>
     </item>
     
     <item>
@@ -1443,6 +1432,17 @@ Binary formats are faster to process - they do not incur the parsing costs of te
 Outline RDFConnection provides a number of different styles for working with RDF data in Java.</description>
     </item>
     
+    <item>
+      <title>RDF Patch</title>
+      <link>https://jena.apache.org/documentation/rdf-patch/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      
+      <guid>https://jena.apache.org/documentation/rdf-patch/</guid>
+      <description>This page describes RDF Patch. An RDF Patch is a set of changes to an RDF dataset. The change are for triples, quads and prefixes.
+Changes to triples involving blank nodes are handled by using their system identifier which uniquely identifies a blank node. Unlike RDF syntaxes, blank nodes are not generated afresh each time the document is parsed.
+Example This example ensures certain prefixes are in the dataset and adds some basic triples for a new subclass of &amp;lt;http://example/SUPER_CLASS&amp;gt;.</description>
+    </item>
+    
     <item>
       <title>RDF/XML Handling in Jena</title>
       <link>https://jena.apache.org/documentation/io/arp.html</link>
@@ -1777,7 +1777,7 @@ Serving RDF For any use of users-password information, and especially HTTP basic
       
       <guid>https://jena.apache.org/documentation/query/service_enhancer.html</guid>
       <description>The service enhancer (SE) plugin extends the functionality of the SERVICE clause with:
- Bulk requests Correlated joins also known as lateral joins A streaming cache for SERVICE requests results which can also cope with bulk requests and correlated joins. Furthermore, queries that only differ in limit and offset will result in cache hits for overlapping ranges. At present, the plugin only ships with an in-memory caching provider.  As a fundamental principle, a request making use of cache and bulk should return the exact same result as if those settings were omitted.</description>
+ Bulk requests Correlated joins also known as lateral joins A streaming cache for SERVICE requests results which can also cope with bulk requests and correlated joins. Furthermore, queries that only differ in limit and offset will result in cache hits for overlapping ranges. At present, the plugin only ships with an in-memory cache provider.  As a fundamental principle, a request making use of cache and bulk should return the exact same result as if those settings were omitted.</description>
     </item>
     
     <item>
diff --git a/content/sitemap.xml b/content/sitemap.xml
index 46629a846..30098dea2 100644
--- a/content/sitemap.xml
+++ b/content/sitemap.xml
@@ -2,11 +2,6 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
   xmlns:xhtml="http://www.w3.org/1999/xhtml">
   
-  <url>
-    <loc>https://jena.apache.org/documentation/rdf-patch/__index.html</loc>
-    <lastmod>2022-11-16T13:22:32+00:00</lastmod>
-  </url>
-  
   <url>
     <loc>https://jena.apache.org/documentation/archive/eyeball/eyeball-guide.html</loc>
     <lastmod>2020-06-28T16:59:07+01:00</lastmod>
@@ -79,7 +74,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/notes/system-initialization.html</loc>
-    <lastmod>2021-03-16T21:05:16+00:00</lastmod>
+    <lastmod>2023-01-07T15:49:38+00:00</lastmod>
   </url>
   
   <url>
@@ -104,7 +99,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/shex/</loc>
-    <lastmod>2021-11-15T19:40:46+00:00</lastmod>
+    <lastmod>2022-10-28T12:50:41+02:00</lastmod>
   </url>
   
   <url>
@@ -199,7 +194,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/query/lateral-join.html</loc>
-    <lastmod>2022-11-21T20:29:57+00:00</lastmod>
+    <lastmod>2023-01-03T12:22:38+00:00</lastmod>
   </url>
   
   <url>
@@ -279,7 +274,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/notes/jena-repack.html</loc>
-    <lastmod>2021-02-19T15:39:55+13:00</lastmod>
+    <lastmod>2022-09-28T15:55:54+03:00</lastmod>
   </url>
   
   <url>
@@ -339,7 +334,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation.html</loc>
-    <lastmod>2022-11-21T20:29:57+00:00</lastmod>
+    <lastmod>2023-01-07T15:49:38+00:00</lastmod>
   </url>
   
   <url>
@@ -409,7 +404,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/fuseki2/fuseki-server-protocol.html</loc>
-    <lastmod>2022-07-27T16:28:14+02:00</lastmod>
+    <lastmod>2022-09-13T12:11:16+03:00</lastmod>
   </url>
   
   <url>
@@ -549,7 +544,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/javadoc.html</loc>
-    <lastmod>2022-08-25T10:53:31+01:00</lastmod>
+    <lastmod>2023-01-03T13:19:45+00:00</lastmod>
   </url>
   
   <url>
@@ -669,7 +664,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/notes/rdf-frames.html</loc>
-    <lastmod>2020-02-28T13:09:12+01:00</lastmod>
+    <lastmod>2023-01-04T17:37:16-05:00</lastmod>
   </url>
   
   <url>
@@ -697,6 +692,11 @@
     <lastmod>2022-06-15T14:52:32+02:00</lastmod>
   </url>
   
+  <url>
+    <loc>https://jena.apache.org/documentation/rdf-patch/</loc>
+    <lastmod>2023-01-03T12:26:01+00:00</lastmod>
+  </url>
+  
   <url>
     <loc>https://jena.apache.org/documentation/io/arp.html</loc>
     <lastmod>2020-02-28T13:09:12+01:00</lastmod>
@@ -714,7 +714,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/io/rdf-input.html</loc>
-    <lastmod>2022-08-26T15:49:37+01:00</lastmod>
+    <lastmod>2023-01-07T10:20:20+01:00</lastmod>
   </url>
   
   <url>
@@ -849,7 +849,7 @@
   
   <url>
     <loc>https://jena.apache.org/documentation/query/service_enhancer.html</loc>
-    <lastmod>2022-08-25T18:30:14+01:00</lastmod>
+    <lastmod>2022-09-07T22:46:36+02:00</lastmod>
   </url>
   
   <url>