diff --git a/.gitignore b/.gitignore
index cc938d59..c2e099ce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -325,3 +325,4 @@ lib64
pyvenv.cfg
/build/
/node_modules/
+.temp
diff --git a/Makefile b/Makefile
index c5009dd2..a3739584 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,7 @@
# Model2owl directory
MODEL2OWL_FOLDER?=.
+ABSOLUTE_MODEL2OWL_FOLDER?=$(shell realpath "${MODEL2OWL_FOLDER}")
# rdflib version
RDF_LIB_VERSION?=6.2.0
#Saxon path
@@ -33,8 +34,10 @@ TURTLE_FILELIST=$(shell ls ${ONTOLOGY_FOLDER_PATH}/*.ttl)
# Widoco variables
WIDOCO_RDF_INPUT_FILE_PATH?=test/reasoning-investigation/model-2020-12-16/ePO_restrictions.rdf
WIDOCO_OUTPUT_FOLDER_PATH?=output/widoco
-NAMESPACES_XML_FILE_PATH?=${MODEL2OWL_FOLDER}/test/ePO-default-config/namespaces.xml
-NAMESPACES_AS_RDFPIPE_ARGS=$(shell ${MODEL2OWL_FOLDER}/scripts/get_namespaces.sh ${NAMESPACES_XML_FILE_PATH})
+NAMESPACES_USER_XML_FILE_PATH?=${MODEL2OWL_FOLDER}/test/ePO-default-config/namespaces.xml
+INTERM_FOLDER_PATH?=${ABSOLUTE_MODEL2OWL_FOLDER}/.temp
+ENRICHED_NAMESPACES_XML_PATH:=${INTERM_FOLDER_PATH}/enriched-namespaces.xml
+NAMESPACES_AS_RDFPIPE_ARGS=$(shell ${MODEL2OWL_FOLDER}/scripts/get_namespaces.sh ${ENRICHED_NAMESPACES_XML_PATH})
RDF_XML_MIME_TYPE:='application/rdf+xml'
TURTLE_MIME_TYPE:='turtle'
@@ -114,8 +117,10 @@ generate-convention-SVRL-report:
#Example how to run transformation commands :
# make owl-core XMI_INPUT_FILE_PATH=/home/mypc/work/model2owl/eNotice_CM.xml OUTPUT_FOLDER_PATH=./my-folder
owl-core:
+ @make gen-enriched-ns-file
@java -jar ${SAXON} -s:${XMI_INPUT_FILE_PATH} -xsl:${MODEL2OWL_FOLDER}/src/owl-core.xsl \
- -o:${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}.tmp.rdf
+ -o:${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}.tmp.rdf \
+ enrichedNamespacesPath="${ENRICHED_NAMESPACES_XML_PATH}"
@make convert-between-serialization-formats INPUT_FORMAT=${RDF_XML_MIME_TYPE} \
OUTPUT_FORMAT=${RDF_XML_MIME_TYPE} \
FILE_PATH=${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}.tmp.rdf \
@@ -125,8 +130,10 @@ owl-core:
@rm -f ${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}.tmp.rdf
owl-restrictions:
+ @make gen-enriched-ns-file
@java -jar ${SAXON} -s:${XMI_INPUT_FILE_PATH} -xsl:${MODEL2OWL_FOLDER}/src/owl-restrictions.xsl \
- -o:${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}_restrictions.tmp.rdf
+ -o:${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}_restrictions.tmp.rdf \
+ enrichedNamespacesPath="${ENRICHED_NAMESPACES_XML_PATH}"
@make convert-between-serialization-formats INPUT_FORMAT=${RDF_XML_MIME_TYPE} \
OUTPUT_FORMAT=${RDF_XML_MIME_TYPE} \
FILE_PATH=${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}_restrictions.tmp.rdf \
@@ -136,8 +143,10 @@ owl-restrictions:
@rm -f ${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}_restrictions.tmp.rdf
shacl:
+ @make gen-enriched-ns-file
@java -jar ${SAXON} -s:${XMI_INPUT_FILE_PATH} -xsl:${MODEL2OWL_FOLDER}/src/shacl-shapes.xsl \
- -o:${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}_shapes.tmp.rdf
+ -o:${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}_shapes.tmp.rdf \
+ enrichedNamespacesPath="${ENRICHED_NAMESPACES_XML_PATH}"
@make convert-between-serialization-formats INPUT_FORMAT=${RDF_XML_MIME_TYPE} \
OUTPUT_FORMAT=${RDF_XML_MIME_TYPE} \
FILE_PATH=${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}_shapes.tmp.rdf \
@@ -146,6 +155,12 @@ shacl:
@ls -lh ${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}_shapes.rdf
@rm -f ${OUTPUT_FOLDER_PATH}/${XMI_INPUT_FILENAME_WITHOUT_EXTENSION}_shapes.tmp.rdf
+# Generate enriched namespaces XML file which contains user namespaces (defined
+# in namespaces.xml) and internal namespaces (such as core-shape)
+gen-enriched-ns-file:
+ @mkdir -p ${INTERM_FOLDER_PATH}
+ @java -jar ${SAXON} -s:${NAMESPACES_USER_XML_FILE_PATH} -xsl:${MODEL2OWL_FOLDER}/src/xml/enriched-namespaces.xsl \
+ -o:${ENRICHED_NAMESPACES_XML_PATH}
# Combine xmi UML files
# all files for combine should be in test/test-multi-xmi (or in XMI_MERGED_OUTPUT_FOLDER_PATH)
@@ -220,10 +235,11 @@ convert-rdf-to-rdf:
# OUTPUT_FILE_PATH: Path for the output file
# INPUT_FORMAT: a MIME type of the given input RDF file
# OUTPUT_FORMAT: a MIME type of any of the valid RDF serializations
-# USE_NAMESPACES: optional; if non-empty then namespaces (from the namespaces.xml file).
-# This can be used if the input (FILE_PATH) doesn't include
-# namespaces we want to be applied (e.g. to have compact
-# instead of full URIs in the output file).
+# USE_NAMESPACES: optional; if non-empty then namespaces (from the
+# enriched-namespaces.xml file). This can be used if the input
+# (FILE_PATH) doesn't include namespaces we want to be applied
+# (e.g. to have compact instead of full URIs in the output
+# file).
#
# Supported MIME types: https://rdflib.readthedocs.io/en/7.0.0/plugin_serializers.html
#
diff --git a/scripts/get_namespaces.sh b/scripts/get_namespaces.sh
index a08e37ec..f22d1d99 100755
--- a/scripts/get_namespaces.sh
+++ b/scripts/get_namespaces.sh
@@ -1,10 +1,12 @@
#!/bin/bash
#
-# Gets namespaces from an XML file with the model2owl project namespaces
-# (`namespaces.xml` by default) and prepares argument list from them to be
-# used with `rdfpipe` tool. Uses Saxon installed in the project main directory.
+# Gets namespaces from an XML file with the model2owl project namespaces and
+# prepares argument list from them to be used with `rdfpipe` tool. Uses Saxon
+# installed in the project main directory.
#
# USAGE: get_namespaces.sh NAMESPACES_XML_FILE_PATH
+PROJECT_DIR=$(dirname $(dirname $(realpath ${BASH_SOURCE[0]})))
+SAXON=${PROJECT_DIR}/saxon/saxon.jar
if [ -z "$1" ]; then
echo "ERROR: path to *.xml file with namespaces not given."
@@ -17,7 +19,7 @@ namespaces_file_name=$(basename $namespaces_file_path)
cd ${namespaces_file_dir}
namespaces=$(
- java -cp ../../saxon/saxon.jar net.sf.saxon.Query -s:${namespaces_file_name} \
+ java -cp $SAXON net.sf.saxon.Query -s:${namespaces_file_name} \
-qs:'for $x in /*:prefixes/*:prefix return concat(string($x/@name), "=", string($x/@value))' \
\!method=text
)
diff --git a/src/common/checkers.xsl b/src/common/checkers.xsl
index b6ad192a..982063e7 100644
--- a/src/common/checkers.xsl
+++ b/src/common/checkers.xsl
@@ -512,15 +512,15 @@
- This function will check if a given list of namespaces are defined in
- namespaces.xml file. If not all the namespaces were defined it will return a list with
- those namespaces
+ This function will check if a given list of namespaces are
+ defined in enriched-namespaces.xml file. If not all the namespaces were
+ defined it will return a list with those namespaces
+ select="($internalNamespacePrefixes/*:prefixes/*:prefix/@name)"/>
+
+
+
Lookup a data-type in the xsd and rdf accepted data-type document (usually an
external file with xsd and rdf data-types definitions) and return false or the data-type
@@ -61,7 +68,7 @@
-
+
+
+
+
+
+
diff --git a/src/owl-core.xsl b/src/owl-core.xsl
index a2fb4041..f4d029be 100644
--- a/src/owl-core.xsl
+++ b/src/owl-core.xsl
@@ -46,9 +46,7 @@
-
-
-
+
@@ -63,7 +61,7 @@
-
+
diff --git a/src/owl-restrictions.xsl b/src/owl-restrictions.xsl
index 22772ac9..fbcf6b2c 100644
--- a/src/owl-restrictions.xsl
+++ b/src/owl-restrictions.xsl
@@ -40,11 +40,7 @@
-
-
-
-
-
+
@@ -58,7 +54,7 @@
-
+
diff --git a/src/shacl-shapes.xsl b/src/shacl-shapes.xsl
index 00c0349c..7892e87a 100644
--- a/src/shacl-shapes.xsl
+++ b/src/shacl-shapes.xsl
@@ -44,13 +44,7 @@
-
-
-
-
-
-
-
+
@@ -62,7 +56,7 @@
-
+
diff --git a/src/xml/enriched-namespaces.xsl b/src/xml/enriched-namespaces.xsl
new file mode 100644
index 00000000..b3d9c88e
--- /dev/null
+++ b/src/xml/enriched-namespaces.xsl
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+ A template for generating enriched namespaces XML file that
+ contains internal model2owl namespaces which are constructed
+ based on the model2owl configuration.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/unitTests/test-xml/test-enriched-namespaces.xspec b/test/unitTests/test-xml/test-enriched-namespaces.xspec
new file mode 100644
index 00000000..ba778260
--- /dev/null
+++ b/test/unitTests/test-xml/test-enriched-namespaces.xspec
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+