You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jena.apache.org by GitBox <gi...@apache.org> on 2020/09/20 21:47:11 UTC

[GitHub] [jena-site] kinow commented on a change in pull request #23: Fuseki doc updates

kinow commented on a change in pull request #23:
URL: https://github.com/apache/jena-site/pull/23#discussion_r491734641



##########
File path: source/documentation/fuseki2/fuseki-config-endpoint.md
##########
@@ -121,6 +93,61 @@ without a configuration file is:
 | `fuseki:upload` | HTML form file upload |
 | `fuseki:no-op`  | An operation that causes a 400 or 404 error |
 
+Custom extensions can be added (see [Programmatic configuration](fuseki-main.html#build) of the Fuseki server). To be able to uniquely identify the operation, these are usually 
+
+        fuseki:endpoint     [ 
+            fuseki:operation fuseki:shacl ;
+            fuseki:name      "shacl" ;
+        ] ;
+
+See the section ["Integration with Apache Jena Fuseki"](https://jena.apache.org/documentation/shacl/#integration-with-apache-jena-fuseki) for details of the SHACL support. While this operation is part of the standard Fuseki distribution, this operation is added during system initialization, using the custom operation support.
+
+### Command Line Equivalents
+
+The standard set of service installed by running the server from the command line
+without a configuration file is for a read-only:
+
+    <#service1> rdf:type fuseki:Service ;
+        fuseki:name "dataset" ;
+        fuseki:endpoint [ fuseki:operation fuseki:query ; ];
+        fuseki:endpoint [ fuseki:operation fuseki:query ; fuseki:name "sparql" ];
+        fuseki:endpoint [ fuseki:operation fuseki:query ; fuseki:name "query" ];
+
+        fuseki:endpoint [ fuseki:operation fuseki:gsp-r ; ];
+        fuseki:endpoint [ fuseki:operation fuseki:gsp-r ; fuseki:name "get" ];
+        fuseki:dataset ...
+
+which supports requests such as:
+
+    http://<i>host:port</i>/dataset?query=...
+    
+    http://<i>host:port</i>/dataset/sparql?query=...
+    
+    http://<i>host:port</i>/dataset?default
+    
+    http://<i>host:port</i>/dataset/get?default
+
+and for an updateatable dataset (command line `--mem` for an in-memory dataset;

Review comment:
       updatable? Or updateable?

##########
File path: source/documentation/fuseki2/fuseki-webapp.md
##########
@@ -1,48 +1,71 @@
 ---
-title: Running Fuseki
+title: Running Fuseki with UI
 ---
 
-Fuseki can be run in a number of ways:
+Fuseki/UI can be run in a number of ways:
 
 * [As a standalone server](#fuseki-standalone-server)
 * [As a service](#fuseki-service) run by the operation system, for example, started when the machine
 * [As a Web Application](#fuseki-web-application) inside a container such as Apache Tomcat or Jetty
 boots.
-* [As a configurable SPARQL server](#fuseki-main)
-* [As a deployment and development standalone server](#fuseki-server)
+
+Fuseki is also packaged as a plain server ["Fuseki Main"](fuseki-main.html)
+with no UI for use as a configurable SPARQL server, for [building as a Docker
+container](fuseki-docker.html), and as a deployment and development standalone
+server.
+
+Both packaging used the same configuration file format, and in standalone server
+mode, the same command line arguments.
 
 See "[Fuseki Configuration](fuseki-configuration.html)" for information on
-how to provide datasets and configure services.
+how to provide datasets and configure services usoing the configuration file.

Review comment:
       s/usoing/using

##########
File path: source/documentation/fuseki2/fuseki-config-endpoint.md
##########
@@ -1,17 +1,8 @@
 ---
-title: Fuseki Configuration - New Syntax
+title: Fuseki Data Service Configuration Syntax
 ---
 
-Apache Jena 3.13.0 introduces a new syntax for the facilities of a Fuseki service.
-
-The [previous syntax](fuseki-configuration.html) is still valid.
-
-The new syntax enables more configuration options:
-
-* setting the context on a per-endpoint basis
-* having multiple operations at the service access point, switching based on
-operation type
-* a more general structure for adding custom services
+Data service provide a number of operations on a dataset. These can be explicitly named endpoints or operations at he URL of the dataset.  New operations can be configured in; these typically have their own named endpoints.

Review comment:
       "Data service provides" or "Data services provide" I think?
   
   Also s/or operations at he/or operations at the/

##########
File path: source/documentation/fuseki2/fuseki-config-endpoint.md
##########
@@ -146,13 +173,15 @@ A GSP operation has `?default` or `?graph=`.
 Quads operations have no query string and a have a `Content-Type` for a data in
 a RDF triples or quads syntax.
 
+Quads operations only apply to requests sen tot he dataset URL.

Review comment:
       s/sen tot he/sent to the/

##########
File path: source/documentation/fuseki2/fuseki-webapp.md
##########
@@ -1,48 +1,71 @@
 ---
-title: Running Fuseki
+title: Running Fuseki with UI
 ---
 
-Fuseki can be run in a number of ways:
+Fuseki/UI can be run in a number of ways:
 
 * [As a standalone server](#fuseki-standalone-server)
 * [As a service](#fuseki-service) run by the operation system, for example, started when the machine
 * [As a Web Application](#fuseki-web-application) inside a container such as Apache Tomcat or Jetty
 boots.
-* [As a configurable SPARQL server](#fuseki-main)
-* [As a deployment and development standalone server](#fuseki-server)
+
+Fuseki is also packaged as a plain server ["Fuseki Main"](fuseki-main.html)
+with no UI for use as a configurable SPARQL server, for [building as a Docker
+container](fuseki-docker.html), and as a deployment and development standalone
+server.
+
+Both packaging used the same configuration file format, and in standalone server
+mode, the same command line arguments.
 
 See "[Fuseki Configuration](fuseki-configuration.html)" for information on
-how to provide datasets and configure services.
+how to provide datasets and configure services usoing the configuration file.
 
 ## Fuseki as a Standalone Server {#fuseki-standalone-server}
 
 This is running Fuseki from the command line.
 
-    fuseki-server [--mem | --loc=DIR] [[--update] /NAME]
-
-    fuseki-server --config=CONFIG
+To publish at <tt>http://<i>host</i>:3030/NAME</i></tt>:
 
 where `/NAME` is the dataset publishing name at this server in URI space.
 
+TDB1 database:
+
+    fuseki-server [--loc=DIR] [[--update] /NAME]
+
 The argument `--tdb2` puts the command line handling into "TDB2 mode".
 A dataset created with `--loc` is a TDB2 dataset.
+TDB2 database:
+
+    fuseki-server --tdb2 [--loc=DIR] [[--update] /NAME]
+
+In-memory, non-peristent database (always updatable):
+
+    fuseki-server --mem /NAME
+
+Load a file at start and provide it read-only:
+
+    fuseki-server --file=MyData.ttl /NAME
+
+where "MyData.ttl" can be any RDF format, both triples or quads. 
+
+Administrative functions are only avilable from "localhost".
 
 See `fuseki-server --help` for details of more arguments.
 
-`FUSEKI_BASE`, the runtime area for the server instance, defaults to the
-`run/` directory of the current directory.
+## Layout
+
+When run from the command line, the server creates its work area in the
+directory named by environment variable `FUSEKI_BASE`. When run from the
+commandline, this defaults to the current directory.

Review comment:
       s/commandline/command line? (as in the beginning of the paragraph)

##########
File path: source/documentation/fuseki2/fuseki-config-endpoint.md
##########
@@ -121,6 +93,61 @@ without a configuration file is:
 | `fuseki:upload` | HTML form file upload |
 | `fuseki:no-op`  | An operation that causes a 400 or 404 error |
 
+Custom extensions can be added (see [Programmatic configuration](fuseki-main.html#build) of the Fuseki server). To be able to uniquely identify the operation, these are usually 
+
+        fuseki:endpoint     [ 
+            fuseki:operation fuseki:shacl ;
+            fuseki:name      "shacl" ;
+        ] ;
+
+See the section ["Integration with Apache Jena Fuseki"](https://jena.apache.org/documentation/shacl/#integration-with-apache-jena-fuseki) for details of the SHACL support. While this operation is part of the standard Fuseki distribution, this operation is added during system initialization, using the custom operation support.
+
+### Command Line Equivalents
+
+The standard set of service installed by running the server from the command line
+without a configuration file is for a read-only:
+
+    <#service1> rdf:type fuseki:Service ;
+        fuseki:name "dataset" ;
+        fuseki:endpoint [ fuseki:operation fuseki:query ; ];
+        fuseki:endpoint [ fuseki:operation fuseki:query ; fuseki:name "sparql" ];
+        fuseki:endpoint [ fuseki:operation fuseki:query ; fuseki:name "query" ];
+
+        fuseki:endpoint [ fuseki:operation fuseki:gsp-r ; ];
+        fuseki:endpoint [ fuseki:operation fuseki:gsp-r ; fuseki:name "get" ];
+        fuseki:dataset ...
+
+which supports requests such as:
+
+    http://<i>host:port</i>/dataset?query=...
+    
+    http://<i>host:port</i>/dataset/sparql?query=...
+    
+    http://<i>host:port</i>/dataset?default
+    
+    http://<i>host:port</i>/dataset/get?default
+
+and for an updateatable dataset (command line `--mem` for an in-memory dataset;
+or with TDB storage, with `--update`):
+
+    <#service1> rdf:type fuseki:Service ;
+        fuseki:name "dataset" ;
+        fuseki:endpoint [ fuseki:operation fuseki:query ;];
+        fuseki:endpoint [ fuseki:operation fuseki:query ; fuseki:name "sparql" ];
+        fuseki:endpoint [ fuseki:operation fuseki:query ; fuseki:name "query" ];
+
+        fuseki:endpoint [ fuseki:operation fuseki:update ; ];
+        fuseki:endpoint [ fuseki:operation fuseki:update ; fuseki:name "update" ];
+
+        fuseki:endpoint [ fuseki:operation fuseki:gsp-r ; fuseki:name "get" ];
+        fuseki:endpoint [ fuseki:operation fuseki:gsp-rw ; ] ;
+        fuseki:endpoint [ fuseki:operation fuseki:gsp-rw ; fuseki:name "data" ];
+        fuseki:endpoint [ fuseki:operation fuseki:upload ; fuseki:name "upload" ]
+        fuseki:dataset ...
+
+which add requests that can change the data.

Review comment:
       adds?

##########
File path: source/documentation/fuseki2/fuseki-webapp.md
##########
@@ -1,48 +1,71 @@
 ---
-title: Running Fuseki
+title: Running Fuseki with UI
 ---
 
-Fuseki can be run in a number of ways:
+Fuseki/UI can be run in a number of ways:
 
 * [As a standalone server](#fuseki-standalone-server)
 * [As a service](#fuseki-service) run by the operation system, for example, started when the machine
 * [As a Web Application](#fuseki-web-application) inside a container such as Apache Tomcat or Jetty
 boots.
-* [As a configurable SPARQL server](#fuseki-main)
-* [As a deployment and development standalone server](#fuseki-server)
+
+Fuseki is also packaged as a plain server ["Fuseki Main"](fuseki-main.html)
+with no UI for use as a configurable SPARQL server, for [building as a Docker
+container](fuseki-docker.html), and as a deployment and development standalone
+server.
+
+Both packaging used the same configuration file format, and in standalone server
+mode, the same command line arguments.
 
 See "[Fuseki Configuration](fuseki-configuration.html)" for information on
-how to provide datasets and configure services.
+how to provide datasets and configure services usoing the configuration file.
 
 ## Fuseki as a Standalone Server {#fuseki-standalone-server}
 
 This is running Fuseki from the command line.
 
-    fuseki-server [--mem | --loc=DIR] [[--update] /NAME]
-
-    fuseki-server --config=CONFIG
+To publish at <tt>http://<i>host</i>:3030/NAME</i></tt>:
 
 where `/NAME` is the dataset publishing name at this server in URI space.
 
+TDB1 database:
+
+    fuseki-server [--loc=DIR] [[--update] /NAME]
+
 The argument `--tdb2` puts the command line handling into "TDB2 mode".
 A dataset created with `--loc` is a TDB2 dataset.
+TDB2 database:
+
+    fuseki-server --tdb2 [--loc=DIR] [[--update] /NAME]
+
+In-memory, non-peristent database (always updatable):
+
+    fuseki-server --mem /NAME
+
+Load a file at start and provide it read-only:
+
+    fuseki-server --file=MyData.ttl /NAME
+
+where "MyData.ttl" can be any RDF format, both triples or quads. 
+
+Administrative functions are only avilable from "localhost".

Review comment:
       Huh, Today_I_Learned, thought the admin functions were always available, regardless of IP address/hostname :+1: 

##########
File path: source/documentation/fuseki2/fuseki-server-info.md
##########
@@ -0,0 +1,116 @@
+---
+title: "Fuseki: Server Information"
+---
+
+A Fuseki server keeps detailed statistics for each dataset and each service
+of a dataset keeps counters as to the number
+of incoming requests, number of successful requests, number of bad requests
+(i.e client errors), and number of failing requests (i.e. server errors).
+
+Statistics are avilable in JSON and in [Prometheus](https://prometheus.io/)
+format. The Promethues data includes both database and JVM metrics.
+
+## Endpoints
+
+The following servers endpoints are avilable. They are present in Fuseki/UI;
+they need to be enabled with [Fuseki/main](fuseki-main.html), either on the
+command line or in the server configuration file with a boolean setting.
+
+| Endpoint | Config Property | Usage |
+|----------|-----------------|-------|
+|`/$/ping`   | `fuseki:pingEP`     | Server liveness endpoint   |
+|`/$/stats`  | `fuseki:statsEP`    | JSON format endpoint       |   
+|`/$/metrics`| `fuseki:metricsEP`  | Prometheus format endpoint |   
+
+## Ping
+
+The "ping" service can be used to test whether a Fuseki server is running.
+Calling this endpoint imposes minimal overhea don the server.  Requests return

Review comment:
       s/overhea don/overhead on

##########
File path: source/documentation/fuseki2/fuseki-server-info.md
##########
@@ -0,0 +1,116 @@
+---
+title: "Fuseki: Server Information"
+---
+
+A Fuseki server keeps detailed statistics for each dataset and each service
+of a dataset keeps counters as to the number
+of incoming requests, number of successful requests, number of bad requests
+(i.e client errors), and number of failing requests (i.e. server errors).
+
+Statistics are avilable in JSON and in [Prometheus](https://prometheus.io/)
+format. The Promethues data includes both database and JVM metrics.
+
+## Endpoints
+
+The following servers endpoints are avilable. They are present in Fuseki/UI;

Review comment:
       s/avilable/available

##########
File path: source/documentation/fuseki2/fuseki-main.md
##########
@@ -33,201 +33,38 @@ persistent work area on-disk.
     java -jar jena-fuseki-server-$VER.jar --help
 
 The arguments are the same as the 
-[full UI server command line program](/documentation/fuseki2/fuseki-run.html#fuseki-standalone-server).
+[full UI server command line program](/documentation/fuseki2/fuseki-webapp.html#fuseki-standalone-server).
 There are no special environment variables.
 
-
 The entry point is `org.apache.jena.fuseki.main.cmds.FusekiMainCmd` so
 the server can also be run as:
 
     java -cp jena-fuseki-server-$VER.jar:...OtherJars... \
         org.apache.jena.fuseki.main.cmds.FusekiMainCmd ARGS
 
+## Docker {#fuseki-docker}
 
-## Application Use {#usage}
-
-The application can safely access and modify the data published by the server if it does
-so inside a [transaction](/documentation/txn/) using an appropriate
-storage choice. `DatasetFactory.createTxnMem()` is a good choice for in-memory use;
-[TDB](/documentation/tdb/) is a good choice for a persistent database.
-
-To build and start the server:
-
-    Dataset ds = ...
-    FusekiServer server = FusekiServer.create()
-      .add("/rdf", ds)
-      .build() ;
-    server.start() ;
-
-then the application can modify the dataset:
-
-    // Add some data while live.
-    // Write transaction.
-    Txn.execWrite(dsg, ()->RDFDataMgr.read(dsg, "D.trig")) ;
-
-or read the dataset and see any updates made by remote systems:
-
-    // Query data while live
-    // Read transaction.
-    Txn.execRead(dsg, ()->{
-    Dataset ds = DatasetFactory.wrap(dsg) ;
-    try (QueryExecution qExec = QueryExecutionFactory.create("SELECT * { ?s  ?o}", ds) ) {
-        ResultSet rs = qExec.execSelect() ;
-        ResultSetFormatter.out(rs) ;
-      }
-    }) ;
-
-The full Jena API can be used provided operations (read and write) are inside
-a transaction.
-
-## Dependencies and Setup {#dependencies}
-
-To include an embedded Fuseki server in the application:
-
-    <dependency>
-      <groupId>org.apache.jena</groupId>
-      <artifactId>jena-fuseki-main</artifactId>
-      <version>3.x.y</version> <!-- Set the version -->
-    </dependency>
-
-This brings in enough dependencies to run Fuseki. Application writers are strongly
-encouraged to use a dependency manager because the number of Jetty and other dependencies
-is quite large and difficult to set manually.
-
-This dependency does not include a logging setting. Fuseki uses [slf4j](http://slf4j.org/).
-See section "[Logging](#logging)" for details.
-
-If the application wishes to use a dataset with a [text-index](/documentation/query/text-query.html)
-then the application will also need to include jena-text in its dependencies.
-
-## Logging {#logging}
-
-The application must set the logging provided for [slf4j](http://slf4j.org/).
-Apache Jena provides helpers for the JDK-provided java logging and for Apache Log4j v2.
-
-Using the JDK-provided java logging:
-
-    LogCtl.setJavaLogging()
-
-and a dependency of:
-
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-jdk14</artifactId>
-      <version>1.x.y</version>
-    </dependency>
-
-For Apache Log4j2: - this is how the full Fuseki server sets its logging:
+A kit to build a container with docker or docker compose 
 
-    FusekiLogging.setLogging();
+    https://repo1.maven.org/maven2/org/apache/jena/jena-fuseki-docker/
 
-and dependency:
+Note; take care thet databases are on mounted volumes if they are to peristent

Review comment:
       s/thet/that
   
   s/they are to persistent/they are to be persistent (or they are to persist?)

##########
File path: source/documentation/fuseki2/fuseki-config-endpoint.md
##########
@@ -121,6 +93,61 @@ without a configuration file is:
 | `fuseki:upload` | HTML form file upload |
 | `fuseki:no-op`  | An operation that causes a 400 or 404 error |
 
+Custom extensions can be added (see [Programmatic configuration](fuseki-main.html#build) of the Fuseki server). To be able to uniquely identify the operation, these are usually 
+
+        fuseki:endpoint     [ 
+            fuseki:operation fuseki:shacl ;
+            fuseki:name      "shacl" ;
+        ] ;
+
+See the section ["Integration with Apache Jena Fuseki"](https://jena.apache.org/documentation/shacl/#integration-with-apache-jena-fuseki) for details of the SHACL support. While this operation is part of the standard Fuseki distribution, this operation is added during system initialization, using the custom operation support.

Review comment:
       Should it be a relative link instead of pointing directly to `jena.apache.org`? (for those running the site locally for example?)

##########
File path: source/documentation/fuseki2/fuseki-server-info.md
##########
@@ -0,0 +1,116 @@
+---
+title: "Fuseki: Server Information"
+---
+
+A Fuseki server keeps detailed statistics for each dataset and each service
+of a dataset keeps counters as to the number
+of incoming requests, number of successful requests, number of bad requests
+(i.e client errors), and number of failing requests (i.e. server errors).
+
+Statistics are avilable in JSON and in [Prometheus](https://prometheus.io/)
+format. The Promethues data includes both database and JVM metrics.

Review comment:
       s/Promethues/Prometheus

##########
File path: source/documentation/fuseki2/fuseki-server-info.md
##########
@@ -0,0 +1,116 @@
+---
+title: "Fuseki: Server Information"
+---
+
+A Fuseki server keeps detailed statistics for each dataset and each service
+of a dataset keeps counters as to the number
+of incoming requests, number of successful requests, number of bad requests
+(i.e client errors), and number of failing requests (i.e. server errors).
+
+Statistics are avilable in JSON and in [Prometheus](https://prometheus.io/)

Review comment:
       s/avilable/available

##########
File path: source/documentation/fuseki2/fuseki-logging.md
##########
@@ -45,10 +45,14 @@ The last step is a fallback to catch the case where Fuseki has been repackaged
 into a new WAR file and `org/apache/jena/fuseki/log4j.properties` omitted, or run from
 the base jar.  It is better to include `org/apache/jena/fuseki/log4j.properties`.
 
-The preferred customization is to use a custom `log4j2.properties` file in
-`FUSEKI_BASE`.  For the WAR file, `FUSEKI_BASE` defaults to `/etc/fuseki`
-on Linux.  For the standalone server, `FUSEKI_BASE` defaults to directory
-`run/` within the directory where the server is run.
+The preferred customization is to use a custom `log4j2.properties` file in the
+directory where Fuseki Main is run.
+
+For the war file packaging, the `log4j2.properties` shoudl go in `FUSEKI_BASE`

Review comment:
       s/shoudl/should

##########
File path: source/documentation/fuseki2/fuseki-old-config-endpoint.md
##########
@@ -0,0 +1,55 @@
+---
+title: Fuseki Data Service Configuration Syntax - Old Style
+---
+
+This page describes the original Fuseki2 server configuration syntax.
+
+Example:
+
+    ## Updatable dataset.
+
+    <#service1> rdf:type fuseki:Service ;
+        fuseki:name                       "ds" ;       # http://host:port/ds
+        fuseki:serviceQuery               "sparql" ;   # SPARQL query service
+        fuseki:serviceQuery               "query" ;    # SPARQL query service (alt name)
+        fuseki:serviceUpdate              "update" ;   # SPARQL update service
+        fuseki:serviceUpload              "upload" ;   # Non-SPARQL upload service
+        fuseki:serviceReadWriteGraphStore "data" ;     # SPARQL Graph Store Protocol (read and write)
+        fuseki:serviceReadGraphStore      "get" ;      # SPARQL Graph Store Protocol (read only)
+        fuseki:dataset                    <#dataset> ;
+        .
+
+`<#dataset>` refers to a dataset description in the same file.
+
+There are fixed set of services:
+
+| Service | Description |
+|---------|-------------|
+| fuseki:serviceQuery | SPARQL query service |
+| fuseki:serviceUpdate | SPARQL update service |
+| fuseki:serviceUpload | Non-SPARQL HTML file upload service |
+| fuseki:serviceReadGraphStore | SPARQL Graph Store Protocol (read)
+| fuseki:serviceReadWriteGraphStore | SPARQL Graph Store Protocol (read and write)
+
+Configuration syntax can be mixed. If there are both old style and new style
+configurations for the same endpoint, the new style configuration is used.
+
+Quads operations on dataset are implied if there is a SPARQL Graph Store
+Protocol service configured.
+
+If a request is made on the dataset (no service name in the request URL), then
+the dispatcher classifies the operation and looks for a named endpoint for that
+operation of any name. If one is found, that is used. 
+In the [full endpoint configuration syntax](fuseki-config-endpoint.html), the
+additional dataset services are specified explicitly.
+
+The equivalent of 
+
+        fuseki:serviceQuery               "sparql" ;
+
+is
+
+        fuseki:endpoint [ fuseki:operation fuseki:query ; ];
+        fuseki:endpoint [ fuseki:operation fuseki:query ; fuseki:name "sparql" ];
+
+and the two endpoint can have different contetx setting and security.

Review comment:
       s/contetx/context

##########
File path: source/documentation/fuseki2/fuseki-embedded.md
##########
@@ -0,0 +1,183 @@
+---
+title: Fuseki : Emdedded Server
+---
+
+Fuseki can be run within a larger JVM application as an embedded triplestore.
+
+* [Dependencies and Setup](#dependencies)
+* [Logging](#logging)
+* [Building a Server](#build)
+* [Examples](#examples)
+
+The application can safely access and modify the data published by the server if it does
+so inside a [transaction](/documentation/txn/) using an appropriate
+storage choice. `DatasetFactory.createTxnMem()` is a good choice for in-memory use;
+[TDB](/documentation/tdb/) is a good choice for a persistent database.
+
+To build and start the server:
+
+    Dataset ds = ...
+    FusekiServer server = FusekiServer.create()
+      .add("/rdf", ds)
+      .build() ;
+    server.start() ;
+
+then the application can modify the dataset:
+
+    // Add some data while live.
+    // Write transaction.
+    Txn.execWrite(dsg, ()->RDFDataMgr.read(dsg, "D.trig")) ;
+
+or read the dataset and see any updates made by remote systems:
+
+    // Query data while live
+    // Read transaction.
+    Txn.execRead(dsg, ()->{
+    Dataset ds = DatasetFactory.wrap(dsg) ;
+    try (QueryExecution qExec = QueryExecutionFactory.create("SELECT * { ?s  ?o}", ds) ) {
+        ResultSet rs = qExec.execSelect() ;
+        ResultSetFormatter.out(rs) ;
+      }
+    }) ;
+
+The full Jena API can be used provided operations (read and write) are inside

Review comment:
       "can be used when provided"?

##########
File path: source/documentation/fuseki2/fuseki-data-services.md
##########
@@ -17,7 +17,7 @@ update
 GSP including direct naming for GSP
 
 in addition:
-
+fuse

Review comment:
       fuseki??? Or was it an accidental copy-and-paste?

##########
File path: source/documentation/fuseki2/fuseki-docker.md
##########
@@ -0,0 +1,112 @@
+---
+title: Fuseki : Docker Tools
+---
+
+The [jena-fuseki-docker package](https://repo1.maven.org/maven2/org/apache/jena/jena-fuseki-docker/)
+contains a Dockerfile, docker-compose file, and helper scripts to
+create a docker container for Apache Jena Fuseki.
+
+The docker container is based on 
+[Fuseki main](https://jena.apache.org/documentation/fuseki2/fuseki-main)
+for running a SPARQL server.
+
+There is no UI - all configuration is by command line and all usage by via the
+network protocols.
+
+Databases can be mounted outside the docker container so they are preserved when
+the container terminates.
+
+This build system allows the user to customize the docker image.
+
+The docker build downloads the server binary from 
+[Maven central](https://repo1.maven.org/maven2/org/apache/jena/jena-fuseki-server/),
+checking the download against the SHA1 checksum.
+
+## Database
+
+There is a volume mapping "./databases" in the current directory into the server.
+This can be used to contain databases outside, but accessible to, the container
+that do not get deleted when the container exits.
+
+See examples below.
+
+## Build
+
+Choose the version number of Apache Jena release you wish to use. This toolkit
+defaults to the version of the overall Jena release it was part of. It is best
+to use the release of this set of tools from the same release of the desired
+server.
+
+    docker-compose build --build-arg JENA_VERSION=3.16.0
+
+Note the build command must provide the version number.
+
+## Test Run
+
+`docker-compose run` cam be used to test the build from the previous section.
+
+Examples:
+
+Start Fuseki with an in-memory, updatable dataset at http://<i>host</i>:3030/ds
+
+    docker-compose run --rm --service-ports fuseki --mem /ds
+
+Load a TDB2 database, and expose, read-only, via docker:
+
+    mkdir -p databases/DB2
+    tdb2.tdbloader --loc databases/DB2 MyData.ttl
+    # Publish read-only
+    docker-compose run --rm --name MyServer --service-ports fuseki --tdb2 --loc databases/DB2 /ds
+
+To allow update on the database, add `--update`. Updates are persisted.
+
+    docker-compose run --rm --name MyServer --service-ports fuseki --tdb2 --update --loc databases/DB2 /ds
+
+See
+[fuseki-configuration](https://jena.apache.org/documentation/fuseki2/fuseki-configuration.html)
+for more information on command line arguments.
+
+To use `docker-compose up`, edit the `docker-compose.yaml` to set the Fuseki
+command line arguments appropriately.
+
+## Layout
+
+The default layout in the container is:
+
+| Path  | Use | 
+| ----- | --- |
+| /opt/java-minimal | A reduced size Java runtime                      |
+| /fuseki | The Fuseki installation                                    |
+| /fuseki/log4j2.properties | Logging configuration                    |
+| /fuseki/databases/ | Directory for a volume for persistent databases |
+
+## Setting JVM arguments
+
+Use `JAVA_OPTIONS`:
+
+    docker-compose run --service-ports --rm -e JAVA_OPTIONS="-Xmx1048m -Xms1048m" --name MyServer fuseki --mem /ds
+
+## Docker Commands
+
+If you prefer to use `docker` directly:
+
+Build:
+
+    docker build --force-rm --build-arg JENA_VERSION=3.16.0 -t fuseki .

Review comment:
       Another Today-I-Learned: `--force-rm`. I always end up with strange containers/layers after building some images. And find it easier to just prune everything to clear space. Going to start using `--force-rm` when building now. Thanks!

##########
File path: source/documentation/fuseki2/fuseki-docker.md
##########
@@ -0,0 +1,112 @@
+---
+title: Fuseki : Docker Tools
+---
+
+The [jena-fuseki-docker package](https://repo1.maven.org/maven2/org/apache/jena/jena-fuseki-docker/)
+contains a Dockerfile, docker-compose file, and helper scripts to
+create a docker container for Apache Jena Fuseki.
+
+The docker container is based on 
+[Fuseki main](https://jena.apache.org/documentation/fuseki2/fuseki-main)
+for running a SPARQL server.
+
+There is no UI - all configuration is by command line and all usage by via the
+network protocols.
+
+Databases can be mounted outside the docker container so they are preserved when
+the container terminates.
+
+This build system allows the user to customize the docker image.
+
+The docker build downloads the server binary from 
+[Maven central](https://repo1.maven.org/maven2/org/apache/jena/jena-fuseki-server/),
+checking the download against the SHA1 checksum.
+
+## Database
+
+There is a volume mapping "./databases" in the current directory into the server.
+This can be used to contain databases outside, but accessible to, the container
+that do not get deleted when the container exits.
+
+See examples below.
+
+## Build
+
+Choose the version number of Apache Jena release you wish to use. This toolkit
+defaults to the version of the overall Jena release it was part of. It is best
+to use the release of this set of tools from the same release of the desired
+server.
+
+    docker-compose build --build-arg JENA_VERSION=3.16.0
+
+Note the build command must provide the version number.
+
+## Test Run
+
+`docker-compose run` cam be used to test the build from the previous section.
+
+Examples:
+
+Start Fuseki with an in-memory, updatable dataset at http://<i>host</i>:3030/ds
+
+    docker-compose run --rm --service-ports fuseki --mem /ds
+
+Load a TDB2 database, and expose, read-only, via docker:
+
+    mkdir -p databases/DB2
+    tdb2.tdbloader --loc databases/DB2 MyData.ttl
+    # Publish read-only
+    docker-compose run --rm --name MyServer --service-ports fuseki --tdb2 --loc databases/DB2 /ds
+
+To allow update on the database, add `--update`. Updates are persisted.
+
+    docker-compose run --rm --name MyServer --service-ports fuseki --tdb2 --update --loc databases/DB2 /ds
+
+See
+[fuseki-configuration](https://jena.apache.org/documentation/fuseki2/fuseki-configuration.html)
+for more information on command line arguments.
+
+To use `docker-compose up`, edit the `docker-compose.yaml` to set the Fuseki
+command line arguments appropriately.
+
+## Layout
+
+The default layout in the container is:
+
+| Path  | Use | 
+| ----- | --- |
+| /opt/java-minimal | A reduced size Java runtime                      |
+| /fuseki | The Fuseki installation                                    |
+| /fuseki/log4j2.properties | Logging configuration                    |
+| /fuseki/databases/ | Directory for a volume for persistent databases |
+
+## Setting JVM arguments
+
+Use `JAVA_OPTIONS`:
+
+    docker-compose run --service-ports --rm -e JAVA_OPTIONS="-Xmx1048m -Xms1048m" --name MyServer fuseki --mem /ds
+
+## Docker Commands
+
+If you prefer to use `docker` directly:
+
+Build:
+
+    docker build --force-rm --build-arg JENA_VERSION=3.16.0 -t fuseki .
+
+Run:
+
+    docker run -i --rm -p "3030:3030" --name MyServer -t fuseki --mem /ds
+
+With databases on a bind mount to host filesystem directory:
+
+    MNT="--mount type=bind,src=$PWD/databases,dst=/fuseki/databases"
+    docker run -i --rm -p "3030:3030" $MNT --name MyServer -t fuseki --tdb2 --update --loc databases/DB2 /ds
+
+## Version specific notes:
+
+* Versions of Jena up to 3.14.0 use Log4j1 for logging. The docker will build will ignore

Review comment:
       I think the "docker will build will ignore" sounds strange. Would it be better "docker will build and ignore?"




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org