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/06/07 18:47:12 UTC
[jena-site] branch asf-staging updated: Staged site from fuseki-modules (8842c7fb7f32f7fba5f28057ae3a3afe7bb4d246)
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 <bu...@apache.org>
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>