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 0586d002d Staged site from fuseki-modules
(8842c7fb7f32f7fba5f28057ae3a3afe7bb4d246)
0586d002d is described below
commit 0586d002d95fe049924da5451a5068aee066e234
Author: jenkins <[email protected]>
AuthorDate: Wed Jun 7 18:47:08 2023 +0000
Staged site from fuseki-modules (8842c7fb7f32f7fba5f28057ae3a3afe7bb4d246)
---
content/documentation/fuseki2/fuseki-modules.html | 128 ++++++++++++++++------
content/documentation/index.xml | 6 +-
content/index.json | 2 +-
content/index.xml | 6 +-
content/sitemap.xml | 4 +-
5 files changed, 102 insertions(+), 44 deletions(-)
diff --git a/content/documentation/fuseki2/fuseki-modules.html
b/content/documentation/fuseki2/fuseki-modules.html
index 505cc5f8e..2722084ff 100644
--- a/content/documentation/fuseki2/fuseki-modules.html
+++ b/content/documentation/fuseki2/fuseki-modules.html
@@ -181,49 +181,82 @@
<aside class="text-muted align-self-start mb-3 p-0 d-xl-none d-block">
<h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
- <nav id="TableOfContents"></nav>
+ <nav id="TableOfContents">
+ <ul>
+ <li>
+ <ul>
+ <li><a href="#automatically-loaded">Automatically loaded</a></li>
+ <li><a href="#programmaticaly-configuring-a-server">Programmaticaly
configuring a server</a></li>
+ <li><a href="#fuseki-module-operations">Fuseki Module
operations</a></li>
+ <li><a href="#fusekimodule-interface"><code>FusekiModule</code>
interface</a></li>
+ </ul>
+ </li>
+ </ul>
+</nav>
</aside>
<article class="flex-column me-lg-4">
<p><em>Fuseki modules</em> are a mechanism to include extension code into
a Fuseki
server. Modules are invoked during the process of building a <a
href="./fuseki-main.html">Fuseki
-Main</a> server. The module can modify the server
+Main</a> server. A module can modify the server
configuration, add new functionality, or react to a server being built and
started.</p>
-<p>This feature was added in Jena version 4.3.0. They are an expeirmental
feature
+<p>This feature was added in Jena version 4.3.0. It is an expeirmental feature
that will evolve based on experineace and use cases.</p>
-<p>Fuseki Modules are loaded use the JDK
-<a href="https://www.baeldung.com/java-spi">ServiceLoader</a> by being placing
a jar file on the classpath,
+<p>FusekiModules can be provided in two ways:</p>
+<ul>
+<li>Loaded from additional jars on the classpath</li>
+<li>Programmatically controlling the setup of the <code>FusekiServer</code>
server.</li>
+</ul>
+<h3 id="automatically-loaded">Automatically loaded</h3>
+<p>Fuseki Modules can be loaded use the JDK
+<a href="https://www.baeldung.com/java-spi">ServiceLoader</a> by being placing
+a jar file on the classpath,
together with any additional dependencies. The service loader looks for files
<code>META-INF/services/org.apache.jena.fuseki.main.sys.FusekiModule</code> in
the jar
-file.
-This is often done by placing the file in the development code in
+file.</p>
+<p>This is often done by placing the file in the development code in
<code>src/main/resources/META-INF/services/</code>).
The file containing a line with the implementation full class name. If
<a href="../notes/jena-repack.html">repacking</a> Fuseki with the
maven-shade-plugin, make
sure the <code>ServicesResourceTransformer</code> is used. The module must
have a no
argument constructor.</p>
-<p>If using Fuseki as an <a href="./fuseki-embedded.html">embedded server</a>,
the module is
-added in code as:</p>
-<pre tabindex="0"><code> FusekiModule module = new MyModule();
- FusekiModules.add(module);
-</code></pre><p>The method <code>start</code> is called when the module is
loaded. Custom operations can
+<p>The method <code>start</code> is called when the module is loaded. Custom
operations can
be globally registered at this point (see the <a
href="https://github.com/apache/jena/tree/main/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/examples">Fuseki
examples</a> directory).</p>
+<h3 id="programmaticaly-configuring-a-server">Programmaticaly configuring a
server</h3>
+<p>If using Fuseki as an <a href="./fuseki-embedded.html">embedded server</a>,
the module is
+added in code as:</p>
+<pre tabindex="0"><code> FusekiModule myModule = new MyModule();
+ FusekiModules fmods = FusekiModules.create(myModule);
+ FusekiServer server = FusekiServer.create()
+ ...
+ .fusekiModules(fmods)
+ ...
+ .build();
+</code></pre><p><code>FusekiModule.start()</code> is not automatically
called.</p>
+<h3 id="fuseki-module-operations">Fuseki Module operations</h3>
<p>The module lifecycle during creating a Fuseki server is:</p>
<ul>
-<li><code>configuration</code> - access and modify the setup.
-This is called after the server has been configured, just before the server is
built.</li>
-<li><code>server</code> - access the built server</li>
-<li><code>serverBeforeStarting</code> - about to call
“server.start()”</li>
-<li><code>serverAfterStarting</code> - just after calling
“server.start()”</li>
-<li><code>serverStopped</code> - called as the server stop
+<li><code>prepare</code> - called at the start of the server
+build steps before setting up the datasets.</li>
+<li><code>configured</code> - access and modify the setup.
+This is called after the server has been configured, before the server is
built.
+It defaults to calls to <code>configDataAccessPoint</code> for dataset being
hosted by the server.</li>
+<li><code>server</code> - called after the built, beforee the return of
<code>FusekiServerBuilder.build()</code></li>
+</ul>
+<p>and the Fuseki start up sequence is:</p>
+<ul>
+<li><code>serverBeforeStarting</code> - called at the start of
<code>server.start()</code></li>
+<li><code>serverAfterStarting</code> - called at the end of
<code>server.start()</code></li>
+<li><code>serverStopped</code> - called as just after the server
+has stopped in the <code>server.stop()</code> call.
(note, this is not always called because a server can simply exit the
JVM).</li>
</ul>
-<p>A Fuseki module does not need to implement all these steps, the default for
all
+<p>A Fuseki module does not need to implement all these steps. The default for
all
of them is “do nothing”. Usually, an extension will only be
interested in
certain stpes, like the configuration and registry information of
<code>configuration</code>.</p>
-<p>During the configuration step, the Fuskei configuration file for the server
is
+<p>During the configuration step, the Fuseki configuration file for the server
is
available. If the server is built programmatically without a configuration
file,
this is null.</p>
<p>The configuration file can contain RDF information to build resources (e.g.
@@ -231,7 +264,7 @@ contains assembler descriptions not directly linked to the
server).</p>
<p>There is an <a
href="https://github.com/apache/jena/blob/main/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/examples/ExFusekiMain_3_FusekiModule.java">example
Fuseki
Module</a>
in the Fuseki examples directory.</p>
-<p><code>FusekiModule</code> interface:</p>
+<h3 id="fusekimodule-interface"><code>FusekiModule</code> interface</h3>
<div class="highlight"><pre tabindex="0"
style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span style="display:flex;"><span><span
style="color:#080;font-style:italic">/**
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * Module interface for Fuseki.
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * <p>
@@ -240,37 +273,51 @@ in the Fuseki examples directory.</p>
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> */</span>
</span></span><span style="display:flex;"><span><span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">interface</span> <span
style="color:#00f">FusekiModule</span> <span
style="color:#a2f;font-weight:bold">extends</span> SubsystemLifecycle <span
style="color:#666">{</span>
</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">/**
-</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * Unique (within this server) name to
identify this module.
-</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * The default is to generate an UUID.
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * Display name to identify this
module.
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> */</span>
</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> String <span
style="color:#00a000">name</span><span style="color:#666">();</span>
</span></span><span style="display:flex;"><span>
-</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">/** Module loaded */</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">/** Module loaded by the JVM service
loader */</span>
</span></span><span style="display:flex;"><span> <span
style="color:#a2f">@Override</span>
-</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">default</span> <span
style="color:#0b0;font-weight:bold">void</span> <span
style="color:#00a000">start</span><span style="color:#666">()</span> <span
style="color:#666">{}</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">default</span> <span
style="color:#0b0;font-weight:bold">void</span> <span
style="color:#00a000">start</span><span style="color:#666">()</span> <span
style="color:#666">{</span> <span style="color:#666">}</span>
</span></span><span style="display:flex;"><span>
-</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">// ---- Build cycle
+</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">// -- Build cycle.
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"></span>
</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">/**
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * Called at the start of
"build" step. The builder has been set according to the
-</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * configuration. The
"configModel" parameter is set if a configuration file was
-</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * used otherwise it is null.
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * configuration of API calls and
parsing configuration files. No build actions have been carried out yet.
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * The module can make further
FusekiServer.{@link Builder} calls.
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * The "configModel" parameter
is set if a configuration file was used otherwise it is null.
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> */</span>
-</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">default</span> <span
style="color:#0b0;font-weight:bold">void</span> <span
style="color:#00a000">configuration</span><span
style="color:#666">(</span>FusekiServer<span style="color:#666">.</span><span
style="color:#b44">Builder</span> builder<span style="color:#666">,</span>
DataAccessPointRegistry dapRegistry<span style="color:#666">,</spa [...]
-</span></span><span style="display:flex;"><span> dapRegistry<span
style="color:#666">.</span><span style="color:#b44">accessPoints</span><span
style="color:#666">().</span><span style="color:#b44">forEach</span><span
style="color:#666">(</span>accessPoint<span
style="color:#666">-></span>configDataAccessPoint<span
style="color:#666">(</span>builder<span style="color:#666">,</span>
accessPoint<span style="color:#666">,</span> configModel<span
style="color:#666">));</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">default</span> <span
style="color:#0b0;font-weight:bold">void</span> <span
style="color:#00a000">prepare</span><span
style="color:#666">(</span>FusekiServer<span style="color:#666">.</span><span
style="color:#b44">Builder</span> serverBuilder<span
style="color:#666">,</span> Set<span style="color:#666"><</span>String<span
style="color:#6 [...]
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">/**
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * Called after the
DataAccessPointRegistry has been built.
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * <p>
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * The default implementation is to
call {@link #configDataAccessPoint(DataAccessPoint, Model)}
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * for each {@link DataAccessPoint}.
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * <pre>
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> *
dapRegistry.accessPoints().forEach(accessPoint{@literal
->}configDataAccessPoint(accessPoint, configModel));
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * </pre>
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> */</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">default</span> <span
style="color:#0b0;font-weight:bold">void</span> <span
style="color:#00a000">configured</span><span
style="color:#666">(</span>FusekiServer<span style="color:#666">.</span><span
style="color:#b44">Builder</span> serverBuilder<span
style="color:#666">,</span> DataAccessPointRegistry dapRegistry<span
style="color:#666">,</ [...]
+</span></span><span style="display:flex;"><span> dapRegistry<span
style="color:#666">.</span><span style="color:#b44">accessPoints</span><span
style="color:#666">().</span><span style="color:#b44">forEach</span><span
style="color:#666">(</span>accessPoint<span
style="color:#666">-></span>configDataAccessPoint<span
style="color:#666">(</span>accessPoint<span style="color:#666">,</span>
configModel<span style="color:#666">));</span>
</span></span><span style="display:flex;"><span> <span
style="color:#666">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">/**
-</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * This method is called for each
{@link DataAccessPoint}
-</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * by the default implementation of
{@link #configuration}.
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * This method is called for each
{@link DataAccessPoint} by the default
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * implementation of {@link
#configured} after the new servers
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * DataAccessPointRegistry has been
built.
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> */</span>
-</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">default</span> <span
style="color:#0b0;font-weight:bold">void</span> <span
style="color:#00a000">configDataAccessPoint</span><span
style="color:#666">(</span>FusekiServer<span style="color:#666">.</span><span
style="color:#b44">Builder</span> builder<span style="color:#666">,</span>
DataAccessPoint dap<span style="color:#666">,</span> Model [...]
+</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">default</span> <span
style="color:#0b0;font-weight:bold">void</span> <span
style="color:#00a000">configDataAccessPoint</span><span
style="color:#666">(</span>DataAccessPoint dap<span style="color:#666">,</span>
Model configModel<span style="color:#666">)</span> <span
style="color:#666">{}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">/**
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * Built, not started, about to be
returned to the builder caller.
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> */</span>
</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">default</span> <span
style="color:#0b0;font-weight:bold">void</span> <span
style="color:#00a000">server</span><span
style="color:#666">(</span>FusekiServer server<span style="color:#666">)</span>
<span style="color:#666">{</span> <span style="color:#666">}</span>
</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">// -- Server start up
+</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"></span>
</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">/**
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> * Server starting - called just
before server.start happens.
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> */</span>
@@ -289,7 +336,7 @@ in the Fuseki examples directory.</p>
</span></span></span><span style="display:flex;"><span><span
style="color:#080;font-style:italic"> */</span>
</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">default</span> <span
style="color:#0b0;font-weight:bold">void</span> <span
style="color:#00a000">serverStopped</span><span
style="color:#666">(</span>FusekiServer server<span style="color:#666">)</span>
<span style="color:#666">{</span> <span style="color:#666">}</span>
</span></span><span style="display:flex;"><span>
-</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">/** Module unloaded */</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#080;font-style:italic">/** Module unloaded : do not rely on this
happening. */</span>
</span></span><span style="display:flex;"><span> <span
style="color:#a2f">@Override</span>
</span></span><span style="display:flex;"><span> <span
style="color:#a2f;font-weight:bold">public</span> <span
style="color:#a2f;font-weight:bold">default</span> <span
style="color:#0b0;font-weight:bold">void</span> <span
style="color:#00a000">stop</span><span style="color:#666">()</span> <span
style="color:#666">{}</span>
</span></span><span style="display:flex;"><span><span
style="color:#666">}</span>
@@ -298,7 +345,18 @@ in the Fuseki examples directory.</p>
<aside class="text-muted align-self-start mb-3 mb-xl-5 p-0 d-none d-xl-flex
flex-column sticky-top">
<h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
- <nav id="TableOfContents"></nav>
+ <nav id="TableOfContents">
+ <ul>
+ <li>
+ <ul>
+ <li><a href="#automatically-loaded">Automatically loaded</a></li>
+ <li><a href="#programmaticaly-configuring-a-server">Programmaticaly
configuring a server</a></li>
+ <li><a href="#fuseki-module-operations">Fuseki Module
operations</a></li>
+ <li><a href="#fusekimodule-interface"><code>FusekiModule</code>
interface</a></li>
+ </ul>
+ </li>
+ </ul>
+</nav>
</aside>
</main>
diff --git a/content/documentation/index.xml b/content/documentation/index.xml
index 8067c2142..a0f5f2496 100644
--- a/content/documentation/index.xml
+++ b/content/documentation/index.xml
@@ -810,9 +810,9 @@ Many web log analysers can process this
format.</description>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://jena.apache.org/documentation/fuseki2/fuseki-modules.html</guid>
- <description>Fuseki modules are a mechanism to include extension code
into a Fuseki server. Modules are invoked during the process of building a
Fuseki Main server. The module can modify the server configuration, add new
functionality, or react to a server being built and started.
-This feature was added in Jena version 4.3.0. They are an expeirmental feature
that will evolve based on experineace and use cases.
-Fuseki Modules are loaded use the JDK ServiceLoader by being placing a jar
file on the classpath, together with any additional dependencies.</description>
+ <description>Fuseki modules are a mechanism to include extension code
into a Fuseki server. Modules are invoked during the process of building a
Fuseki Main server. A module can modify the server configuration, add new
functionality, or react to a server being built and started.
+This feature was added in Jena version 4.3.0. It is an expeirmental feature
that will evolve based on experineace and use cases.
+FusekiModules can be provided in two ways:</description>
</item>
<item>
diff --git a/content/index.json b/content/index.json
index 2225c7766..f5709af50 100644
--- a/content/index.json
+++ b/content/index.json
@@ -1 +1 @@
-[{"categories":null,"contents":"This page is historical \u0026ldquo;for
information only\u0026rdquo; - there is no Apache release of Eyeball and the
code has not been updated for Jena3.\nThe original source code is available. So
you\u0026rsquo;ve got Eyeball installed and you\u0026rsquo;ve run it on one of
your files, and Eyeball doesn\u0026rsquo;t like it. You\u0026rsquo;re not sure
why, or what to do about it. Here\u0026rsquo;s what\u0026rsquo;s going
on.\nEyeball inspects your model a [...]
\ No newline at end of file
+[{"categories":null,"contents":"This page is historical \u0026ldquo;for
information only\u0026rdquo; - there is no Apache release of Eyeball and the
code has not been updated for Jena3.\nThe original source code is available. So
you\u0026rsquo;ve got Eyeball installed and you\u0026rsquo;ve run it on one of
your files, and Eyeball doesn\u0026rsquo;t like it. You\u0026rsquo;re not sure
why, or what to do about it. Here\u0026rsquo;s what\u0026rsquo;s going
on.\nEyeball inspects your model a [...]
\ No newline at end of file
diff --git a/content/index.xml b/content/index.xml
index b25200c0a..4df856345 100644
--- a/content/index.xml
+++ b/content/index.xml
@@ -872,9 +872,9 @@ Many web log analysers can process this
format.</description>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://jena.apache.org/documentation/fuseki2/fuseki-modules.html</guid>
- <description>Fuseki modules are a mechanism to include extension code
into a Fuseki server. Modules are invoked during the process of building a
Fuseki Main server. The module can modify the server configuration, add new
functionality, or react to a server being built and started.
-This feature was added in Jena version 4.3.0. They are an expeirmental feature
that will evolve based on experineace and use cases.
-Fuseki Modules are loaded use the JDK ServiceLoader by being placing a jar
file on the classpath, together with any additional dependencies.</description>
+ <description>Fuseki modules are a mechanism to include extension code
into a Fuseki server. Modules are invoked during the process of building a
Fuseki Main server. A module can modify the server configuration, add new
functionality, or react to a server being built and started.
+This feature was added in Jena version 4.3.0. It is an expeirmental feature
that will evolve based on experineace and use cases.
+FusekiModules can be provided in two ways:</description>
</item>
<item>
diff --git a/content/sitemap.xml b/content/sitemap.xml
index 3c6df8739..2e1fd6c2c 100644
--- a/content/sitemap.xml
+++ b/content/sitemap.xml
@@ -201,7 +201,7 @@
<lastmod>2023-04-09T15:11:22+02:00</lastmod>
</url><url>
<loc>https://jena.apache.org/documentation.html</loc>
- <lastmod>2023-06-06T21:08:29+02:00</lastmod>
+ <lastmod>2023-06-07T19:01:10+01:00</lastmod>
</url><url>
<loc>https://jena.apache.org/download.html</loc>
<lastmod>2023-04-16T17:26:15+01:00</lastmod>
@@ -249,7 +249,7 @@
<lastmod>2022-09-18T09:08:25+02:00</lastmod>
</url><url>
<loc>https://jena.apache.org/documentation/fuseki2/fuseki-modules.html</loc>
- <lastmod>2022-02-01T20:25:33+00:00</lastmod>
+ <lastmod>2023-06-07T19:01:10+01:00</lastmod>
</url><url>
<loc>https://jena.apache.org/documentation/fuseki2/fuseki-quick-start.html</loc>
<lastmod>2021-09-16T13:13:09+02:00</lastmod>