From ebe704674737b272e39c004b8b99fe3470acde1b Mon Sep 17 00:00:00 2001
From: sebastien curt <sebastien.curt@tetras-libre.fr>
Date: Tue, 26 May 2020 18:02:59 +0200
Subject: [PATCH] Add tools to generate automatically java unl class from
 schema.ttl rdf shema of unl

---
 java/.idea/misc.xml                           |   9 +
 java/.idea/modules.xml                        |   8 +
 java/.idea/rdf-unl-java-vocabulary.iml        |  13 +
 java/.idea/vcs.xml                            |   7 +
 java/README.md                                |  35 +
 java/pom.xml                                  | 118 +++
 .../fr/tetras_libre/rdf/vocabulary/UNL.java   | 939 ++++++++++++++++++
 java/tools/apache-jena-3.14.0/LICENSE         | 274 +++++
 java/tools/apache-jena-3.14.0/NOTICE          |  60 ++
 java/tools/apache-jena-3.14.0/README          | 127 +++
 java/tools/apache-jena-3.14.0/bat/arq.bat     |  18 +
 java/tools/apache-jena-3.14.0/bat/infer.bat   |  18 +
 java/tools/apache-jena-3.14.0/bat/iri.bat     |  18 +
 java/tools/apache-jena-3.14.0/bat/juuid.bat   |  18 +
 java/tools/apache-jena-3.14.0/bat/nquads.bat  |  18 +
 .../tools/apache-jena-3.14.0/bat/ntriples.bat |  18 +
 java/tools/apache-jena-3.14.0/bat/qparse.bat  |  18 +
 java/tools/apache-jena-3.14.0/bat/rdfcat.bat  |  18 +
 .../apache-jena-3.14.0/bat/rdfcompare.bat     |  18 +
 java/tools/apache-jena-3.14.0/bat/rdfcopy.bat |  18 +
 java/tools/apache-jena-3.14.0/bat/rdfdiff.bat |  18 +
 .../tools/apache-jena-3.14.0/bat/rdfparse.bat |  18 +
 java/tools/apache-jena-3.14.0/bat/rdfxml.bat  |  18 +
 java/tools/apache-jena-3.14.0/bat/riot.bat    |  18 +
 java/tools/apache-jena-3.14.0/bat/rset.bat    |  18 +
 java/tools/apache-jena-3.14.0/bat/rsparql.bat |  18 +
 java/tools/apache-jena-3.14.0/bat/rupdate.bat |  18 +
 .../apache-jena-3.14.0/bat/schemagen.bat      |  18 +
 java/tools/apache-jena-3.14.0/bat/shacl.bat   |  18 +
 java/tools/apache-jena-3.14.0/bat/sparql.bat  |  18 +
 .../apache-jena-3.14.0/bat/tdb2_tdbbackup.bat |  18 +
 .../bat/tdb2_tdbcompact.bat                   |  18 +
 .../apache-jena-3.14.0/bat/tdb2_tdbdump.bat   |  18 +
 .../apache-jena-3.14.0/bat/tdb2_tdbloader.bat |  18 +
 .../apache-jena-3.14.0/bat/tdb2_tdbquery.bat  |  18 +
 .../apache-jena-3.14.0/bat/tdb2_tdbstats.bat  |  18 +
 .../apache-jena-3.14.0/bat/tdb2_tdbupdate.bat |  18 +
 .../apache-jena-3.14.0/bat/tdbbackup.bat      |  18 +
 java/tools/apache-jena-3.14.0/bat/tdbdump.bat |  18 +
 .../apache-jena-3.14.0/bat/tdbloader.bat      |  18 +
 .../tools/apache-jena-3.14.0/bat/tdbquery.bat |  18 +
 .../tools/apache-jena-3.14.0/bat/tdbstats.bat |  18 +
 .../apache-jena-3.14.0/bat/tdbupdate.bat      |  18 +
 java/tools/apache-jena-3.14.0/bat/trig.bat    |  18 +
 java/tools/apache-jena-3.14.0/bat/turtle.bat  |  18 +
 java/tools/apache-jena-3.14.0/bat/uparse.bat  |  18 +
 java/tools/apache-jena-3.14.0/bat/update.bat  |  18 +
 java/tools/apache-jena-3.14.0/bat/utf8.bat    |  18 +
 java/tools/apache-jena-3.14.0/bat/wwwdec.bat  |  18 +
 java/tools/apache-jena-3.14.0/bat/wwwenc.bat  |  18 +
 java/tools/apache-jena-3.14.0/bin/arq         |  89 ++
 java/tools/apache-jena-3.14.0/bin/infer       |  89 ++
 java/tools/apache-jena-3.14.0/bin/iri         |  89 ++
 java/tools/apache-jena-3.14.0/bin/jena        | 101 ++
 java/tools/apache-jena-3.14.0/bin/juuid       |  89 ++
 java/tools/apache-jena-3.14.0/bin/nquads      |  89 ++
 java/tools/apache-jena-3.14.0/bin/ntriples    |  89 ++
 java/tools/apache-jena-3.14.0/bin/qparse      |  89 ++
 java/tools/apache-jena-3.14.0/bin/rdfcat      |  89 ++
 java/tools/apache-jena-3.14.0/bin/rdfcompare  |  89 ++
 java/tools/apache-jena-3.14.0/bin/rdfcopy     |  89 ++
 java/tools/apache-jena-3.14.0/bin/rdfdiff     |  89 ++
 java/tools/apache-jena-3.14.0/bin/rdfparse    |  89 ++
 java/tools/apache-jena-3.14.0/bin/rdfxml      |  89 ++
 java/tools/apache-jena-3.14.0/bin/riot        |  89 ++
 java/tools/apache-jena-3.14.0/bin/rset        |  89 ++
 java/tools/apache-jena-3.14.0/bin/rsparql     |  89 ++
 java/tools/apache-jena-3.14.0/bin/rupdate     |  89 ++
 java/tools/apache-jena-3.14.0/bin/schemagen   |  89 ++
 java/tools/apache-jena-3.14.0/bin/shacl       |  89 ++
 java/tools/apache-jena-3.14.0/bin/sparql      |  89 ++
 .../apache-jena-3.14.0/bin/tdb2.tdbbackup     |  89 ++
 .../apache-jena-3.14.0/bin/tdb2.tdbcompact    |  89 ++
 .../tools/apache-jena-3.14.0/bin/tdb2.tdbdump |  89 ++
 .../apache-jena-3.14.0/bin/tdb2.tdbloader     |  89 ++
 .../apache-jena-3.14.0/bin/tdb2.tdbquery      |  89 ++
 .../apache-jena-3.14.0/bin/tdb2.tdbstats      |  89 ++
 .../apache-jena-3.14.0/bin/tdb2.tdbupdate     |  89 ++
 java/tools/apache-jena-3.14.0/bin/tdbbackup   |  89 ++
 java/tools/apache-jena-3.14.0/bin/tdbdump     |  89 ++
 java/tools/apache-jena-3.14.0/bin/tdbloader   |  89 ++
 java/tools/apache-jena-3.14.0/bin/tdbloader2  | 341 +++++++
 .../apache-jena-3.14.0/bin/tdbloader2common   | 235 +++++
 .../apache-jena-3.14.0/bin/tdbloader2data     | 289 ++++++
 .../apache-jena-3.14.0/bin/tdbloader2index    | 409 ++++++++
 java/tools/apache-jena-3.14.0/bin/tdbquery    |  89 ++
 java/tools/apache-jena-3.14.0/bin/tdbstats    |  89 ++
 java/tools/apache-jena-3.14.0/bin/tdbupdate   |  89 ++
 java/tools/apache-jena-3.14.0/bin/trig        |  89 ++
 java/tools/apache-jena-3.14.0/bin/turtle      |  89 ++
 java/tools/apache-jena-3.14.0/bin/uparse      |  89 ++
 java/tools/apache-jena-3.14.0/bin/update      |  89 ++
 java/tools/apache-jena-3.14.0/bin/utf8        |  89 ++
 java/tools/apache-jena-3.14.0/bin/wwwdec      |  89 ++
 java/tools/apache-jena-3.14.0/bin/wwwenc      |  89 ++
 .../apache-jena-3.14.0/jena-log4j.properties  |  35 +
 96 files changed, 7280 insertions(+)
 create mode 100644 java/.idea/misc.xml
 create mode 100644 java/.idea/modules.xml
 create mode 100644 java/.idea/rdf-unl-java-vocabulary.iml
 create mode 100644 java/.idea/vcs.xml
 create mode 100644 java/README.md
 create mode 100644 java/pom.xml
 create mode 100644 java/src/main/java/fr/tetras_libre/rdf/vocabulary/UNL.java
 create mode 100644 java/tools/apache-jena-3.14.0/LICENSE
 create mode 100644 java/tools/apache-jena-3.14.0/NOTICE
 create mode 100644 java/tools/apache-jena-3.14.0/README
 create mode 100755 java/tools/apache-jena-3.14.0/bat/arq.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/infer.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/iri.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/juuid.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/nquads.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/ntriples.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/qparse.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/rdfcat.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/rdfcompare.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/rdfcopy.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/rdfdiff.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/rdfparse.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/rdfxml.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/riot.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/rset.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/rsparql.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/rupdate.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/schemagen.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/shacl.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/sparql.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdb2_tdbbackup.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdb2_tdbcompact.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdb2_tdbdump.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdb2_tdbloader.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdb2_tdbquery.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdb2_tdbstats.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdb2_tdbupdate.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdbbackup.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdbdump.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdbloader.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdbquery.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdbstats.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/tdbupdate.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/trig.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/turtle.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/uparse.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/update.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/utf8.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/wwwdec.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bat/wwwenc.bat
 create mode 100755 java/tools/apache-jena-3.14.0/bin/arq
 create mode 100755 java/tools/apache-jena-3.14.0/bin/infer
 create mode 100755 java/tools/apache-jena-3.14.0/bin/iri
 create mode 100755 java/tools/apache-jena-3.14.0/bin/jena
 create mode 100755 java/tools/apache-jena-3.14.0/bin/juuid
 create mode 100755 java/tools/apache-jena-3.14.0/bin/nquads
 create mode 100755 java/tools/apache-jena-3.14.0/bin/ntriples
 create mode 100755 java/tools/apache-jena-3.14.0/bin/qparse
 create mode 100755 java/tools/apache-jena-3.14.0/bin/rdfcat
 create mode 100755 java/tools/apache-jena-3.14.0/bin/rdfcompare
 create mode 100755 java/tools/apache-jena-3.14.0/bin/rdfcopy
 create mode 100755 java/tools/apache-jena-3.14.0/bin/rdfdiff
 create mode 100755 java/tools/apache-jena-3.14.0/bin/rdfparse
 create mode 100755 java/tools/apache-jena-3.14.0/bin/rdfxml
 create mode 100755 java/tools/apache-jena-3.14.0/bin/riot
 create mode 100755 java/tools/apache-jena-3.14.0/bin/rset
 create mode 100755 java/tools/apache-jena-3.14.0/bin/rsparql
 create mode 100755 java/tools/apache-jena-3.14.0/bin/rupdate
 create mode 100755 java/tools/apache-jena-3.14.0/bin/schemagen
 create mode 100755 java/tools/apache-jena-3.14.0/bin/shacl
 create mode 100755 java/tools/apache-jena-3.14.0/bin/sparql
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdb2.tdbbackup
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdb2.tdbcompact
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdb2.tdbdump
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdb2.tdbloader
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdb2.tdbquery
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdb2.tdbstats
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdb2.tdbupdate
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdbbackup
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdbdump
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdbloader
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdbloader2
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdbloader2common
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdbloader2data
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdbloader2index
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdbquery
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdbstats
 create mode 100755 java/tools/apache-jena-3.14.0/bin/tdbupdate
 create mode 100755 java/tools/apache-jena-3.14.0/bin/trig
 create mode 100755 java/tools/apache-jena-3.14.0/bin/turtle
 create mode 100755 java/tools/apache-jena-3.14.0/bin/uparse
 create mode 100755 java/tools/apache-jena-3.14.0/bin/update
 create mode 100755 java/tools/apache-jena-3.14.0/bin/utf8
 create mode 100755 java/tools/apache-jena-3.14.0/bin/wwwdec
 create mode 100755 java/tools/apache-jena-3.14.0/bin/wwwenc
 create mode 100644 java/tools/apache-jena-3.14.0/jena-log4j.properties

diff --git a/java/.idea/misc.xml b/java/.idea/misc.xml
new file mode 100644
index 0000000..c2b647e
--- /dev/null
+++ b/java/.idea/misc.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_13" default="false" project-jdk-name="11" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/java/.idea/modules.xml b/java/.idea/modules.xml
new file mode 100644
index 0000000..37da43b
--- /dev/null
+++ b/java/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/rdf-unl-java-vocabulary.iml" filepath="$PROJECT_DIR$/.idea/rdf-unl-java-vocabulary.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/java/.idea/rdf-unl-java-vocabulary.iml b/java/.idea/rdf-unl-java-vocabulary.iml
new file mode 100644
index 0000000..e2cb7a5
--- /dev/null
+++ b/java/.idea/rdf-unl-java-vocabulary.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/java/.idea/vcs.xml b/java/.idea/vcs.xml
new file mode 100644
index 0000000..62bd7a0
--- /dev/null
+++ b/java/.idea/vcs.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/java/README.md b/java/README.md
new file mode 100644
index 0000000..febf16d
--- /dev/null
+++ b/java/README.md
@@ -0,0 +1,35 @@
+# Rdf-vocabulary.
+
+Java library of rdfunl schema
+
+It includes rdf schema and the schemagen jena tool to generate java file associated to the rdf schema.
+
+# Requirements.
+
+- Maven 3+
+
+# How to update unl java class from the schema.
+
+1. Install maven 3 or higher (see wiki of your OS)
+2. Clone the repository : ```git clone https://gitlab.tetras-libre.fr/unl/rdf-vocabulary.git```
+3. Modify the file "rdf-vocabulary/src/main/vocabs/unlVocabulary.ttl"
+4. Run command ```mvn package``` to compile and create package
+5. Run command ```mvn install``` to install to your local maven repository the package.
+
+# Use the generated jar with maven based project
+
+Insert in the `pom.xml` the following lines
+
+```xml
+<dependencies>
+   ...
+   <dependency>
+      <groupId>fr.tetras_libre.rdf</groupId>
+      <artifactId>rdf-unl-java-vocabulary</artifactId>
+      <version>1.0-SNAPSHOT</version>
+   </dependency>
+   ...
+</dependencies>
+```
+
+
diff --git a/java/pom.xml b/java/pom.xml
new file mode 100644
index 0000000..412f4f9
--- /dev/null
+++ b/java/pom.xml
@@ -0,0 +1,118 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>fr.tetras_libre.rdf</groupId>
+    <artifactId>rdf-unl-java-vocabulary</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <packaging>jar</packaging>
+    <name>rdf-unl-java-vocabulary</name>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <configuration>
+                            <target>
+                                <exec
+                                        dir="${project.basedir}"
+                                        executable="${project.basedir}/src/tools/apache-jena-3.14.0/bin/schemagen"
+                                        failonerror="true"
+                                >
+                                    <arg line="-i ${project.basedir}/../../schema.ttl -o ${project.basedir}/src/main/java --package fr.tetras_libre.rdf.vocabulary --ontology" />
+                                </exec>
+                            </target>
+                            <!--checking if for windows and non windows OS-->
+                            <target depends="ifOSWindows, ifOSNotWindows" name="checkOS"/>
+
+                            <condition property="isOSUnix">
+                                <os family="unix" />
+                            </condition>
+
+                            <condition property="isOSWindows">
+                                <os family="windows" />
+                            </condition>
+
+                            <!-- if the OS is windows call the target run.script.windows -->
+                            <target name="ifOSWindows" if="isOSWindows">
+                                <echo>is windows........</echo>
+                                <antcall target="runscript.windows"/>
+                            </target>
+
+                            <!-- if the OS is not windows call the target run.script.unix-->
+                            <target name="ifOSNotWindows" if="isOSUnix">
+                                <echo>is unix........</echo>
+                                <antcall target="runscript.unix"/>
+                            </target>
+
+                            <target name="runscript.windows">
+                                <echo>This is a Windows machine.</echo>
+                                <exec
+                                        dir="${project.basedir}"
+                                        executable="${project.basedir}/src/tools/apache-jena-3.14.0/bat/schemagen.bat"
+                                        failonerror="true"
+                                >
+                                    <arg line="-i ${project.basedir}/../schema.ttl -o ${project.basedir}/src/main/java --package fr.tetras_libre.rdf.vocabulary --ontology -n UNL" />
+                                </exec>
+
+                            </target>
+
+                            <target name="runscript.unix">
+                                <echo>This is an Unix machine.</echo>
+                                <exec
+                                        dir="${project.basedir}"
+                                        executable="${project.basedir}/tools/apache-jena-3.14.0/bin/schemagen"
+                                        failonerror="true"
+                                >
+                                    <arg line="-i ${project.basedir}/../schema.ttl -o ${project.basedir}/src/main/java --package fr.tetras_libre.rdf.vocabulary --ontology -n UNL" />
+                                </exec>
+                            </target>
+                        </configuration>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <release>11</release>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>generateSources</id>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>compile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>3.8.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jena</groupId>
+            <artifactId>apache-jena-libs</artifactId>
+            <type>pom</type>
+            <version>3.14.0</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/java/src/main/java/fr/tetras_libre/rdf/vocabulary/UNL.java b/java/src/main/java/fr/tetras_libre/rdf/vocabulary/UNL.java
new file mode 100644
index 0000000..cb0b3d1
--- /dev/null
+++ b/java/src/main/java/fr/tetras_libre/rdf/vocabulary/UNL.java
@@ -0,0 +1,939 @@
+/* CVS $Id: $ */
+package fr.tetras_libre.rdf.vocabulary; 
+import org.apache.jena.rdf.model.*;
+import org.apache.jena.ontology.*;
+ 
+/**
+ * Vocabulary definitions from /Users/scurt/Projects/rdf-unl/java/../schema.ttl 
+ * @author Auto-generated by schemagen on 26 May 2020 18:01 
+ */
+public class UNL {
+    /** <p>The ontology model that holds the vocabulary terms</p> */
+    private static final OntModel M_MODEL = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM, null );
+    
+    /** <p>The namespace of the vocabulary as a string</p> */
+    public static final String NS = "https://unl.tetras-libre.fr/rdf/schema#";
+    
+    /** <p>The namespace of the vocabulary as a string</p>
+     * @return namespace as String
+     * @see #NS */
+    public static String getURI() {return NS;}
+    
+    /** <p>The namespace of the vocabulary as a resource</p> */
+    public static final Resource NAMESPACE = M_MODEL.createResource( NS );
+    
+    /** <p>For detailled specifications about UNL Universal Relations, see : http://www.unlweb.net/wiki/Universal_Relations 
+     *  Universal Relations, formerly known as "links", are labelled arcs connecting 
+     *  a node to another node in a UNL graph. They correspond to two-place semantic 
+     *  predicates holding between two Universal Words. In UNL, universal relations 
+     *  have been normally used to represent semantic cases or thematic roles (such 
+     *  as agent, object, instrument, etc.) between UWs. The repertoire of universal 
+     *  relations is defined in the UNL Specs and it is not open to frequent additions. 
+     *  Universal Relations are organized in a hierarchy where lower nodes subsume 
+     *  upper nodes. The topmost level is the relation "rel", which simply indicates 
+     *  that there is a semantic relation between two elements. Universal Relations 
+     *  as Object Properties are used only in UNL Knowledge Bases. In UNL graphs, 
+     *  you must use the reified versions of those properties in order to specify 
+     *  the scopes (and not only the sources and targets).</p>
+     */
+    public static final ObjectProperty Universal_Relation = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#Universal_Relation" );
+    
+    public static final ObjectProperty agt = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#agt" );
+    
+    public static final ObjectProperty and = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#and" );
+    
+    public static final ObjectProperty ant = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#ant" );
+    
+    public static final ObjectProperty aoj = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#aoj" );
+    
+    public static final ObjectProperty bas = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#bas" );
+    
+    public static final ObjectProperty ben = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#ben" );
+    
+    public static final ObjectProperty cnt = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#cnt" );
+    
+    public static final ObjectProperty con = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#con" );
+    
+    public static final ObjectProperty coo = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#coo" );
+    
+    public static final ObjectProperty dur = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#dur" );
+    
+    public static final ObjectProperty equ = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#equ" );
+    
+    public static final ObjectProperty exp = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#exp" );
+    
+    public static final ObjectProperty fld = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#fld" );
+    
+    public static final ObjectProperty gol = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#gol" );
+    
+    public static final ObjectProperty has_occurrence = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#has_occurrence" );
+    
+    public static final ObjectProperty has_scope = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#has_scope" );
+    
+    public static final ObjectProperty has_source = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#has_source" );
+    
+    public static final ObjectProperty has_target = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#has_target" );
+    
+    public static final ObjectProperty icl = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#icl" );
+    
+    public static final ObjectProperty ins = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#ins" );
+    
+    public static final ObjectProperty iof = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#iof" );
+    
+    public static final ObjectProperty is_occurrence_of = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#is_occurrence_of" );
+    
+    public static final ObjectProperty is_scope_of = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#is_scope_of" );
+    
+    public static final ObjectProperty is_source_of = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#is_source_of" );
+    
+    public static final ObjectProperty is_substructure_of = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#is_substructure_of" );
+    
+    public static final ObjectProperty is_superstructure_of = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#is_superstructure_of" );
+    
+    public static final ObjectProperty is_target_of = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#is_target_of" );
+    
+    public static final ObjectProperty lpl = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#lpl" );
+    
+    public static final ObjectProperty man = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#man" );
+    
+    public static final ObjectProperty mat = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#mat" );
+    
+    public static final ObjectProperty met = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#met" );
+    
+    public static final ObjectProperty mod = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#mod" );
+    
+    public static final ObjectProperty nam = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#nam" );
+    
+    public static final ObjectProperty obj = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#obj" );
+    
+    public static final ObjectProperty opl = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#opl" );
+    
+    public static final ObjectProperty or = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#or" );
+    
+    public static final ObjectProperty per = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#per" );
+    
+    public static final ObjectProperty plc = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#plc" );
+    
+    public static final ObjectProperty pof = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#pof" );
+    
+    public static final ObjectProperty pos = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#pos" );
+    
+    public static final ObjectProperty ptn = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#ptn" );
+    
+    public static final ObjectProperty pur = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#pur" );
+    
+    public static final ObjectProperty qua = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#qua" );
+    
+    public static final ObjectProperty res = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#res" );
+    
+    public static final ObjectProperty rsn = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#rsn" );
+    
+    public static final ObjectProperty seq = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#seq" );
+    
+    public static final ObjectProperty src = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#src" );
+    
+    public static final ObjectProperty tim = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#tim" );
+    
+    public static final ObjectProperty tmf = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#tmf" );
+    
+    public static final ObjectProperty tmt = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#tmt" );
+    
+    public static final ObjectProperty unlObjectProperty = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#unlObjectProperty" );
+    
+    public static final ObjectProperty via = M_MODEL.createObjectProperty( "https://unl.tetras-libre.fr/rdf/schema#via" );
+    
+    public static final DatatypeProperty has_attribute = M_MODEL.createDatatypeProperty( "https://unl.tetras-libre.fr/rdf/schema#has_attribute" );
+    
+    public static final DatatypeProperty has_index = M_MODEL.createDatatypeProperty( "https://unl.tetras-libre.fr/rdf/schema#has_index" );
+    
+    public static final DatatypeProperty unlDatatypeProperty = M_MODEL.createDatatypeProperty( "https://unl.tetras-libre.fr/rdf/schema#unlDatatypeProperty" );
+    
+    public static final AnnotationProperty has_id = M_MODEL.createAnnotationProperty( "https://unl.tetras-libre.fr/rdf/schema#has_id" );
+    
+    public static final AnnotationProperty has_master_definition = M_MODEL.createAnnotationProperty( "https://unl.tetras-libre.fr/rdf/schema#has_master_definition" );
+    
+    public static final AnnotationProperty unlAnnotationProperty = M_MODEL.createAnnotationProperty( "https://unl.tetras-libre.fr/rdf/schema#unlAnnotationProperty" );
+    
+    public static final OntProperty unlProperty = M_MODEL.createOntProperty( "https://unl.tetras-libre.fr/rdf/schema#unlProperty" );
+    
+    public static final OntClass ability = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@ability" );
+    
+    public static final OntClass about = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@about" );
+    
+    public static final OntClass above = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@above" );
+    
+    public static final OntClass according_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@according_to" );
+    
+    public static final OntClass across = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@across" );
+    
+    public static final OntClass active = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@active" );
+    
+    public static final OntClass adjective = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@adjective" );
+    
+    public static final OntClass adverb = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@adverb" );
+    
+    public static final OntClass advice = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@advice" );
+    
+    public static final OntClass after = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@after" );
+    
+    public static final OntClass again = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@again" );
+    
+    public static final OntClass against = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@against" );
+    
+    public static final OntClass agreement = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@agreement" );
+    
+    public static final OntClass all = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@all" );
+    
+    public static final OntClass almost = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@almost" );
+    
+    public static final OntClass along = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@along" );
+    
+    public static final OntClass also = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@also" );
+    
+    public static final OntClass although = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@although" );
+    
+    public static final OntClass among = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@among" );
+    
+    public static final OntClass and_CLASS = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@and" );
+    
+    public static final OntClass anger = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@anger" );
+    
+    public static final OntClass angle_bracket = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@angle_bracket" );
+    
+    public static final OntClass anterior = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@anterior" );
+    
+    public static final OntClass anthropomorphism = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@anthropomorphism" );
+    
+    public static final OntClass antiphrasis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@antiphrasis" );
+    
+    public static final OntClass antonomasia = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@antonomasia" );
+    
+    public static final OntClass any = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@any" );
+    
+    public static final OntClass archaic = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@archaic" );
+    
+    public static final OntClass around = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@around" );
+    
+    public static final OntClass as = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@as" );
+    
+    public static final OntClass if_ = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@as.@if" );
+    
+    public static final OntClass as_far_as = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@as_far_as" );
+    
+    public static final OntClass as_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@as_of" );
+    
+    public static final OntClass as_per = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@as_per" );
+    
+    public static final OntClass as_regards = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@as_regards" );
+    
+    public static final OntClass as_well_as = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@as_well_as" );
+    
+    public static final OntClass assertion = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@assertion" );
+    
+    public static final OntClass assumption = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@assumption" );
+    
+    public static final OntClass at = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@at" );
+    
+    public static final OntClass attention = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@attention" );
+    
+    public static final OntClass back = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@back" );
+    
+    public static final OntClass barring = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@barring" );
+    
+    public static final OntClass because = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@because" );
+    
+    public static final OntClass because_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@because_of" );
+    
+    public static final OntClass before = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@before" );
+    
+    public static final OntClass behind = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@behind" );
+    
+    public static final OntClass belief = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@belief" );
+    
+    public static final OntClass below = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@below" );
+    
+    public static final OntClass beside = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@beside" );
+    
+    public static final OntClass besides = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@besides" );
+    
+    public static final OntClass between = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@between" );
+    
+    public static final OntClass beyond = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@beyond" );
+    
+    public static final OntClass both = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@both" );
+    
+    public static final OntClass bottom = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@bottom" );
+    
+    public static final OntClass brace = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@brace" );
+    
+    public static final OntClass brachylogia = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@brachylogia" );
+    
+    public static final OntClass but = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@but" );
+    
+    public static final OntClass by = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@by" );
+    
+    public static final OntClass by_means_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@by_means_of" );
+    
+    public static final OntClass catachresis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@catachresis" );
+    
+    public static final OntClass causative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@causative" );
+    
+    public static final OntClass certain = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@certain" );
+    
+    public static final OntClass chiasmus = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@chiasmus" );
+    
+    public static final OntClass circa = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@circa" );
+    
+    public static final OntClass climax = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@climax" );
+    
+    public static final OntClass clockwise = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@clockwise" );
+    
+    public static final OntClass colloquial = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@colloquial" );
+    
+    public static final OntClass command = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@command" );
+    
+    public static final OntClass comment = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@comment" );
+    
+    public static final OntClass concerning = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@concerning" );
+    
+    public static final OntClass conclusion = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@conclusion" );
+    
+    public static final OntClass condition = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@condition" );
+    
+    public static final OntClass confirmation = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@confirmation" );
+    
+    public static final OntClass consent = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@consent" );
+    
+    public static final OntClass consequence = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@consequence" );
+    
+    public static final OntClass consonance = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@consonance" );
+    
+    public static final OntClass contact = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@contact" );
+    
+    public static final OntClass contentment = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@contentment" );
+    
+    public static final OntClass continuative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@continuative" );
+    
+    public static final OntClass conviction = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@conviction" );
+    
+    public static final OntClass decision = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@decision" );
+    
+    public static final OntClass deduction = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@deduction" );
+    
+    public static final OntClass def = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@def" );
+    
+    public static final OntClass desire = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@desire" );
+    
+    public static final OntClass despite = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@despite" );
+    
+    public static final OntClass determination = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@determination" );
+    
+    public static final OntClass dialect = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@dialect" );
+    
+    public static final OntClass disagreement = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@disagreement" );
+    
+    public static final OntClass discontentment = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@discontentment" );
+    
+    public static final OntClass dissent = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@dissent" );
+    
+    public static final OntClass distal = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@distal" );
+    
+    public static final OntClass double_negative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@double_negative" );
+    
+    public static final OntClass double_parenthesis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@double_parenthesis" );
+    
+    public static final OntClass double_quote = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@double_quote" );
+    
+    public static final OntClass doubt = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@doubt" );
+    
+    public static final OntClass down = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@down" );
+    
+    public static final OntClass dual = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@dual" );
+    
+    public static final OntClass due_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@due_to" );
+    
+    public static final OntClass during = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@during" );
+    
+    public static final OntClass dysphemism = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@dysphemism" );
+    
+    public static final OntClass each = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@each" );
+    
+    public static final OntClass either = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@either" );
+    
+    public static final OntClass ellipsis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@ellipsis" );
+    
+    public static final OntClass emphasis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@emphasis" );
+    
+    public static final OntClass enough = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@enough" );
+    
+    public static final OntClass entire = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@entire" );
+    
+    public static final OntClass entry = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@entry" );
+    
+    public static final OntClass epanalepsis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@epanalepsis" );
+    
+    public static final OntClass epanorthosis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@epanorthosis" );
+    
+    public static final OntClass equal = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@equal" );
+    
+    public static final OntClass equivalent = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@equivalent" );
+    
+    public static final OntClass euphemism = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@euphemism" );
+    
+    public static final OntClass even = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@even" );
+    
+    public static final OntClass if__CLASS = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@even.@if" );
+    
+    public static final OntClass except = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@except" );
+    
+    public static final OntClass if__CLASS1 = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@except.@if" );
+    
+    public static final OntClass except_for = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@except_for" );
+    
+    public static final OntClass exclamation = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@exclamation" );
+    
+    public static final OntClass excluding = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@excluding" );
+    
+    public static final OntClass exhortation = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@exhortation" );
+    
+    public static final OntClass expectation = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@expectation" );
+    
+    public static final OntClass experiential = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@experiential" );
+    
+    public static final OntClass extra = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@extra" );
+    
+    public static final OntClass failing = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@failing" );
+    
+    public static final OntClass familiar = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@familiar" );
+    
+    public static final OntClass far = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@far" );
+    
+    public static final OntClass fear = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@fear" );
+    
+    public static final OntClass female = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@female" );
+    
+    public static final OntClass focus = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@focus" );
+    
+    public static final OntClass following = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@following" );
+    
+    public static final OntClass for_ = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@for" );
+    
+    public static final OntClass from = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@from" );
+    
+    public static final OntClass front = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@front" );
+    
+    public static final OntClass future = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@future" );
+    
+    public static final OntClass generic = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@generic" );
+    
+    public static final OntClass given = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@given" );
+    
+    public static final OntClass habitual = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@habitual" );
+    
+    public static final OntClass half = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@half" );
+    
+    public static final OntClass hesitation = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@hesitation" );
+    
+    public static final OntClass hope = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@hope" );
+    
+    public static final OntClass hyperbole = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@hyperbole" );
+    
+    public static final OntClass hypothesis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@hypothesis" );
+    
+    public static final OntClass if__CLASS2 = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@if" );
+    
+    public static final OntClass only = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@if.@only" );
+    
+    public static final OntClass imperfective = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@imperfective" );
+    
+    public static final OntClass in = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@in" );
+    
+    public static final OntClass in_accordance_with = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@in_accordance_with" );
+    
+    public static final OntClass in_addition_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@in_addition_to" );
+    
+    public static final OntClass in_case = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@in_case" );
+    
+    public static final OntClass in_case_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@in_case_of" );
+    
+    public static final OntClass in_favor_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@in_favor_of" );
+    
+    public static final OntClass in_place_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@in_place_of" );
+    
+    public static final OntClass in_spite_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@in_spite_of" );
+    
+    public static final OntClass inceptive = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@inceptive" );
+    
+    public static final OntClass inchoative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@inchoative" );
+    
+    public static final OntClass including = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@including" );
+    
+    public static final OntClass indef = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@indef" );
+    
+    public static final OntClass inferior = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@inferior" );
+    
+    public static final OntClass inside = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@inside" );
+    
+    public static final OntClass instead_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@instead_of" );
+    
+    public static final OntClass intention = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@intention" );
+    
+    public static final OntClass interrogation = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@interrogation" );
+    
+    public static final OntClass interruption = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@interruption" );
+    
+    public static final OntClass intimate = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@intimate" );
+    
+    public static final OntClass invitation = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@invitation" );
+    
+    public static final OntClass irony = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@irony" );
+    
+    public static final OntClass iterative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@iterative" );
+    
+    public static final OntClass jargon = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@jargon" );
+    
+    public static final OntClass judgement = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@judgement" );
+    
+    public static final OntClass least = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@least" );
+    
+    public static final OntClass left = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@left" );
+    
+    public static final OntClass less = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@less" );
+    
+    public static final OntClass like = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@like" );
+    
+    public static final OntClass literary = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@literary" );
+    
+    public static final OntClass majority = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@majority" );
+    
+    public static final OntClass male = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@male" );
+    
+    public static final OntClass maybe = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@maybe" );
+    
+    public static final OntClass medial = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@medial" );
+    
+    public static final OntClass metaphor = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@metaphor" );
+    
+    public static final OntClass metonymy = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@metonymy" );
+    
+    public static final OntClass minority = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@minority" );
+    
+    public static final OntClass minus = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@minus" );
+    
+    public static final OntClass more = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@more" );
+    
+    public static final OntClass most = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@most" );
+    
+    public static final OntClass multal = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@multal" );
+    
+    public static final OntClass narrative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@narrative" );
+    
+    public static final OntClass near = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@near" );
+    
+    public static final OntClass necessity = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@necessity" );
+    
+    public static final OntClass neither = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@neither" );
+    
+    public static final OntClass neutral = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@neutral" );
+    
+    public static final OntClass no = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@no" );
+    
+    public static final OntClass not = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@not" );
+    
+    public static final OntClass notwithstanding = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@notwithstanding" );
+    
+    public static final OntClass noun = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@noun" );
+    
+    public static final OntClass obligation = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@obligation" );
+    
+    public static final OntClass of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@of" );
+    
+    public static final OntClass off = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@off" );
+    
+    public static final OntClass on = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@on" );
+    
+    public static final OntClass on_account_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@on_account_of" );
+    
+    public static final OntClass on_behalf_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@on_behalf_of" );
+    
+    public static final OntClass one = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@one" );
+    
+    public static final OntClass only_CLASS = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@only" );
+    
+    public static final OntClass onomatopoeia = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@onomatopoeia" );
+    
+    public static final OntClass opinion = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@opinion" );
+    
+    public static final OntClass opposite = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@opposite" );
+    
+    public static final OntClass or_CLASS = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@or" );
+    
+    public static final OntClass ordinal = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@ordinal" );
+    
+    public static final OntClass other = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@other" );
+    
+    public static final OntClass outside = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@outside" );
+    
+    public static final OntClass over = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@over" );
+    
+    public static final OntClass owing_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@owing_to" );
+    
+    public static final OntClass own = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@own" );
+    
+    public static final OntClass oxymoron = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@oxymoron" );
+    
+    public static final OntClass pace = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@pace" );
+    
+    public static final OntClass pain = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@pain" );
+    
+    public static final OntClass paradox = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@paradox" );
+    
+    public static final OntClass parallelism = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@parallelism" );
+    
+    public static final OntClass parenthesis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@parenthesis" );
+    
+    public static final OntClass paronomasia = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@paronomasia" );
+    
+    public static final OntClass part = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@part" );
+    
+    public static final OntClass passive = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@passive" );
+    
+    public static final OntClass past = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@past" );
+    
+    public static final OntClass paucal = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@paucal" );
+    
+    public static final OntClass pejorative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@pejorative" );
+    
+    public static final OntClass per_CLASS = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@per" );
+    
+    public static final OntClass perfect = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@perfect" );
+    
+    public static final OntClass perfective = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@perfective" );
+    
+    public static final OntClass periphrasis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@periphrasis" );
+    
+    public static final OntClass permission = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@permission" );
+    
+    public static final OntClass permissive = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@permissive" );
+    
+    public static final OntClass persistent = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@persistent" );
+    
+    public static final OntClass person = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@person" );
+    
+    public static final OntClass pl = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@pl" );
+    
+    public static final OntClass pleonasm = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@pleonasm" );
+    
+    public static final OntClass plus = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@plus" );
+    
+    public static final OntClass polite = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@polite" );
+    
+    public static final OntClass polyptoton = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@polyptoton" );
+    
+    public static final OntClass polysyndeton = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@polysyndeton" );
+    
+    public static final OntClass possibility = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@possibility" );
+    
+    public static final OntClass posterior = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@posterior" );
+    
+    public static final OntClass prediction = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@prediction" );
+    
+    public static final OntClass present = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@present" );
+    
+    public static final OntClass presumption = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@presumption" );
+    
+    public static final OntClass prior_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@prior_to" );
+    
+    public static final OntClass probability = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@probability" );
+    
+    public static final OntClass progressive = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@progressive" );
+    
+    public static final OntClass prohibition = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@prohibition" );
+    
+    public static final OntClass promise = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@promise" );
+    
+    public static final OntClass prospective = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@prospective" );
+    
+    public static final OntClass proximal = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@proximal" );
+    
+    public static final OntClass pursuant_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@pursuant_to" );
+    
+    public static final OntClass qua_CLASS = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@qua" );
+    
+    public static final OntClass quadrual = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@quadrual" );
+    
+    public static final OntClass recent = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@recent" );
+    
+    public static final OntClass reciprocal = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@reciprocal" );
+    
+    public static final OntClass reflexive = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@reflexive" );
+    
+    public static final OntClass regarding = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@regarding" );
+    
+    public static final OntClass regardless_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@regardless_of" );
+    
+    public static final OntClass regret = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@regret" );
+    
+    public static final OntClass relative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@relative" );
+    
+    public static final OntClass relief = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@relief" );
+    
+    public static final OntClass remote = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@remote" );
+    
+    public static final OntClass repetition = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@repetition" );
+    
+    public static final OntClass request = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@request" );
+    
+    public static final OntClass result = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@result" );
+    
+    public static final OntClass reverential = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@reverential" );
+    
+    public static final OntClass right = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@right" );
+    
+    public static final OntClass round = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@round" );
+    
+    public static final OntClass same = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@same" );
+    
+    public static final OntClass save = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@save" );
+    
+    public static final OntClass side = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@side" );
+    
+    public static final OntClass since = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@since" );
+    
+    public static final OntClass single_quote = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@single_quote" );
+    
+    public static final OntClass singular = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@singular" );
+    
+    public static final OntClass slang = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@slang" );
+    
+    public static final OntClass so = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@so" );
+    
+    public static final OntClass speculation = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@speculation" );
+    
+    public static final OntClass speech = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@speech" );
+    
+    public static final OntClass square_bracket = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@square_bracket" );
+    
+    public static final OntClass subsequent_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@subsequent_to" );
+    
+    public static final OntClass such = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@such" );
+    
+    public static final OntClass suggestion = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@suggestion" );
+    
+    public static final OntClass superior = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@superior" );
+    
+    public static final OntClass surprise = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@surprise" );
+    
+    public static final OntClass symploce = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@symploce" );
+    
+    public static final OntClass synecdoche = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@synecdoche" );
+    
+    public static final OntClass synesthesia = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@synesthesia" );
+    
+    public static final OntClass taboo = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@taboo" );
+    
+    public static final OntClass terminative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@terminative" );
+    
+    public static final OntClass than = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@than" );
+    
+    public static final OntClass thanks_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@thanks_to" );
+    
+    public static final OntClass that_of = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@that_of" );
+    
+    public static final OntClass thing = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@thing" );
+    
+    public static final OntClass threat = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@threat" );
+    
+    public static final OntClass three = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@three" );
+    
+    public static final OntClass through = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@through" );
+    
+    public static final OntClass throughout = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@throughout" );
+    
+    public static final OntClass times = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@times" );
+    
+    public static final OntClass title = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@title" );
+    
+    public static final OntClass to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@to" );
+    
+    public static final OntClass top = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@top" );
+    
+    public static final OntClass topic = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@topic" );
+    
+    public static final OntClass towards = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@towards" );
+    
+    public static final OntClass trial = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@trial" );
+    
+    public static final OntClass tuple = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@tuple" );
+    
+    public static final OntClass two = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@two" );
+    
+    public static final OntClass under = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@under" );
+    
+    public static final OntClass unit = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@unit" );
+    
+    public static final OntClass unless = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@unless" );
+    
+    public static final OntClass unlike = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@unlike" );
+    
+    public static final OntClass until = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@until" );
+    
+    public static final OntClass up = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@up" );
+    
+    public static final OntClass verb = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@verb" );
+    
+    public static final OntClass versus = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@versus" );
+    
+    public static final OntClass vocative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@vocative" );
+    
+    public static final OntClass warning = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@warning" );
+    
+    public static final OntClass weariness = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@weariness" );
+    
+    public static final OntClass wh = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@wh" );
+    
+    public static final OntClass with = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@with" );
+    
+    public static final OntClass with_regard_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@with_regard_to" );
+    
+    public static final OntClass with_relation_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@with_relation_to" );
+    
+    public static final OntClass with_respect_to = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@with_respect_to" );
+    
+    public static final OntClass within = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@within" );
+    
+    public static final OntClass without = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@without" );
+    
+    public static final OntClass worth = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@worth" );
+    
+    public static final OntClass yes = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@yes" );
+    
+    public static final OntClass zoomorphism = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#@zoomorphism" );
+    
+    public static final OntClass Schemes = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#Schemes" );
+    
+    public static final OntClass Tropes = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#Tropes" );
+    
+    public static final OntClass UNLKB_Node = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UNLKB_Node" );
+    
+    /** <p>Top concepts of a UNL Knoledge Base that shall not correspond to a UW.</p> */
+    public static final OntClass UNLKB_Top_Concept = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UNLKB_Top_Concept" );
+    
+    /** <p>For more information about UNL Documents, see : http://www.unlweb.net/wiki/UNL_document</p> */
+    public static final OntClass UNL_Document = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UNL_Document" );
+    
+    public static final OntClass UNL_Graph_Node = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UNL_Graph_Node" );
+    
+    public static final OntClass UNL_Node = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UNL_Node" );
+    
+    /** <p>For more information about UNL Paragraphs, see : http://www.unlweb.net/wiki/UNL_document</p> */
+    public static final OntClass UNL_Paragraph = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UNL_Paragraph" );
+    
+    /** <p>For more information about UNL Scopes, see : http://www.unlweb.net/wiki/Scope 
+     *  The UNL representation is a hyper-graph, which means that it may consist of 
+     *  several interlinked or subordinate sub-graphs. These sub-graphs are represented 
+     *  as hyper-nodes and correspond roughly to the concept of dependent (subordinate) 
+     *  clauses, i.e., groups of words that consist of a subject (explicit or implied) 
+     *  and a predicate and which are embedded in a larger structure (the independent 
+     *  clause). They are used to define the boundaries between complex semantic entities 
+     *  being represented.</p>
+     */
+    public static final OntClass UNL_Scope = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UNL_Scope" );
+    
+    /** <p>For mor information about UNL Sentences, see : http://www.unlweb.net/wiki/UNL_sentence 
+     *  UNL sentences, or UNL expressions, are sentences of UNL. They are hypergraphs 
+     *  made out of nodes (Universal Words) interlinked by binary semantic Universal 
+     *  Relations and modified by Universal Attributes. UNL sentences have been the 
+     *  basic unit of representation inside the UNL framework.</p>
+     */
+    public static final OntClass UNL_Sentence = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UNL_Sentence" );
+    
+    /** <p>Sentences expressed in UNL can be organized in paragraphs and documents</p> */
+    public static final OntClass UNL_Structure = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UNL_Structure" );
+    
+    public static final OntClass UW_Lexeme = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UW_Lexeme" );
+    
+    public static final OntClass UW_Occurrence = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#UW_Occurrence" );
+    
+    /** <p>More informations about Universal Attributes here : http://www.unlweb.net/wiki/Universal_Attributes 
+     *  Classes in this hierarchy are informative. Universal attributes must be expressed 
+     *  as strings (label of the attribute) with datatype :Universal_Attribute. Universal 
+     *  Attributes are arcs linking a node to itself. In opposition to Universal Relations, 
+     *  they correspond to one-place predicates, i.e., functions that take a single 
+     *  argument. In UNL, attributes have been normally used to represent information 
+     *  conveyed by natural language grammatical categories (such as tense, mood, 
+     *  aspect, number, etc). The set of attributes, which is claimed to be universal, 
+     *  is defined in the UNL Specs and is not open to frequent additions.</p>
+     */
+    public static final OntClass Universal_Attribute = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#Universal_Attribute" );
+    
+    /** <p>For details abour UWs, see : http://www.unlweb.net/wiki/Universal_Words Universal 
+     *  Words, or simply UW's, are the words of UNL, and correspond to nodes - to 
+     *  be interlinked by Universal Relations and specified by Universal Attributes 
+     *  - in a UNL graph.</p>
+     */
+    public static final OntClass Universal_Word = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#Universal_Word" );
+    
+    public static final OntClass absolute_tense = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#absolute_tense" );
+    
+    public static final OntClass animacy = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#animacy" );
+    
+    public static final OntClass aspect = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#aspect" );
+    
+    public static final OntClass comparative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#comparative" );
+    
+    public static final OntClass conventions = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#conventions" );
+    
+    public static final OntClass degree = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#degree" );
+    
+    public static final OntClass direction = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#direction" );
+    
+    public static final OntClass emotions = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#emotions" );
+    
+    public static final OntClass figure_of_speech = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#figure_of_speech" );
+    
+    public static final OntClass gender = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#gender" );
+    
+    public static final OntClass information_structure = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#information_structure" );
+    
+    public static final OntClass lexical_category = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#lexical_category" );
+    
+    public static final OntClass location = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#location" );
+    
+    public static final OntClass manner = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#manner" );
+    
+    public static final OntClass modality = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#modality" );
+    
+    public static final OntClass nominal_attributes = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#nominal_attributes" );
+    
+    public static final OntClass other_CLASS = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#other" );
+    
+    public static final OntClass person_CLASS = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#person" );
+    
+    public static final OntClass place = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#place" );
+    
+    public static final OntClass polarity = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#polarity" );
+    
+    public static final OntClass position = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#position" );
+    
+    public static final OntClass positive = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#positive" );
+    
+    public static final OntClass quantification = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#quantification" );
+    
+    public static final OntClass register = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#register" );
+    
+    public static final OntClass relative_tense = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#relative_tense" );
+    
+    public static final OntClass social_deixis = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#social_deixis" );
+    
+    public static final OntClass specification = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#specification" );
+    
+    public static final OntClass superlative = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#superlative" );
+    
+    public static final OntClass syntactic_structures = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#syntactic_structures" );
+    
+    public static final OntClass time = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#time" );
+    
+    public static final OntClass voice = M_MODEL.createClass( "https://unl.tetras-libre.fr/rdf/schema#voice" );
+    
+}
diff --git a/java/tools/apache-jena-3.14.0/LICENSE b/java/tools/apache-jena-3.14.0/LICENSE
new file mode 100644
index 0000000..03cb600
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/LICENSE
@@ -0,0 +1,274 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+The following files contain code contributed by Plugged In Software:
+
+src/main/java/org/apache/jena/rdf/arp/ExtendedHandler.java
+src/main/java/org/apache/jena/rdf/arp/impl/XMLHandler.java
+src/main/java/org/apache/jena/rdf/arp/ARP.java 
+
+  (c) Copyright 2003, Plugged In Software 
+
+  All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+Simple Logging Facade for Java (SLF4J)
+http://slf4j.org/
+
+Copyright (c) 2004-2008 QOS.ch
+All rights reserved.
+
+Permission is hereby granted, free  of charge, to any person obtaining
+a  copy  of this  software  and  associated  documentation files  (the
+"Software"), to  deal in  the Software without  restriction, including
+without limitation  the rights to  use, copy, modify,  merge, publish,
+distribute,  sublicense, and/or sell  copies of  the Software,  and to
+permit persons to whom the Software  is furnished to do so, subject to
+the following conditions:
+
+The  above  copyright  notice  and  this permission  notice  shall  be
+included in all copies or substantial portions of the Software.
+
+THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+From Apache HttpComponents Client
+
+This project contains annotations derived from JCIP-ANNOTATIONS
+Copyright (c) 2005 Brian Goetz and Tim Peierls.
+See http://www.jcip.net and the Creative Commons Attribution License 
+(http://creativecommons.org/licenses/by/2.5)
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+Dexx Collections
+https://github.com/andrewoma/dexx
+BSD-Style License
+  https://github.com/andrewoma/dexx/blob/master/LICENSE.txt
+
+Copyright (c) 2014 Andrew O'Malley
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
diff --git a/java/tools/apache-jena-3.14.0/NOTICE b/java/tools/apache-jena-3.14.0/NOTICE
new file mode 100644
index 0000000..8e99ca3
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/NOTICE
@@ -0,0 +1,60 @@
+Apache Jena
+Copyright 2011-2020 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes software developed by
+PluggedIn Software and under a BSD license.
+
+Portions of this software were originally based on the following:
+  - Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Hewlett-Packard Development Company, LP
+  - Copyright 2010, 2011 Epimorphics Ltd.
+  - Copyright 2010, 2011 Talis Systems Ltd.
+These have been licensed to the Apache Software Foundation under a software grant.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+From Apache HttpComponents Client:
+
+This project contains annotations derived from JCIP-ANNOTATIONS
+Copyright (c) 2005 Brian Goetz and Tim Peierls. See http://www.jcip.net
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+  Apache Xerces Java
+   Copyright 1999-2013 The Apache Software Foundation
+
+   This product includes software developed at
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Portions of this software were originally based on the following:
+     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+     - voluntary contributions made by Paul Eng on behalf of the 
+       Apache Software Foundation that were originally developed at iClick, Inc.,
+       software copyright (c) 1999.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+Simple Logging Facade for Java (SLF4J)
+http://slf4j.org/
+
+Copyright (c) 2004-2008 QOS.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Dexx Collections
+Copyright (c) 2014 Andrew O'Malley
+https://github.com/andrewoma/dexx
+BSD-Style License
+  https://github.com/andrewoma/dexx/blob/master/LICENSE.txt
+  
+and includes the following NOTICE
+----------
+Portions based on code from the Scala standard library.
+Copyright (c) 2002-2014 EPFL
+Copyright (c) 2011-2014 Typesafe, Inc.
+Licensed under BSD-style license (see licenses/LICENSE_Scala.txt)
+----------
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
diff --git a/java/tools/apache-jena-3.14.0/README b/java/tools/apache-jena-3.14.0/README
new file mode 100644
index 0000000..fabef53
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/README
@@ -0,0 +1,127 @@
+
+                                  Apache Jena
+                                  ===========
+
+  Jena is a Java framework for building semantic web applications. It provides 
+  tools and Java libraries to help you to develop semantic web and linked-data 
+  apps, tools and servers.
+
+  This distribution includes the following Apache Jena modules: 
+
+  - jena-core: provides the Jena RDF APIs, Ontology APIs and Inference APIs. 
+  - jena-arq:  SPARQL 1.1, query and update.
+  - jena-cmds: Command line tools.
+  - jena-tdb:  scalable and performant storage subsystem for Jena
+  - jena-iri:  provides an implementation of RFC 3987 (IRI) and RFC 3986 (URI)
+
+  Installing Jena
+  ---------------
+
+   To use Jena in your application, ensure all the .jar files in the lib/
+   directory are on the classpath or available to your web application. Jena
+   is built and test with these .jar files.
+
+  Scripts
+  -------
+
+  The directories bat/ and bin/ provide script wrappers to run Jena command
+  line tools.  The scripts can be copied to a convenient place on the
+  command path.
+
+  To use the Jena tools from the command line you need to set the JENA_HOME
+  environment variable to point to the location where you have 
+  unzipped the Jena distribution:
+
+  Windows:
+    set JENA_HOME=\path\to\apache-jena-x.y.z
+    bat\sparql.bat --version    
+
+  Linux:
+    The command scripts automatically set JENA_HOME but if you want
+    to switch to a different version from the same scripts:
+
+    export JENA_HOME=/path/to/apache-jena-x.y.z
+    bin/sparql --version    
+
+  Where x.y.z is the version of the Jena command line tools you have 
+  downloaded
+    
+  If you receive a class not found exception when trying to run one of the 
+  scripts then you may have set JENA_HOME incorrectly. A quick and easy way
+  to validate that JENA_HOME is set correctly is to run the following:
+  
+  Windows:
+    cd %JENA_HOME%
+    
+  Linux:
+    cd $JENA_HOME
+    
+  If this command returns an error then JENA_HOME is not pointed to a valid directory
+
+
+  Website
+  -------
+
+  The Apache Jena website is available here:
+  http://jena.apache.org/
+
+
+  Documentation
+  -------------
+
+  Getting started: http://jena.apache.org/getting_started/
+  Tutorials: http://jena.apache.org/tutorials/
+  Documentation: http://jena.apache.org/documentation/
+
+  Support is provided via users@jena.apache.org mailing list.
+  See also: http://jena.apache.org/help_and_support/
+
+  Sources and Getting Involved
+  ----------------------------
+
+  The Apache Jena source code repository is here:
+  http://svn.apache.org/repos/asf/jena/
+
+  If you are interested in getting involved with Apache Jena development: 
+  http://jena.apache.org/getting_involved/
+
+  Licensing
+  ---------
+
+  Jena is provided under the Apache Software License v2.0
+  See LICENSE for the full text.
+
+ Cryptographic Software Notice
+ -----------------------------
+
+ This distribution includes cryptographic software. The country in which
+ you currently reside may have restrictions on the import, possession,
+ use, and/or re-export to another country, of encryption software. BEFORE
+ using any encryption software, please check your country's laws,
+ regulations and policies concerning the import, possession, or use, and
+ re-export of encryption software, to see if this is permitted. 
+ See <http://www.wassenaar.org/> for more information.
+
+ The U.S. Government Department of Commerce, Bureau of Industry and
+ Security (BIS), has classified this software as Export Commodity
+ Control Number (ECCN) 5D002.C.1, which includes information security
+ software using or performing cryptographic functions with asymmetric
+ algorithms. The form and manner of this Apache Software Foundation
+ distribution makes it eligible for export under the License Exception
+ ENC Technology Software Unrestricted (TSU) exception (see the BIS
+ Export Administration Regulations, Section 740.13) for both object
+ code and source code.
+
+ The following provides more details on the included software that
+ may be subject to export controls on cryptographic software:
+
+  Apache Jena (distribution) includes
+    Apache HttpComponents Client 
+    Apache HttpComponents Core
+  which interfaces with the Java Secure Socket Extension (JSSE) API
+  to provide
+
+     - HTTPS support
+
+   Apache Jena (distribution) does not include any
+   implementation of JSSE.
diff --git a/java/tools/apache-jena-3.14.0/bat/arq.bat b/java/tools/apache-jena-3.14.0/bat/arq.bat
new file mode 100755
index 0000000..f99003a
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/arq.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.arq %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/infer.bat b/java/tools/apache-jena-3.14.0/bat/infer.bat
new file mode 100755
index 0000000..9dbcc1a
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/infer.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" riotcmd.infer %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/iri.bat b/java/tools/apache-jena-3.14.0/bat/iri.bat
new file mode 100755
index 0000000..0893cfc
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/iri.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.iri %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/juuid.bat b/java/tools/apache-jena-3.14.0/bat/juuid.bat
new file mode 100755
index 0000000..88baf29
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/juuid.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.juuid %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/nquads.bat b/java/tools/apache-jena-3.14.0/bat/nquads.bat
new file mode 100755
index 0000000..bfaf5ba
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/nquads.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" riotcmd.nquads %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/ntriples.bat b/java/tools/apache-jena-3.14.0/bat/ntriples.bat
new file mode 100755
index 0000000..c715843
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/ntriples.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" riotcmd.ntriples %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/qparse.bat b/java/tools/apache-jena-3.14.0/bat/qparse.bat
new file mode 100755
index 0000000..3609dd7
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/qparse.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.qparse %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/rdfcat.bat b/java/tools/apache-jena-3.14.0/bat/rdfcat.bat
new file mode 100755
index 0000000..a19d860
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/rdfcat.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" jena.rdfcat %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/rdfcompare.bat b/java/tools/apache-jena-3.14.0/bat/rdfcompare.bat
new file mode 100755
index 0000000..b4a7219
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/rdfcompare.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" jena.rdfcompare %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/rdfcopy.bat b/java/tools/apache-jena-3.14.0/bat/rdfcopy.bat
new file mode 100755
index 0000000..0cd6aad
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/rdfcopy.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" jena.rdfcopy %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/rdfdiff.bat b/java/tools/apache-jena-3.14.0/bat/rdfdiff.bat
new file mode 100755
index 0000000..93d1821
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/rdfdiff.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.rdfdiff %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/rdfparse.bat b/java/tools/apache-jena-3.14.0/bat/rdfparse.bat
new file mode 100755
index 0000000..7faf87a
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/rdfparse.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" jena.rdfparse %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/rdfxml.bat b/java/tools/apache-jena-3.14.0/bat/rdfxml.bat
new file mode 100755
index 0000000..69038f6
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/rdfxml.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" riotcmd.rdfxml %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/riot.bat b/java/tools/apache-jena-3.14.0/bat/riot.bat
new file mode 100755
index 0000000..1653c1a
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/riot.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" riotcmd.riot %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/rset.bat b/java/tools/apache-jena-3.14.0/bat/rset.bat
new file mode 100755
index 0000000..fcec0fd
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/rset.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.rset %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/rsparql.bat b/java/tools/apache-jena-3.14.0/bat/rsparql.bat
new file mode 100755
index 0000000..e01bc68
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/rsparql.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.rsparql %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/rupdate.bat b/java/tools/apache-jena-3.14.0/bat/rupdate.bat
new file mode 100755
index 0000000..ae318f8
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/rupdate.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.rupdate %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/schemagen.bat b/java/tools/apache-jena-3.14.0/bat/schemagen.bat
new file mode 100755
index 0000000..8f76844
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/schemagen.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" jena.schemagen %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/shacl.bat b/java/tools/apache-jena-3.14.0/bat/shacl.bat
new file mode 100755
index 0000000..2cb77e5
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/shacl.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" shacl.shacl %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/sparql.bat b/java/tools/apache-jena-3.14.0/bat/sparql.bat
new file mode 100755
index 0000000..609dceb
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/sparql.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.sparql %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdb2_tdbbackup.bat b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbbackup.bat
new file mode 100755
index 0000000..a51b6a2
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbbackup.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbbackup %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdb2_tdbcompact.bat b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbcompact.bat
new file mode 100755
index 0000000..87fc7ae
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbcompact.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbcompact %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdb2_tdbdump.bat b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbdump.bat
new file mode 100755
index 0000000..7ad54f9
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbdump.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbdump %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdb2_tdbloader.bat b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbloader.bat
new file mode 100755
index 0000000..f848624
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbloader.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbloader %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdb2_tdbquery.bat b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbquery.bat
new file mode 100755
index 0000000..33db6be
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbquery.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbquery %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdb2_tdbstats.bat b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbstats.bat
new file mode 100755
index 0000000..a1d7b07
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbstats.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbstats %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdb2_tdbupdate.bat b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbupdate.bat
new file mode 100755
index 0000000..6d79293
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdb2_tdbupdate.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb2.tdbupdate %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdbbackup.bat b/java/tools/apache-jena-3.14.0/bat/tdbbackup.bat
new file mode 100755
index 0000000..351c433
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdbbackup.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb.tdbbackup %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdbdump.bat b/java/tools/apache-jena-3.14.0/bat/tdbdump.bat
new file mode 100755
index 0000000..7ae6c4c
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdbdump.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb.tdbdump %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdbloader.bat b/java/tools/apache-jena-3.14.0/bat/tdbloader.bat
new file mode 100755
index 0000000..0cd8e85
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdbloader.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb.tdbloader %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdbquery.bat b/java/tools/apache-jena-3.14.0/bat/tdbquery.bat
new file mode 100755
index 0000000..6fe54a7
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdbquery.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb.tdbquery %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdbstats.bat b/java/tools/apache-jena-3.14.0/bat/tdbstats.bat
new file mode 100755
index 0000000..3ac42f5
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdbstats.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb.tdbstats %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/tdbupdate.bat b/java/tools/apache-jena-3.14.0/bat/tdbupdate.bat
new file mode 100755
index 0000000..f1148cc
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/tdbupdate.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" tdb.tdbupdate %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/trig.bat b/java/tools/apache-jena-3.14.0/bat/trig.bat
new file mode 100755
index 0000000..6971ea9
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/trig.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" riotcmd.trig %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/turtle.bat b/java/tools/apache-jena-3.14.0/bat/turtle.bat
new file mode 100755
index 0000000..253c996
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/turtle.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" riotcmd.turtle %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/uparse.bat b/java/tools/apache-jena-3.14.0/bat/uparse.bat
new file mode 100755
index 0000000..f0674a8
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/uparse.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.uparse %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/update.bat b/java/tools/apache-jena-3.14.0/bat/update.bat
new file mode 100755
index 0000000..5288bc9
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/update.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.update %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/utf8.bat b/java/tools/apache-jena-3.14.0/bat/utf8.bat
new file mode 100755
index 0000000..bd9f5b6
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/utf8.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" riotcmd.utf8 %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/wwwdec.bat b/java/tools/apache-jena-3.14.0/bat/wwwdec.bat
new file mode 100755
index 0000000..79c8e7e
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/wwwdec.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.wwwdec %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bat/wwwenc.bat b/java/tools/apache-jena-3.14.0/bat/wwwenc.bat
new file mode 100755
index 0000000..7a205b1
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bat/wwwenc.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%JENAROOT%" == "" goto :rootNotSet
+set JENA_HOME=%JENAROOT%
+:rootNotSet
+
+if NOT "%JENA_HOME%" == "" goto :okHome
+echo JENA_HOME not set
+exit /B
+
+:okHome
+set JENA_CP=%JENA_HOME%\lib\*;
+set LOGGING=file:%JENA_HOME%/jena-log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%JENA_CP%" arq.wwwenc %*
+exit /B
diff --git a/java/tools/apache-jena-3.14.0/bin/arq b/java/tools/apache-jena-3.14.0/bin/arq
new file mode 100755
index 0000000..ad0180c
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/arq
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.arq "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/infer b/java/tools/apache-jena-3.14.0/bin/infer
new file mode 100755
index 0000000..2bb9e07
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/infer
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.infer "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/iri b/java/tools/apache-jena-3.14.0/bin/iri
new file mode 100755
index 0000000..0e21c2a
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/iri
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.iri "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/jena b/java/tools/apache-jena-3.14.0/bin/jena
new file mode 100755
index 0000000..3b30fd1
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/jena
@@ -0,0 +1,101 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+## ---- Determine the command.
+case "$#" in
+    0)
+	V="$(java -cp "$JENA_CP" jena.version)"
+	echo "Jena version : $V"
+	echo "Jena home    : $JENA_HOME"
+	exit
+	;;
+    
+    *) CMD="$1" ; shift ;;
+esac
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" "$CMD" "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/juuid b/java/tools/apache-jena-3.14.0/bin/juuid
new file mode 100755
index 0000000..b02286b
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/juuid
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.juuid "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/nquads b/java/tools/apache-jena-3.14.0/bin/nquads
new file mode 100755
index 0000000..cafef1c
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/nquads
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.nquads "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/ntriples b/java/tools/apache-jena-3.14.0/bin/ntriples
new file mode 100755
index 0000000..67d387c
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/ntriples
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.ntriples "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/qparse b/java/tools/apache-jena-3.14.0/bin/qparse
new file mode 100755
index 0000000..368d336
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/qparse
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.qparse "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/rdfcat b/java/tools/apache-jena-3.14.0/bin/rdfcat
new file mode 100755
index 0000000..1e6038b
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/rdfcat
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.rdfcat "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/rdfcompare b/java/tools/apache-jena-3.14.0/bin/rdfcompare
new file mode 100755
index 0000000..7c53b4b
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/rdfcompare
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.rdfcompare "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/rdfcopy b/java/tools/apache-jena-3.14.0/bin/rdfcopy
new file mode 100755
index 0000000..a7a942e
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/rdfcopy
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.rdfcopy "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/rdfdiff b/java/tools/apache-jena-3.14.0/bin/rdfdiff
new file mode 100755
index 0000000..22591d4
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/rdfdiff
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.rdfdiff "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/rdfparse b/java/tools/apache-jena-3.14.0/bin/rdfparse
new file mode 100755
index 0000000..675019b
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/rdfparse
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.rdfparse "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/rdfxml b/java/tools/apache-jena-3.14.0/bin/rdfxml
new file mode 100755
index 0000000..e94cba9
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/rdfxml
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.rdfxml "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/riot b/java/tools/apache-jena-3.14.0/bin/riot
new file mode 100755
index 0000000..89fdf70
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/riot
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.riot "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/rset b/java/tools/apache-jena-3.14.0/bin/rset
new file mode 100755
index 0000000..2d5648f
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/rset
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.rset "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/rsparql b/java/tools/apache-jena-3.14.0/bin/rsparql
new file mode 100755
index 0000000..b9be84a
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/rsparql
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.rsparql "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/rupdate b/java/tools/apache-jena-3.14.0/bin/rupdate
new file mode 100755
index 0000000..91ea58d
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/rupdate
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.rupdate "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/schemagen b/java/tools/apache-jena-3.14.0/bin/schemagen
new file mode 100755
index 0000000..29ab7cd
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/schemagen
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" jena.schemagen "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/shacl b/java/tools/apache-jena-3.14.0/bin/shacl
new file mode 100755
index 0000000..a4338d6
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/shacl
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" shacl.shacl "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/sparql b/java/tools/apache-jena-3.14.0/bin/sparql
new file mode 100755
index 0000000..8f1e1b2
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/sparql
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.sparql "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdb2.tdbbackup b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbbackup
new file mode 100755
index 0000000..a11ce74
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbbackup
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbbackup "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdb2.tdbcompact b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbcompact
new file mode 100755
index 0000000..10c28ff
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbcompact
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbcompact "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdb2.tdbdump b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbdump
new file mode 100755
index 0000000..b5f5121
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbdump
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbdump "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdb2.tdbloader b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbloader
new file mode 100755
index 0000000..1b3b246
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbloader
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbloader "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdb2.tdbquery b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbquery
new file mode 100755
index 0000000..aa380fb
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbquery
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbquery "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdb2.tdbstats b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbstats
new file mode 100755
index 0000000..36363b5
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbstats
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbstats "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdb2.tdbupdate b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbupdate
new file mode 100755
index 0000000..b943a18
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdb2.tdbupdate
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb2.tdbupdate "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdbbackup b/java/tools/apache-jena-3.14.0/bin/tdbbackup
new file mode 100755
index 0000000..864ab4b
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdbbackup
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbbackup "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdbdump b/java/tools/apache-jena-3.14.0/bin/tdbdump
new file mode 100755
index 0000000..9c2cb5b
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdbdump
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbdump "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdbloader b/java/tools/apache-jena-3.14.0/bin/tdbloader
new file mode 100755
index 0000000..0f0354f
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdbloader
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbloader "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdbloader2 b/java/tools/apache-jena-3.14.0/bin/tdbloader2
new file mode 100755
index 0000000..e61cd3e
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdbloader2
@@ -0,0 +1,341 @@
+#!/usr/bin/env bash
+
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+function printUsage() {
+  cat << EOF
+tdbloader2 - TDB Bulk Loader
+
+Usage: tdbloader2 --loc <Directory> [Options] <Data> ...
+
+Bulk loader for TDB which manipulates the data files directly and so
+can only be used to create new databases.  This command relies on
+POSIX utilities so will only work on POSIX operating systems.
+
+If you wish to bulk load to an existing database please use tdbloader
+instead.
+
+Required options are as follows:
+
+  -l <DatabaseDirectory>
+  --loc <DatabaseDirectory>
+    Sets the location in which the database should be created.
+
+    This location must be a directory and must be empty, if a
+    non-existent path is specified it will be created as a new
+    directory.
+
+  <Data>
+    Specifies the path to one/more data files to load
+
+Common additional options are as follows:
+
+  -h
+  --help
+    Prints this help summary and exits
+
+Advanced additional options are as follows:
+
+  -d
+  --debug
+    Enable debug mode, adds extra debug output
+
+  -j <JvmArgs>
+  --jvm-args <JvmArgs>
+    Sets the arguments that should be passed to the JVM for the
+    JVM based portions of the build.
+
+    Generally it is best to not change these unless you have been
+    specifically advised to.  The scripts will use appropriate
+    defaults if this is not specified.
+
+    In particular be careful increasing the heap size since many
+    parts of TDB actually use memory mapped files that live
+    outside the heap so if the heap is too large the heap may
+    conflict with the memory mapped files for memory space.
+
+  -k
+  --keep-work
+    Keeps the temporary work files around after they are no longer
+    needed.  May be useful for debugging.
+
+  -p <Phase>
+  --phase <Phase>
+    Sets the phase of the build to run, supported values are:
+
+      all      Full bulk load
+      data     Data phase only
+      index    Index phase only, requires the data phase to
+               previously have been run
+
+    When no phase is specified it defaults to all
+
+  -s <SortArgs>
+  --sort-args <SortArgs>
+    Sets the arguments that should be passed to sort for the sort
+    based portions of the build.
+
+    Generally it is best not to change these as the scripts will
+    use appropriate defaults for your system.
+
+  -t
+  --trace
+    Enable trace mode, essentially sets -x within the scripts
+
+EOF
+}
+
+function resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$(readlink -- "$NAME")
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize
+        NAME=$(readlink -f -- "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+  echo "Resolved symbolic links for JENA_HOME to $JENA_HOME"
+fi
+
+if [ -e "${JENA_HOME}/bin/tdbloader2common" ]; then
+  # Can source common functions
+  source "${JENA_HOME}/bin/tdbloader2common"
+else
+  echo "Unable to locate common functions script tdbloader2common"
+  exit 1
+fi
+
+# ---- Setup
+JVM_ARGS=${JVM_ARGS:--Xmx1024M}
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="-Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties"
+
+# Platform specific fixup
+#??On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+export JENA_CP
+
+
+# Process arguments
+LOC=
+PHASE=
+KEEP_WORK=0
+DEBUG=0
+TRACE=0
+JVM_ARGS=
+
+while [ $# -gt 0 ]
+do
+  ARG=$1
+  case "$ARG" in
+    -d|--debug)
+      # Debug Mode
+      shift
+      DEBUG=1
+      ;;
+    -h|--help)
+      # Help
+      printUsage
+      exit 0
+      ;;
+    -j|--jvm-args)
+      # JVM Arguments
+      shift
+      JVM_ARGS="$1"
+      shift
+      ;;
+    -k|--keep-work)
+      # Keep work files
+      shift
+      KEEP_WORK=1
+      ;;
+    -l|--loc|-loc)
+      # Location space separated
+      shift
+      LOC="$1"
+      shift
+      ;;
+    -*loc=*)
+      # Location = separated
+      LOC=${ARG/-*loc=/}
+      shift
+      ;;
+    -p|--phase)
+      # Phase space separated
+      shift
+      PHASE="$1"
+      shift
+      ;;
+    -s|--sort-args)
+      # Sort arguments
+      shift
+      SORT_ARGS=$1
+      shift
+      ;;
+    -t|--trace)
+      # Trace mode
+      shift
+      TRACE=1
+      set -x
+      ;;
+    --)
+      # Arguments separator
+      # All further arguments are treated as data files
+      shift
+      break
+      ;;
+    -*)
+      # Looks like an option but not known
+      abort 1 "Unrecognized option $ARG, if this was meant to be a data file separate options from data files with --"
+      ;;
+    *)
+      # Once we see an unrecognized argument that doesn't look like an option treat as start of files to process
+      break
+      ;;
+  esac
+done
+
+if [ -z "$PHASE" ]; then
+  PHASE="all"
+fi
+
+# Prepare arguments to pass to children
+COMMON_ARGS=
+DATA_ARGS=
+INDEX_ARGS=
+if [ $KEEP_WORK = 1 ]; then
+  COMMON_ARGS="--keep-work"
+fi
+if [ $DEBUG = 1 ]; then
+  COMMON_ARGS="$COMMON_ARGS --debug"
+fi
+if [ $TRACE = 1 ]; then
+  COMMON_ARGS="$COMMON_ARGS --trace"
+fi
+if [ -n "$JVM_ARGS" ]; then
+  COMMON_ARGS="$COMMON_ARGS --jvm-args $JVM_ARGS"
+fi
+if [ -n "$SORT_ARGS" ]; then
+  INDEX_ARGS="--sort-args $SORT_ARGS"
+fi
+
+# ---- Start
+info "-- TDB Bulk Loader Start"
+TIME1="$(date +%s)"
+
+TOOL_DIR="$JENA_HOME/bin"
+case "$PHASE" in
+  all)
+    # All Phases
+    # Data Phase
+    "${TOOL_DIR}/tdbloader2data" $COMMON_ARGS $DATA_ARGS --loc "$LOC" -- "$@"
+    RET=$?
+    if [ $RET -ne 0 ]; then
+      abort $RET "Failed during data phase"
+    fi
+
+    # Index Phase
+    "${TOOL_DIR}/tdbloader2index" $COMMON_ARGS $INDEX_ARGS --loc "$LOC"
+    RET=$?
+    if [ $RET -ne 0 ]; then
+      abort $RET "Failed during data phase"
+    fi
+    ;;
+
+  data)
+    # Data Phase
+    "${TOOL_DIR}/tdbloader2data" $COMMON_ARGS $DATA_ARGS --loc "$LOC" -- "$@"
+    RET=$?
+    if [ $RET -ne 0 ]; then
+      abort $RET "Failed during data phase"
+    fi
+    ;;
+
+  index)
+    # Index Phase
+    "${TOOL_DIR}/tdbloader2index" $COMMON_ARGS $INDEX_ARGS --loc "$LOC"
+    RET=$?
+    if [ $RET -ne 0 ]; then
+      abort $RET "Failed during index phase"
+    fi
+    ;;
+  *)
+    abort 1 "Unrecognized phase $PHASE"
+    ;;
+esac
+
+# ---- End
+TIME2="$(date +%s)"
+info "-- TDB Bulk Loader Finish"
+ELAPSED=$(($TIME2-$TIME1))
+info "-- $ELAPSED seconds"
diff --git a/java/tools/apache-jena-3.14.0/bin/tdbloader2common b/java/tools/apache-jena-3.14.0/bin/tdbloader2common
new file mode 100755
index 0000000..b4841cd
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdbloader2common
@@ -0,0 +1,235 @@
+#!/usr/bin/env bash
+
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+function log() {
+  echo " $(date $DATE)" "$@"
+}
+
+function debug() {
+ if [ $DEBUG = 1 ]; then
+   log "DEBUG" "$@"
+ fi
+}
+
+function info() {
+  log "INFO" "$@"
+}
+
+function warn() {
+  log "WARN" "$@" 1>&2
+}
+
+function error() {
+  log "ERROR" "$@" 1>&2
+}
+
+function abort() {
+  local EXIT=$1
+
+  # Trick to check for numeric
+  # -eq only returns true if the value is integer equals
+  if [ "$EXIT" -eq "$EXIT" ]; then
+    # Can use the provided exit code
+    shift
+  else
+    # Caller forgot to provide an exit code so use default of 1
+    EXIT=1
+  fi
+
+  # Log error and exit
+  error "$@"
+  exit $EXIT
+}
+
+function getSize() {
+  ls -l $1 | awk '{print $5}'
+}
+
+function getDriveInfo() {
+  local DIR=$1
+
+  local DRIVE_INFO=$(df -k "$DIR" | tail -n +2)
+  if [ -z "${DRIVE_INFO}" ]; then
+    abort 1 "Failed to get drive information for $DIR"
+  fi
+  local DISK=$(echo $DRIVE_INFO | awk '{print $1}')
+  local FREE_BYTES=$(echo $DRIVE_INFO | awk '{print $4}')
+  FREE_BYTES="$(($FREE_BYTES * 1024))"
+  local USED_PERCENT=$(echo $DRIVE_INFO | awk '{print $5}')
+  USED_PERCENT=${USED_PERCENT/"%"/}
+  local FREE_PERCENT=$((100 - $USED_PERCENT))
+
+  local INFO=()
+  INFO[0]="$DISK"
+  INFO[1]="$USED_PERCENT"
+  INFO[2]="$FREE_PERCENT"
+  INFO[3]="$FREE_BYTES"
+
+  echo ${INFO[@]}
+}
+
+function getFreeMem() {
+  # May be called from a script where exit on error is set
+  # in which case disable for the life of this function
+  set +e
+
+  local FREE_MEM=-1
+  case "$OSTYPE" in
+    darwin*)
+      # Have to get this from top
+      FREE_MEM=$(top -l 1 | grep PhysMem | awk '{print $6}')
+      MEM_UNIT=${FREE_MEM:${#FREE_MEM}-1:1}
+      FREE_MEM=${FREE_MEM%${MEM_UNIT}}
+      case "${MEM_UNIT}" in
+        K)
+          # Unlikely but let's cover our bases
+          FREE_MEM=$((${FREE_MEM} * 1024))
+          ;;
+        M)
+          FREE_MEM=$((${FREE_MEM} * 1024 * 1024))
+          ;;
+        G)
+          FREE_MEM=$((${FREE_MEM} * 1024 * 1024 * 1024))
+          ;;
+        T)
+          # Probably a ways off but let's be future proof
+          FREE_MEM=$((${FREE_MEM} * 1024 * 1024 * 1024 * 1024))
+          ;;
+        *)
+          # Unable to determine
+          FREE_MEM=-1
+          ;;
+        esac
+      ;;
+    linux*)
+      # Try to use free if available
+      which free >/dev/null 2>&1
+      if [ $? -eq 0 ]; then
+        # Have free available
+        FREE_MEM=$(free -b)
+
+        # Check the output
+        # 2.x kernels produce just an integer
+        # 3.x kernels produce detailed information
+        case "$FREE_MEM" in
+          ''|*[!0-9]*)
+            # Clean up free output on 3.x kernels
+            FREE_MEM=$(echo "$FREE_MEM" | tail -n +2 | head -n 1 | awk '{print $4}')
+        esac
+
+        # Final check that the output is numeric
+        if [ ! "$FREE_MEM" -eq "$FREE_MEM" ] 2>/dev/null; then
+          # Non-numeric
+          FREE_MEM=-1
+        fi
+      fi
+      ;;
+  esac
+
+  set -e
+
+  echo "$FREE_MEM"
+}
+
+function resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$(readlink -- "$NAME")
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize
+        NAME=$(readlink -f -- "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+function resolveLinks() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    NAME=$(resolveLink "$NAME")
+  elif [[ "$NAME" == *"/" ]]; then
+    # If the path ends in a / test -L will report false even
+    # if the path is actually a symbolic link
+    # So check if the name without the trailing / is a link and if
+    # so resolve it
+    if [ -L "${NAME%/}" ]; then
+      NAME=${NAME%/}
+      NAME=$(resolveLink "$NAME")
+    fi
+  fi
+  echo "$NAME"
+}
+
+function makeAbsolute() {
+  local NAME=$1
+
+  # Follow links
+  NAME=$(resolveLinks "$NAME")
+
+  # Put back trailing slash
+  # Do this before we make the path absolute or we'll absolutize wrong
+  if [ -d "$NAME" ]; then
+    if [[ "$NAME" != *"/" ]]; then
+      NAME="${NAME}/"
+    fi
+  fi
+
+  if [[ "$NAME" != "/"* ]]; then
+    # Now make absolute
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink does not support the -f for canonicalization
+        # so have to do this via cd, pwd and basename
+        local FILENAME=$(basename "$NAME")
+        NAME=$(cd $(dirname "$NAME"); pwd)
+        NAME="$NAME/$FILENAME"
+        ;;
+      *)
+        # Otherwise assume standard GNU readlink
+        NAME=$(readlink -f -- "$NAME")
+        ;;
+    esac
+
+    # Put back trailing slash
+    if [ -d "$NAME" ]; then
+      if [[ "$NAME" != *"/" ]]; then
+        NAME="${NAME}/"
+      fi
+    fi
+  fi
+
+  echo "$NAME"
+}
+
+#DATE="+%Y-%m-%dT%H:%M:%S%:z"
+DATE="+%H:%M:%S"
+
+# Package for the command wrappers.
+PKG=tdb.bulkloader2
diff --git a/java/tools/apache-jena-3.14.0/bin/tdbloader2data b/java/tools/apache-jena-3.14.0/bin/tdbloader2data
new file mode 100755
index 0000000..ba41f00
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdbloader2data
@@ -0,0 +1,289 @@
+#!/usr/bin/env bash
+
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+# The environment for this sub-script is setup by "tdbloader2"
+
+function resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$(readlink -- "$NAME")
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize
+        NAME=$(readlink -f -- "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# Pull in common functions
+if [ -z "$JENA_HOME" ]; then
+  echo "JENA_HOME is not set"
+  exit 1
+fi
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+  echo "Resolved symbolic links for JENA_HOME to $JENA_HOME"
+fi
+
+if [ -e "${JENA_HOME}/bin/tdbloader2common" ]; then
+  # Can source common functions
+  source "${JENA_HOME}/bin/tdbloader2common"
+else
+  echo "Unable to locate common functions script tdbloader2common"
+  exit 1
+fi
+
+function printUsage() {
+  cat << EOF
+tdbloader2data - TDB Bulk Loader - Data Phase
+
+Usage tdbloader2data --loc <Directory> [Options] <Data> ...
+
+Bulk Loader for TDB which generates the Node Table.  This command
+relies on POSIX utilities so will only work on POSIX operating
+systems.
+
+This command can only be used to create new database. If you wish to
+bulk load to an existing database please use tdbloader instead.
+
+Required options are as follows:
+
+  -l <DatabaseDirectory>
+  --loc <DatabaseDirectory>
+    Sets the location in which the database should be created.
+
+    This location must be a directory and must be empty, if a
+    non-existent path is specified it will be created as a new
+    directory.
+
+  <Data>
+    Specifies the path to one/more data files to load
+
+Common additional options are as follows:
+
+  -h
+  --help
+    Prints this help summary and exits
+
+Advanced additional options are as follows:
+
+  -d
+  --debug
+    Enable debug mode, adds extra debug output
+
+  -j <JvmArgs>
+  --jvm-args <JvmArgs>
+    Sets the arguments that should be passed to the JVM for the
+    JVM based portions of the build.
+
+    Generally it is best to not change these unless you have been
+    specifically advised to.  The scripts will use appropriate
+    defaults if this is not specified.
+
+    In particular be careful increasing the heap size since many
+    parts of TDB actually use memory mapped files that live
+    outside the heap so if the heap is too large the heap may
+    conflict with the memory mapped files for memory space.
+
+  -k
+  --keep-work
+    Keeps the temporary work files around after they are no longer
+    needed.  May be useful for debugging.
+
+  -t
+  --trace
+    Enable trace mode, essentially sets -x within the scripts
+
+EOF
+}
+
+# Exit on error.
+set -e
+
+# Process Arguments
+LOC=
+KEEP_WORK=0
+DEBUG=0
+
+while [ $# -gt 0 ]
+do
+  ARG=$1
+  case "$ARG" in
+    -d|--debug)
+      # Debug Mode
+      shift
+      DEBUG=1
+      ;;
+    -h|--help)
+      printUsage
+      exit 0
+      ;;
+    -j|--jvm-args)
+      # JVM Arguments
+      shift
+      JVM_ARGS="$1"
+      shift
+      ;;
+    -k|--keep-work)
+      # Keep work files
+      # This option is actually not used by this script but may be passed in
+      # by the parent tdbloader2 script
+      shift
+      KEEP_WORK=1
+      ;;
+    -l|--loc|-loc)
+      # Location space separated
+      shift
+      LOC="$1"
+      shift
+      ;;
+    -*loc=*)
+      # Location = separated
+      LOC=${ARG/-*loc=/}
+      shift
+      ;;
+    -t|--trace)
+      # Trace mode
+      shift
+      set -x
+      ;;
+    --)
+      # Arguments separator
+      # All further arguments are treated as data files
+      shift
+      break
+      ;;
+    -*)
+      # Unrecognized
+      abort 1 "Unrecognized option $ARG, if this was meant to be a data file separate options from data files with --"
+      ;;
+    *)
+      # Any further arguments are treated as data files
+      break
+      ;;
+  esac
+done
+
+# Verify arguments
+if [ -z "$LOC" ]; then
+  abort 1 "Required database location not specified"
+fi
+if [ $# = 0 ]; then
+  abort 1 "No data files specified, one/more data files must be specified"
+fi
+
+# Make LOC absolute
+ABS_LOC=$(makeAbsolute "$LOC")
+if [ "$ABS_LOC" != "$LOC" ]; then
+  LOC="$ABS_LOC"
+  debug "Absolute database location is $LOC"
+fi
+
+# Make sure LOC is a valid directory
+if [ ! -e "$LOC" ] ; then
+  # If non-existent try to create
+  debug "Trying to create new database directory: $LOC"
+  mkdir "$LOC"
+  if [ $? != 0 ]; then
+    abort 1 "Failed to create new directory: $LOC"
+  fi
+  debug "New database directory created: $LOC"
+fi
+if [ ! -d "$LOC" ]; then
+  abort 1 "Database location is not a directory: $LOC"
+fi
+
+# Look for any index and data files in the directory.
+# Skip a possible configuration file
+if test -n "$(find "$LOC" -maxdepth 1 -type f ! -name 'this.*' -print -quit)"
+then 
+    abort 1 "Database location is not empty: $LOC"
+fi
+
+# Prepare JVM Arguments
+JVM_ARGS=${JVM_ARGS:--Xmx1200M}
+debug "JVM Arguments are $JVM_ARGS"
+
+# Classpath set in "tdbloader2"
+if [ -z "$JENA_CP" ]; then
+  abort 1 "Classpath not provided : set JENA_CP"
+fi
+
+# ---- Data loading phase
+info "Data Load Phase"
+
+# Prepare Files
+FILES=()
+F=0
+while [ $# -gt 0 ]; do
+  FILE=$1
+  shift
+
+  ABS_FILE=$(makeAbsolute "$FILE")
+  if [ "$FILE" != "$ABS_FILE" ]; then
+    # Relative path was resolved
+    FILES[$F]="$ABS_FILE"
+    debug "Relative data file $FILE was resolved to absolute data file $ABS_FILE"
+  else
+    # Already absolute
+    FILES[$F]="$FILE"
+  fi
+
+  F=$(($F + 1))
+done
+info "Got ${#FILES[@]} data files to load"
+F=1
+for file in ${FILES[@]}; do
+  info "Data file $F: $file"
+  F=$(($F + 1))
+done
+
+# Produce nodes file and triples/quads text file.
+DATA_TRIPLES="$LOC/data-triples.tmp"
+DATA_QUADS="$LOC/data-quads.tmp"
+
+debug "Triples text files is $DATA_TRIPLES"
+debug "Quads text file is $DATA_QUADS"
+
+java $JVM_ARGS -cp "$JENA_CP" "$PKG".CmdNodeTableBuilder \
+    "--loc=$LOC" "--triples=$DATA_TRIPLES" "--quads=$DATA_QUADS" -- "${FILES[@]}"
+
+info "Data Load Phase Completed"
diff --git a/java/tools/apache-jena-3.14.0/bin/tdbloader2index b/java/tools/apache-jena-3.14.0/bin/tdbloader2index
new file mode 100755
index 0000000..dadea54
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdbloader2index
@@ -0,0 +1,409 @@
+#!/usr/bin/env bash
+
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+# The environment for this sub-script is setup by "tdbloader2"
+
+function resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$(readlink -- "$NAME")
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize
+        NAME=$(readlink -f -- "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# Pull in common functions
+if [ -z "$JENA_HOME" ]; then
+  echo "JENA_HOME is not set"
+  exit 1
+fi
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+  echo "Resolved symbolic links for JENA_HOME to $JENA_HOME"
+fi
+
+if [ -e "${JENA_HOME}/bin/tdbloader2common" ]; then
+  # Can source common functions
+  source "${JENA_HOME}/bin/tdbloader2common"
+else
+  echo "Unable to locate common functions script tdbloader2common"
+  exit 1
+fi
+
+function printUsage() {
+  cat << EOF
+tdbloader2index - TDB Bulk Loader - Index Phase
+
+Usage: tdbloader2index --loc <Directory> [Options]
+
+Bulk Loader for TDB which generates the Index files based upon the
+temporary data files generated by tdbloader2data.  This command relies
+on POSIX utilities so will only work on POSIX operating systems.
+
+This command can only be used to create new database. If you wish to
+bulk load to an existing database please use tdbloader instead.
+
+Required options are as follows:
+
+  -l <DatabaseDirectory>
+  --loc <DatabaseDirectory>
+    Sets the location in which the database should be created.
+
+    This location must be a directory and must be empty, if a
+    non-existent path is specified it will be created as a new
+    directory.
+
+Common additional options are as follows:
+
+  -h
+  --help
+    Prints this help summary and exits
+
+Advanced additional options are as follows:
+
+  -d
+  --debug
+    Enable debug mode, adds extra debug output
+
+  -j <JvmArgs>
+  --jvm-args <JvmArgs>
+    Sets the arguments that should be passed to the JVM for the
+    JVM based portions of the build.
+
+    Generally it is best to not change these unless you have been
+    specifically advised to.  The scripts will use appropriate
+    defaults if this is not specified.
+
+    In particular be careful increasing the heap size since many
+    parts of TDB actually use memory mapped files that live
+    outside the heap so if the heap is too large the heap may
+    conflict with the memory mapped files for memory space.
+
+  -k
+  --keep-work
+    Keeps the temporary work files around after they are no longer
+    needed.  May be useful for debugging.
+
+  -s <SortArgs>
+  --sort-args <SortArgs>
+    Sets the arguments that should be passed to sort for the sort
+    based portions of the build.
+
+    Generally it is best not to change these as the scripts will
+    use appropriate defaults for your system.
+
+  -t
+  --trace
+    Enable trace mode, essentially sets -x within the scripts
+EOF
+}
+
+# Exit on error.
+set -e
+
+# Sort order is ASCII
+export LC_ALL="C"
+
+# Process Arguments
+LOC=
+KEEP_WORK=0
+DEBUG=0
+JVM_ARGS=
+SORT_ARGS="${SORT_ARGS:-}"
+if [ -n "$SORT_ARGS" ]; then
+  echo "Using SORT_ARGS: $SORT_ARGS"
+fi
+
+while [ $# -gt 0 ]
+do
+  ARG=$1
+  case "$ARG" in
+    -d|--debug)
+      # Debug Mode
+      shift
+      DEBUG=1
+      ;;
+    -h|--help)
+      printUsage
+      exit 0
+      ;;
+    -j|--jvm-args)
+      # JVM Arguments
+      shift
+      JVM_ARGS="$1"
+      shift
+      ;;
+    -k|--keep-work)
+      # Keep work files
+      shift
+      KEEP_WORK=1
+      ;;
+    -l|--loc|-loc)
+      # Location space separated
+      shift
+      LOC="$1"
+      shift
+      ;;
+    -*loc=*)
+      # Location = separated
+      LOC=${ARG/-*loc=/}
+      shift
+      ;;
+    -s|--sort-args)
+      # Sort arguments
+      shift
+      SORT_ARGS=$1
+      shift
+      ;;
+    -t|--trace)
+      # Trace mode
+      shift
+      set -x
+      ;;
+    *)
+      # Additional options are not supported
+      abort 1 "Unrecognized option $ARG"
+      ;;
+  esac
+done
+
+# Verify arguments
+if [ -z "$LOC" ]; then
+  abort 1 "Required database location not specified"
+fi
+
+# Make LOC absolute
+ABS_LOC=$(makeAbsolute "$LOC")
+if [ "$ABS_LOC" != "$LOC" ]; then
+  LOC="$ABS_LOC"
+  debug "Absolute database location is $LOC"
+fi
+
+# Check location
+if [ ! -e "$LOC" ]; then
+  abort 1 "Database location specified does not exist: $LOC"
+fi
+if [ ! -d "$LOC" ]; then
+  abort 1 "Database location is not a directory: $LOC"
+fi
+
+# Locate and check data text files
+DATA_TRIPLES="$LOC/data-triples.tmp"
+DATA_QUADS="$LOC/data-quads.tmp"
+
+if [ ! -e "$DATA_TRIPLES" ]; then
+  abort 1 "No triples text file found in database location, please run the tdbloader2data script first"
+fi
+if [ ! -e "$DATA_QUADS" ]; then
+  abort 1 "No quads text file found in database location, please run the tdbloader2data script first"
+fi
+
+debug "Data text files are $DATA_TRIPLES and $DATA_QUADS"
+
+# Prepare sort arguments
+if [ -z "$SORT_ARGS" ]; then
+    SORT_ARGS="--buffer-size=50%"
+    if [[ "$SORT_ARGS" != *"--parallel="* ]]; then
+        # --parallel is not always available.
+        # Temporarily disable exit on error while we check for --parallel support
+        set +e
+        sort --parallel=3 < /dev/null 2>/dev/null
+        if [ $? = 0 ]; then
+          SORT_ARGS="$SORT_ARGS --parallel=3"
+        fi
+        set -e
+    fi
+fi
+
+# Prepare JVM arguments
+JVM_ARGS=${JVM_ARGS:--Xmx1200M}
+debug "JVM Arguments are $JVM_ARGS"
+
+# Classpath set in "tdbloader2"
+if [ -z "$JENA_CP" ]; then
+  abort 1 "Classpath not provided : set JENA_CP"
+fi
+debug "Jena Classpath is $JENA_CP"
+
+# ---- Index intermediates
+# All files are written S P O / G S P O columns per row but in different sort orders.
+info "Index Building Phase"
+
+# Check where we are storing temporary sort files
+debug "Sort Arguments: $SORT_ARGS"
+SORT_TEMP_DIR=
+if [[ "$SORT_ARGS" == *"-T "* ]]; then
+  # Specified via -T argument
+  SORT_TEMP_DIR=(${SORT_ARGS/-T /})
+  SORT_TEMP_DIR=${SORT_TEMP_DIR[0]}
+elif [[ "$SORT_ARGS" == *"--temporary-directory="* ]]; then
+  # Specified via --temporary-directory argument
+  SORT_TEMP_DIR=(${SORT_ARGS/--temporary-directory=/})
+  SORT_TEMP_DIR=${SORT_TEMP_DIR[0]}
+else
+  # Using the system temp directory
+  SORT_TEMP_DIR="$TMPDIR"
+fi
+if [ -n "$SORT_TEMP_DIR" ]; then
+  # If we've figured out the sort temporary directory then check it
+  SORT_TEMP_DIR=$(makeAbsolute "$SORT_TEMP_DIR")
+  debug "Sort Temp Directory: $SORT_TEMP_DIR"
+  SORT_DRIVE_INFO=($(getDriveInfo "${SORT_TEMP_DIR}"))
+  if [ "${#SORT_DRIVE_INFO[@]}" -gt 0 ]; then
+    debug "Sort Temp Directory is on disk ${SORT_DRIVE_INFO[0]} which has ${SORT_DRIVE_INFO[2]}% free space (${SORT_DRIVE_INFO[3]} bytes)"
+
+    if [ "${SORT_DRIVE_INFO[2]}" -le 10 ]; then
+      warn "-----"
+      warn "Sort Temp Directory ${SORT_TEMP_DIR} is on disk ${SORT_DRIVE_INFO[0]} which only has ${SORT_DRIVE_INFO[2]}% free space (${SORT_DRIVE_INFO[3]} bytes) available"
+      warn "This may result in sort failures if the data to be indexed is large"
+      warn "-----"
+    fi
+  fi
+fi
+
+generate_index()
+{
+    local KEYS="$1"
+    local DATA="$2"
+    local IDX=$3
+    local WORK="$LOC/$IDX-txt"
+
+    if [ ! -s "$DATA" ]; then
+      debug "Skipping Index $IDX as no relevant data to index"
+      return
+    fi
+
+    info "Creating Index $IDX"
+
+    # For various purposes we need to know the size of the input data
+    local SIZE=$(getSize "$DATA")
+    debug "Size of data to be sorted is $SIZE bytes"
+
+    # Verify that we have enough space to sort the data
+
+    # Firstly check that the output disk has sufficient space
+    local WORK_DRIVE_INFO=($(getDriveInfo "$LOC"))
+    if [ "${#WORK_DRIVE_INFO[@]}" -gt 0 ]; then
+      if [ "${SIZE}" -ge "${WORK_DRIVE_INFO[3]}" ]; then
+        # If there is insufficient disk space then we can abort now
+        abort 1 "Insufficient free space on database drive ${WORK_DRIVE_INFO[0]}, there are ${WORK_DRIVE_INFO[3]} bytes free but ${SIZE} bytes are required"
+      else
+        debug "Sufficient free space on database drive ${WORK_DRIVE_INFO[0]} to attempt sorting data file ${DATA} (${SIZE} bytes required from ${WORK_DRIVE_INFO[3]} bytes free)"
+      fi
+    fi
+
+    # Secondly check if there is enough space to sort in-memory or if sort may need to do an external sort
+    # We only issue warnings when the sort is likely to be external because there are various factors
+    # such as virtual memory and OS file caching that may complicate this
+    FREE_MEM=$(getFreeMem)
+    if [ "$FREE_MEM" -ge 0 ]; then
+      if [ "$SIZE" -ge "$FREE_MEM" ]; then
+        debug "Insufficient free memory to sort data in-memory, sort will need to perform an external sort using Temp Directory ${SORT_TEMP_DIR}"
+
+        # Check for disk space on temporary disk
+        if [ -n "${SORT_TEMP_DIR}" ]; then
+          SORT_DRIVE_INFO=($(getDriveInfo "${SORT_TEMP_DIR}"))
+          if [ "${#SORT_DRIVE_INFO[@]}" -gt 0 ]; then
+            if [ "$SIZE" -ge "${SORT_DRIVE_INFO[3]}" ]; then
+              warn "There may be insufficient for sort to perform an external sort using Temp Directory ${SORT_TEMP_DIR} (${SIZE} bytes required but only ${SORT_DRIVE_INFO[3]} bytes free)"
+            fi
+          fi
+        fi
+      else
+        debug "Should be sufficient free memory ($FREE_MEM bytes) for sort to be fully in-memory"
+      fi
+    else
+      debug "Unable to determine free memory on your OS, can't check whether sort will be in-memory or external sort using Temp Directory ${SORT_TEMP_DIR}"
+    fi
+
+    # Sort the input data
+    info "Sort $IDX"
+    debug "Sorting $DATA into work file $WORK"
+    sort $SORT_ARGS -u $KEYS < "$DATA" > $WORK
+    info "Sort $IDX Completed"
+
+    # Build into an index
+    info "Build $IDX"
+    rm -f "$LOC/$IDX.dat"
+    rm -f "$LOC/$IDX.idn"
+    java $JVM_ARGS -cp "$JENA_CP" "$PKG".CmdIndexBuild "$LOC" "$IDX" "$WORK"
+    info "Build $IDX Completed"
+
+    # Remove work file unless keeping
+    if [ $KEEP_WORK = 0 ]; then
+      debug "Cleaning up work file $WORK"
+      rm "$WORK"
+    fi
+}
+
+K1="-k 1,1"
+K2="-k 2,2"
+K3="-k 3,3"
+K4="-k 4,4"
+
+generate_index "$K1 $K2 $K3" "$DATA_TRIPLES" SPO
+
+generate_index "$K2 $K3 $K1" "$DATA_TRIPLES" POS
+
+generate_index "$K3 $K1 $K2" "$DATA_TRIPLES" OSP
+
+generate_index "$K1 $K2 $K3 $K4" "$DATA_QUADS" GSPO
+
+generate_index "$K1 $K3 $K4 $K2" "$DATA_QUADS" GPOS
+
+generate_index "$K1 $K4 $K2 $K3" "$DATA_QUADS" GOSP
+
+generate_index "$K2 $K3 $K4 $K1" "$DATA_QUADS" SPOG
+
+generate_index "$K3 $K4 $K2 $K1" "$DATA_QUADS" POSG
+
+generate_index "$K4 $K2 $K3 $K1" "$DATA_QUADS" OSPG
+
+info "Index Building Phase Completed"
+
+# ---- Clean up.
+if [ $KEEP_WORK = 0 ]; then
+  debug "Cleaning up data files $DATA_TRIPLES and $DATA_QUADS"
+  rm -f "$DATA_TRIPLES" "$DATA_QUADS"
+fi
diff --git a/java/tools/apache-jena-3.14.0/bin/tdbquery b/java/tools/apache-jena-3.14.0/bin/tdbquery
new file mode 100755
index 0000000..94503b9
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdbquery
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbquery "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdbstats b/java/tools/apache-jena-3.14.0/bin/tdbstats
new file mode 100755
index 0000000..a74bffe
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdbstats
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbstats "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/tdbupdate b/java/tools/apache-jena-3.14.0/bin/tdbupdate
new file mode 100755
index 0000000..24692cf
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/tdbupdate
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" tdb.tdbupdate "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/trig b/java/tools/apache-jena-3.14.0/bin/trig
new file mode 100755
index 0000000..d9c7609
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/trig
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.trig "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/turtle b/java/tools/apache-jena-3.14.0/bin/turtle
new file mode 100755
index 0000000..f42f276
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/turtle
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.turtle "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/uparse b/java/tools/apache-jena-3.14.0/bin/uparse
new file mode 100755
index 0000000..8d345be
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/uparse
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.uparse "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/update b/java/tools/apache-jena-3.14.0/bin/update
new file mode 100755
index 0000000..9c1c1ee
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/update
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.update "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/utf8 b/java/tools/apache-jena-3.14.0/bin/utf8
new file mode 100755
index 0000000..a6b053e
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/utf8
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" riotcmd.utf8 "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/wwwdec b/java/tools/apache-jena-3.14.0/bin/wwwdec
new file mode 100755
index 0000000..e21e574
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/wwwdec
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.wwwdec "$@" 
diff --git a/java/tools/apache-jena-3.14.0/bin/wwwenc b/java/tools/apache-jena-3.14.0/bin/wwwenc
new file mode 100755
index 0000000..460eea6
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/bin/wwwenc
@@ -0,0 +1,89 @@
+#!/bin/sh
+## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+resolveLink() {
+  local NAME=$1
+
+  if [ -L "$NAME" ]; then
+    case "$OSTYPE" in
+      darwin*|bsd*)
+        # BSD style readlink behaves differently to GNU readlink
+        # Have to manually follow links
+        while [ -L "$NAME" ]; do
+          NAME=$( cd $NAME && pwd -P ) ;
+        done
+        ;;
+      *)
+        # Assuming standard GNU readlink with -f for
+        # canonicalize and follow
+        NAME=$(readlink -f "$NAME")
+        ;;
+    esac
+  fi
+
+  echo "$NAME"
+}
+
+# If JENA_HOME is empty
+if [ -z "$JENA_HOME" ]; then
+  SCRIPT="$0"
+  # Catch common issue: script has been symlinked
+  if [ -L "$SCRIPT" ]; then
+    SCRIPT=$(resolveLink "$0")
+    # If link is relative
+    case "$SCRIPT" in
+      /*)
+        # Already absolute
+        ;;
+      *)
+        # Relative, make absolute
+        SCRIPT=$( dirname "$0" )/$SCRIPT
+        ;;
+    esac
+  fi
+
+  # Work out root from script location
+  JENA_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export JENA_HOME
+fi
+
+# If JENA_HOME is a symbolic link need to resolve
+if [ -L "${JENA_HOME}" ]; then
+  JENA_HOME=$(resolveLink "$JENA_HOME")
+  # If link is relative
+  case "$JENA_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      JENA_HOME=$(dirname "$JENA_HOME")
+      ;;
+  esac
+  export JENA_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand JENA_HOME but literal *
+JENA_CP="$JENA_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$JENA_HOME/jena-log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) JENA_CP="$(cygpath -wp "$JENA_CP");";;
+esac
+
+# Respect TMPDIR or TMP (windows?) if present
+# important for tdbloader spill
+if [ -n "$TMPDIR" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMPDIR\""
+elif [ -n "$TMP" ]
+	then
+	JVM_ARGS="$JVM_ARGS -Djava.io.tmpdir=\"$TMP\""
+fi
+
+java $JVM_ARGS $LOGGING -cp "$JENA_CP" arq.wwwenc "$@" 
diff --git a/java/tools/apache-jena-3.14.0/jena-log4j.properties b/java/tools/apache-jena-3.14.0/jena-log4j.properties
new file mode 100644
index 0000000..56a4c0d
--- /dev/null
+++ b/java/tools/apache-jena-3.14.0/jena-log4j.properties
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+log4j.rootLogger=INFO, stdlog
+
+log4j.appender.stdlog=org.apache.log4j.ConsoleAppender
+log4j.appender.stdlog.target=System.err
+log4j.appender.stdlog.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdlog.layout.ConversionPattern=%d{HH:mm:ss} %-5p %-20c{1} :: %m%n
+
+## Execution logging
+log4j.logger.org.apache.jena.arq.info=INFO
+log4j.logger.org.apache.jena.arq.exec=INFO
+
+## TDB loader
+log4j.logger.org.apache.jena.tdb.loader=INFO
+log4j.logger.org.apache.jena.tdb2.loader=INFO
+## TDB syslog.
+log4j.logger.TDB=INFO
+
+## Everything else in Jena
+log4j.logger.org.apache.jena=WARN
-- 
GitLab