diff --git a/lib/inference.py b/lib/inference.py
new file mode 100644
index 0000000000000000000000000000000000000000..368659c9160fb146a34e938844fc17be4b86fa72
--- /dev/null
+++ b/lib/inference.py
@@ -0,0 +1,100 @@
+from subprocess import Popen, PIPE, STDOUT
+from rdflib import Graph, Namespace, URIRef
+
+#######################################################################################################
+# Parameters
+#######################################################################################################
+shaclBase = 'shacl-1.3.2/bin'
+
+
+#######################################################################################################
+# Inference Run
+#######################################################################################################
+
+def run_command(cmd):
+    with Popen(cmd, stdout=PIPE, stderr=PIPE, universal_newlines=True) as p:
+        p.poll()
+        p.stdout.flush()
+        p.stderr.flush()
+        stdout, stderr = p.communicate()
+    return p.returncode, stdout, stderr
+
+# Run SHACL infer sh script. mode argument can take the values 'infer' or 'validate'
+def shaclInfer(ttlPath, mode, ttlRulesPath = ''):
+    if ttlRulesPath == '':
+        cmd = ['sh', shaclBase+'/shacl'+mode+'.sh', '-datafile', ttlPath]
+    else:
+        cmd = ['sh', shaclBase+'/shacl'+mode+'.sh', '-datafile', ttlPath, '-shapesfile', ttlRulesPath]
+    #cmd = ' '.join(cmd)    
+    #!{cmd}
+    code, out, err = run_command(cmd)
+    if code != 0:
+         print("Error in SHACL script: \n\n"+err)
+    else:
+        return(out)
+     
+    
+    
+#######################################################################################################
+# Inference Step
+#######################################################################################################
+    
+clearExecutionInstances = """
+    PREFIX cts: <https://unsel.tetras-libre.fr/tenet/transduction-schemes#>
+    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+
+    DELETE {?x rdf:type ?c}
+    WHERE {
+        ?c rdfs:subClassOf* cts:Transduction_Schemes .
+        ?x rdf:type ?c .
+    }
+"""
+
+addExecutionInstance = """
+    PREFIX cts: <https://unsel.tetras-libre.fr/tenet/transduction-schemes#>
+    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+
+    INSERT DATA {{<exec_instance> rdf:type {}}}
+"""
+    
+    
+def applyInferStep(uuidStr, graph, step):
+    step_ref = "cts:" + step
+    dest_file = uuidStr + '-' + step + ".ttl"
+    print("[DEV] destfile = " + dest_file)
+    base_ref = "http://" + uuidStr + '/' + step
+    graph.update(clearExecutionInstances)
+    graph.update(addExecutionInstance.format(step_ref)) # ex. : step = 'cts:generation'
+    graph.serialize(destination=dest_file, base=base_ref, format='turtle') # serialize graph before inference
+    work_file = dest_file
+    print("[DEV] workfile = " + work_file)
+    inferResult = shaclInfer(work_file, 'infer') # apply SHACL inference
+    graph.parse(data=inferResult) # update graph with inference
+    graph.serialize(destination=dest_file, base=base_ref, format='turtle') # serialize graph after inference
+    return graph, inferResult
+    
+    
+#==============================================================================
+# Execution
+#==============================================================================
+
+if __name__ == '__main__':
+    
+    uuidStr = "test"
+    output = "result-graph.ttl"
+    
+    # -- Working Graph
+    graph = Graph()
+    graph.parse("starting-graph.ttl")
+    
+    # -- Extraction
+    #graph, _ = applyInferStep(uuidStr, graph, 'preprocessing')
+    #graph, _ = applyInferStep(uuidStr, graph, 'net_extension')
+    graph, finalInferResult = applyInferStep(uuidStr, graph, 'generation_dga_patch')
+    # -- Write result 
+    factoidPath = uuidStr+'_factoid.ttl'
+    with open(factoidPath, 'w') as outfile:
+         outfile.write(finalInferResult)
+         outfile.close()
diff --git a/tools/shacl-1.3.2/LICENSE b/tools/shacl-1.3.2/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..c0ee81299bd368b4c38a7947d1651a1e32348313
--- /dev/null
+++ b/tools/shacl-1.3.2/LICENSE
@@ -0,0 +1,201 @@
+                                 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.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed 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.
diff --git a/tools/shacl-1.3.2/README.md b/tools/shacl-1.3.2/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..0f687996ca7e3b0da3dc60aeef8a832e7671735c
--- /dev/null
+++ b/tools/shacl-1.3.2/README.md
@@ -0,0 +1,76 @@
+# TopBraid SHACL API
+
+**An open source implementation of the W3C Shapes Constraint Language (SHACL) based on Apache Jena.**
+
+Contact: Holger Knublauch (holger@topquadrant.com)
+
+Can be used to perform SHACL constraint checking and rule inferencing in any Jena-based Java application.
+This API also serves as a reference implementation of the SHACL spec.
+
+Coverage:
+* [SHACL Core and SHACL-SPARQL validation](https://www.w3.org/TR/shacl/)
+* [SHACL Advanced Features (Rules etc)](https://www.w3.org/TR/shacl-af/)
+* [SHACL JavaScript Extensions](https://www.w3.org/TR/shacl-js/)
+* [SHACL Compact Syntax](https://w3c.github.io/shacl/shacl-compact-syntax/)
+
+See [SHACL-JS](https://github.com/TopQuadrant/shacl-js) for a pure JavaScript implementation.
+
+The same code is used in the TopBraid products (currently aligned with the TopBraid 6.3 release).
+
+Feedback and questions should become GitHub issues or sent to TopBraid Users mailing list:
+https://groups.google.com/forum/#!forum/topbraid-users
+Please prefix your messages with [SHACL API]
+
+To get started, look at the class ValidationUtil in
+the package org.topbraid.shacl.validation.
+There is also an [Example Test Case](../master/src/test/java/org/topbraid/shacl/ValidationExample.java)
+
+## Application dependency
+
+Releases are available in the central maven repository:
+
+```
+<dependency>
+  <groupId>org.topbraid</groupId>
+  <artifactId>shacl</artifactId>
+  <version>*VER*</version>
+</dependency>
+```
+## Command Line Usage
+
+Download the latest release from:
+
+`https://repo1.maven.org/maven2/org/topbraid/shacl/`
+
+The binary distribution is:
+
+`https://repo1.maven.org/maven2/org/topbraid/shacl/*VER*/shacl-*VER*-bin.zip`.
+
+Two command line utilities are included: validate (performs constraint validation) and infer (performs SHACL rule inferencing).
+
+To use them, set up your environment similar to https://jena.apache.org/documentation/tools/ (note that the SHACL download includes Jena).
+
+For example, on Windows:
+
+```
+SET SHACLROOT=C:\Users\Holger\Desktop\shacl-1.0.0-bin
+SET PATH=%PATH%;%SHACLROOT%\bin
+```
+
+As another example, for Linux, add to .bashrc these lines:
+
+```
+# for shacl
+export SHACLROOT=/home/holger/shacl/shacl-1.0.0-bin/shacl-1.0.0/bin
+export PATH=$SHACLROOT:$PATH 
+```
+
+Both tools take the following parameters, for example:
+
+`shaclvalidate.bat -datafile myfile.ttl -shapesfile myshapes.ttl`
+
+where `-shapesfile` is optional and falls back to using the data graph as shapes graph.
+
+Currently only Turtle (.ttl) files and SHACL Compact Syntax (.shaclc) files are supported.
+
+The tools print the validation report or the inferences graph to the output screen.
diff --git a/tools/shacl-1.3.2/bin/shaclinfer.bat b/tools/shacl-1.3.2/bin/shaclinfer.bat
new file mode 100755
index 0000000000000000000000000000000000000000..344801d4db7212c0432bf6e4f617896b9b9dce2c
--- /dev/null
+++ b/tools/shacl-1.3.2/bin/shaclinfer.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%SHACLROOT%" == "" goto :rootNotSet
+set SHACL_HOME=%SHACLROOT%
+:rootNotSet
+
+if NOT "%SHACL_HOME%" == "" goto :okHome
+echo SHACL_HOME not set
+exit /B
+
+:okHome
+set SHACL_CP=%SHACL_HOME%\lib\*;
+set LOGGING=file:%SHACL_HOME%/log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%SHACL_CP%" org.topbraid.shacl.tools.Infer %*
+exit /B
diff --git a/tools/shacl-1.3.2/bin/shaclinfer.sh b/tools/shacl-1.3.2/bin/shaclinfer.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f107dd7a5a5ff286fd365d8bc8786bf1d35f3a88
--- /dev/null
+++ b/tools/shacl-1.3.2/bin/shaclinfer.sh
@@ -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 SHACL_HOME is empty
+if [ -z "$SHACL_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
+  SHACL_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export SHACL_HOME
+fi
+
+# If SHACL_HOME is a symbolic link need to resolve
+if [ -L "${SHACL_HOME}" ]; then
+  SHACL_HOME=$(resolveLink "$SHACL_HOME")
+  # If link is relative
+  case "$SHACL_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      SHACL_HOME=$(dirname "$SHACL_HOME")
+      ;;
+  esac
+  export SHACL_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand SHACL_HOME but literal *
+SHACL_CP="$SHACL_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$SHACL_HOME/log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) SHACL_CP="$(cygpath -wp "$SHACL_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 "$SHACL_CP" org.topbraid.shacl.tools.Infer "$@" 
diff --git a/tools/shacl-1.3.2/bin/shaclvalidate.bat b/tools/shacl-1.3.2/bin/shaclvalidate.bat
new file mode 100644
index 0000000000000000000000000000000000000000..e7e5bfd5fdb3a6a34507258f002057a4e359b7ba
--- /dev/null
+++ b/tools/shacl-1.3.2/bin/shaclvalidate.bat
@@ -0,0 +1,18 @@
+@echo off
+@rem Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+if "%SHACLROOT%" == "" goto :rootNotSet
+set SHACL_HOME=%SHACLROOT%
+:rootNotSet
+
+if NOT "%SHACL_HOME%" == "" goto :okHome
+echo SHACL_HOME not set
+exit /B
+
+:okHome
+set SHACL_CP=%SHACL_HOME%\lib\*;
+set LOGGING=file:%SHACL_HOME%/log4j.properties
+
+@rem JVM_ARGS comes from the environment.
+java %JVM_ARGS% -Dlog4j.configuration="%LOGGING%" -cp "%SHACL_CP%" org.topbraid.shacl.tools.Validate %*
+exit /B
diff --git a/tools/shacl-1.3.2/bin/shaclvalidate.sh b/tools/shacl-1.3.2/bin/shaclvalidate.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2bcd3e98e92e01a8aa7372925eef4bcdb168ba27
--- /dev/null
+++ b/tools/shacl-1.3.2/bin/shaclvalidate.sh
@@ -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 SHACL_HOME is empty
+if [ -z "$SHACL_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
+  SHACL_HOME="$( cd "$( dirname "$SCRIPT" )/.." && pwd )"
+  export SHACL_HOME
+fi
+
+# If SHACL_HOME is a symbolic link need to resolve
+if [ -L "${SHACL_HOME}" ]; then
+  SHACL_HOME=$(resolveLink "$SHACL_HOME")
+  # If link is relative
+  case "$SHACL_HOME" in
+    /*)
+      # Already absolute
+      ;;
+    *)
+      # Relative, make absolute
+      SHACL_HOME=$(dirname "$SHACL_HOME")
+      ;;
+  esac
+  export SHACL_HOME
+fi
+
+# ---- Setup
+# JVM_ARGS : don't set here but it can be set in the environment.
+# Expand SHACL_HOME but literal *
+SHACL_CP="$SHACL_HOME"'/lib/*'
+SOCKS=
+LOGGING="${LOGGING:--Dlog4j.configuration=file:$SHACL_HOME/log4j.properties}"
+
+# Platform specific fixup
+# On CYGWIN convert path and end with a ';' 
+case "$(uname)" in
+   CYGWIN*) SHACL_CP="$(cygpath -wp "$SHACL_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 "$SHACL_CP" org.topbraid.shacl.tools.Validate "$@" 
diff --git a/tools/shacl-1.3.2/lib/antlr4-runtime-4.5.3.jar b/tools/shacl-1.3.2/lib/antlr4-runtime-4.5.3.jar
new file mode 100644
index 0000000000000000000000000000000000000000..44353757ebdad9d7f594045118143536e8e5691a
Binary files /dev/null and b/tools/shacl-1.3.2/lib/antlr4-runtime-4.5.3.jar differ
diff --git a/tools/shacl-1.3.2/lib/collection-0.7.jar b/tools/shacl-1.3.2/lib/collection-0.7.jar
new file mode 100644
index 0000000000000000000000000000000000000000..aa5de6b95fa45dd3ca55b4e9441db7f79ce7e8ab
Binary files /dev/null and b/tools/shacl-1.3.2/lib/collection-0.7.jar differ
diff --git a/tools/shacl-1.3.2/lib/commons-cli-1.4.jar b/tools/shacl-1.3.2/lib/commons-cli-1.4.jar
new file mode 100644
index 0000000000000000000000000000000000000000..22deb3089e2f79a983406bd13a75a3e6238afdcf
Binary files /dev/null and b/tools/shacl-1.3.2/lib/commons-cli-1.4.jar differ
diff --git a/tools/shacl-1.3.2/lib/commons-codec-1.13.jar b/tools/shacl-1.3.2/lib/commons-codec-1.13.jar
new file mode 100644
index 0000000000000000000000000000000000000000..bf6ccb385d5f6cfc0930565fc88a049544cd7cd4
Binary files /dev/null and b/tools/shacl-1.3.2/lib/commons-codec-1.13.jar differ
diff --git a/tools/shacl-1.3.2/lib/commons-compress-1.19.jar b/tools/shacl-1.3.2/lib/commons-compress-1.19.jar
new file mode 100644
index 0000000000000000000000000000000000000000..5c9f52a2903d826c5f69ab8e342eac00d33264aa
Binary files /dev/null and b/tools/shacl-1.3.2/lib/commons-compress-1.19.jar differ
diff --git a/tools/shacl-1.3.2/lib/commons-csv-1.7.jar b/tools/shacl-1.3.2/lib/commons-csv-1.7.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e27c527405c3ec5c68e5f3f5b5ac276ddaeff268
Binary files /dev/null and b/tools/shacl-1.3.2/lib/commons-csv-1.7.jar differ
diff --git a/tools/shacl-1.3.2/lib/commons-io-2.6.jar b/tools/shacl-1.3.2/lib/commons-io-2.6.jar
new file mode 100644
index 0000000000000000000000000000000000000000..00556b119d45dd85a3c3073b1826916c3c60b9c4
Binary files /dev/null and b/tools/shacl-1.3.2/lib/commons-io-2.6.jar differ
diff --git a/tools/shacl-1.3.2/lib/commons-lang3-3.9.jar b/tools/shacl-1.3.2/lib/commons-lang3-3.9.jar
new file mode 100644
index 0000000000000000000000000000000000000000..0d896939269b3bf1ce6208a872db1fcabe40e0df
Binary files /dev/null and b/tools/shacl-1.3.2/lib/commons-lang3-3.9.jar differ
diff --git a/tools/shacl-1.3.2/lib/httpclient-4.5.10.jar b/tools/shacl-1.3.2/lib/httpclient-4.5.10.jar
new file mode 100644
index 0000000000000000000000000000000000000000..d0c7821c82a3d7a3a9566fee9e77d9d90a2ce14d
Binary files /dev/null and b/tools/shacl-1.3.2/lib/httpclient-4.5.10.jar differ
diff --git a/tools/shacl-1.3.2/lib/httpclient-cache-4.5.10.jar b/tools/shacl-1.3.2/lib/httpclient-cache-4.5.10.jar
new file mode 100644
index 0000000000000000000000000000000000000000..2fdb8fcb5538ef13639b478011ac5086f3e3fd85
Binary files /dev/null and b/tools/shacl-1.3.2/lib/httpclient-cache-4.5.10.jar differ
diff --git a/tools/shacl-1.3.2/lib/httpcore-4.4.12.jar b/tools/shacl-1.3.2/lib/httpcore-4.4.12.jar
new file mode 100644
index 0000000000000000000000000000000000000000..1838672ac35d3af009a62e0d94af7c61c4d08952
Binary files /dev/null and b/tools/shacl-1.3.2/lib/httpcore-4.4.12.jar differ
diff --git a/tools/shacl-1.3.2/lib/jackson-annotations-2.9.10.jar b/tools/shacl-1.3.2/lib/jackson-annotations-2.9.10.jar
new file mode 100644
index 0000000000000000000000000000000000000000..de054c66b25e559d868336a9ca85c1ce663673b1
Binary files /dev/null and b/tools/shacl-1.3.2/lib/jackson-annotations-2.9.10.jar differ
diff --git a/tools/shacl-1.3.2/lib/jackson-core-2.9.10.jar b/tools/shacl-1.3.2/lib/jackson-core-2.9.10.jar
new file mode 100644
index 0000000000000000000000000000000000000000..1b5e87ccc0adde69fc1499539a29e87a0f416832
Binary files /dev/null and b/tools/shacl-1.3.2/lib/jackson-core-2.9.10.jar differ
diff --git a/tools/shacl-1.3.2/lib/jackson-databind-2.9.10.jar b/tools/shacl-1.3.2/lib/jackson-databind-2.9.10.jar
new file mode 100644
index 0000000000000000000000000000000000000000..2b71c3afb24e9d75fcc9758657efbd7ae6a41f31
Binary files /dev/null and b/tools/shacl-1.3.2/lib/jackson-databind-2.9.10.jar differ
diff --git a/tools/shacl-1.3.2/lib/jcl-over-slf4j-1.7.26.jar b/tools/shacl-1.3.2/lib/jcl-over-slf4j-1.7.26.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b060a0db4b0f7102b8039cea84d3cf09b9af5b8b
Binary files /dev/null and b/tools/shacl-1.3.2/lib/jcl-over-slf4j-1.7.26.jar differ
diff --git a/tools/shacl-1.3.2/lib/jena-arq-3.13.1.jar b/tools/shacl-1.3.2/lib/jena-arq-3.13.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..22746289c25060f28072345da58fb0a056544cce
Binary files /dev/null and b/tools/shacl-1.3.2/lib/jena-arq-3.13.1.jar differ
diff --git a/tools/shacl-1.3.2/lib/jena-base-3.13.1.jar b/tools/shacl-1.3.2/lib/jena-base-3.13.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..56d6133ecf3eb3439e01da5ec4608acd3b50818c
Binary files /dev/null and b/tools/shacl-1.3.2/lib/jena-base-3.13.1.jar differ
diff --git a/tools/shacl-1.3.2/lib/jena-core-3.13.1.jar b/tools/shacl-1.3.2/lib/jena-core-3.13.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..5a99d5b5193853530eab4b25813bb7be6c79a2a2
Binary files /dev/null and b/tools/shacl-1.3.2/lib/jena-core-3.13.1.jar differ
diff --git a/tools/shacl-1.3.2/lib/jena-iri-3.13.1.jar b/tools/shacl-1.3.2/lib/jena-iri-3.13.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..3ff189f5f5f03944ce75f06546ad0b87af872707
Binary files /dev/null and b/tools/shacl-1.3.2/lib/jena-iri-3.13.1.jar differ
diff --git a/tools/shacl-1.3.2/lib/jena-shaded-guava-3.13.1.jar b/tools/shacl-1.3.2/lib/jena-shaded-guava-3.13.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..42b5dadde4f23765899a335974ac550bca6bc8f0
Binary files /dev/null and b/tools/shacl-1.3.2/lib/jena-shaded-guava-3.13.1.jar differ
diff --git a/tools/shacl-1.3.2/lib/jsonld-java-0.12.5.jar b/tools/shacl-1.3.2/lib/jsonld-java-0.12.5.jar
new file mode 100644
index 0000000000000000000000000000000000000000..3c57c0b98f5d9d95d43492373acc71405280a4a5
Binary files /dev/null and b/tools/shacl-1.3.2/lib/jsonld-java-0.12.5.jar differ
diff --git a/tools/shacl-1.3.2/lib/libthrift-0.12.0.jar b/tools/shacl-1.3.2/lib/libthrift-0.12.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..f5f0446c73752a1e373d16cedd1ff42badd13aae
Binary files /dev/null and b/tools/shacl-1.3.2/lib/libthrift-0.12.0.jar differ
diff --git a/tools/shacl-1.3.2/lib/shacl-1.3.2.jar b/tools/shacl-1.3.2/lib/shacl-1.3.2.jar
new file mode 100644
index 0000000000000000000000000000000000000000..ca17efcdf1848f5a624c4ee364c50f44e324bfc0
Binary files /dev/null and b/tools/shacl-1.3.2/lib/shacl-1.3.2.jar differ
diff --git a/tools/shacl-1.3.2/lib/slf4j-api-1.7.26.jar b/tools/shacl-1.3.2/lib/slf4j-api-1.7.26.jar
new file mode 100644
index 0000000000000000000000000000000000000000..d2f27aceabc93c899bc4a39ba393aa74ec41d7b9
Binary files /dev/null and b/tools/shacl-1.3.2/lib/slf4j-api-1.7.26.jar differ
diff --git a/tools/shacl-1.3.2/log4j.properties b/tools/shacl-1.3.2/log4j.properties
new file mode 100644
index 0000000000000000000000000000000000000000..0d7f9720d4b99fdd9ed40f424ae3c1990fb04709
--- /dev/null
+++ b/tools/shacl-1.3.2/log4j.properties
@@ -0,0 +1,13 @@
+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
+
+## Everything else in Jena
+log4j.logger.org.apache.jena=INFO
+
+## Execution logging
+log4j.logger.org.apache.jena.arq.info=INFO
+log4j.logger.org.apache.jena.arq.exec=INFO
diff --git a/tools/shacl-1.3.2/test-shacl-construct.shapes.ttl b/tools/shacl-1.3.2/test-shacl-construct.shapes.ttl
new file mode 100644
index 0000000000000000000000000000000000000000..178b12463c159d1737e75be6c157265ef3ff75f2
--- /dev/null
+++ b/tools/shacl-1.3.2/test-shacl-construct.shapes.ttl
@@ -0,0 +1,38 @@
+# baseURI: http://unsel.unl-rdf.org/test-shacl-construct
+# imports: http://datashapes.org/dash
+
+@prefix : <http://unsel.unl-rdf.org/test-shacl-construct#> .
+@prefix dash: <http://datashapes.org/dash#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+<http://unsel.unl-rdf.org/test-shacl-construct>
+  rdf:type owl:Ontology ;
+  owl:imports <http://datashapes.org/dash> ;
+  owl:versionInfo "Created with TopBraid Composer" ;
+.
+:add-comment
+  rdf:type owl:Class ;
+  rdf:type sh:NodeShape ;
+  sh:rule :add-comment-Rule_1 ;
+.
+:add-comment-Rule_1
+  rdf:type sh:SPARQLRule ;
+  sh:construct """PREFIX owl: <http://www.w3.org/2002/07/owl#>
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+
+CONSTRUCT {
+    ?this rdfs:comment \"Execution de la regle OK\"
+}
+WHERE {
+?this rdfs:label \"test\" 
+}""" ;
+.
+:test-instance
+  rdf:type :add-comment ;
+  rdfs:label "test" ;
+.