diff --git a/README.md b/README.md
index 088b67f..bce07ce 100644
--- a/README.md
+++ b/README.md
@@ -8,10 +8,6 @@
The tool translates mapping rules from YARRRML in a turtle-based serialization of RML or R2RML. The translation is based
on the [RML](https://rml.io/specs/rml/) and [YARRRML](https://rml.io/yarrrml/spec/) specifications.
-## Limitations
-We are working on including the following features which are not yet implemented:
-- Functions using the [FnO](https://fno.io/) Ontology
-
## Installation:
```
pip install yarrrml-translator
@@ -69,6 +65,17 @@ list_yarrrml_mappings = ["content_mapping_yarrrml1", "content_mapping_yarrrml1"]
yarrrml_content = yarrrml_translator.merge_mappings(list_yarrrml_mappings)
```
+
+## Specifications conformant:
+
+These are the following specifications used by the translation process:
+- YARRRML: https://github.com/kg-construct/yarrrml-spec (Proper website soon)
+- R2RML: https://www.w3.org/TR/r2rml/
+- RML: https://rml.io/spec
+- RML-star: https://w3id.org/kg-construct/rml-star
+- RML-Target: https://rml.io/specs/rml-target/
+- RML-FNML: https://kg-construct.github.io/fnml-spec/
+
## Authors
Ontology Engineering Group:
- [David Chaves-Fraga](mailto:david.chaves@upm.es)
diff --git a/VERSION b/VERSION
index 6f4eebd..100435b 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.8.1
+0.8.2
diff --git a/test/projects/PPDSTC/test_ppds.py b/test/projects/PPDSTC/test_ppds.py
index d477c73..84c1fbc 100644
--- a/test/projects/PPDSTC/test_ppds.py
+++ b/test/projects/PPDSTC/test_ppds.py
@@ -1,9 +1,10 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
+
import os
@@ -14,7 +15,7 @@
RML_URI = 'http://semweb.mmlab.be/ns/rml#'
-def test_yarrrmltc0019():
+def test_yarrrml_ppds():
expected_mapping = Graph()
expected_mapping.parse(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.ttl'), format="ttl")
diff --git a/test/r2rml/YARRRMLTC-0008/test_yarrrmltc0008.py b/test/r2rml/YARRRMLTC-0008/test_yarrrmltc0008.py
index 0b79bc8..a837dd0 100644
--- a/test/r2rml/YARRRMLTC-0008/test_yarrrmltc0008.py
+++ b/test/r2rml/YARRRMLTC-0008/test_yarrrmltc0008.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/r2rml/YARRRMLTC-0009/test_yarrrmltc0009.py b/test/r2rml/YARRRMLTC-0009/test_yarrrmltc0009.py
index d162eaf..6261a97 100644
--- a/test/r2rml/YARRRMLTC-0009/test_yarrrmltc0009.py
+++ b/test/r2rml/YARRRMLTC-0009/test_yarrrmltc0009.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/r2rml/YARRRMLTC-0010/test_yarrrmltc0010.py b/test/r2rml/YARRRMLTC-0010/test_yarrrmltc0010.py
index 81b1951..373e597 100644
--- a/test/r2rml/YARRRMLTC-0010/test_yarrrmltc0010.py
+++ b/test/r2rml/YARRRMLTC-0010/test_yarrrmltc0010.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/r2rml/YARRRMLTC-0011/test_yarrrmltc0011.py b/test/r2rml/YARRRMLTC-0011/test_yarrrmltc0011.py
index 156f107..c90dffb 100644
--- a/test/r2rml/YARRRMLTC-0011/test_yarrrmltc0011.py
+++ b/test/r2rml/YARRRMLTC-0011/test_yarrrmltc0011.py
@@ -2,9 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
-
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
from ruamel.yaml import YAML
diff --git a/test/r2rml/YARRRMLTC-0012/test_yarrrmltc0012.py b/test/r2rml/YARRRMLTC-0012/test_yarrrmltc0012.py
index 4c671bc..628aad6 100644
--- a/test/r2rml/YARRRMLTC-0012/test_yarrrmltc0012.py
+++ b/test/r2rml/YARRRMLTC-0012/test_yarrrmltc0012.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/r2rml/YARRRMLTC-0013/test_yarrrmltc0013.py b/test/r2rml/YARRRMLTC-0013/test_yarrrmltc0013.py
index 32c75d4..040591a 100644
--- a/test/r2rml/YARRRMLTC-0013/test_yarrrmltc0013.py
+++ b/test/r2rml/YARRRMLTC-0013/test_yarrrmltc0013.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/r2rml/YARRRMLTC-0014/test_yarrrmltc0014.py b/test/r2rml/YARRRMLTC-0014/test_yarrrmltc0014.py
index feb0cf0..7dd07ac 100644
--- a/test/r2rml/YARRRMLTC-0014/test_yarrrmltc0014.py
+++ b/test/r2rml/YARRRMLTC-0014/test_yarrrmltc0014.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/r2rml/YARRRMLTC-0015/test_yarrrmltc0015.py b/test/r2rml/YARRRMLTC-0015/test_yarrrmltc0015.py
index 6106302..e90e6e5 100644
--- a/test/r2rml/YARRRMLTC-0015/test_yarrrmltc0015.py
+++ b/test/r2rml/YARRRMLTC-0015/test_yarrrmltc0015.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-core/YARRRMLTC-0016/test_yarrrmltc0016.py b/test/rml-core/YARRRMLTC-0016/test_yarrrmltc0016.py
index f8711a1..ca2fb5c 100644
--- a/test/rml-core/YARRRMLTC-0016/test_yarrrmltc0016.py
+++ b/test/rml-core/YARRRMLTC-0016/test_yarrrmltc0016.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-core/YARRRMLTC-0017/test_yarrrmltc0017.py b/test/rml-core/YARRRMLTC-0017/test_yarrrmltc0017.py
index 6f67dff..c21c23e 100644
--- a/test/rml-core/YARRRMLTC-0017/test_yarrrmltc0017.py
+++ b/test/rml-core/YARRRMLTC-0017/test_yarrrmltc0017.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-core/YARRRMLTC-0018/test_yarrrmltc0018.py b/test/rml-core/YARRRMLTC-0018/test_yarrrmltc0018.py
index 19c3510..5968be8 100644
--- a/test/rml-core/YARRRMLTC-0018/test_yarrrmltc0018.py
+++ b/test/rml-core/YARRRMLTC-0018/test_yarrrmltc0018.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-core/YARRRMLTC-0019/test_yarrrmltc0019.py b/test/rml-core/YARRRMLTC-0019/test_yarrrmltc0019.py
index d477c73..df754b2 100644
--- a/test/rml-core/YARRRMLTC-0019/test_yarrrmltc0019.py
+++ b/test/rml-core/YARRRMLTC-0019/test_yarrrmltc0019.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-core/YARRRMLTC-0020/test_yarrrmltc0020.py b/test/rml-core/YARRRMLTC-0020/test_yarrrmltc0020.py
index d3ccfe4..f616b84 100644
--- a/test/rml-core/YARRRMLTC-0020/test_yarrrmltc0020.py
+++ b/test/rml-core/YARRRMLTC-0020/test_yarrrmltc0020.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-core/YARRRMLTC-0021/test_yarrrmltc0021.py b/test/rml-core/YARRRMLTC-0021/test_yarrrmltc0021.py
index 44314cb..6790077 100644
--- a/test/rml-core/YARRRMLTC-0021/test_yarrrmltc0021.py
+++ b/test/rml-core/YARRRMLTC-0021/test_yarrrmltc0021.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-core/YARRRMLTC-0022/test_yarrrmltc0022.py b/test/rml-core/YARRRMLTC-0022/test_yarrrmltc0022.py
index 0c3b386..653dfb1 100644
--- a/test/rml-core/YARRRMLTC-0022/test_yarrrmltc0022.py
+++ b/test/rml-core/YARRRMLTC-0022/test_yarrrmltc0022.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-datatype/YARRRMLTC-0032/test_yarrrmltc0032.py b/test/rml-datatype/YARRRMLTC-0032/test_yarrrmltc0032.py
index f843d32..e4e106e 100644
--- a/test/rml-datatype/YARRRMLTC-0032/test_yarrrmltc0032.py
+++ b/test/rml-datatype/YARRRMLTC-0032/test_yarrrmltc0032.py
@@ -1,8 +1,8 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "David Chaves Fraga"
+__maintainer__ = "David Chaves-Fraga"
__email__ = "david.chaves@upm.es"
diff --git a/test/rml-datatype/YARRRMLTC-0033/test_yarrrmltc0033.py b/test/rml-datatype/YARRRMLTC-0033/test_yarrrmltc0033.py
index 47fe5ad..0e9ac0b 100644
--- a/test/rml-datatype/YARRRMLTC-0033/test_yarrrmltc0033.py
+++ b/test/rml-datatype/YARRRMLTC-0033/test_yarrrmltc0033.py
@@ -1,8 +1,8 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "David Chaves Fraga"
+__maintainer__ = "David Chaves-Fraga"
__email__ = "david.chaves@upm.es"
diff --git a/test/rml-fnml/YARRRMLTC-0040/mapping.ttl b/test/rml-fnml/YARRRMLTC-0040/mapping.ttl
new file mode 100644
index 0000000..926941b
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0040/mapping.ttl
@@ -0,0 +1,53 @@
+@prefix foaf: .
+@prefix ex: .
+@prefix rr: .
+@prefix rml: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix xsd: .
+@prefix ql: .
+@prefix d2rq: .
+@prefix schema: .
+@prefix formats: .
+@prefix comp: .
+@prefix void: .
+@prefix fnml: .
+@prefix grel: .
+@base .
+
+
+ a fnml:Execution;
+ fnml:function ex:toLowerCase ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "firstname";
+ ];
+ ].
+
+ a rr:TriplesMap;
+
+ rml:logicalSource [
+ a rml:LogicalSource;
+ rml:source "student.csv";
+ rml:referenceFormulation ql:CSV
+ ];
+ rr:subjectMap [
+ a rr:SubjectMap;
+ rr:template "http://example.com/{Name}";
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:name;
+ ];
+ rml:objectMap [
+ a rr:ObjectMap;
+ fnml:execution ;
+ ];
+ ].
+
+
diff --git a/test/rml-fnml/YARRRMLTC-0040/mapping.yml b/test/rml-fnml/YARRRMLTC-0040/mapping.yml
new file mode 100644
index 0000000..d26b13d
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0040/mapping.yml
@@ -0,0 +1,15 @@
+prefixes:
+ foaf: http://xmlns.com/foaf/0.1/
+ ex: http://example.com/
+
+mappings:
+ student2:
+ sources:
+ - [ 'student.csv~csv' ]
+ s: http://example.com/$(Name)
+ po:
+ - p: foaf:name
+ o:
+ - function: ex:toLowerCase
+ parameters:
+ - [ ex:input, $(firstname) ]
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0040/test_yarrrmltc0040.py b/test/rml-fnml/YARRRMLTC-0040/test_yarrrmltc0040.py
new file mode 100644
index 0000000..df56d7d
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0040/test_yarrrmltc0040.py
@@ -0,0 +1,25 @@
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
+
+__license__ = "Apache-2.0"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
+
+
+import os
+from ruamel.yaml import YAML
+import yarrrml_translator
+from rdflib.graph import Graph
+from rdflib import compare
+
+
+def test_yarrrmltc0040():
+ expected_mapping = Graph()
+ expected_mapping.parse(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.ttl'), format="ttl")
+
+ translated_mapping = Graph()
+ yaml = YAML(typ='safe', pure=True)
+ mapping_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.yml')
+ translated_mapping.parse(data=yarrrml_translator.translate(yaml.load(open(mapping_path))), format="ttl")
+
+ assert compare.isomorphic(expected_mapping, translated_mapping)
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0041/mapping.ttl b/test/rml-fnml/YARRRMLTC-0041/mapping.ttl
new file mode 100644
index 0000000..7b05eb6
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0041/mapping.ttl
@@ -0,0 +1,51 @@
+@prefix foaf: .
+@prefix ex: .
+@prefix rr: .
+@prefix rml: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix xsd: .
+@prefix ql: .
+@prefix d2rq: .
+@prefix schema: .
+@prefix formats: .
+@prefix comp: .
+@prefix void: .
+@prefix fnml: .
+@prefix grel: .
+@base .
+
+
+ a fnml:Execution;
+ fnml:function ex:toLowerCase ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "firstname";
+ ];
+ ].
+
+ a rr:TriplesMap;
+
+ rml:logicalSource [
+ a rml:LogicalSource;
+ rml:source "student.csv";
+ rml:referenceFormulation ql:CSV
+ ];
+ rr:subjectMap [
+ a rr:SubjectMap;
+ fnml:execution ;
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:firstName;
+ ];
+ rr:objectMap [
+ a rr:ObjectMap;
+ rml:reference "name";
+ ];
+ ].
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0041/mapping.yml b/test/rml-fnml/YARRRMLTC-0041/mapping.yml
new file mode 100644
index 0000000..50e68f7
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0041/mapping.yml
@@ -0,0 +1,14 @@
+prefixes:
+ foaf: http://xmlns.com/foaf/0.1/
+ ex: http://example.com/
+
+mappings:
+ student2:
+ sources:
+ - [ 'student.csv~csv' ]
+ s:
+ function: ex:toLowerCase
+ parameters:
+ - [ ex:input, $(firstname) ]
+ po:
+ - [foaf:firstName, $(name)]
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0041/test_yarrrmltc0041.py b/test/rml-fnml/YARRRMLTC-0041/test_yarrrmltc0041.py
new file mode 100644
index 0000000..a03b2d7
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0041/test_yarrrmltc0041.py
@@ -0,0 +1,25 @@
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
+
+__license__ = "Apache-2.0"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
+
+
+import os
+from ruamel.yaml import YAML
+import yarrrml_translator
+from rdflib.graph import Graph
+from rdflib import compare
+
+
+def test_yarrrmltc0041():
+ expected_mapping = Graph()
+ expected_mapping.parse(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.ttl'), format="ttl")
+
+ translated_mapping = Graph()
+ yaml = YAML(typ='safe', pure=True)
+ mapping_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.yml')
+ translated_mapping.parse(data=yarrrml_translator.translate(yaml.load(open(mapping_path))), format="ttl")
+
+ assert compare.isomorphic(expected_mapping, translated_mapping)
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0042/mapping.ttl b/test/rml-fnml/YARRRMLTC-0042/mapping.ttl
new file mode 100644
index 0000000..b20cb4b
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0042/mapping.ttl
@@ -0,0 +1,64 @@
+@prefix foaf: .
+@prefix ex: .
+@prefix rr: .
+@prefix rml: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix xsd: .
+@prefix ql: .
+@prefix d2rq: .
+@prefix schema: .
+@prefix formats: .
+@prefix comp: .
+@prefix void: .
+@prefix fnml: .
+@prefix grel: .
+@base .
+
+
+ a fnml:Execution;
+ fnml:function ex:toLowerCase ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:valueParameter;
+ fnml:valueMap[
+ fnml:execution ;
+ ];
+ ].
+
+ a fnml:Execution;
+ fnml:function ex:toUpperCase ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:valueParameter;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "name";
+ ];
+ ].
+
+ a rr:TriplesMap;
+
+ rml:logicalSource [
+ a rml:LogicalSource;
+ rml:source "student.csv";
+ rml:referenceFormulation ql:CSV
+ ];
+ rr:subjectMap [
+ a rr:SubjectMap;
+ rr:template "http://example.com/{Name}";
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:name;
+ ];
+ rml:objectMap [
+ a rr:ObjectMap;
+ fnml:execution ;
+ ];
+ ].
+
+
diff --git a/test/rml-fnml/YARRRMLTC-0042/mapping.yml b/test/rml-fnml/YARRRMLTC-0042/mapping.yml
new file mode 100644
index 0000000..dd44483
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0042/mapping.yml
@@ -0,0 +1,19 @@
+prefixes:
+ foaf: http://xmlns.com/foaf/0.1/
+ ex: http://example.com/
+
+mappings:
+ student2:
+ sources:
+ - [ 'student.csv~csv' ]
+ s: http://example.com/$(Name)
+ po:
+ - p: foaf:name
+ o:
+ - function: ex:toLowerCase
+ parameters:
+ - parameter: ex:valueParameter
+ value:
+ function: ex:toUpperCase
+ parameters:
+ - [ ex:valueParameter, $(name) ]
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0042/test_yarrrmltc0042.py b/test/rml-fnml/YARRRMLTC-0042/test_yarrrmltc0042.py
new file mode 100644
index 0000000..28ea419
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0042/test_yarrrmltc0042.py
@@ -0,0 +1,25 @@
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
+
+__license__ = "Apache-2.0"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
+
+
+import os
+from ruamel.yaml import YAML
+import yarrrml_translator
+from rdflib.graph import Graph
+from rdflib import compare
+
+
+def test_yarrrmltc0042():
+ expected_mapping = Graph()
+ expected_mapping.parse(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.ttl'), format="ttl")
+
+ translated_mapping = Graph()
+ yaml = YAML(typ='safe', pure=True)
+ mapping_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.yml')
+ translated_mapping.parse(data=yarrrml_translator.translate(yaml.load(open(mapping_path))), format="ttl")
+
+ assert compare.isomorphic(expected_mapping, translated_mapping)
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0043/mapping.ttl b/test/rml-fnml/YARRRMLTC-0043/mapping.ttl
new file mode 100644
index 0000000..ff63d70
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0043/mapping.ttl
@@ -0,0 +1,75 @@
+@prefix foaf: .
+@prefix ex: .
+@prefix rr: .
+@prefix rml: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix xsd: .
+@prefix ql: .
+@prefix d2rq: .
+@prefix schema: .
+@prefix formats: .
+@prefix comp: .
+@prefix void: .
+@prefix fnml: .
+@prefix grel: .
+@base .
+
+
+ a fnml:Execution;
+ fnml:function ex:toLowerCase ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "firstname";
+ ];
+ ].
+
+ a fnml:Execution;
+ fnml:function ex:toLowerCase ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "surname";
+ ];
+ ].
+
+ a rr:TriplesMap;
+
+ rml:logicalSource [
+ a rml:LogicalSource;
+ rml:source "student.csv";
+ rml:referenceFormulation ql:CSV
+ ];
+ rr:subjectMap [
+ a rr:SubjectMap;
+ rr:template "http://example.com/{Name}";
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:name;
+ ];
+ rml:objectMap [
+ a rr:ObjectMap;
+ fnml:execution ;
+ ];
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:surname;
+ ];
+ rml:objectMap [
+ a rr:ObjectMap;
+ fnml:execution ;
+ ];
+ ].
+
+
diff --git a/test/rml-fnml/YARRRMLTC-0043/mapping.yml b/test/rml-fnml/YARRRMLTC-0043/mapping.yml
new file mode 100644
index 0000000..0868905
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0043/mapping.yml
@@ -0,0 +1,20 @@
+prefixes:
+ foaf: http://xmlns.com/foaf/0.1/
+ ex: http://example.com/
+
+mappings:
+ student2:
+ sources:
+ - [ 'student.csv~csv' ]
+ s: http://example.com/$(Name)
+ po:
+ - p: foaf:name
+ o:
+ - function: ex:toLowerCase
+ parameters:
+ - [ ex:input, $(firstname) ]
+ - p: foaf:surname
+ o:
+ - function: ex:toLowerCase
+ parameters:
+ - [ ex:input, $(surname) ]
diff --git a/test/rml-fnml/YARRRMLTC-0043/test_yarrrmltc0043.py b/test/rml-fnml/YARRRMLTC-0043/test_yarrrmltc0043.py
new file mode 100644
index 0000000..d74f38f
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0043/test_yarrrmltc0043.py
@@ -0,0 +1,25 @@
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
+
+__license__ = "Apache-2.0"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
+
+
+import os
+from ruamel.yaml import YAML
+import yarrrml_translator
+from rdflib.graph import Graph
+from rdflib import compare
+
+
+def test_yarrrmltc0043():
+ expected_mapping = Graph()
+ expected_mapping.parse(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.ttl'), format="ttl")
+
+ translated_mapping = Graph()
+ yaml = YAML(typ='safe', pure=True)
+ mapping_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.yml')
+ translated_mapping.parse(data=yarrrml_translator.translate(yaml.load(open(mapping_path))), format="ttl")
+
+ assert compare.isomorphic(expected_mapping, translated_mapping)
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0044/mapping.ttl b/test/rml-fnml/YARRRMLTC-0044/mapping.ttl
new file mode 100644
index 0000000..c0a1ab2
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0044/mapping.ttl
@@ -0,0 +1,72 @@
+@prefix foaf: .
+@prefix ex: .
+@prefix rr: .
+@prefix rml: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix xsd: .
+@prefix ql: .
+@prefix d2rq: .
+@prefix schema: .
+@prefix formats: .
+@prefix comp: .
+@prefix void: .
+@prefix fnml: .
+@prefix grel: .
+@base .
+
+
+ a fnml:Execution;
+ fnml:function ex:function1 ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "firstname";
+ ];
+ ],
+ [
+ a fnml:Input;
+ fnml:parameter ex:input2;
+ fnml:valueMap[
+ fnml:execution ;
+ ];
+ ].
+
+ a fnml:Execution;
+ fnml:function ex:lowerCase ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "name";
+ ];
+ ].
+
+ a rr:TriplesMap;
+
+ rml:logicalSource [
+ a rml:LogicalSource;
+ rml:source "student.csv";
+ rml:referenceFormulation ql:CSV
+ ];
+ rr:subjectMap [
+ a rr:SubjectMap;
+ rr:template "http://example.com/{Name}";
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:firstName;
+ ];
+ rml:objectMap [
+ a rr:ObjectMap;
+ fnml:execution ;
+ ];
+ ].
+
+
diff --git a/test/rml-fnml/YARRRMLTC-0044/mapping.yml b/test/rml-fnml/YARRRMLTC-0044/mapping.yml
new file mode 100644
index 0000000..f9efb61
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0044/mapping.yml
@@ -0,0 +1,13 @@
+prefixes:
+ foaf: http://xmlns.com/foaf/0.1/
+ ex: http://example.com/
+
+mappings:
+ student2:
+ sources:
+ - [ 'student.csv~csv' ]
+ s: http://example.com/$(Name)
+ po:
+ - p: foaf:firstName
+ o:
+ - function: ex:function1(ex:input = $(firstname), ex:input2=ex:lowerCase(ex:input=$(name)))
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0044/test_yarrrmltc0044.py b/test/rml-fnml/YARRRMLTC-0044/test_yarrrmltc0044.py
new file mode 100644
index 0000000..4201234
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0044/test_yarrrmltc0044.py
@@ -0,0 +1,25 @@
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
+
+__license__ = "Apache-2.0"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
+
+
+import os
+from ruamel.yaml import YAML
+import yarrrml_translator
+from rdflib.graph import Graph
+from rdflib import compare
+
+
+def test_yarrrmltc0044():
+ expected_mapping = Graph()
+ expected_mapping.parse(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.ttl'), format="ttl")
+
+ translated_mapping = Graph()
+ yaml = YAML(typ='safe', pure=True)
+ mapping_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.yml')
+ translated_mapping.parse(data=yarrrml_translator.translate(yaml.load(open(mapping_path))), format="ttl")
+
+ assert compare.isomorphic(expected_mapping, translated_mapping)
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0045/mapping.ttl b/test/rml-fnml/YARRRMLTC-0045/mapping.ttl
new file mode 100644
index 0000000..f571340
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0045/mapping.ttl
@@ -0,0 +1,91 @@
+@prefix foaf: .
+@prefix ex: .
+@prefix rr: .
+@prefix rml: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix xsd: .
+@prefix ql: .
+@prefix d2rq: .
+@prefix schema: .
+@prefix formats: .
+@prefix comp: .
+@prefix void: .
+@prefix fnml: .
+@prefix grel: .
+@base .
+
+
+ a fnml:Execution;
+ fnml:function ex:function1 ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input1;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "firstname1";
+ ];
+ ],
+ [
+ a fnml:Input;
+ fnml:parameter ex:input2;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "firstname2";
+ ];
+ ],
+ [
+ a fnml:Input;
+ fnml:parameter ex:input3;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "firstname3";
+ ];
+ ].
+
+ a fnml:Execution;
+ fnml:function ex:toLowerCase ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "surname";
+ ];
+ ].
+
+ a rr:TriplesMap;
+
+ rml:logicalSource [
+ a rml:LogicalSource;
+ rml:source "student.csv";
+ rml:referenceFormulation ql:CSV
+ ];
+ rr:subjectMap [
+ a rr:SubjectMap;
+ rr:template "http://example.com/{Name}";
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:name;
+ ];
+ rml:objectMap [
+ a rr:ObjectMap;
+ fnml:execution ;
+ ];
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:surname;
+ ];
+ rml:objectMap [
+ a rr:ObjectMap;
+ fnml:execution ;
+ ];
+ ].
+
+
diff --git a/test/rml-fnml/YARRRMLTC-0045/mapping.yml b/test/rml-fnml/YARRRMLTC-0045/mapping.yml
new file mode 100644
index 0000000..0dd6aa7
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0045/mapping.yml
@@ -0,0 +1,22 @@
+prefixes:
+ foaf: http://xmlns.com/foaf/0.1/
+ ex: http://example.com/
+
+mappings:
+ student2:
+ sources:
+ - [ 'student.csv~csv' ]
+ s: http://example.com/$(Name)
+ po:
+ - p: foaf:name
+ o:
+ - function: ex:function1
+ parameters:
+ - [ ex:input1, $(firstname1) ]
+ - [ ex:input2, $(firstname2) ]
+ - [ ex:input3, $(firstname3) ]
+ - p: foaf:surname
+ o:
+ - function: ex:toLowerCase
+ parameters:
+ - [ ex:input, $(surname) ]
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0045/test_yarrrmltc0045.py b/test/rml-fnml/YARRRMLTC-0045/test_yarrrmltc0045.py
new file mode 100644
index 0000000..551f982
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0045/test_yarrrmltc0045.py
@@ -0,0 +1,25 @@
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
+
+__license__ = "Apache-2.0"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
+
+
+import os
+from ruamel.yaml import YAML
+import yarrrml_translator
+from rdflib.graph import Graph
+from rdflib import compare
+
+
+def test_yarrrmltc0045():
+ expected_mapping = Graph()
+ expected_mapping.parse(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.ttl'), format="ttl")
+
+ translated_mapping = Graph()
+ yaml = YAML(typ='safe', pure=True)
+ mapping_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.yml')
+ translated_mapping.parse(data=yarrrml_translator.translate(yaml.load(open(mapping_path))), format="ttl")
+
+ assert compare.isomorphic(expected_mapping, translated_mapping)
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0046/mapping.ttl b/test/rml-fnml/YARRRMLTC-0046/mapping.ttl
new file mode 100644
index 0000000..774468e
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0046/mapping.ttl
@@ -0,0 +1,135 @@
+@prefix foaf: .
+@prefix ex: .
+@prefix rr: .
+@prefix rml: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix xsd: .
+@prefix ql: .
+@prefix d2rq: .
+@prefix schema: .
+@prefix formats: .
+@prefix comp: .
+@prefix void: .
+@prefix fnml: .
+@prefix grel: .
+@base .
+
+
+ a fnml:Execution;
+ fnml:function ex:function0 ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "firstname";
+ ];
+ ],
+ [
+ a fnml:Input;
+ fnml:parameter ex:input2;
+ fnml:valueMap[
+ fnml:execution ;
+ ];
+ ].
+
+ a fnml:Execution;
+ fnml:function ex:lowerCase ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "name";
+ ];
+ ].
+
+ a fnml:Execution;
+ fnml:function ex:function1 ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "name";
+ ];
+ ],
+ [
+ a fnml:Input;
+ fnml:parameter ex:valueParameter;
+ fnml:valueMap[
+ fnml:execution ;
+ ];
+ ].
+
+ a fnml:Execution;
+ fnml:function ex:toUpperCase ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:valueParameter;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "firstname";
+ ];
+ ].
+
+ a fnml:Execution;
+ fnml:function ex:function2 ;
+ fnml:input
+ [
+ a fnml:Input;
+ fnml:parameter ex:input;
+ fnml:valueMap [
+ a fnml:ValueMap;
+ rml:reference "surname";
+ ];
+ ].
+
+ a rr:TriplesMap;
+
+ rml:logicalSource [
+ a rml:LogicalSource;
+ rml:source "student.csv";
+ rml:referenceFormulation ql:CSV
+ ];
+ rr:subjectMap [
+ a rr:SubjectMap;
+ rr:template "http://example.com/{Name}";
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:firstName;
+ ];
+ rml:objectMap [
+ a rr:ObjectMap;
+ fnml:execution ;
+ ];
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:name;
+ ];
+ rml:objectMap [
+ a rr:ObjectMap;
+ fnml:execution ;
+ ];
+ ];
+ rr:predicateObjectMap [
+ rr:predicateMap [
+ a rr:PredicateMap;
+ rr:constant foaf:surname;
+ ];
+ rml:objectMap [
+ a rr:ObjectMap;
+ fnml:execution ;
+ ];
+ ].
+
+
diff --git a/test/rml-fnml/YARRRMLTC-0046/mapping.yml b/test/rml-fnml/YARRRMLTC-0046/mapping.yml
new file mode 100644
index 0000000..dafaddb
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0046/mapping.yml
@@ -0,0 +1,28 @@
+prefixes:
+ foaf: http://xmlns.com/foaf/0.1/
+ ex: http://example.com/
+
+mappings:
+ student2:
+ sources:
+ - [ 'student.csv~csv' ]
+ s: http://example.com/$(Name)
+ po:
+ - p: foaf:firstName
+ o:
+ - function: ex:function0(ex:input = $(firstname), ex:input2=ex:lowerCase(ex:input=$(name)))
+ - p: foaf:name
+ o:
+ - function: ex:function1
+ parameters:
+ - [ ex:input, $(name) ]
+ - parameter: ex:valueParameter
+ value:
+ function: ex:toUpperCase
+ parameters:
+ - [ ex:valueParameter, $(firstname) ]
+ - p: foaf:surname
+ o:
+ - function: ex:function2
+ parameters:
+ - [ ex:input, $(surname) ]
\ No newline at end of file
diff --git a/test/rml-fnml/YARRRMLTC-0046/test_yarrrmltc0046.py b/test/rml-fnml/YARRRMLTC-0046/test_yarrrmltc0046.py
new file mode 100644
index 0000000..f7a90ce
--- /dev/null
+++ b/test/rml-fnml/YARRRMLTC-0046/test_yarrrmltc0046.py
@@ -0,0 +1,25 @@
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
+
+__license__ = "Apache-2.0"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
+
+
+import os
+from ruamel.yaml import YAML
+import yarrrml_translator
+from rdflib.graph import Graph
+from rdflib import compare
+
+
+def test_yarrrmltc0046():
+ expected_mapping = Graph()
+ expected_mapping.parse(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.ttl'), format="ttl")
+
+ translated_mapping = Graph()
+ yaml = YAML(typ='safe', pure=True)
+ mapping_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'mapping.yml')
+ translated_mapping.parse(data=yarrrml_translator.translate(yaml.load(open(mapping_path))), format="ttl")
+
+ assert compare.isomorphic(expected_mapping, translated_mapping)
\ No newline at end of file
diff --git a/test/rml-language/YARRRMLTC-0030/test_yarrrmltc0030.py b/test/rml-language/YARRRMLTC-0030/test_yarrrmltc0030.py
index 2d9ef55..4e46fb8 100644
--- a/test/rml-language/YARRRMLTC-0030/test_yarrrmltc0030.py
+++ b/test/rml-language/YARRRMLTC-0030/test_yarrrmltc0030.py
@@ -1,8 +1,8 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "David Chaves Fraga"
+__maintainer__ = "David Chaves-Fraga"
__email__ = "david.chaves@upm.es"
diff --git a/test/rml-language/YARRRMLTC-0031/test_yarrrmltc0031.py b/test/rml-language/YARRRMLTC-0031/test_yarrrmltc0031.py
index bae6de4..e94124b 100644
--- a/test/rml-language/YARRRMLTC-0031/test_yarrrmltc0031.py
+++ b/test/rml-language/YARRRMLTC-0031/test_yarrrmltc0031.py
@@ -1,11 +1,10 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "David Chaves Fraga"
+__maintainer__ = "David Chaves-Fraga"
__email__ = "david.chaves@upm.es"
-
import os
from ruamel.yaml import YAML
import yarrrml_translator
diff --git a/test/rml-star/YARRRMLTC-0024/test_yarrrmltc0024.py b/test/rml-star/YARRRMLTC-0024/test_yarrrmltc0024.py
index 5bbd277..b6ec7d7 100644
--- a/test/rml-star/YARRRMLTC-0024/test_yarrrmltc0024.py
+++ b/test/rml-star/YARRRMLTC-0024/test_yarrrmltc0024.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-star/YARRRMLTC-0025/test_yarrrmltc0025.py b/test/rml-star/YARRRMLTC-0025/test_yarrrmltc0025.py
index 58837e6..fe38c79 100644
--- a/test/rml-star/YARRRMLTC-0025/test_yarrrmltc0025.py
+++ b/test/rml-star/YARRRMLTC-0025/test_yarrrmltc0025.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-star/YARRRMLTC-0026/test_yarrrmltc0026.py b/test/rml-star/YARRRMLTC-0026/test_yarrrmltc0026.py
index aa093c6..63fdd60 100644
--- a/test/rml-star/YARRRMLTC-0026/test_yarrrmltc0026.py
+++ b/test/rml-star/YARRRMLTC-0026/test_yarrrmltc0026.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-star/YARRRMLTC-0027/test_yarrrmltc0027.py b/test/rml-star/YARRRMLTC-0027/test_yarrrmltc0027.py
index d7188f0..80cf527 100644
--- a/test/rml-star/YARRRMLTC-0027/test_yarrrmltc0027.py
+++ b/test/rml-star/YARRRMLTC-0027/test_yarrrmltc0027.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-star/YARRRMLTC-0028/test_yarrrmltc0028.py b/test/rml-star/YARRRMLTC-0028/test_yarrrmltc0028.py
index 5acbbed..96fdeb6 100644
--- a/test/rml-star/YARRRMLTC-0028/test_yarrrmltc0028.py
+++ b/test/rml-star/YARRRMLTC-0028/test_yarrrmltc0028.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-star/YARRRMLTC-0029/test_yarrrmltc0029.py b/test/rml-star/YARRRMLTC-0029/test_yarrrmltc0029.py
index d8f325c..757499d 100644
--- a/test/rml-star/YARRRMLTC-0029/test_yarrrmltc0029.py
+++ b/test/rml-star/YARRRMLTC-0029/test_yarrrmltc0029.py
@@ -2,8 +2,8 @@
__credits__ = ["Marino Gonzalez Garcia"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-target/YARRRMLTC-0034/test_yarrrmltc0034.py b/test/rml-target/YARRRMLTC-0034/test_yarrrmltc0034.py
index dc46f4b..00b2960 100644
--- a/test/rml-target/YARRRMLTC-0034/test_yarrrmltc0034.py
+++ b/test/rml-target/YARRRMLTC-0034/test_yarrrmltc0034.py
@@ -1,9 +1,9 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-target/YARRRMLTC-0035/test_yarrrmltc0035.py b/test/rml-target/YARRRMLTC-0035/test_yarrrmltc0035.py
index 14503be..a7fd3af 100644
--- a/test/rml-target/YARRRMLTC-0035/test_yarrrmltc0035.py
+++ b/test/rml-target/YARRRMLTC-0035/test_yarrrmltc0035.py
@@ -1,9 +1,9 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-target/YARRRMLTC-0036/test_yarrrmltc0036.py b/test/rml-target/YARRRMLTC-0036/test_yarrrmltc0036.py
index 4ce4c7d..857cbb8 100644
--- a/test/rml-target/YARRRMLTC-0036/test_yarrrmltc0036.py
+++ b/test/rml-target/YARRRMLTC-0036/test_yarrrmltc0036.py
@@ -1,9 +1,9 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-target/YARRRMLTC-0037/test_yarrrmltc0037.py b/test/rml-target/YARRRMLTC-0037/test_yarrrmltc0037.py
index 4c23f4b..331929b 100644
--- a/test/rml-target/YARRRMLTC-0037/test_yarrrmltc0037.py
+++ b/test/rml-target/YARRRMLTC-0037/test_yarrrmltc0037.py
@@ -1,9 +1,9 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-target/YARRRMLTC-0038/test_yarrrmltc0038.py b/test/rml-target/YARRRMLTC-0038/test_yarrrmltc0038.py
index 1c47170..4e7e02a 100644
--- a/test/rml-target/YARRRMLTC-0038/test_yarrrmltc0038.py
+++ b/test/rml-target/YARRRMLTC-0038/test_yarrrmltc0038.py
@@ -1,9 +1,9 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/test/rml-target/YARRRMLTC-0039/test_yarrrmltc0039.py b/test/rml-target/YARRRMLTC-0039/test_yarrrmltc0039.py
index 5336e95..a088637 100644
--- a/test/rml-target/YARRRMLTC-0039/test_yarrrmltc0039.py
+++ b/test/rml-target/YARRRMLTC-0039/test_yarrrmltc0039.py
@@ -1,9 +1,9 @@
-__author__ = "Marino Gonzalez Garcia"
-__credits__ = ["Marino Gonzalez Garcia"]
+__author__ = "David Chaves-Fraga"
+__credits__ = ["David Chaves-Fraga"]
__license__ = "Apache-2.0"
-__maintainer__ = "Marino Gonzalez Garcia"
-__email__ = "marino.gonzalez.garcia@alumnos.upm.es"
+__maintainer__ = "David Chaves-Fraga"
+__email__ = "david.chaves@upm.es"
import os
diff --git a/yarrrml-translator/yarrrml_translator/__init__.py b/yarrrml-translator/yarrrml_translator/__init__.py
index f03c53d..7aefcc2 100644
--- a/yarrrml-translator/yarrrml_translator/__init__.py
+++ b/yarrrml-translator/yarrrml_translator/__init__.py
@@ -1,8 +1,10 @@
from .constants import *
-from .mapping import add_prefix, add_mapping, add_inverse_prefix, get_non_asserted_mappings, merge_mapping_section_by_key, add_logical_targets
+from .mapping import add_prefix, add_mapping, add_inverse_prefix, get_non_asserted_mappings, merge_mapping_section_by_key
from .source import get_initial_sources, add_source, generate_database_connections, add_table, add_inverse_source
from .subject import add_subject, add_inverse_subject
from .predicateobject import add_predicate_object_maps, add_inverse_pom
+from .target import add_logical_targets
+from .function import add_functions
import rdflib
import ruamel.yaml as yaml
@@ -14,10 +16,10 @@ def translate(yarrrml_data, mapping_format=RML_URI):
rml_mapping = [add_prefix(yarrrml_data)]
rml_mapping.extend(generate_database_connections(yarrrml_data, list_initial_sources))
rml_mapping.extend(add_logical_targets(yarrrml_data))
+ rml_mapping.extend(add_functions(yarrrml_data))
try:
mappings, mapping_format = get_non_asserted_mappings(yarrrml_data, mapping_format)
for mapping in yarrrml_data.get(YARRRML_MAPPINGS):
- print(mapping)
if mapping_format == R2RML_URI:
source_list = add_table(yarrrml_data, mapping, list_initial_sources)
else:
@@ -69,8 +71,8 @@ def inverse_translation(rdf_mapping, mapping_format=RML_URI):
for tm in triples_map:
tm_name = tm.split("/")[-1]
yarrrml_tm = {YARRRML_SOURCE: add_inverse_source(tm, rdf_mapping, mapping_format)}
- yarrrml_tm[YARRRML_SHORTCUT_SUBJECTS], classes = add_inverse_subject(tm, rdf_mapping)
- yarrrml_tm[YARRRML_SHORTCUT_PREDICATEOBJECT] = add_inverse_pom(tm, rdf_mapping, classes, yarrrml_mapping[YARRRML_PREFIXES])
+ yarrrml_tm[YARRRML_SUBJECTS_SHORTCUT], classes = add_inverse_subject(tm, rdf_mapping)
+ yarrrml_tm[YARRRML_PREDICATEOBJECT_SHORTCUT] = add_inverse_pom(tm, rdf_mapping, classes, yarrrml_mapping[YARRRML_PREFIXES])
yarrrml_mapping[YARRRML_MAPPINGS][tm_name] = yarrrml_tm
string_content = yaml.dump(yarrrml_mapping)
diff --git a/yarrrml-translator/yarrrml_translator/constants.py b/yarrrml-translator/yarrrml_translator/constants.py
index 609f3e9..5773722 100644
--- a/yarrrml-translator/yarrrml_translator/constants.py
+++ b/yarrrml-translator/yarrrml_translator/constants.py
@@ -19,6 +19,8 @@
COMPRESSION_URI = 'http://semweb.mmlab.be/ns/rml-compression#'
FORMATS_URI = 'http://www.w3.org/ns/formats/'
VOID_URI = 'http://rdfs.org/ns/void#'
+FNML_URI = 'http://semweb.mmlab.be/ns/fnml#'
+GREL_URI = 'http://users.ugent.be/~bjdmeest/function/grel.ttl#'
RML_PREFIX = '@prefix'
RML_BASE = '@base'
@@ -33,12 +35,23 @@
RML_DATATYPE_MAP = 'rml:datatypeMap'
RML_DATATYPE_MAP_CLASS = 'rml:DatatypeMap'
RML_QUERY = 'rml:query'
+
RML_LOGICAL_TARGET = 'rml:logicalTarget'
RML_LOGICAL_TARGET_CLASS = 'rml:LogicalTarget'
RML_TARGET = 'rml:target'
RML_SERIALIZATION = 'rml:serialization'
RML_COMPRESSION = 'rml:compression'
+RML_EXECUTION = 'fnml:execution'
+RML_EXECUTION_CLASS = 'fnml:Execution'
+RML_RETURN = 'fnml:return'
+RML_FUNCTION = 'fnml:function'
+RML_INPUT = 'fnml:input'
+RML_INPUT_CLASS = 'fnml:Input'
+RML_PARAMETER = 'fnml:parameter'
+RML_VALUE_MAP = 'fnml:valueMap'
+RML_VALUE_MAP_CLASS = 'fnml:ValueMap'
+
STAR_CLASS = 'rml:StarMap'
STAR_NON_ASSERTED_CLASS = 'rml:NonAssertedTriplesMap'
STAR_QUOTED = 'rml:quotedTriplesMap'
@@ -93,7 +106,6 @@
##############################################################################
YARRRML_PREFIXES = 'prefixes'
-YARRRML_MAPPINGS = 'mappings'
YARRRML_SOURCES = 'sources'
YARRRML_SOURCE = 'source'
YARRRML_TABLE = 'table'
@@ -107,35 +119,39 @@
YARRRML_USERNAME = 'username'
YARRRML_PASSWORD = 'password'
-YARRRML_SHORTCUT_SUBJECTS = 's'
+YARRRML_MAPPINGS = 'mappings' # used for mappings in conditions and mappings main key
+YARRRML_MAPPING = 'mapping'
+YARRRRL_MAPPINGS_SHORTCUT = 'm'
+
+YARRRML_SUBJECTS_SHORTCUT = 's'
YARRRML_SUBJECT = 'subject'
YARRRML_SUBJECTS = 'subjects'
YARRRML_GRAPHS = 'graphs'
YARRRML_GRAPH = 'graph'
-YARRRML_SHORTCUT_GRAPH = 'g'
+YARRRML_GRAPH_SHORTCUT = 'g'
YARRRML_PREDICATEOBJECT = 'predicateobjects'
-YARRRML_SHORTCUT_PREDICATEOBJECT = 'po'
+YARRRML_PREDICATEOBJECT_SHORTCUT = 'po'
YARRRML_PREDICATES = 'predicates'
YARRRML_PREDICATE = 'predicate'
-YARRRML_SHORTCUT_PREDICATES = 'p'
+YARRRML_PREDICATES_SHORTCUT = 'p'
YARRRML_OBJECTS = 'objects'
YARRRML_OBJECT = 'objects'
-YARRRML_SHORTCUT_OBJECT = 'o'
+YARRRML_OBJECT_SHORTCUT = 'o'
YARRRML_VALUE = 'value'
-YARRRML_MAPPING = 'mapping'
+YARRRML_VALUE_SHORTCUT = 'v'
YARRRML_DATATYPE = 'datatype'
YARRRML_LANGUAGE = 'language'
YARRRML_CONDITION = 'condition'
-YARRRML_PARAMETERS = 'parameters'
+YARRRML_PARAMETERS = 'parameters' #used for conditions and functions
+YARRRML_PARAMETERS_SHORTCUT = 'pms'
YARRRML_IRI = '~iri'
YARRRML_LANG = '~lang'
-
YARRRML_QUOTED = 'quoted'
YARRRML_NON_ASSERTED = 'quotedNonAsserted'
@@ -143,10 +159,24 @@
YARRRML_SERIALIZATION = 'serialization'
YARRRML_COMPRESSION = 'compression'
+YARRRML_FUNCTION = 'function'
+YARRRML_FUNCTION_SHORTCUT_A = 'fn'
+YARRRML_FUNCTION_SHORTCUT_B = 'f'
+
+YARRRML_PARAMETER = 'parameter'
+YARRRML_PARAMETER_SHORTCUT = 'p'
+
+YARRRML_MAPPING_KEYS = [YARRRML_MAPPINGS, YARRRML_MAPPING, YARRRRL_MAPPINGS_SHORTCUT]
+YARRRML_SUBJECT_KEYS = [YARRRML_SUBJECTS, YARRRML_SUBJECT, YARRRML_SUBJECTS_SHORTCUT]
+YARRRML_POM_KEYS = [YARRRML_PREDICATEOBJECT, YARRRML_PREDICATEOBJECT_SHORTCUT]
+YARRRML_GRAPH_KEYS = [YARRRML_GRAPHS, YARRRML_GRAPH, YARRRML_GRAPH_SHORTCUT]
+YARRRML_PREDICATE_KEYS = [YARRRML_PREDICATES, YARRRML_PREDICATE, YARRRML_PREDICATES_SHORTCUT]
+YARRRML_OBJECT_KEYS = [YARRRML_OBJECTS, YARRRML_OBJECT, YARRRML_OBJECT_SHORTCUT]
+YARRRML_FUNCTION_KEYS = [YARRRML_FUNCTION, YARRRML_FUNCTION_SHORTCUT_A, YARRRML_FUNCTION_SHORTCUT_B]
+YARRRML_PARAMETERS_KEYS = [YARRRML_PARAMETERS, YARRRML_PARAMETERS_SHORTCUT]
+YARRRML_PARAMETER_KEYS = [YARRRML_PARAMETER, YARRRML_PARAMETER_SHORTCUT]
+YARRRML_VALUE_KEYS = [YARRRML_VALUE, YARRRML_VALUE_SHORTCUT]
-##############################################################################
-####################### YARRRML SERIALIZATION FORMATS #####################
-##############################################################################
YARRRML_OUTPUT_FORMAT = {
'jsonld':'JSON-LD',
@@ -174,5 +204,18 @@
'trig':'TriG',
}
+YARRRML_REFERENCE_FORMULATIONS = {
+ 'csv': 'CSV',
+ 'json': 'JSONPath',
+ 'xpath': 'XPath',
+ 'jsonpath': 'JSONPath'
+}
+
+YARRRML_DATABASES_DRIVER = {
+ 'mysql': 'com.mysql.jdbc.Driver',
+ 'postgresql': 'org.postgresql.Driver',
+ 'sqlserver': 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
+}
+
logger = logging.getLogger(__name__)
coloredlogs.install(level='DEBUG', fmt='%(asctime)s,%(msecs)03d | %(levelname)s: %(message)s')
\ No newline at end of file
diff --git a/yarrrml-translator/yarrrml_translator/function.py b/yarrrml-translator/yarrrml_translator/function.py
new file mode 100644
index 0000000..b8b5222
--- /dev/null
+++ b/yarrrml-translator/yarrrml_translator/function.py
@@ -0,0 +1,108 @@
+from .constants import *
+from .termmap import generate_rml_termmap
+
+
+local_id = 0
+def add_functions(yarrrml_data):
+ global local_id
+ functions = []
+ for mapping in yarrrml_data.get(YARRRML_MAPPINGS):
+ local_id = 0
+ mapping_data = yarrrml_data.get(YARRRML_MAPPINGS).get(mapping)
+ add_internal_function(mapping, mapping_data, functions)
+ return functions
+
+def add_internal_function(mapping_id, mapping_data, functions):
+ global local_id
+ keys = mapping_data.keys()
+ for key in keys:
+ if type(mapping_data[key]) is list:
+ for i in range(len(mapping_data[key])):
+ value = mapping_data[key][i]
+ if YARRRML_FUNCTION in value and value[YARRRML_FUNCTION] != "equal":
+ function_id = "function_" + mapping_id
+ old_id = function_id + "_"+ str(local_id)
+ function = generate_function(value, function_id)
+ functions.append(function)
+ mapping_data[key][i][YARRRML_FUNCTION] = old_id
+ local_id += 1 #different functions in the same TM
+ else:
+ if type(value) is list:
+ for v in value:
+ if type(v) is dict:
+ add_internal_function(mapping_id, v, functions)
+ elif type(value) is dict:
+ add_internal_function(mapping_id, value, functions)
+ elif type(mapping_data[key]) is dict:
+ if YARRRML_FUNCTION in mapping_data[key] and mapping_data[key][YARRRML_FUNCTION] != "equal":
+ function_id = "function_" + mapping_id
+ old_id = function_id + "_" + str(local_id)
+ function = generate_function(mapping_data[key], function_id)
+ functions.append(function)
+ mapping_data[key][YARRRML_FUNCTION] = old_id
+ local_id += 1 # different functions in the same TM
+
+def generate_function(function_yarrrml_data, id_function):
+ global local_id
+ function = function_yarrrml_data[YARRRML_FUNCTION]
+ if YARRRML_PARAMETERS in function_yarrrml_data:
+ rml_function = ["<" + id_function +"_"+str(local_id)+"> a " + RML_EXECUTION_CLASS + ";\n\t"+RML_FUNCTION+" "+function+" ; \n"]
+ else:
+ function_yarrrml_data, function_name = split_in_line_function(function)
+ rml_function = ["<" + id_function + "_" + str(
+ local_id) + "> a " + RML_EXECUTION_CLASS + ";\n\t" + RML_FUNCTION + " " + function_name + " ; \n"]
+
+ new_function = None
+ if YARRRML_PARAMETERS in function_yarrrml_data:
+ rml_function.append("\t"+RML_INPUT+"\n")
+ parameters = function_yarrrml_data[YARRRML_PARAMETERS]
+ for param in parameters:
+ rml_function.append("\t\t[\n\t\t\ta "+RML_INPUT_CLASS + ";\n")
+ if type(param) is list:
+ param_extended = {YARRRML_PARAMETER: param[0], YARRRML_VALUE: param[1]}
+ else:
+ param_extended = param
+
+ rml_function.append("\t\t\t"+RML_PARAMETER+" "+param_extended[YARRRML_PARAMETER] + ";\n")
+
+ if YARRRML_VALUE in param_extended:
+ if YARRRML_FUNCTION in param_extended[YARRRML_VALUE]:
+ local_id += 1 # new function definition within another functon
+ rml_function.append("\t\t\t" + RML_VALUE_MAP + "[\n\t\t\t\t" + RML_EXECUTION + " <"+id_function+"_"+str(local_id) +">;\n\t\t\t];\n")
+ new_function = generate_function(param_extended[YARRRML_VALUE],id_function)
+ else:
+ rml_function.append(generate_rml_termmap(RML_VALUE_MAP, RML_VALUE_MAP_CLASS, param_extended[YARRRML_VALUE], "\t\t\t\t"))
+
+ rml_function.append("\t\t],\n")
+
+
+ final_function = "".join(rml_function)[0:-2]+".\n\n"
+ if new_function:
+ final_function += new_function
+
+ return final_function
+
+
+
+def split_in_line_function(function_in_line):
+ parameters = {'parameters':[]}
+ function_name = function_in_line.split("(")[0]
+ function_in_line=function_in_line.replace(function_name, "").replace("(","",1).rsplit(")",1)[0]
+ in_line_params = function_in_line.split(",")
+
+ for param in in_line_params:
+ extended_param = {}
+ param_values = param.split("=",1)
+ extended_param[YARRRML_PARAMETER] = param_values[0].strip()
+ param_value = param_values[1].strip()
+
+ if param_value.startswith("$("):
+ extended_param[YARRRML_VALUE] = param_value
+ else:
+ value, internal_function_name = split_in_line_function(param_value)
+ extended_param[YARRRML_VALUE] = {YARRRML_FUNCTION: internal_function_name, YARRRML_PARAMETERS: value[YARRRML_PARAMETERS]}
+
+ parameters[YARRRML_PARAMETERS].append(extended_param)
+
+
+ return parameters,function_name
\ No newline at end of file
diff --git a/yarrrml-translator/yarrrml_translator/mapping.py b/yarrrml-translator/yarrrml_translator/mapping.py
index a97fea5..3fea88f 100644
--- a/yarrrml-translator/yarrrml_translator/mapping.py
+++ b/yarrrml-translator/yarrrml_translator/mapping.py
@@ -44,6 +44,10 @@ def add_prefix(data):
template.append(RML_PREFIX + " comp: <" + COMPRESSION_URI + ">.\n")
if "void" not in common_prefixes:
template.append(RML_PREFIX + " void: <" + VOID_URI + ">.\n")
+ if "fnml" not in common_prefixes:
+ template.append(RML_PREFIX + " fnml: <" + FNML_URI + ">.\n")
+ if "grel" not in common_prefixes:
+ template.append(RML_PREFIX + " grel: <" + GREL_URI + ">.\n")
if "base" not in common_prefixes:
template.append(RML_BASE + " <" + EXAMPLE_URI + ">.\n")
@@ -78,6 +82,10 @@ def check_common_prefixes(prefix_uri, common_prefixes):
common_prefixes.append("comp")
elif prefix_uri == VOID_URI:
common_prefixes.append("void")
+ elif prefix_uri == FNML_URI:
+ common_prefixes.append("fnml")
+ elif prefix_uri == GREL_URI:
+ common_prefixes.append("grel")
def add_inverse_prefix(rdf_mapping):
@@ -100,107 +108,19 @@ def get_non_asserted_mappings(yarrrml_data, mapping_format):
mapping_format = STAR_URI
elif YARRRML_QUOTED in values:
mapping_format = STAR_URI
- if type(yarrrml_data.get(YARRRML_MAPPINGS).get(mapping).get(key)) is list and key==YARRRML_SHORTCUT_PREDICATEOBJECT:
+ if type(yarrrml_data.get(YARRRML_MAPPINGS).get(mapping).get(key)) is list and key==YARRRML_PREDICATEOBJECT_SHORTCUT:
for value in yarrrml_data.get(YARRRML_MAPPINGS).get(mapping).get(key):
- if type(value) is dict and YARRRML_SHORTCUT_OBJECT in value:
- if YARRRML_NON_ASSERTED in value[YARRRML_SHORTCUT_OBJECT]:
- mappings[value[YARRRML_SHORTCUT_OBJECT][YARRRML_NON_ASSERTED]] = "non_asserted"
+ if type(value) is dict and YARRRML_OBJECT_SHORTCUT in value:
+ if YARRRML_NON_ASSERTED in value[YARRRML_OBJECT_SHORTCUT]:
+ mappings[value[YARRRML_OBJECT_SHORTCUT][YARRRML_NON_ASSERTED]] = "non_asserted"
mapping_format = STAR_URI
- elif YARRRML_QUOTED in value[YARRRML_SHORTCUT_OBJECT]:
+ elif YARRRML_QUOTED in value[YARRRML_OBJECT_SHORTCUT]:
mapping_format = STAR_URI
return mappings, mapping_format
-def add_logical_targets(yarrrml_data):
- logical_targets = []
- if YARRRML_TARGETS in yarrrml_data:
- targets = yarrrml_data.get(YARRRML_TARGETS)
- keys = targets.keys()
- for key in keys:
- logical_targets.extend(generate_logical_target(targets.get(key), key))
- for mapping in yarrrml_data.get(YARRRML_MAPPINGS):
- mapping_data = yarrrml_data.get(YARRRML_MAPPINGS).get(mapping)
- add_internal_logical_target(mapping, mapping_data, logical_targets)
-
- return logical_targets
-
-
-def add_internal_logical_target(mapping_id,mapping_data, internal_targets, local_target_id = 0):
- keys = mapping_data.keys()
- for key in keys:
- if type(mapping_data[key]) is list:
- for i in range(len(mapping_data[key])):
- value = mapping_data[key][i]
- if YARRRML_TARGETS in value:
- target_value=value[YARRRML_TARGETS]
- if type(target_value) is dict or type(target_value) is list:
- logical_target_id = "logical_target_" + mapping_id+"_"+str(local_target_id)
- internal_targets.extend(generate_logical_target(target_value, logical_target_id))
- mapping_data[key][i][YARRRML_TARGETS] = logical_target_id
- local_target_id += 1
- else:
- if type(value) is list:
- for v in value:
- if type(v) is dict:
- add_internal_logical_target(mapping_id, v, internal_targets, local_target_id)
- elif type(value) is dict:
- add_internal_logical_target(mapping_id, value, internal_targets, local_target_id)
- elif YARRRML_TARGETS in mapping_data[key]:
- target_value = mapping_data[key][YARRRML_TARGETS]
- logical_target_id = "logical_target_" + mapping_id + "_" + str(local_target_id)
- internal_targets.extend(generate_logical_target(target_value, logical_target_id))
- mapping_data[key][YARRRML_TARGETS] = logical_target_id
- local_target_id += 1
-
-def generate_logical_target(target_yaml_data, id_target):
- logical_targets = []
- output_type = None
- format = None
- compression = None
- target_yaml_data_list = target_yaml_data
- if (type(target_yaml_data) is list and type(target_yaml_data[0]) is str) or type(target_yaml_data) is dict:
- target_yaml_data_list = [target_yaml_data]
-
- for target_yaml_data in target_yaml_data_list:
- logical_target = ["<" + id_target + "> a " + RML_LOGICAL_TARGET_CLASS + ";\n"]
- if type(target_yaml_data) is list:
- value = target_yaml_data[0].split("~")
- access = value[0]
- if len(value) == 2:
- output_type = value[1]
- if len(target_yaml_data) >= 2:
- format = "formats:" + YARRRML_OUTPUT_FORMAT[target_yaml_data[1]]
- if len(target_yaml_data) == 3:
- compression = "comp:" + target_yaml_data[2]
- else:
- access = target_yaml_data[YARRRML_ACCESS]
- if YARRRML_TYPE in target_yaml_data:
- output_type = target_yaml_data[YARRRML_TYPE]
- if YARRRML_SERIALIZATION in target_yaml_data:
- format = "formats:" + YARRRML_OUTPUT_FORMAT[target_yaml_data[YARRRML_SERIALIZATION]]
- if YARRRML_COMPRESSION in target_yaml_data:
- compression = "comp:" + target_yaml_data[YARRRML_COMPRESSION]
-
- logical_target.append("\t " + RML_TARGET + " [\n\t\t")
-
- if output_type == "sparql":
- logical_target.append("sd:endpoint <" + access + ">;\n\t\tsd:supportedLanguage sd:SPARQL11Update\n\t];\n")
- elif output_type == "dcat":
- logical_target.append("a dcat:Dataset;\n\t\tdcat:dataDump <" + access + ">\n\t];\n")
- else:
- logical_target.append("a void:Dataset;\n\t\tvoid:dataDump <" + access + ">\n\t];\n")
-
- if format:
- logical_target.append("\t " + RML_SERIALIZATION + " " + format + ";")
- else:
- logical_target.append("\t " + RML_SERIALIZATION + " formats:N-Quads;")
-
- if compression:
- logical_target.append("\n\t " + RML_COMPRESSION + " " + compression + ";")
- logical_targets.append("".join(logical_target)[0:-1] + ".\n\n")
- return logical_targets
def merge_mapping_section_by_key(key,yarrrml_list):
output = {key:{}}
for yarrrml_mapping in yarrrml_list:
diff --git a/yarrrml-translator/yarrrml_translator/predicateobject.py b/yarrrml-translator/yarrrml_translator/predicateobject.py
index a73b586..741bb41 100644
--- a/yarrrml-translator/yarrrml_translator/predicateobject.py
+++ b/yarrrml-translator/yarrrml_translator/predicateobject.py
@@ -1,7 +1,7 @@
import rdflib
-from . import *
-from .source import get_initial_sources, add_source
+from .constants import *
+from .source import get_initial_sources, add_source, add_table
from .subject import add_subject
from .termmap import generate_rml_termmap, check_type
@@ -9,28 +9,34 @@
def get_object_access(predicate_object_map):
if YARRRML_OBJECT in predicate_object_map:
object_access = YARRRML_OBJECT
- elif YARRRML_SHORTCUT_OBJECT in predicate_object_map:
- object_access = YARRRML_SHORTCUT_OBJECT
+ elif YARRRML_OBJECT_SHORTCUT in predicate_object_map:
+ object_access = YARRRML_OBJECT_SHORTCUT
+ elif YARRRML_OBJECTS in predicate_object_map:
+ object_access = YARRRML_OBJECTS
else:
- raise Exception("There isn't an object key correctly specify in " + predicate_object_map)
+ logger.error("There isn't a valid object key (object, objects, o) correctly specify in PON " + predicate_object_map)
+ raise Exception("Add or change the key of the object in the indicated POM")
return object_access
def get_predicate_access(predicate_object_map):
if YARRRML_PREDICATES in predicate_object_map:
predicate_access = YARRRML_PREDICATES
- elif YARRRML_SHORTCUT_PREDICATES in predicate_object_map:
- predicate_access = YARRRML_SHORTCUT_PREDICATES
+ elif YARRRML_PREDICATES_SHORTCUT in predicate_object_map:
+ predicate_access = YARRRML_PREDICATES_SHORTCUT
+ elif YARRRML_PREDICATE in predicate_object_map:
+ predicate_access = YARRRML_PREDICATE
else:
- raise Exception("There isn't a predicate key correctly specify in " + predicate_object_map)
+ logger.error("There isn't a valid predicate key (predicate, predicates, p) correctly specify in PON " + predicate_object_map)
+ raise Exception("Add or change the key of the predicate in the indicated POM")
return predicate_access
-def get_predicate_object_access(mapping,predicate_object_map):
+def get_predicate_object_access(mapping, predicate_object_map):
if YARRRML_PREDICATEOBJECT in predicate_object_map:
predicate_object_access = YARRRML_PREDICATEOBJECT
- elif YARRRML_SHORTCUT_PREDICATEOBJECT in predicate_object_map:
- predicate_object_access = YARRRML_SHORTCUT_PREDICATEOBJECT
+ elif YARRRML_PREDICATEOBJECT_SHORTCUT in predicate_object_map:
+ predicate_object_access = YARRRML_PREDICATEOBJECT_SHORTCUT
else:
predicate_object_access = None
logger.warning("The triples map "+mapping+" does not have predicate object maps defined")
@@ -42,8 +48,8 @@ def get_graph_access(predicate_object_map):
graph_access = YARRRML_GRAPHS
elif YARRRML_GRAPH in predicate_object_map:
graph_access = YARRRML_GRAPH
- elif YARRRML_SHORTCUT_GRAPH in predicate_object_map:
- graph_access = YARRRML_SHORTCUT_GRAPH
+ elif YARRRML_GRAPH_SHORTCUT in predicate_object_map:
+ graph_access = YARRRML_GRAPH_SHORTCUT
else:
graph_access = None
return graph_access
@@ -86,8 +92,11 @@ def get_object_list(predicate_object, object_access):
elif YARRRML_TYPE in object:
object_list.append([object[YARRRML_VALUE]+"~"+object[YARRRML_TYPE]])
elif YARRRML_VALUE in object:
- if YARRRML_TARGETS in object:
- object_list.append([object[YARRRML_VALUE], object[YARRRML_TARGETS]])
+ if YARRRML_TARGETS in object or YARRRML_FUNCTION in object:
+ if YARRRML_TARGETS in object:
+ object_list.append([object[YARRRML_VALUE], object[YARRRML_TARGETS]])
+ if YARRRML_FUNCTION in object:
+ object_list.append([object[YARRRML_VALUE], object[YARRRML_FUNCTION]])
else:
object_list.append([object[YARRRML_VALUE]])
else:
@@ -184,7 +193,6 @@ def add_predicate_object(data, mapping, predicate_object, mapping_format=RML_URI
template += generate_rml_termmap(STAR_OBJECT, STAR_CLASS,om, "\t\t\t", mapping_format)
else:
template += ref_mapping(data, mapping, om, YARRRML_QUOTED, STAR_QUOTED, mapping_format)
- # This could be removed
else:
if YARRRML_VALUE in om:
object_value = om.get(YARRRML_VALUE)
@@ -196,6 +204,10 @@ def add_predicate_object(data, mapping, predicate_object, mapping_format=RML_URI
if mapping_format == STAR_URI:
template += generate_rml_termmap(STAR_OBJECT, R2RML_OBJECT_CLASS,
object_value, "\t\t\t", mapping_format)
+ elif YARRRML_FUNCTION in om:
+ template += generate_rml_termmap(STAR_OBJECT, R2RML_OBJECT_CLASS, om[YARRRML_FUNCTION], "\t\t\t", mapping_format)
+ template = template.replace(R2RML_CONSTANT+" "+om[YARRRML_FUNCTION], RML_EXECUTION + " <" + om.get(
+ YARRRML_FUNCTION) + ">")
else:
template += generate_rml_termmap(R2RML_OBJECT, R2RML_OBJECT_CLASS,
object_value, "\t\t\t", mapping_format)
@@ -218,6 +230,8 @@ def add_predicate_object(data, mapping, predicate_object, mapping_format=RML_URI
if YARRRML_TARGETS in om:
template = template[0:len(template) - 5] + "\t\t\t" + RML_LOGICAL_TARGET + " <"+ om.get(YARRRML_TARGETS) + ">\n\t\t];\n"
+
+
for graph in graph_list:
graph_value = graph
if YARRRML_VALUE in graph:
@@ -268,13 +282,15 @@ def ref_mapping(data, mapping, om, yarrrml_key, ref_type_property, mapping_forma
";\n\t\t\t\t" + R2RML_PARENT + " " + parent + ";\n\t\t\t]; \n"
else:
- raise Exception("Error: more than two parameters in join condition in mapping " + mapping)
+ logger.error("Error in reference mapping another mapping in mapping " + mapping)
+ raise Exception("Only two parameters can be indicated (child and parent)")
template += "\t\t];\n"
else:
template += "\n\t\t]\n"
else:
- raise Exception("Error in reference mapping another mapping in mapping " + mapping)
+ logger.error("Error in reference mapping another mapping in mapping " + mapping)
+ raise Exception("Review how is defined the reference to other mappings")
return template
diff --git a/yarrrml-translator/yarrrml_translator/source.py b/yarrrml-translator/yarrrml_translator/source.py
index a39095b..783dc53 100644
--- a/yarrrml-translator/yarrrml_translator/source.py
+++ b/yarrrml-translator/yarrrml_translator/source.py
@@ -86,19 +86,19 @@ def add_source_simplified(mapping, source):
file_path = re.sub("~.*", "", source[0])
reference_formulation = source[0].split('~')[1]
source_extension = file_path.split('.')[1]
- ref_formulation_rml = reference_formulation.replace("jsonpath", "JSONPath").replace("csv", "CSV").replace("xpath",
- "XPath")
+ ref_formulation_rml = YARRRML_REFERENCE_FORMULATIONS[reference_formulation]
+
if switch_in_reference_formulation(reference_formulation) != source_extension:
raise Exception(
"ERROR: mismatch extension and referenceFormulation in source " + source + " in mapping " + mapping)
else:
- if len(source) == 1: # si no tiene iterador
+ if len(source) == 1: # do not have iterator
if source_extension == "csv" or source_extension == "SQL2008":
source_rdf += '"' + file_path + '"' + ";\n" + "\t\t" + RML_REFERENCE_FORMULATION + " ql:" \
+ ref_formulation_rml + "\n" + "\t];\n"
else:
raise Exception("ERROR: source " + source + " in mapping " + mapping + " has no iterator")
- else: # source[1] es el iterador en json y xml
+ else: # source[1] is the iterator for json and xml
source_rdf += "\"" + file_path + "\";\n\t\t" + RML_REFERENCE_FORMULATION + " ql:" \
+ ref_formulation_rml + ";\n\t\t" + RML_ITERATOR + " \"" \
+ source[1] + "\";\n\t];\n"
@@ -114,8 +114,8 @@ def add_source_full(mapping, source):
if YARRRML_REFERENCE_FORMULATION in source:
reference_formulation = str(source.get(YARRRML_REFERENCE_FORMULATION))
format_from_reference = switch_in_reference_formulation(reference_formulation.lower())
- ref_formulation_rml = reference_formulation.replace("jsonpath", "JSONPath").replace("csv", "CSV").replace(
- "xpath","XPath")
+ ref_formulation_rml = YARRRML_REFERENCE_FORMULATIONS[reference_formulation]
+
if extension != format_from_reference or format_from_reference == "ERROR":
raise Exception("ERROR: not referenceFormulation found or mismatch between the format and "
"referenceFormulation in source " + access + "in mapping " + mapping)
@@ -202,12 +202,8 @@ def generate_database_connections(data, list_initial_sources):
if (external and len(sources_ids) > number_external_sources) or not external:
if YARRRML_QUERY in source and YARRRML_ACCESS in source:
db_type = source.get(YARRRML_TYPE)
- if db_type == "mysql":
- driver = "com.mysql.jdbc.Driver"
- elif db_type == "postgresql":
- driver = "org.postgresql.Driver"
- elif db_type == "sqlserver":
- driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+ if db_type in YARRRML_DATABASES_DRIVER:
+ driver = YARRRML_DATABASES_DRIVER[db_type]
else:
driver = None
access = source.get(YARRRML_ACCESS)
diff --git a/yarrrml-translator/yarrrml_translator/subject.py b/yarrrml-translator/yarrrml_translator/subject.py
index ebbfaf1..6cee6ea 100644
--- a/yarrrml-translator/yarrrml_translator/subject.py
+++ b/yarrrml-translator/yarrrml_translator/subject.py
@@ -8,8 +8,8 @@ def add_subject(data, mapping, mapping_format):
rml_subjects = []
only_one = False
- if YARRRML_SHORTCUT_SUBJECTS in data.get(YARRRML_MAPPINGS).get(mapping):
- subject = data.get(YARRRML_MAPPINGS).get(mapping).get(YARRRML_SHORTCUT_SUBJECTS)
+ if YARRRML_SUBJECTS_SHORTCUT in data.get(YARRRML_MAPPINGS).get(mapping):
+ subject = data.get(YARRRML_MAPPINGS).get(mapping).get(YARRRML_SUBJECTS_SHORTCUT)
elif YARRRML_SUBJECTS in data.get(YARRRML_MAPPINGS).get(mapping):
subject = data.get(YARRRML_MAPPINGS).get(mapping).get(YARRRML_SUBJECTS)
elif YARRRML_SUBJECT in data.get(YARRRML_MAPPINGS).get(mapping):
@@ -41,8 +41,15 @@ def add_subject(data, mapping, mapping_format):
subject_value = individual_subject
if YARRRML_VALUE in individual_subject:
subject_value = individual_subject.get(YARRRML_VALUE)
+ elif YARRRML_FUNCTION in individual_subject:
+ subject_value = individual_subject.get(YARRRML_FUNCTION)
+
subject_termmap = generate_rml_termmap(R2RML_SUBJECT, R2RML_SUBJECT_CLASS, subject_value, "\t\t", mapping_format)
+ if YARRRML_FUNCTION in individual_subject:
+ subject_termmap = subject_termmap.replace(R2RML_CONSTANT+" "+subject_value, RML_EXECUTION + " <" + individual_subject.get(
+ YARRRML_FUNCTION) + ">")
+
if YARRRML_TARGETS in individual_subject:
subject_termmap = subject_termmap[0:-3]+"\t"+RML_LOGICAL_TARGET+" <"+individual_subject[YARRRML_TARGETS]+">\n\t];\n"
@@ -52,8 +59,8 @@ def add_subject(data, mapping, mapping_format):
graphs = data.get(YARRRML_MAPPINGS).get(mapping).get(YARRRML_GRAPHS)
elif YARRRML_GRAPH in data.get(YARRRML_MAPPINGS).get(mapping):
graphs = data.get(YARRRML_MAPPINGS).get(mapping).get(YARRRML_GRAPH)
- elif YARRRML_SHORTCUT_GRAPH in data.get(YARRRML_MAPPINGS).get(mapping):
- graphs = data.get(YARRRML_MAPPINGS).get(mapping).get(YARRRML_SHORTCUT_GRAPH)
+ elif YARRRML_GRAPH_SHORTCUT in data.get(YARRRML_MAPPINGS).get(mapping):
+ graphs = data.get(YARRRML_MAPPINGS).get(mapping).get(YARRRML_GRAPH_SHORTCUT)
else:
graphs = []
diff --git a/yarrrml-translator/yarrrml_translator/target.py b/yarrrml-translator/yarrrml_translator/target.py
new file mode 100644
index 0000000..70dd6ee
--- /dev/null
+++ b/yarrrml-translator/yarrrml_translator/target.py
@@ -0,0 +1,91 @@
+from .constants import *
+
+def add_logical_targets(yarrrml_data):
+ logical_targets = []
+ if YARRRML_TARGETS in yarrrml_data:
+ targets = yarrrml_data.get(YARRRML_TARGETS)
+ keys = targets.keys()
+ for key in keys:
+ logical_targets.extend(generate_logical_target(targets.get(key), key))
+
+ for mapping in yarrrml_data.get(YARRRML_MAPPINGS):
+ mapping_data = yarrrml_data.get(YARRRML_MAPPINGS).get(mapping)
+ add_internal_logical_target(mapping, mapping_data, logical_targets)
+
+ return logical_targets
+
+
+def add_internal_logical_target(mapping_id,mapping_data, internal_targets, local_target_id = 0):
+ keys = mapping_data.keys()
+ for key in keys:
+ if type(mapping_data[key]) is list:
+ for i in range(len(mapping_data[key])):
+ value = mapping_data[key][i]
+ if YARRRML_TARGETS in value:
+ target_value=value[YARRRML_TARGETS]
+ if type(target_value) is dict or type(target_value) is list:
+ logical_target_id = "logical_target_" + mapping_id+"_"+str(local_target_id)
+ internal_targets.extend(generate_logical_target(target_value, logical_target_id))
+ mapping_data[key][i][YARRRML_TARGETS] = logical_target_id
+ local_target_id += 1
+ else:
+ if type(value) is list:
+ for v in value:
+ if type(v) is dict:
+ add_internal_logical_target(mapping_id, v, internal_targets, local_target_id)
+ elif type(value) is dict:
+ add_internal_logical_target(mapping_id, value, internal_targets, local_target_id)
+ elif YARRRML_TARGETS in mapping_data[key]:
+ target_value = mapping_data[key][YARRRML_TARGETS]
+ logical_target_id = "logical_target_" + mapping_id + "_" + str(local_target_id)
+ internal_targets.extend(generate_logical_target(target_value, logical_target_id))
+ mapping_data[key][YARRRML_TARGETS] = logical_target_id
+ local_target_id += 1
+
+def generate_logical_target(target_yaml_data, id_target):
+ logical_targets = []
+ output_type = None
+ format = None
+ compression = None
+ target_yaml_data_list = target_yaml_data
+ if (type(target_yaml_data) is list and type(target_yaml_data[0]) is str) or type(target_yaml_data) is dict:
+ target_yaml_data_list = [target_yaml_data]
+
+ for target_yaml_data in target_yaml_data_list:
+ logical_target = ["<" + id_target + "> a " + RML_LOGICAL_TARGET_CLASS + ";\n"]
+ if type(target_yaml_data) is list:
+ value = target_yaml_data[0].split("~")
+ access = value[0]
+ if len(value) == 2:
+ output_type = value[1]
+ if len(target_yaml_data) >= 2:
+ format = "formats:" + YARRRML_OUTPUT_FORMAT[target_yaml_data[1]]
+ if len(target_yaml_data) == 3:
+ compression = "comp:" + target_yaml_data[2]
+ else:
+ access = target_yaml_data[YARRRML_ACCESS]
+ if YARRRML_TYPE in target_yaml_data:
+ output_type = target_yaml_data[YARRRML_TYPE]
+ if YARRRML_SERIALIZATION in target_yaml_data:
+ format = "formats:" + YARRRML_OUTPUT_FORMAT[target_yaml_data[YARRRML_SERIALIZATION]]
+ if YARRRML_COMPRESSION in target_yaml_data:
+ compression = "comp:" + target_yaml_data[YARRRML_COMPRESSION]
+
+ logical_target.append("\t " + RML_TARGET + " [\n\t\t")
+
+ if output_type == "sparql":
+ logical_target.append("sd:endpoint <" + access + ">;\n\t\tsd:supportedLanguage sd:SPARQL11Update\n\t];\n")
+ elif output_type == "dcat":
+ logical_target.append("a dcat:Dataset;\n\t\tdcat:dataDump <" + access + ">\n\t];\n")
+ else:
+ logical_target.append("a void:Dataset;\n\t\tvoid:dataDump <" + access + ">\n\t];\n")
+
+ if format:
+ logical_target.append("\t " + RML_SERIALIZATION + " " + format + ";")
+ else:
+ logical_target.append("\t " + RML_SERIALIZATION + " formats:N-Quads;")
+
+ if compression:
+ logical_target.append("\n\t " + RML_COMPRESSION + " " + compression + ";")
+ logical_targets.append("".join(logical_target)[0:-1] + ".\n\n")
+ return logical_targets
\ No newline at end of file
diff --git a/yarrrml-translator/yarrrml_translator/termmap.py b/yarrrml-translator/yarrrml_translator/termmap.py
index ebfa881..754841f 100644
--- a/yarrrml-translator/yarrrml_translator/termmap.py
+++ b/yarrrml-translator/yarrrml_translator/termmap.py
@@ -1,4 +1,4 @@
-from .import *
+from .constants import *
## return the type of TermMap based on the input text