From fd59a3e1ae51a375f7734d7474d31c40367097d4 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Fri, 7 Jun 2024 14:13:42 +0200 Subject: [PATCH 001/127] target: TargetFactory: support TriG serialization Fixes https://github.com/RMLio/rmlmapper-java/issues/225 --- CHANGELOG.md | 3 + .../be/ugent/rml/target/TargetFactory.java | 1 + .../java/be/ugent/rml/MapperTargetTest.java | 26 +- .../serialization/out-default.trig | 0 .../serialization/out-local-file.trig | 681 ++++++++++++++++++ 5 files changed, 710 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/web-of-things/serialization/out-default.trig create mode 100644 src/test/resources/web-of-things/serialization/out-local-file.trig diff --git a/CHANGELOG.md b/CHANGELOG.md index cb4cecd3..9b4bd2bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Added +- Serialization format TriG is now supported for Logical Targets (fixes GitHub [issue 225](https://github.com/RMLio/rmlmapper-java/issues/225)). + ## [7.0.0] - 2024-06-07 ### Fixed diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index 71f5ff1e..0d4aecf1 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -254,6 +254,7 @@ else if (location.endsWith(".jsonld")) { case NAMESPACES.FORMATS + "N-Quads" -> "nquads"; case NAMESPACES.FORMATS + "JSON-LD" -> "jsonld"; case NAMESPACES.FORMATS + "Turtle" -> "turtle"; + case NAMESPACES.FORMATS + "TriG" -> "trig"; default -> throw new UnsupportedOperationException("Serialization format " + sf + " not implemented!"); }; } diff --git a/src/test/java/be/ugent/rml/MapperTargetTest.java b/src/test/java/be/ugent/rml/MapperTargetTest.java index 2c2db90d..b9125574 100644 --- a/src/test/java/be/ugent/rml/MapperTargetTest.java +++ b/src/test/java/be/ugent/rml/MapperTargetTest.java @@ -197,7 +197,6 @@ public void evaluate_ntriples_serialization() throws Exception { } } - // This method is in comment because it fails: doMapper doesn't support JSON-LD testing @Test public void evaluate_jsonld_serialization() throws Exception { // Create Web API @@ -223,6 +222,31 @@ public void evaluate_jsonld_serialization() throws Exception { } } + @Test + public void evaluate_trig_serialization() throws Exception { + // Create Web API + HttpServer webApi = HttpServer.create(new InetSocketAddress(8000), 0); + webApi.createContext("/trashcans", new MapperWoTTest.TrashCansFileHandler()); + webApi.setExecutor(null); // creates a default executor + webApi.start(); + + String tempMappingPath = replaceSerializationFormatInMappingFile("TriG"); + Map outPaths = new HashMap<>(); + outPaths.put(new NamedNode("http://example.com/rules/#TargetDump"), "./web-of-things/serialization/out-local-file.trig"); + outPaths.put(new NamedNode("rmlmapper://default.store"), "./web-of-things/serialization/out-default.trig"); + doMapping(tempMappingPath, outPaths, "./web-of-things/serialization/private-security-data.ttl"); // file not found exception when using file from serialization instead of logical-target + + webApi.stop(0); + + // Remove temp file + try { + File outputFile = Utils.getFile(tempMappingPath); + assertTrue(outputFile.delete()); + } catch (Exception e) { + logger.warn("Could not delete temporary file {}", tempMappingPath, e); + } + } + @BeforeEach public void intialize() { // Create Fuseki SPARQL endpoint /ds1 diff --git a/src/test/resources/web-of-things/serialization/out-default.trig b/src/test/resources/web-of-things/serialization/out-default.trig new file mode 100644 index 00000000..e69de29b diff --git a/src/test/resources/web-of-things/serialization/out-local-file.trig b/src/test/resources/web-of-things/serialization/out-local-file.trig new file mode 100644 index 00000000..93eced68 --- /dev/null +++ b/src/test/resources/web-of-things/serialization/out-local-file.trig @@ -0,0 +1,681 @@ +@prefix ns0: . + + + ns0:fillingLevel "0.8" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "1" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "1" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.8" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.2" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.8" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.8" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.2" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "1" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "1" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.2" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.2" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.2" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.2" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.4" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.8" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.8" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.2" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.2" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.2" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.8" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.8" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.8" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.8" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0.4" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . + + + ns0:fillingLevel "0" ; + a ns0:Trashcan . From 144f9b4cb1ca3c7174f9453f28ec626996c19020 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Mon, 10 Jun 2024 08:53:20 +0200 Subject: [PATCH 002/127] Executor: fix crash when subject has null XPath expresssions may return null in subjects, do not crash then. Fixes https://github.com/RMLio/rmlmapper-java/issues/236 --- CHANGELOG.md | 6 +- src/main/java/be/ugent/rml/Executor.java | 3 +- src/test/java/be/ugent/rml/MapperXMLTest.java | 5 ++ .../test-cases/RMLTC1035-XML/data.xml | 19 ++++++ .../test-cases/RMLTC1035-XML/mapping.ttl | 63 +++++++++++++++++++ .../test-cases/RMLTC1035-XML/output.nq | 12 ++++ .../test-cases/RMLTC1035-XML/test.xml | 23 +++++++ 7 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 src/test/resources/test-cases/RMLTC1035-XML/data.xml create mode 100644 src/test/resources/test-cases/RMLTC1035-XML/mapping.ttl create mode 100644 src/test/resources/test-cases/RMLTC1035-XML/output.nq create mode 100644 src/test/resources/test-cases/RMLTC1035-XML/test.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b4bd2bd..f4afcb76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Added - Serialization format TriG is now supported for Logical Targets (fixes GitHub [issue 225](https://github.com/RMLio/rmlmapper-java/issues/225)). +### Fixed +- Crash when null is returned in an XPath function for subject generation (fixes GitHub [issue 236](https://github.com/RMLio/rmlmapper-java/issues/236)) + ## [7.0.0] - 2024-06-07 ### Fixed @@ -114,8 +117,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Update dependency to `idlab-functions-java`, fixing [issue #218](https://github.com/RMLio/rmlmapper-java/issues/218) ### Changed -<<<<<<< HEAD -- Dockefile: switched to Eclipse OpenJDK Docker base image because OpenJDK is deprecated +- Dockerfile: switched to Eclipse OpenJDK Docker base image because OpenJDK is deprecated - CI: dropped GitHub release automation - CI: verify if token is valid diff --git a/src/main/java/be/ugent/rml/Executor.java b/src/main/java/be/ugent/rml/Executor.java index 2dd340f6..ba24818c 100644 --- a/src/main/java/be/ugent/rml/Executor.java +++ b/src/main/java/be/ugent/rml/Executor.java @@ -299,7 +299,8 @@ private List getIRIsWithTrueCondition(Record child, Term triple if (Boolean.TRUE.equals(expectedBoolean)) { List subjects = this.getSubject(triplesMap, mapping, parent, i); - iris.addAll(subjects); + if (subjects != null) + iris.addAll(subjects); } else { logger.warn("The used condition with the Parent Triples Map does not return a boolean."); } diff --git a/src/test/java/be/ugent/rml/MapperXMLTest.java b/src/test/java/be/ugent/rml/MapperXMLTest.java index 3489a9a2..1fee6f1b 100644 --- a/src/test/java/be/ugent/rml/MapperXMLTest.java +++ b/src/test/java/be/ugent/rml/MapperXMLTest.java @@ -232,4 +232,9 @@ public void evaluate_1033_XML() { public void evaluate_1034_XML() { doMapping("./test-cases/RMLTC1034-XML/mapping.ttl", "./test-cases/RMLTC1034-XML/output.nq"); } + + @Test + public void evaluate_1035_XML() { + doMapping("./test-cases/RMLTC1035-XML/mapping.ttl", "./test-cases/RMLTC1035-XML/output.nq"); + } } diff --git a/src/test/resources/test-cases/RMLTC1035-XML/data.xml b/src/test/resources/test-cases/RMLTC1035-XML/data.xml new file mode 100644 index 00000000..caf111c5 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1035-XML/data.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/test-cases/RMLTC1035-XML/mapping.ttl b/src/test/resources/test-cases/RMLTC1035-XML/mapping.ttl new file mode 100644 index 00000000..2883d792 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1035-XML/mapping.ttl @@ -0,0 +1,63 @@ +@prefix owl: . +@prefix rdf: . +@prefix rdfs: . +@prefix xsd: . +@prefix rr: . +@prefix rml: . +@prefix ql: . +@prefix ex: . +@prefix org: . +@prefix skos: . +@prefix fnml: . +@prefix fno: . +@prefix idlab-fn: . + +ex:Organizations a rr:TriplesMap; + rml:logicalSource [ + rml:source "test.xml"; + rml:iterator "/Directory/Organization"; + rml:referenceFormulation ql:XPath + ]; + rr:subjectMap [ + rr:template "http://data.example.org/resource/Organization_{ID}"; + rr:class org:Organization + ]; + rr:predicateObjectMap [ + rr:predicate org:name; + rr:objectMap + [ + rml:reference "Name" + ]; + ] ; + rr:predicateObjectMap [ + rr:predicate org:address; + rr:objectMap + [ + rr:parentTriplesMap ex:Addresses ; + rr:joinCondition [ + rr:child "path(.)"; + rr:parent "path(..)"; + ]; + ]; + ] +. + +ex:Addresses a rr:TriplesMap; + rml:logicalSource [ + rml:source "test.xml"; + rml:iterator "/Directory/Organization/Address"; + rml:referenceFormulation ql:XPath + ]; + rr:subjectMap [ + # rr:template "http://data.example.org/resource/Address_{generate-id(.)}"; + rml:reference "if(exists(StreetName)) then 'http://data.example.org/resource/Address_' || generate-id(.) else null"; + rr:class org:Address + ]; + rr:predicateObjectMap [ + rr:predicate org:streetName; + rr:objectMap + [ + rml:reference "StreetName" + ]; + ] ; +. diff --git a/src/test/resources/test-cases/RMLTC1035-XML/output.nq b/src/test/resources/test-cases/RMLTC1035-XML/output.nq new file mode 100644 index 00000000..4a0b7852 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1035-XML/output.nq @@ -0,0 +1,12 @@ + . + "99 Maine St" . + . + "ABC FastCo Lane" . + . + . + "ABC FastCo" . + . + "XYZ Inc." . + . + . + "MNO Ltd" . diff --git a/src/test/resources/test-cases/RMLTC1035-XML/test.xml b/src/test/resources/test-cases/RMLTC1035-XML/test.xml new file mode 100644 index 00000000..9810672d --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1035-XML/test.xml @@ -0,0 +1,23 @@ + + + 123 + ABC FastCo +
+ ABC FastCo Lane +
+
+ + 456 + XYZ Inc. +
+ XYZ Metro +
+
+ + 789 + MNO Ltd +
+ 99 Maine St +
+
+
From 9e9a1dacaefbea096fc13be608750c783bd83aff Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 1 Aug 2024 10:34:48 +0200 Subject: [PATCH 003/127] MapperCSVTest: add RMLTC1044-CSV Requires DataIO patch to handle new lines in quoted CSV string. --- CHANGELOG.md | 1 + src/test/java/be/ugent/rml/MapperCSVTest.java | 5 +++ .../test-cases/RMLTC1044-CSV/calendar.csv | 4 ++ .../test-cases/RMLTC1044-CSV/input.csv | 6 +++ .../test-cases/RMLTC1044-CSV/mapping.ttl | 39 +++++++++++++++++++ .../test-cases/RMLTC1044-CSV/output.nq | 1 + 6 files changed, 56 insertions(+) create mode 100644 src/test/resources/test-cases/RMLTC1044-CSV/calendar.csv create mode 100644 src/test/resources/test-cases/RMLTC1044-CSV/input.csv create mode 100644 src/test/resources/test-cases/RMLTC1044-CSV/mapping.ttl create mode 100644 src/test/resources/test-cases/RMLTC1044-CSV/output.nq diff --git a/CHANGELOG.md b/CHANGELOG.md index f4afcb76..9b50d924 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - Crash when null is returned in an XPath function for subject generation (fixes GitHub [issue 236](https://github.com/RMLio/rmlmapper-java/issues/236)) +- `DATAIO_NULL` value occuring in RDF output when CSV quoted string has newline character in it (fixes GitHub [issue 238](https://github.com/RMLio/rmlmapper-java/issues/238)) ## [7.0.0] - 2024-06-07 diff --git a/src/test/java/be/ugent/rml/MapperCSVTest.java b/src/test/java/be/ugent/rml/MapperCSVTest.java index 23530cdd..bae4952f 100644 --- a/src/test/java/be/ugent/rml/MapperCSVTest.java +++ b/src/test/java/be/ugent/rml/MapperCSVTest.java @@ -355,4 +355,9 @@ public void evaluate_1043_CSV() { Assertions.fail(); } } + + @Test + public void evaluate_1044_CSV() { + doMapping("test-cases/RMLTC1044-CSV/mapping.ttl", "test-cases/RMLTC1044-CSV/output.nq"); + } } diff --git a/src/test/resources/test-cases/RMLTC1044-CSV/calendar.csv b/src/test/resources/test-cases/RMLTC1044-CSV/calendar.csv new file mode 100644 index 00000000..fa4e440d --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1044-CSV/calendar.csv @@ -0,0 +1,4 @@ +1,true,true +2,true,false +3,false,true +4,false,false diff --git a/src/test/resources/test-cases/RMLTC1044-CSV/input.csv b/src/test/resources/test-cases/RMLTC1044-CSV/input.csv new file mode 100644 index 00000000..a537e5f7 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1044-CSV/input.csv @@ -0,0 +1,6 @@ +role_id,role_title_name,requisition_id,role_description + +9,"Vice President, N/A Strategic Accounts",9,"VP STRATEGIC ACCOUNTS, NA + +Beamery +***truncated***" \ No newline at end of file diff --git a/src/test/resources/test-cases/RMLTC1044-CSV/mapping.ttl b/src/test/resources/test-cases/RMLTC1044-CSV/mapping.ttl new file mode 100644 index 00000000..a4e259fc --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1044-CSV/mapping.ttl @@ -0,0 +1,39 @@ +@prefix rr: . +@prefix rdf: . +@prefix rdfs: . +@prefix fnml: . +@prefix fno: . +@prefix d2rq: . +@prefix void: . +@prefix dc: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix : . +@prefix skos: . +@prefix smth: . + +:rules_000 a void:Dataset. +:source_000 a rml:LogicalSource; + rdfs:label "smth"; + rml:source "input.csv"; + rml:iterator "$"; + rml:referenceFormulation ql:CSV. +:rules_000 void:exampleResource :map_Concept_000. +:map_Concept_000 rml:logicalSource :source_000; + a rr:TriplesMap; + rdfs:label "Concept". +:s_000 a rr:SubjectMap. +:map_Concept_000 rr:subjectMap :s_000. +:s_000 rr:template "http://example.org/{role_id}#this". +:pom_000 a rr:PredicateObjectMap. +:map_Concept_000 rr:predicateObjectMap :pom_000. +:pm_000 a rr:PredicateMap. +:pom_000 rr:predicateMap :pm_000. +:pm_000 rr:constant skos:definition. +:pom_000 rr:objectMap :om_000. +:om_000 a rr:ObjectMap; + rml:reference "role_description"; + rr:termType rr:Literal; + rml:languageMap :language_000. +:language_000 rr:constant "en". diff --git a/src/test/resources/test-cases/RMLTC1044-CSV/output.nq b/src/test/resources/test-cases/RMLTC1044-CSV/output.nq new file mode 100644 index 00000000..6f7ff069 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1044-CSV/output.nq @@ -0,0 +1 @@ + "VP STRATEGIC ACCOUNTS, NA\n\nBeamery \n***truncated***"@en . From baa7bdbbf2b15cd872d857139e9777dc61eb2d69 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Tue, 13 Aug 2024 09:05:20 +0200 Subject: [PATCH 004/127] Update DataIO dependency to 1.3.1 to address github issue 238 --- CHANGELOG.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b50d924..5244b032 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - Crash when null is returned in an XPath function for subject generation (fixes GitHub [issue 236](https://github.com/RMLio/rmlmapper-java/issues/236)) -- `DATAIO_NULL` value occuring in RDF output when CSV quoted string has newline character in it (fixes GitHub [issue 238](https://github.com/RMLio/rmlmapper-java/issues/238)) +- Update to DataIO 1.3.1: `DATAIO_NULL` value occurring in RDF output when CSV quoted string has newline character in it (fixes GitHub [issue 238](https://github.com/RMLio/rmlmapper-java/issues/238)) ## [7.0.0] - 2024-06-07 diff --git a/pom.xml b/pom.xml index 7d0a5708..184a46c5 100644 --- a/pom.xml +++ b/pom.xml @@ -291,7 +291,7 @@ be.ugent.idlab.knows dataio - 1.3.0 + 1.3.1 From 8ed869c392925ba9f524c44b01a0fe96342037e2 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Tue, 13 Aug 2024 10:00:29 +0200 Subject: [PATCH 005/127] Remove newlines from R2RML_TAG_NAME variable --- .gitlab-ci.yml | 1 + CHANGELOG.md | 1 + 2 files changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0dfab496..ba64f6b2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -217,6 +217,7 @@ R2RML Test Report: # Variables - R2RML_TAG_NAME=$(git tag -l "v*" --sort=-creatordate | head -n1 || echo "$CI_COMMIT_REF_NAME") - (if [ "$R2RML_TAG_NAME" == "$CI_COMMIT_REF_NAME" ]; then echo "$CI_COMMIT_REF_NAME"; else R2RML_TAG_NAME=$(echo "$R2RML_TAG_NAME" | cut -c2-); fi) + - R2RML_TAG_NAME=$(echo "$R2RML_TAG_NAME" | tr -d '\n') - TODAY=$(date +"%Y-%m-%d") # Build RMLMapper jar diff --git a/CHANGELOG.md b/CHANGELOG.md index 5244b032..db45ea4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - Crash when null is returned in an XPath function for subject generation (fixes GitHub [issue 236](https://github.com/RMLio/rmlmapper-java/issues/236)) - Update to DataIO 1.3.1: `DATAIO_NULL` value occurring in RDF output when CSV quoted string has newline character in it (fixes GitHub [issue 238](https://github.com/RMLio/rmlmapper-java/issues/238)) +- RML Test report script: remove newlines from R2RML targ name ## [7.0.0] - 2024-06-07 From 6af1f74b1ea2502db7170b03d7c4706c650e29a1 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Tue, 13 Aug 2024 08:29:25 +0000 Subject: [PATCH 006/127] CHANGELOG: release v7.1.0 --- CHANGELOG.md | 3 +++ buildNumber.properties | 4 ++-- pom.xml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db45ea4a..7010eb79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [7.1.0] - 2024-08-13 + ### Added - Serialization format TriG is now supported for Logical Targets (fixes GitHub [issue 225](https://github.com/RMLio/rmlmapper-java/issues/225)). @@ -737,6 +739,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[7.1.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.0.0...v7.1.0 [7.0.0]: https://github.com/RMLio/rmlmapper-java/compare/v6.5.1...v7.0.0 [6.5.1]: https://github.com/RMLio/rmlmapper-java/compare/v6.5.0...v6.5.1 [6.5.0]: https://github.com/RMLio/rmlmapper-java/compare/v6.3.0...v6.5.0 diff --git a/buildNumber.properties b/buildNumber.properties index c41a835d..7871fed4 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,3 @@ #maven.buildNumber.plugin properties file -#Fri Jun 07 09:38:54 GMT 2024 -buildNumber0=372 +#Tue Aug 13 08:29:04 GMT 2024 +buildNumber0=373 diff --git a/pom.xml b/pom.xml index 184a46c5..b379c8bc 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 7.0.0 + 7.1.0 The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. From d4bcf6f092f01464e37999968f99c0f202e8ce0b Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 19 Sep 2024 11:37:02 +0200 Subject: [PATCH 007/127] Update dependency on idlab-functions-java to fix stateful functions bug. --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7010eb79..dcb76721 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Fixed +- Updated idlab-functions-java to 1.3.3 to use correct state path in stateful functions when `ifState` environment variable is set. + ## [7.1.0] - 2024-08-13 ### Added diff --git a/pom.xml b/pom.xml index b379c8bc..a13886d9 100644 --- a/pom.xml +++ b/pom.xml @@ -286,7 +286,7 @@ be.ugent.idlab.knows idlab-functions-java - 1.3.2 + 1.3.3 be.ugent.idlab.knows From 0418573928ad37efc83c8b96435ac1e12d155123 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 19 Sep 2024 13:28:01 +0200 Subject: [PATCH 008/127] CI: use local script for release Token step removed as all pushes happen locally. --- .gitlab-ci.yml | 113 ------------------------------------------------- CHANGELOG.md | 3 ++ release.sh | 48 +++++++++++++++++++++ 3 files changed, 51 insertions(+), 113 deletions(-) create mode 100755 release.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ba64f6b2..bb7fe81e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,10 +10,6 @@ include: - project: 'rml/util/ci-templates' ref: main file: 'CHANGELOG.gitlab-ci.yml' - # Make sure the repository token is always valid - - project: 'rml/util/ci-templates' - ref: main - file: 'Token.gitlab-ci.yml' # Push a Docker Image to Docker Hub on new tags - project: 'rml/util/ci-templates' ref: main @@ -82,115 +78,6 @@ General: - master - development -############################### -# # -# Automated Releases # -# # -############################### - -# Bump version, create changelog, commit changes to master -# Only happens when manually clicked in the CI pipeline -# Thanks to: https://www.benjaminrancourt.ca/how-to-push-to-a-git-repository-from-a-gitlab-ci-pipeline -# Description -# This script allows to store the artefacts of a step into the current -# repository, to improve the efficiency of the next build process. - -# Set up this script -# 1. Create a new personal access token (https://gitlab.com/-/profile/personal_access_tokens) -# with the following scopes: -# - read_repository -# - write_repository -# 2. Inside Settings -> CI / CD -> Variables, create the following variables: -# -# GITLAB_TOKEN Personal access token previously created. XGE2-k445hd5fbs94v9d -# (masked) -# GITLAB_USERNAME Username associated with the personal access token. ranb2002 -# COMMIT_MESSAGE Commit message Automatic update from the weekly schedule - -# Other variables used by this script -# The following variables are defined automatically by GitLab CI. Thus, you -# don't need to override them. -# -# CI_COMMIT_SHA Commit SHA, to use a unique directory name. e46f153dd47ce5f3ca8c56be3fb5d55039853655 -# CI_DEFAULT_BRANCH Default branch. main -# CI_PROJECT_PATH Current project path. ranb2002/benjaminrancourt.ca -# CI_SERVER_HOST Hostname of the current GitLab instance. gitlab.com -# GITLAB_USER_EMAIL Email of the user used to commit the changes to the ranb2002@gitlab.com -# secondary repository. -# GITLAB_USER_NAME User name of the user used to commit the changes to Benjamin Rancourt -# the secondary repository. -# -Create Release: - image: - entrypoint: [''] - name: alpine/git:${GIT_VERSION} - pull_policy: if-not-present - stage: release - before_script: - # Dependencies - - apk add maven java-jdk - # Clone the repository via HTTPS inside a new directory - - git clone "https://${GITLAB_USERNAME}:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git" "${CI_COMMIT_SHA}" - - # Set the displayed user with the commits that are about to be made - - git config --global user.email "${GIT_USER_EMAIL:-$GITLAB_USER_EMAIL}" - - git config --global user.name "${GIT_USER_NAME:-$GITLAB_USER_NAME}" - script: - # Using before_script would override .git:push template - # User has to set the RELEASE_TAG_NAME variable - - if [ -z "$RELEASE_TAG_NAME" ]; then exit 1; else echo "Creating release v$RELEASE_TAG_NAME"; fi - # Install dependencies - - apk add nodejs npm - - npm install -g changefrog - - # Update pom.xml - - head -n6 pom.xml | sed "//s/>.*$RELEASE_TAG_NAME pom_updated.xml - - tail -n +7 pom.xml >> pom_updated.xml - - mv pom_updated.xml pom.xml - # Update changelog. Changefrog does not like vX.X.X so drop 'v' - - changefrog -n "$RELEASE_TAG_NAME" - # Build a Jar - - mvn install -DskipTests=true - # Stage changes for commit to master - - cp -u pom.xml "${CI_COMMIT_SHA}/pom.xml" - - cp -u CHANGELOG.md "${CI_COMMIT_SHA}/CHANGELOG.md" - - cp -u buildNumber.properties "${CI_COMMIT_SHA}/buildNumber.properties" - after_script: - # Go to the new directory - - cd "${CI_COMMIT_SHA}" - - # Add all generated files to Git - - git add . - - |- - # Check if we have modifications to commit - CHANGES=$(git status --porcelain | wc -l) - - if [ "$CHANGES" -gt "0" ]; then - # Show the status of files that are about to be created, updated or deleted - git diff --cached --shortstat - - # Commit all changes - COMMIT_MESSAGE="CHANGELOG: release v$RELEASE_TAG_NAME" - echo "Commit message: ${COMMIT_MESSAGE}" - git commit -m "${COMMIT_MESSAGE}" - - # Create git tag - git tag "v$RELEASE_TAG_NAME" - - # Update the repository and make sure to skip the pipeline create for this commit - git push origin "${CI_DEFAULT_BRANCH}" - # Push new tags and trigger the pipeline since we're deploying - git push --tags origin "${CI_DEFAULT_BRANCH}" - - # Also release on the master branch - git checkout master - git rebase "${CI_DEFAULT_BRANCH}" - git push origin master - fi - when: manual - only: - - development - # Generate R2RML test report and attach it as a artifact. # Manual: make a MR to the rml.io website R2RML Test Report: diff --git a/CHANGELOG.md b/CHANGELOG.md index dcb76721..e80e853c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - Updated idlab-functions-java to 1.3.3 to use correct state path in stateful functions when `ifState` environment variable is set. +### Changed +- CI: use local script for release + ## [7.1.0] - 2024-08-13 ### Added diff --git a/release.sh b/release.sh new file mode 100755 index 00000000..577648dc --- /dev/null +++ b/release.sh @@ -0,0 +1,48 @@ +#!/bin/bash +set -e + +TAG=$1 +DEV_BRANCH="development" +RELEASE_BRANCH="master" + +if [ -z "$1" ]; then + echo "Supply release tag as 'X.Y.Z'. For example: ./release.sh 1.0.0" + exit 1 +fi + +# Dependencies and branch +echo "Installing dependencies and branch..." + +if ! changefrog --help > /dev/null; then + npm install -g changefrog > /dev/null +fi +git checkout "$DEV_BRANCH" + +# Update NPM package +echo "Updating NPM package release" +npm config set git-tag-version false +npm version "$TAG" > /dev/null + +# Update CHANGELOG.md +echo "Updating CHANGELOG.md" +changefrog -n "$TAG" > /dev/null + +# Create release commit +echo "Creating git commit and tag" +git add . +git commit -m "release v$TAG" +git tag "v$TAG" + +# Add release commit to master branch +echo "Rebasing $DEV_BRANCH upon $RELEASE_BRANCH" +git checkout "$RELEASE_BRANCH" +git rebase "$DEV_BRANCH" + +# Push to branches +echo "Pushing branches..." +git push origin "$DEV_BRANCH" +git push origin "$RELEASE_BRANCH" +git push --tags origin "$RELEASE_BRANCH" +git checkout "$DEV_BRANCH" + +echo "Done!" From 6b0c61d851602278145f22513f8e4d0f67261db7 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 19 Sep 2024 15:57:11 +0200 Subject: [PATCH 009/127] release v7.1.1 --- CHANGELOG.md | 3 +++ release.sh | 5 ----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e80e853c..d75790d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [7.1.1] - 2024-09-19 + ### Fixed - Updated idlab-functions-java to 1.3.3 to use correct state path in stateful functions when `ifState` environment variable is set. @@ -745,6 +747,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[7.1.1]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.0...v7.1.1 [7.1.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.0.0...v7.1.0 [7.0.0]: https://github.com/RMLio/rmlmapper-java/compare/v6.5.1...v7.0.0 [6.5.1]: https://github.com/RMLio/rmlmapper-java/compare/v6.5.0...v6.5.1 diff --git a/release.sh b/release.sh index 577648dc..64e40e92 100755 --- a/release.sh +++ b/release.sh @@ -18,11 +18,6 @@ if ! changefrog --help > /dev/null; then fi git checkout "$DEV_BRANCH" -# Update NPM package -echo "Updating NPM package release" -npm config set git-tag-version false -npm version "$TAG" > /dev/null - # Update CHANGELOG.md echo "Updating CHANGELOG.md" changefrog -n "$TAG" > /dev/null From cd5d57c0ccc0af8e7179a73834e13c25c8a6b3f6 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 19 Sep 2024 16:21:25 +0200 Subject: [PATCH 010/127] Fix release script to also update pom.xml --- CHANGELOG.md | 3 +++ release.sh | 3 +++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d75790d8..ca8d5000 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Fixed +- `release.sh` now also updates `pom.xml` with the given tag. + ## [7.1.1] - 2024-09-19 ### Fixed diff --git a/release.sh b/release.sh index 64e40e92..fb082c38 100755 --- a/release.sh +++ b/release.sh @@ -22,6 +22,9 @@ git checkout "$DEV_BRANCH" echo "Updating CHANGELOG.md" changefrog -n "$TAG" > /dev/null +# Update project version in pom.xml +mvn versions:set -DnewVersion=$TAG + # Create release commit echo "Creating git commit and tag" git add . From 72c6a636d7f7bd9e09dc0028f2ccb7b26b76c32e Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 19 Sep 2024 16:22:22 +0200 Subject: [PATCH 011/127] release v7.1.2 --- CHANGELOG.md | 3 + pom.xml | 2 +- pom.xml.versionsBackup | 436 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 440 insertions(+), 1 deletion(-) create mode 100644 pom.xml.versionsBackup diff --git a/CHANGELOG.md b/CHANGELOG.md index ca8d5000..d50e269a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [7.1.2] - 2024-09-19 + ### Fixed - `release.sh` now also updates `pom.xml` with the given tag. @@ -750,6 +752,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[7.1.2]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.1...v7.1.2 [7.1.1]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.0...v7.1.1 [7.1.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.0.0...v7.1.0 [7.0.0]: https://github.com/RMLio/rmlmapper-java/compare/v6.5.1...v7.0.0 diff --git a/pom.xml b/pom.xml index a13886d9..a30ccd0d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 7.1.0 + 7.1.2 The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. diff --git a/pom.xml.versionsBackup b/pom.xml.versionsBackup new file mode 100644 index 00000000..a13886d9 --- /dev/null +++ b/pom.xml.versionsBackup @@ -0,0 +1,436 @@ + + 4.0.0 + be.ugent.rml + rmlmapper + RMLMapper + 7.1.0 + + The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. + + https://github.com/RMLio/rmlmapper-java + + + The MIT License + https://raw.githubusercontent.com/RMLio/rmlmapper-java/master/LICENSE + repo + + + + + pheyvaer + Pieter Heyvaert + pieter.heyvaert@ugent.be + + + bjdmeest + Ben De Meester + ben.demeester@ugent.be + + + andimou + Anastasia Dimou + anastasia.dimou@ugent.be + + + + + UTF-8 + 5.10.0 + 17 + 17 + 4.9.0 + 1.18.3 + + + + scm:git:ssh://git@github.com:RMLio/rmlmapper-java.git + https://github.com/RMLio/rmlmapper-java + + + + + repo.maven.apache.org + https://repo.maven.apache.org/maven2/ + + + jitpack.io + https://jitpack.io + + + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + + + + no-buildnumber + + 0 + + + + + org.codehaus.mojo + buildnumber-maven-plugin + 1.4 + + + buildnumber-generation + none + + + + + + + + release + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.4.1 + + 8 + + + + attach-javadocs + + jar + + + public + false + none + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + + + + + + + ch.qos.logback + logback-classic + 1.4.14 + + + org.eclipse.rdf4j + rdf4j-client + 4.3.8 + pom + + + org.mapdb + * + + + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-params + ${junit.version} + test + + + org.junit.vintage + junit-vintage-engine + ${junit.version} + test + + + com.jayway.jsonpath + json-path + 2.9.0 + runtime + + + + net.minidev + json-smart + 2.5.0 + + + javax.xml.parsers + jaxp-api + 1.4.5 + + + com.mysql + mysql-connector-j + 8.2.0 + provided + + + org.postgresql + postgresql + 42.6.0 + provided + + + + com.microsoft.sqlserver + mssql-jdbc + 12.4.2.jre11 + provided + + + com.oracle.database.jdbc + ojdbc11 + 23.3.0.23.09 + provided + + + com.github.tomakehurst + wiremock-jre8 + 2.35.1 + test + + + commons-fileupload + commons-fileupload + + + + + org.apache.jena + jena-fuseki-main + ${jena.version} + test + + + + org.rdfhdt + hdt-java-core + 3.0.10 + + + org.apache.jena + * + + + junit + * + + + + + be.ugent.idlab.knows + function-agent-java + 1.2.0 + + + org.apache.jena + * + + + + + com.github.fnoio + grel-functions-java + v0.9.1 + + + be.ugent.idlab.knows + idlab-functions-java + 1.3.3 + + + be.ugent.idlab.knows + dataio + 1.3.1 + + + + org.testcontainers + postgresql + ${testcontainers.version} + test + + + org.testcontainers + mysql + ${testcontainers.version} + test + + + org.testcontainers + mssqlserver + ${testcontainers.version} + test + + + org.testcontainers + oracle-xe + ${testcontainers.version} + test + + + org.testcontainers + jdbc + ${testcontainers.version} + test + + + org.testcontainers + junit-jupiter + ${testcontainers.version} + test + + + + + src/main/java + src/test/java + ${project.artifactId}-${project.version}-r${buildNumber} + + + org.apache.maven.plugins + maven-compiler-plugin + + ${maven.compiler.source} + ${maven.compiler.source} + + 3.8.1 + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + true + r${buildNumber}-all + + + be.ugent.rml.cli.Main + + + + + false + + + + + *:* + + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + make-assembly + package + + shade + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.2 + + true + false + 1 + false + + + + + + org.codehaus.mojo + buildnumber-maven-plugin + 1.4 + + + buildnumber-generation + validate + + create + + + + + {0,number} + + buildNumber0 + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.13 + true + + ossrh + https://oss.sonatype.org/ + true + + + + + From c93379a24a0232b80297c941343bd75bd00ed303 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 26 Sep 2024 13:50:17 +0200 Subject: [PATCH 012/127] RMLConverterNew: replace namespaces as well during conversion Drop old namespaces and replace them with the new RML namespace after converting. --- CHANGELOG.md | 4 ++++ .../be/ugent/rml/conformer/RMLConverterNew.java | 9 +++++++-- src/main/java/be/ugent/rml/store/QuadStore.java | 17 +++++++++++++++++ .../java/be/ugent/rml/store/RDF4JStore.java | 12 ++++++++++++ .../be/ugent/rml/store/SimpleQuadStore.java | 10 ++++++++++ 5 files changed, 50 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d50e269a..8890ebe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Added +- CLI option `--convert-mapping` to convert your existing R2RML and older RML mappings +to the latest version by the W3C Community Group. + ## [7.1.2] - 2024-09-19 ### Fixed diff --git a/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java b/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java index 51827132..0236dde8 100644 --- a/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java +++ b/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java @@ -124,7 +124,7 @@ private static void processTableName(Quad tableName, QuadStore store) { /** * Replace a logical table quad with a proper logical source - * @param quad + * @param logicalTableQuad * @param quadStore */ private void processLogicalTable(Quad logicalTableQuad, QuadStore quadStore) { @@ -283,6 +283,12 @@ public void convert(Map mappingOptions) throws Exception { this.store.renameAllObjects(new NamedNode(old), new NamedNode(_new)); } + /* Replace namespaces */ + this.store.removeNameSpace("rml"); + this.store.removeNameSpace("rr"); + this.store.removeNameSpace("ql"); + this.store.addNameSpace("rml", "http://w3id.org/rml/"); + dropObsolete(); } @@ -301,7 +307,6 @@ private void processSources(Quad source, QuadStore store) { private void processQueries(Quad query, QuadStore store) throws Exception { Term source = store.getQuad(query.getSubject(), new NamedNode(RML2 + "source"), null).getObject(); - System.out.println("processQueries: " + source.getValue()); if (store.contains(source, new NamedNode(SD + "resultFormat"), null)) { Term supportedLanguage = store.getQuad(source, new NamedNode(SD + "resultFormat"), null).getObject(); store.addQuad(query.getSubject(), new NamedNode(RML2 + "referenceFormulation"), supportedLanguage); diff --git a/src/main/java/be/ugent/rml/store/QuadStore.java b/src/main/java/be/ugent/rml/store/QuadStore.java index 9eabac6b..66187921 100644 --- a/src/main/java/be/ugent/rml/store/QuadStore.java +++ b/src/main/java/be/ugent/rml/store/QuadStore.java @@ -85,6 +85,23 @@ public abstract class QuadStore { */ public abstract void copyNameSpaces(QuadStore store); + /** + * Add namespace to store. + * TODO define general Namespace class to use between QuadStore instances + * + * @param prefix String with the prefix of the namespace. + * @param IRI String with the IRI of the namespace. + */ + public abstract void addNameSpace(String prefix, String IRI); + + /** + * Remove namespace from store by prefix. + * TODO define general Namespace class to use between QuadStore instances + * + * @param prefix String with the prefix of the namespace. + */ + public abstract void removeNameSpace(String prefix); + /** * True if RDF quads present is 0 * diff --git a/src/main/java/be/ugent/rml/store/RDF4JStore.java b/src/main/java/be/ugent/rml/store/RDF4JStore.java index cbff34f1..3b4987b4 100644 --- a/src/main/java/be/ugent/rml/store/RDF4JStore.java +++ b/src/main/java/be/ugent/rml/store/RDF4JStore.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -120,6 +121,17 @@ public void copyNameSpaces(QuadStore store) { } } + @Override + public void addNameSpace(String prefix, String IRI) { + this.getModel().getNamespaces().add(new SimpleNamespace(prefix, IRI)); + } + + @Override + public void removeNameSpace(String prefix) { + Set namespaces = this.getModel().getNamespaces(); + namespaces.removeIf(namespace -> namespace.getPrefix().equals(prefix)); + } + @Override public void read(InputStream is, String base, RDFFormat format) throws Exception { if (base == null) { diff --git a/src/main/java/be/ugent/rml/store/SimpleQuadStore.java b/src/main/java/be/ugent/rml/store/SimpleQuadStore.java index 7a621703..ef651320 100644 --- a/src/main/java/be/ugent/rml/store/SimpleQuadStore.java +++ b/src/main/java/be/ugent/rml/store/SimpleQuadStore.java @@ -82,6 +82,16 @@ public void copyNameSpaces(QuadStore store) { // Namespace passing is not needed for .nquads and .hdt } + @Override + public void addNameSpace(String prefix, String IRI) { + // Namespace passing is not needed for .nquads and .hdt + } + + @Override + public void removeNameSpace(String prefix) { + // Namespace passing is not needed for .nquads and .hdt + } + @Override public boolean isEmpty() { return quads.isEmpty(); From 6cf45bf3c29a2c59fab2f2ab22a724d1aa9c3827 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 26 Sep 2024 13:50:57 +0200 Subject: [PATCH 013/127] CLI: add --convert-mapping option Allow converting old R2RML and RML mappings to the new RML specification without executing the mapping. --- README.md | 3 +++ src/main/java/be/ugent/rml/cli/Main.java | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/README.md b/README.md index 357eefb0..143ad410 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,9 @@ options: -b,--base-iri Base IRI used to expand relative IRIs in generated terms in the output. -c,--configfile path to configuration file + --convert-mapping Only convert the mapping to the + latest RML specification by the W3C + Community Group -d,--duplicates remove duplicates in the HDT, N-Triples, or N-Quads output --disable-automatic-eof-marker Setting this option assumes input diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index 2c641205..a4a65e04 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -64,6 +64,7 @@ public static void run(String[] args) throws Exception { */ public static void run(String[] args, String basePath) throws Exception { Options options = new Options(); + boolean onlyConvertMapping = false; Option mappingdocOption = Option.builder("m") .longOpt("mappingfile") .hasArg() @@ -156,6 +157,10 @@ public static void run(String[] args, String basePath) throws Exception { .desc("Setting this option assumes input data has a kind of End-of-File marker. " + "Don't use unless you're absolutely sure what you're doing!") .build(); + Option convertMapping = Option.builder() + .longOpt("convert-mapping") + .desc("Only convert the mapping to the latest RML specification by the W3C Community Group") + .build(); options.addOption(mappingdocOption); options.addOption(privateSecurityDataOption); @@ -175,6 +180,7 @@ public static void run(String[] args, String basePath) throws Exception { options.addOption(strictModeOption); options.addOption(baseIriOption); options.addOption(provideOwnEOFMarkerOption); + options.addOption(convertMapping); CommandLineParser parser = new DefaultParser(); try { @@ -201,6 +207,10 @@ public static void run(String[] args, String basePath) throws Exception { setLoggerLevel(Level.ERROR); } + if (checkOptionPresence(convertMapping, lineArgs, configFile)) { + onlyConvertMapping = true; + } + String[] mOptionValue = getOptionValues(mappingdocOption, lineArgs, configFile); List lis = new ArrayList<>(); @@ -400,8 +410,15 @@ public static void run(String[] args, String basePath) throws Exception { System.arraycopy(fOptionValue, 0, optionWithIDLabFunctionArgs, 4, fOptionValue.length); functionAgent = AgentFactory.createFromFnO(optionWithIDLabFunctionArgs); } + executor = new Executor(rmlStore, factory, outputStore, baseIRI, strictMode, functionAgent, mappingOptions); + if (onlyConvertMapping) { + logger.debug("Outputting converted mapping following the latest RML specification"); + writeOutput(rmlStore, outputFile, "turtle"); + System.exit(0); + } + if (checkOptionPresence(provideOwnEOFMarkerOption, lineArgs, configFile)) { logger.warn("Automatic EOF marker disabled!"); executor.setEOFProvidedInData(); From b1975b8da295e531bcb6d4c541caa00a4613662d Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 8 Oct 2024 15:19:51 +0200 Subject: [PATCH 014/127] SolidTarget: implement targets for Solid pods Abstract class SolidTarget, extended by SolidResourceTarget and SolidAclTarget. Currently we support triples in NTriples, Turtle, JSON-LD, Trix, NQuads. --- buildNumber.properties | 4 +- pom.xml | 13 ++ .../be/ugent/rml/target/SolidAclTarget.java | 28 ++++ .../ugent/rml/target/SolidResourceTarget.java | 28 ++++ .../java/be/ugent/rml/target/SolidTarget.java | 151 ++++++++++++++++++ 5 files changed, 222 insertions(+), 2 deletions(-) create mode 100644 src/main/java/be/ugent/rml/target/SolidAclTarget.java create mode 100644 src/main/java/be/ugent/rml/target/SolidResourceTarget.java create mode 100644 src/main/java/be/ugent/rml/target/SolidTarget.java diff --git a/buildNumber.properties b/buildNumber.properties index 7871fed4..d017058d 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,3 @@ #maven.buildNumber.plugin properties file -#Tue Aug 13 08:29:04 GMT 2024 -buildNumber0=373 +#Tue Oct 08 15:14:28 CEST 2024 +buildNumber0=379 diff --git a/pom.xml b/pom.xml index a30ccd0d..83b376d9 100644 --- a/pom.xml +++ b/pom.xml @@ -330,6 +330,19 @@ ${testcontainers.version} test + + + org.json + json + 20240303 + + + + org.testcontainers + testcontainers + 1.17.6 + compile + diff --git a/src/main/java/be/ugent/rml/target/SolidAclTarget.java b/src/main/java/be/ugent/rml/target/SolidAclTarget.java new file mode 100644 index 00000000..1f5e5c88 --- /dev/null +++ b/src/main/java/be/ugent/rml/target/SolidAclTarget.java @@ -0,0 +1,28 @@ +package be.ugent.rml.target; + +import be.ugent.rml.store.Quad; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.List; + + +public class SolidAclTarget extends SolidTarget { + + public SolidAclTarget(JSONObject solidTargetInfo, String serializationFormat, List metadata) throws IOException { + super(solidTargetInfo, serializationFormat, metadata); + solidHelperPath = "addAcl"; + } + + @Override + public boolean equals(Object o) { + if (o == this) return true; + if (o instanceof SolidAclTarget) { + SolidAclTarget target = (SolidAclTarget) o; + return this.solidTargetInfo.get("resourceUrl").equals(target.getSolidTargetInfo().get("resourceUrl")); + } else { + return false; + } + } +} + diff --git a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java new file mode 100644 index 00000000..630d19b1 --- /dev/null +++ b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java @@ -0,0 +1,28 @@ +package be.ugent.rml.target; + +import be.ugent.rml.store.Quad; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.List; + + +public class SolidResourceTarget extends SolidTarget { + + public SolidResourceTarget(JSONObject solidTargetInfo, String serializationFormat, List metadata) throws IOException { + super(solidTargetInfo, serializationFormat, metadata); + solidHelperPath = "addResource"; + } + + @Override + public boolean equals(Object o) { + if (o == this) return true; + if (o instanceof SolidResourceTarget) { + SolidResourceTarget target = (SolidResourceTarget) o; + return this.solidTargetInfo.get("resourceUrl").equals(target.getSolidTargetInfo().get("resourceUrl")); + } else { + return false; + } + } +} + diff --git a/src/main/java/be/ugent/rml/target/SolidTarget.java b/src/main/java/be/ugent/rml/target/SolidTarget.java new file mode 100644 index 00000000..3f5b7491 --- /dev/null +++ b/src/main/java/be/ugent/rml/target/SolidTarget.java @@ -0,0 +1,151 @@ +package be.ugent.rml.target; + +import be.ugent.rml.store.Quad; +import be.ugent.rml.store.QuadStore; +import org.apache.http.client.HttpResponseException; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.DockerImageName; + +public abstract class SolidTarget implements Target { + + protected final JSONObject solidTargetInfo; + private final List metadata; + private String solidHelperUrl; + private Boolean solidHelperDocker; + protected String solidHelperPath; + private ByteArrayOutputStream byteArrayOutputStream; + private static final Logger logger = LoggerFactory.getLogger(SolidTarget.class); + private final String serializationFormat; + + + private static final Map serializationFormats = Map.of( + "ntriples","application/n-triples", + "turtle", "text/turtle", + "jsonld", "application/ld+json", + "trix", "text/xml", + "trig", "application/trig", + "nquads", "application/n-quads" + ); // TODO hdt??? + + /** + * This constructor ... + * + */ + public SolidTarget(JSONObject solidTargetInfo, String serializationFormat, List metadata) throws IOException { + this.solidTargetInfo = solidTargetInfo; + this.metadata = metadata; + this.serializationFormat = serializationFormat; + byteArrayOutputStream = new ByteArrayOutputStream(); + } + public void setSolidHelperUrl(String solidHelperUrl){ + this.solidHelperUrl = solidHelperUrl; + } + + public void setSolidHelperDocker(Boolean solidHelperDocker){ + this.solidHelperDocker = solidHelperDocker; + } + + /** + * This method returns an OutputStream for the target. + * @return the OutputStream corresponding to the target. + * @throws IOException + */ + public OutputStream getOutputStream() throws IOException { + return byteArrayOutputStream; + } + + /** + * This method returns the serialization format of the target. + * @return serialization format. + */ + @Override + public String getSerializationFormat() { + return this.serializationFormat; + } + + /** + * This method returns the url of the Solid pod target //TODO adapt + * @return url. + */ + public JSONObject getSolidTargetInfo() { + return this.solidTargetInfo; + } + + /** + * This method closes the target. + * When closing a Solid target, the tempFile is put on the solid pod + * with a PUT method. + */ + @Override + public void close() { + /* + Read the temporary file containing the exported triples. + And send the output to the solid put with an authorised fetch. + */ + GenericContainer container = null; + logger.debug("Closing target"); + try { + if (solidHelperDocker) { + container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper:latest")) + .withExposedPorts(8080) + .withCommand("npm","start") + .waitingFor(Wait.forHealthcheck()); + container.start(); + solidHelperUrl = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/"; + } + // Create HTTP connection to Solid app that can handle authentication and fetch to solid pod + // Workaround to avoid the need to use javascript libraries in java + // The url can be adapted via the cli option -shu or --solidHelperUrl + // The default value is "http://localhost:8080/" + + // differentiate between ldp:Resource and acl via class + URL url = new URL(solidHelperUrl + solidHelperPath); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Accept", "application/json"); + connection.setRequestMethod("POST"); + connection.setDoOutput(true); + + OutputStream out = connection.getOutputStream(); + this.solidTargetInfo.put("data", this.byteArrayOutputStream.toString(StandardCharsets.UTF_8)); + // reset the outputstream to empty memory + this.byteArrayOutputStream = new ByteArrayOutputStream(); + this.solidTargetInfo.put("contentType", serializationFormats.get(this.serializationFormat)); + + out.write((solidTargetInfo.toString()).getBytes(StandardCharsets.UTF_8)); + + // Close out stream + out.close(); + + // Throw error if query failed (HTTP status code >= 300) + int code = connection.getResponseCode(); + if (code >= HttpURLConnection.HTTP_MULT_CHOICE) { + throw new HttpResponseException(code, "Executing Authenticated Fetch to for " + solidHelperPath + " to " + this.solidTargetInfo.get("resourceUrl") + " failed (" + code + ")"); + } + } + catch (Exception e) { + logger.error("Failed to close target for {} to {}: {}", solidHelperPath, this.solidTargetInfo.get("resourceUrl"), e); + } + finally { + if(container != null) { + container.stop(); + } + } + } + + @Override + public List getMetadata() { + return this.metadata; + } +} From b8be06e889b10262a6257900fa10e993b804446a Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 8 Oct 2024 15:36:57 +0200 Subject: [PATCH 015/127] TargetFactory: added Solid related Targets to the TargetFactory NAMESPACES: added prefixes solid and rmli --- src/main/java/be/ugent/rml/NAMESPACES.java | 3 ++ .../be/ugent/rml/target/TargetFactory.java | 41 ++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/main/java/be/ugent/rml/NAMESPACES.java b/src/main/java/be/ugent/rml/NAMESPACES.java index 0e725872..80b76367 100644 --- a/src/main/java/be/ugent/rml/NAMESPACES.java +++ b/src/main/java/be/ugent/rml/NAMESPACES.java @@ -34,4 +34,7 @@ public class NAMESPACES { public static final String COMP = "http://semweb.mmlab.be/ns/rml-compression#"; public static final String LDES = "https://w3id.org/ldes#"; public static final String TREE = "https://w3id.org/tree#"; + public static final String SOLID = "http://www.w3.org/ns/solid/terms#"; + public static final String RMLI = "https://w3id.org/imec/rml/"; + } diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index 0d4aecf1..e367a828 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -7,6 +7,7 @@ import be.ugent.rml.term.Literal; import be.ugent.rml.term.NamedNode; import be.ugent.rml.term.Term; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -347,6 +348,20 @@ else if (location.endsWith(".jsonld")) { target = new SPARQLEndpointTarget(endpoint, metadata); break; } + case NAMESPACES.RMLI + "SolidResourceTarget": { + logger.debug("Target is a document on a resource on a Solid Pod"); + String resource = getRequiredValue(t,new NamedNode(NAMESPACES.RMLI + "resource"), rmlStore).getValue(); + JSONObject solidTargetInfo = parseSolidTarget(rmlStore, t, resource); + target = new SolidResourceTarget(solidTargetInfo, serializationFormat, metadata); + break; + } + case NAMESPACES.RMLI + "SolidAclTarget": { + logger.debug("Target is a acl document for a resource on a Solid Pod"); + String resource = getRequiredValue(t,new NamedNode(NAMESPACES.RMLI + "forResource"), rmlStore).getValue(); + JSONObject solidTargetInfo = parseSolidTarget(rmlStore, t, resource); + target = new SolidAclTarget(solidTargetInfo, serializationFormat, metadata); + break; + } default: { throw new UnsupportedOperationException("Not implemented"); } @@ -355,7 +370,31 @@ else if (location.endsWith(".jsonld")) { return target; } else { - throw new Error("The Target does not have target."); + throw new Error("Logical Target " + logicalTarget.getValue() + " does not have target."); + } + } + private JSONObject parseSolidTarget(QuadStore rmlStore, Term t, String resource){ + Term login = getRequiredValue(t, new NamedNode(NAMESPACES.IDSA + "userAuthentication"), rmlStore); + String email = getRequiredValue(login, new NamedNode(NAMESPACES.IDSA + "authUsername"), rmlStore).getValue(); + String password = getRequiredValue(login, new NamedNode(NAMESPACES.IDSA + "authPassword"), rmlStore).getValue(); + String oidcIssuer = getRequiredValue(login, new NamedNode(NAMESPACES.SOLID + "oidcIssuer"), rmlStore).getValue(); + String webId = getRequiredValue(login, new NamedNode(NAMESPACES.RMLI + "webId"), rmlStore).getValue(); + // because this info will need to be sent over http in a JSON format, it is immediately stored in a JSONObject + JSONObject solidTargetInfo = new JSONObject(); + solidTargetInfo.put("email", email); + solidTargetInfo.put("password",password); + solidTargetInfo.put("serverUrl", oidcIssuer); + solidTargetInfo.put("resourceUrl", resource); + solidTargetInfo.put("webId", webId); + return solidTargetInfo; + } + + private Term getRequiredValue(Term subject, Term predicate, QuadStore rmlStore) throws Error { + List terms = Utils.getObjectsFromQuads(rmlStore.getQuads(subject, predicate, null)); + if (terms.isEmpty()) { + throw new Error(subject + " has no value for predicate " + predicate); + } else { + return terms.get(0); } } } From 811bdfb13460b96b4a2ba0b8d3fab7bc6ecaf120 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 8 Oct 2024 16:01:57 +0200 Subject: [PATCH 016/127] Main: added options solidHelperUrl and solidHelperDocker These options facilitate the use of the solid target helper in combination with rmlmapper --- src/main/java/be/ugent/rml/cli/Main.java | 33 +++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index a4a65e04..2deaca34 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -11,6 +11,7 @@ import be.ugent.rml.store.Quad; import be.ugent.rml.store.QuadStore; import be.ugent.rml.store.RDF4JStore; +import be.ugent.rml.target.SolidTarget; import be.ugent.rml.target.Target; import be.ugent.rml.target.TargetFactory; import be.ugent.rml.term.NamedNode; @@ -161,6 +162,17 @@ public static void run(String[] args, String basePath) throws Exception { .longOpt("convert-mapping") .desc("Only convert the mapping to the latest RML specification by the W3C Community Group") .build(); + // temporary solution until the oidc authentication in is implemented in JAVA + Option solidHelperUrlOption = Option.builder("shu") + .longOpt("solidHelperUrl") + .desc("the url on which the javascript helper application for Solid targets can be reached, default http://localhost:8080/") + .hasArg() + .build(); + // temporary solution until the oidc authentication in is implemented in JAVA + Option solidHelperDockerOption = Option.builder("shd") + .longOpt("solidHelperDocker") + .desc("select this option when the docker with solid target helper inside RMLMapper is needed") + .build(); options.addOption(mappingdocOption); options.addOption(privateSecurityDataOption); @@ -181,6 +193,8 @@ public static void run(String[] args, String basePath) throws Exception { options.addOption(baseIriOption); options.addOption(provideOwnEOFMarkerOption); options.addOption(convertMapping); + options.addOption(solidHelperUrlOption); + options.addOption(solidHelperDockerOption); CommandLineParser parser = new DefaultParser(); try { @@ -454,7 +468,11 @@ public static void run(String[] args, String basePath) throws Exception { IDLabFunctions.saveState(); - writeOutputTargets(targets, rmlStore, basePath, outputFile, outputFormat); + String solidHelperUrl = getPriorityOptionValue(solidHelperUrlOption, lineArgs, configFile, "http://localhost:8080/"); + Boolean solidHelperDocker = checkOptionPresence(solidHelperDockerOption, lineArgs, configFile); + + writeOutputTargets(targets, rmlStore, basePath, outputFile, outputFormat, solidHelperUrl, solidHelperDocker); + } // Get stop timestamp for post mapping metadata String stopTimestamp = Instant.now().toString(); @@ -477,7 +495,7 @@ public static void run(String[] args, String basePath) throws Exception { } } - private static void writeOutputTargets(Map targets, QuadStore rmlStore, String basePath, String outputFileDefault, String outputFormatDefault) throws Exception { + private static void writeOutputTargets(Map targets, QuadStore rmlStore, String basePath, String outputFileDefault, String outputFormatDefault, String solidHelperUrl, Boolean solidHelperDocker) throws Exception { boolean hasNoResults = true; logger.debug("Writing to Targets: {}", targets.keySet()); @@ -513,13 +531,17 @@ private static void writeOutputTargets(Map targets, QuadStore r } else { logger.debug("Exporting to Target: {}", term); + Target target = targetFactory.getTarget(term, rmlStore, store); + if((target instanceof SolidTarget)) { + ((SolidTarget) target).setSolidHelperUrl(solidHelperUrl); + ((SolidTarget) target).setSolidHelperDocker(solidHelperDocker); + } if (store.size() > 1) { logger.info("{} quads were generated for {} Target", store.size(), term); } else { logger.info("{} quad was generated {} Target", store.size(), term); } - Target target = targetFactory.getTarget(term, rmlStore, store); String serializationFormat = target.getSerializationFormat(); OutputStream output = target.getOutputStream(); store.addQuads(target.getMetadata()); @@ -557,6 +579,11 @@ private static String getPriorityOptionValue(Option option, CommandLine lineArgs } } + private static String getPriorityOptionValue(Option option, CommandLine lineArgs, Properties properties, String defaultValue) { + String value = getPriorityOptionValue(option, lineArgs, properties); + return value == null ? defaultValue : value; + } + private static String[] getOptionValues(Option option, CommandLine lineArgs, Properties properties) { if (lineArgs.hasOption(option.getOpt())) { return lineArgs.getOptionValues(option.getOpt()); From 461760f19f015ed6e473865d21bb63c945076b73 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 8 Oct 2024 16:51:27 +0200 Subject: [PATCH 017/127] Executor: support GraphMaps for Logical Target Graph Maps are also Term Maps on which a Logical Target can be placed. Allow Graph Maps to export their generated RDF to specific targets. --- src/main/java/be/ugent/rml/Executor.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/be/ugent/rml/Executor.java b/src/main/java/be/ugent/rml/Executor.java index ba24818c..19a6f87b 100644 --- a/src/main/java/be/ugent/rml/Executor.java +++ b/src/main/java/be/ugent/rml/Executor.java @@ -117,9 +117,12 @@ public Executor(QuadStore rmlStore, RecordsFactory recordsFactory, QuadStore res if(pog.getObjectMappingInfo() != null) { targets.addAll(pog.getObjectMappingInfo().getTargets()); } + if(pog.getGraphMappingInfo() != null) { + targets.addAll(pog.getGraphMappingInfo().getTargets()); + } } - // Graph Map + // Graph Map (only subjectGraphMap...) for(MappingInfo g: mapping.getGraphMappingInfos()) { targets.addAll(g.getTargets()); } @@ -451,7 +454,8 @@ private void generatePredicateObjectsForSubjects(final List sub if (terms != null) { terms.forEach(term -> { if (!term.equals(new NamedNode(NAMESPACES.RML2 + "defaultGraph"))) { - subjectGraphs.add(new ProvenancedTerm(term)); + List targets = mappingInfo.getTargets(); + subjectGraphs.add(new ProvenancedTerm(term, null, targets)); } }); } @@ -473,7 +477,8 @@ private void generatePredicateObjectsForSubjects(final List sub if (pogGraphGenerator != null) { pogGraphGenerator.generate(record).forEach(term -> { if (!term.equals(new NamedNode(NAMESPACES.RML2 + "defaultGraph"))) { - poGraphs.add(new ProvenancedTerm(term)); + List targets = pogMapping.getGraphMappingInfo().getTargets(); + poGraphs.add(new ProvenancedTerm(term, null, targets)); } }); } From 213e3bb03cd0c7df58687826f9497047e52677d7 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 8 Oct 2024 16:53:12 +0200 Subject: [PATCH 018/127] SolidTargetTest: adding tests for Solid Targets --- src/main/resources/docker-compose.yml | 13 ++ .../java/be/ugent/rml/SolidTargetTest.java | 136 ++++++++++++++++++ src/test/java/be/ugent/rml/TestCore.java | 4 +- .../resources/solid-target/acl1/buildings.csv | 4 + .../resources/solid-target/acl1/mapping.ttl | 106 ++++++++++++++ .../resources/solid-target/acl1/output1.nq | 4 + .../resources/solid-target/acl2/buildings.csv | 4 + .../resources/solid-target/acl2/mapping.ttl | 107 ++++++++++++++ .../resources/solid-target/acl2/output1.nq | 4 + .../solid-target/solid1/buildings.csv | 4 + .../resources/solid-target/solid1/mapping.ttl | 41 ++++++ .../resources/solid-target/solid1/output1.nq | 4 + .../solid-target/solid2/buildings.csv | 4 + .../resources/solid-target/solid2/mapping.ttl | 42 ++++++ .../resources/solid-target/solid2/output1.nq | 4 + .../solid-target/solid3/buildings.csv | 4 + .../resources/solid-target/solid3/mapping.ttl | 41 ++++++ .../resources/solid-target/solid3/output1.nq | 4 + .../solid-target/solid4/buildings.csv | 4 + .../resources/solid-target/solid4/mapping.ttl | 45 ++++++ .../resources/solid-target/solid4/output1.nq | 5 + .../solid-target/solid5/buildings.csv | 4 + .../resources/solid-target/solid5/mapping.ttl | 43 ++++++ .../resources/solid-target/solid5/output1.nq | 5 + 24 files changed, 634 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/docker-compose.yml create mode 100644 src/test/java/be/ugent/rml/SolidTargetTest.java create mode 100644 src/test/resources/solid-target/acl1/buildings.csv create mode 100644 src/test/resources/solid-target/acl1/mapping.ttl create mode 100644 src/test/resources/solid-target/acl1/output1.nq create mode 100644 src/test/resources/solid-target/acl2/buildings.csv create mode 100644 src/test/resources/solid-target/acl2/mapping.ttl create mode 100644 src/test/resources/solid-target/acl2/output1.nq create mode 100644 src/test/resources/solid-target/solid1/buildings.csv create mode 100644 src/test/resources/solid-target/solid1/mapping.ttl create mode 100644 src/test/resources/solid-target/solid1/output1.nq create mode 100644 src/test/resources/solid-target/solid2/buildings.csv create mode 100644 src/test/resources/solid-target/solid2/mapping.ttl create mode 100644 src/test/resources/solid-target/solid2/output1.nq create mode 100644 src/test/resources/solid-target/solid3/buildings.csv create mode 100644 src/test/resources/solid-target/solid3/mapping.ttl create mode 100644 src/test/resources/solid-target/solid3/output1.nq create mode 100644 src/test/resources/solid-target/solid4/buildings.csv create mode 100644 src/test/resources/solid-target/solid4/mapping.ttl create mode 100644 src/test/resources/solid-target/solid4/output1.nq create mode 100644 src/test/resources/solid-target/solid5/buildings.csv create mode 100644 src/test/resources/solid-target/solid5/mapping.ttl create mode 100644 src/test/resources/solid-target/solid5/output1.nq diff --git a/src/main/resources/docker-compose.yml b/src/main/resources/docker-compose.yml new file mode 100644 index 00000000..fbb68e58 --- /dev/null +++ b/src/main/resources/docker-compose.yml @@ -0,0 +1,13 @@ +services: + solid-target-helper: + # TODO host docker image on imec account instead of personal account + image: elsdvlee/solid-target-helper-and-testpods:latest + ports: + - "8080:8080" + command: "npm start" + healthcheck: + test: "[ -e healthy.flag ] || if curl http://localhost:8080/; then touch healthy.flag; else false; fi" + interval: 1s + timeout: 30s + retries: 65 + start_period: 1s \ No newline at end of file diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java new file mode 100644 index 00000000..fa4c9d98 --- /dev/null +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -0,0 +1,136 @@ +package be.ugent.rml; + +import be.ugent.rml.cli.Main; +import be.ugent.rml.store.QuadStore; +import be.ugent.rml.store.QuadStoreFactory; +import org.eclipse.rdf4j.rio.RDFFormat; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; + +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.time.Duration; + +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.DockerImageName; + +public class SolidTargetTest extends TestCore { + + //constant target in subject map + @Test + public void solid1() throws Exception { + doMappingSolid("solid-target/solid1/mapping.ttl", + "http://localhost:3000/example/building", + "solid-target/solid1/output1.nq", + "example"); + } + + //constant target in predicate map + @Test + public void solid2() throws Exception { + doMappingSolid("solid-target/solid2/mapping.ttl", + "http://localhost:3000/example/building", + "solid-target/solid2/output1.nq", + "example"); + } + + //constant target in object map + @Test + public void solid3() throws Exception { + doMappingSolid("solid-target/solid3/mapping.ttl", + "http://localhost:3000/example/building", + "solid-target/solid3/output1.nq", + "example"); + } + + //constant target in subject graph + @Test + public void solid4() throws Exception { + doMappingSolid("solid-target/solid4/mapping.ttl", + "http://localhost:3000/example/building", + "solid-target/solid4/output1.nq", + "example"); + } + + //constant target in po graph + @Test + public void solid5() throws Exception { + doMappingSolid("solid-target/solid5/mapping.ttl", + "http://localhost:3000/example/building", + "solid-target/solid5/output1.nq", + "example"); + } + + //acl for pod1, resourceUrl with .ttl + @Test + public void acl1() throws Exception{ + doMappingSolid("solid-target/acl1/mapping.ttl", + "http://localhost:3000/example/building.ttl", + "solid-target/acl1/output1.nq", + "pod1"); + } + + //acl for pod1, resourceUrl without .ttl + @Test + public void acl2() throws Exception{ + doMappingSolid("solid-target/acl2/mapping.ttl", + "http://localhost:3000/example/building", + "solid-target/acl2/output1.nq", + "pod1"); + } + + void doMappingSolid(String mapPath, String resourceUrl, String outPath, String user) throws Exception { + doMappingSolid(mapPath, new String[]{resourceUrl}, new String[]{outPath},new String[]{user}); + } + + void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, String[] users) throws Exception { + GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper-and-testpods:latest")) + .withExposedPorts(8080) + .withCommand("npm","start") + .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200)); + container.start(); + String address = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/"; + Main.run(("-m " + mapPath + " -shu " + address).split(" ")); + int i = 0; + while (i < resourceUrls.length) { + JSONObject solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); + compareResourceWithOutput(outPaths[i], solidTargetInfo, address); + i++; + } + } + + // get solidTargetInfo including authentication details of testpods + private JSONObject getSolidTargetInfo(String user, String resourceUrl){ + JSONObject solidTargetInfo = new JSONObject(); + solidTargetInfo.put("email", "hello@" + user + ".com"); + solidTargetInfo.put("password","abc123"); + solidTargetInfo.put("serverUrl", "http://localhost:3000/"); + solidTargetInfo.put("webId", "http://localhost:3000/" + user + "/profile/card#me"); + solidTargetInfo.put("resourceUrl", resourceUrl); + return solidTargetInfo; + } + + private void compareResourceWithOutput(String outPath, JSONObject solidTargetInfo, String address) throws Exception { + // retrieve resource from solid pod + URL url = new URL(address + "getResource"); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestProperty("content-type", "application/json"); + connection.setRequestProperty("Accept", "text/plain"); + connection.setRequestMethod("POST"); + connection.setDoOutput(true); + OutputStream out = connection.getOutputStream(); + out.write((solidTargetInfo.toString()).getBytes(StandardCharsets.UTF_8)); + out.close(); + // get result + QuadStore result = QuadStoreFactory.read(connection.getInputStream(), RDFFormat.NQUADS); + connection.getInputStream().close(); + + // compare result to expected output + result.removeDuplicates(); + compareStores(filePathToStore(outPath), result); + } +} + diff --git a/src/test/java/be/ugent/rml/TestCore.java b/src/test/java/be/ugent/rml/TestCore.java index 48bf9975..85999ed6 100644 --- a/src/test/java/be/ugent/rml/TestCore.java +++ b/src/test/java/be/ugent/rml/TestCore.java @@ -309,7 +309,7 @@ private void convertToRml(QuadStore store) throws Exception { } } - private void compareStores(QuadStore expectedStory, QuadStore resultStore) { + protected void compareStores(QuadStore expectedStory, QuadStore resultStore) { String expectedString = expectedStory.toSortedString(); String resultString = resultStore.toSortedString(); // First arg is expected, second is actual @@ -339,7 +339,7 @@ void compareFiles(String expectedPath, String resultPath, boolean removeTimestam } } - private QuadStore filePathToStore(String path) throws Exception { + protected QuadStore filePathToStore(String path) throws Exception { // load output-turtle file File outputFile = Utils.getFile(path); diff --git a/src/test/resources/solid-target/acl1/buildings.csv b/src/test/resources/solid-target/acl1/buildings.csv new file mode 100644 index 00000000..f57f933b --- /dev/null +++ b/src/test/resources/solid-target/acl1/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID +building1,owner1,floortile1 +building2,owner1,floortile2 +building3,owner2,floortile1 diff --git a/src/test/resources/solid-target/acl1/mapping.ttl b/src/test/resources/solid-target/acl1/mapping.ttl new file mode 100644 index 00000000..d67080d1 --- /dev/null +++ b/src/test/resources/solid-target/acl1/mapping.ttl @@ -0,0 +1,106 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix idsa: . +@prefix void: . + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/solid1/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ + rr:template "http://example.com/{BuildingID}"; + rml:logicalTarget ; + ]; + rr:predicateObjectMap [ + rr:predicate o:has-floor-tile; + rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}" ]; + ]. + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/acl1/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ + rr:constant "http://example.com/pod1-acl"; + rr:class acl:Authorization; + rml:logicalTarget ; + ]; + rr:predicateObjectMap [ + rr:predicate acl:agent; + rr:object ; + ]; + rr:predicateObjectMap [ + rr:predicate acl:mode; + rr:object acl:Read; + ]; + rr:predicateObjectMap [ + rr:predicate acl:accessTo; + rr:object ; + ]. + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/acl1/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ + rr:constant "http://example.com/example-acl"; + rr:class acl:Authorization; + rml:logicalTarget ; + ]; + rr:predicateObjectMap [ + rr:predicate acl:agent; + rr:object ; + ]; + rr:predicateObjectMap [ + rr:predicate acl:mode; + rr:object acl:Read; + ]; + rr:predicateObjectMap [ + rr:predicate acl:accessTo; + rr:object ; + ]; + rr:predicateObjectMap [ + rr:predicate acl:mode; + rr:object acl:Control; + ]; + rr:predicateObjectMap [ + rr:predicate acl:mode; + rr:object acl:Write; + ]. + + rmlt:serialization formats:Turtle; + rmlt:target [ + a rmlt:Target; + a rmli:SolidResourceTarget; + rmli:resource ; + idsa:userAuthentication ; + ]. + + rmlt:serialization formats:Turtle; + rmlt:target [ + a rmlt:Target; + a rmli:SolidAclTarget; + rmli:forResource ; + idsa:userAuthentication ; + ]. + + a idsa:UserAuthentication; + idsa:authUsername "hello@example.com"; + idsa:authPassword "abc123"; + solid:oidcIssuer ; + rmli:webId . + diff --git a/src/test/resources/solid-target/acl1/output1.nq b/src/test/resources/solid-target/acl1/output1.nq new file mode 100644 index 00000000..37c23859 --- /dev/null +++ b/src/test/resources/solid-target/acl1/output1.nq @@ -0,0 +1,4 @@ + . + . + . + diff --git a/src/test/resources/solid-target/acl2/buildings.csv b/src/test/resources/solid-target/acl2/buildings.csv new file mode 100644 index 00000000..f57f933b --- /dev/null +++ b/src/test/resources/solid-target/acl2/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID +building1,owner1,floortile1 +building2,owner1,floortile2 +building3,owner2,floortile1 diff --git a/src/test/resources/solid-target/acl2/mapping.ttl b/src/test/resources/solid-target/acl2/mapping.ttl new file mode 100644 index 00000000..4bbeb697 --- /dev/null +++ b/src/test/resources/solid-target/acl2/mapping.ttl @@ -0,0 +1,107 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix idsa: . +@prefix void: . + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/acl2/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ + rr:template "http://example.com/{BuildingID}"; + rml:logicalTarget ; + ]; + rr:predicateObjectMap [ + rr:predicate o:has-floor-tile; + rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}" ]; + ]. + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/acl2/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ + rr:constant "http://example.com/pod1-acl"; + rr:class acl:Authorization; + rml:logicalTarget ; + ]; + rr:predicateObjectMap [ + rr:predicate acl:agent; + rr:object ; + ]; + rr:predicateObjectMap [ + rr:predicate acl:mode; + rr:object acl:Read; + ]; + rr:predicateObjectMap [ + rr:predicate acl:accessTo; + rr:object ; + ]. + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/acl2/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ + rr:constant "http://example.com/example-acl"; + rr:class acl:Authorization; + rml:logicalTarget ; + ]; + rr:predicateObjectMap [ + rr:predicate acl:agent; + rr:object ; + ]; + rr:predicateObjectMap [ + rr:predicate acl:mode; + rr:object acl:Read; + ]; + rr:predicateObjectMap [ + rr:predicate acl:accessTo; + rr:object ; + ]; + rr:predicateObjectMap [ + rr:predicate acl:mode; + rr:object acl:Control; + ]; + rr:predicateObjectMap [ + rr:predicate acl:mode; + rr:object acl:Write; + ]. + + rmlt:serialization formats:Turtle; + rmlt:target [ + a rmlt:Target; + a rmli:SolidResourceTarget; + rmli:resource "http://localhost:3000/example/building"; + idsa:userAuthentication ; + ]. + + rmlt:serialization formats:Turtle; + rmlt:target [ + a rmlt:Target; + a rmli:SolidAclTarget; + rmli:forResource "http://localhost:3000/example/building"; + idsa:userAuthentication ; + ]. + + + a idsa:UserAuthentication; + idsa:authUsername "hello@example.com"; + idsa:authPassword "abc123"; + solid:oidcIssuer ; + rmli:webId . + diff --git a/src/test/resources/solid-target/acl2/output1.nq b/src/test/resources/solid-target/acl2/output1.nq new file mode 100644 index 00000000..37c23859 --- /dev/null +++ b/src/test/resources/solid-target/acl2/output1.nq @@ -0,0 +1,4 @@ + . + . + . + diff --git a/src/test/resources/solid-target/solid1/buildings.csv b/src/test/resources/solid-target/solid1/buildings.csv new file mode 100644 index 00000000..f57f933b --- /dev/null +++ b/src/test/resources/solid-target/solid1/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID +building1,owner1,floortile1 +building2,owner1,floortile2 +building3,owner2,floortile1 diff --git a/src/test/resources/solid-target/solid1/mapping.ttl b/src/test/resources/solid-target/solid1/mapping.ttl new file mode 100644 index 00000000..6bc133bf --- /dev/null +++ b/src/test/resources/solid-target/solid1/mapping.ttl @@ -0,0 +1,41 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix idsa: . + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/solid1/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ + rr:template "http://example.com/{BuildingID}"; + rml:logicalTarget ; + ]; + rr:predicateObjectMap [ + rr:predicate o:has-floor-tile; + rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}" ]; + ]. + + rmlt:serialization formats:Turtle; + rmlt:target [ + a rmlt:Target, rmli:SolidResourceTarget; + rmli:resource "http://localhost:3000/example/building"; + idsa:userAuthentication [ + idsa:authUsername "hello@example.com"; + idsa:authPassword "abc123"; + solid:oidcIssuer ; + rmli:webId + ]; + ]. + diff --git a/src/test/resources/solid-target/solid1/output1.nq b/src/test/resources/solid-target/solid1/output1.nq new file mode 100644 index 00000000..37c23859 --- /dev/null +++ b/src/test/resources/solid-target/solid1/output1.nq @@ -0,0 +1,4 @@ + . + . + . + diff --git a/src/test/resources/solid-target/solid2/buildings.csv b/src/test/resources/solid-target/solid2/buildings.csv new file mode 100644 index 00000000..f57f933b --- /dev/null +++ b/src/test/resources/solid-target/solid2/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID +building1,owner1,floortile1 +building2,owner1,floortile2 +building3,owner2,floortile1 diff --git a/src/test/resources/solid-target/solid2/mapping.ttl b/src/test/resources/solid-target/solid2/mapping.ttl new file mode 100644 index 00000000..df3a0264 --- /dev/null +++ b/src/test/resources/solid-target/solid2/mapping.ttl @@ -0,0 +1,42 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix idsa: . + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/solid2/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ rr:template "http://example.com/{BuildingID}" ]; + rr:predicateObjectMap [ + rr:predicateMap [ + rr:constant o:has-floor-tile; + rml:logicalTarget ; + ]; + rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}" ]; + ]. + + rmlt:serialization formats:Turtle; + rmlt:target [ + a rmli:Target; + a rmli:SolidResourceTarget; + rmli:resource "http://localhost:3000/example/building"; + idsa:userAuthentication [ + idsa:authUsername "hello@example.com"; + idsa:authPassword "abc123"; + solid:oidcIssuer ; + rmli:webId + ]; + ]. + diff --git a/src/test/resources/solid-target/solid2/output1.nq b/src/test/resources/solid-target/solid2/output1.nq new file mode 100644 index 00000000..37c23859 --- /dev/null +++ b/src/test/resources/solid-target/solid2/output1.nq @@ -0,0 +1,4 @@ + . + . + . + diff --git a/src/test/resources/solid-target/solid3/buildings.csv b/src/test/resources/solid-target/solid3/buildings.csv new file mode 100644 index 00000000..f57f933b --- /dev/null +++ b/src/test/resources/solid-target/solid3/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID +building1,owner1,floortile1 +building2,owner1,floortile2 +building3,owner2,floortile1 diff --git a/src/test/resources/solid-target/solid3/mapping.ttl b/src/test/resources/solid-target/solid3/mapping.ttl new file mode 100644 index 00000000..d54d733c --- /dev/null +++ b/src/test/resources/solid-target/solid3/mapping.ttl @@ -0,0 +1,41 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix idsa: . + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/solid3/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ rr:template "http://example.com/{BuildingID}" ]; + rr:predicateObjectMap [ + rr:predicate o:has-floor-tile; + rr:objectMap [ + rr:template "http://example.com/product-{FloorTileID}"; + rml:logicalTarget ; + ]; + ]. + + rmlt:serialization formats:Turtle; + rmlt:target [ + a rmli:SolidResourceTarget; + rmli:resource "http://localhost:3000/example/building"; + idsa:userAuthentication [ + idsa:authUsername "hello@example.com"; + idsa:authPassword "abc123"; + solid:oidcIssuer ; + rmli:webId + ]; + ]. + diff --git a/src/test/resources/solid-target/solid3/output1.nq b/src/test/resources/solid-target/solid3/output1.nq new file mode 100644 index 00000000..37c23859 --- /dev/null +++ b/src/test/resources/solid-target/solid3/output1.nq @@ -0,0 +1,4 @@ + . + . + . + diff --git a/src/test/resources/solid-target/solid4/buildings.csv b/src/test/resources/solid-target/solid4/buildings.csv new file mode 100644 index 00000000..f57f933b --- /dev/null +++ b/src/test/resources/solid-target/solid4/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID +building1,owner1,floortile1 +building2,owner1,floortile2 +building3,owner2,floortile1 diff --git a/src/test/resources/solid-target/solid4/mapping.ttl b/src/test/resources/solid-target/solid4/mapping.ttl new file mode 100644 index 00000000..252e00d7 --- /dev/null +++ b/src/test/resources/solid-target/solid4/mapping.ttl @@ -0,0 +1,45 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix idsa: . + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/solid4/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ + rr:template "http://example.com/{BuildingID}"; + rr:graphMap [ + a rr:GraphMap; + rr:constant ex:BuildingsGraph; + rml:logicalTarget ; + ]; + ]; + rr:predicateObjectMap [ + rr:predicate o:has-floor-tile; + rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}" ]; + ]. + + rmlt:target [ + #rmlt:serialization formats:Turtle; + a rmli:SolidResourceTarget; + rmli:resource "http://localhost:3000/example/building"; + idsa:userAuthentication [ + idsa:authUsername "hello@example.com"; + idsa:authPassword "abc123"; + solid:oidcIssuer ; + rmli:webId + ]; +]. + diff --git a/src/test/resources/solid-target/solid4/output1.nq b/src/test/resources/solid-target/solid4/output1.nq new file mode 100644 index 00000000..8d99aa23 --- /dev/null +++ b/src/test/resources/solid-target/solid4/output1.nq @@ -0,0 +1,5 @@ + . + . + . + + diff --git a/src/test/resources/solid-target/solid5/buildings.csv b/src/test/resources/solid-target/solid5/buildings.csv new file mode 100644 index 00000000..f57f933b --- /dev/null +++ b/src/test/resources/solid-target/solid5/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID +building1,owner1,floortile1 +building2,owner1,floortile2 +building3,owner2,floortile1 diff --git a/src/test/resources/solid-target/solid5/mapping.ttl b/src/test/resources/solid-target/solid5/mapping.ttl new file mode 100644 index 00000000..4489bbe3 --- /dev/null +++ b/src/test/resources/solid-target/solid5/mapping.ttl @@ -0,0 +1,43 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix idsa: . + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/solid5/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ rr:template "http://example.com/{BuildingID}" ]; + rr:predicateObjectMap [ + rr:predicate o:has-floor-tile; + rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}" ]; + rr:graphMap [ + a rr:GraphMap; + rr:constant ex:BuildingsGraph; + rml:logicalTarget ; + ]; + ]. + + rmlt:target [ + #rmlt:serialization formats:Turtle; + a rmli:SolidResourceTarget; + rmli:resource "http://localhost:3000/example/building"; + idsa:userAuthentication [ + idsa:authUsername "hello@example.com"; + idsa:authPassword "abc123"; + solid:oidcIssuer ; + rmli:webId + ]; +]. + diff --git a/src/test/resources/solid-target/solid5/output1.nq b/src/test/resources/solid-target/solid5/output1.nq new file mode 100644 index 00000000..8d99aa23 --- /dev/null +++ b/src/test/resources/solid-target/solid5/output1.nq @@ -0,0 +1,5 @@ + . + . + . + + From 00eed1574dbf2d08cac804b28efaa7b72bff945a Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 8 Oct 2024 17:02:14 +0200 Subject: [PATCH 019/127] updated changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8890ebe9..bcf84942 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Added - CLI option `--convert-mapping` to convert your existing R2RML and older RML mappings to the latest version by the W3C Community Group. +- Solid related targets ## [7.1.2] - 2024-09-19 From bc14cada191819223ed3b8b5fbd28ac36149c442 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 8 Oct 2024 17:44:31 +0200 Subject: [PATCH 020/127] SolidTarget, SolidResourceTarget, SolidAclTarget: improvements Implemented toString(), changed Boolean to boolean --- src/main/java/be/ugent/rml/target/SolidAclTarget.java | 5 +++++ src/main/java/be/ugent/rml/target/SolidResourceTarget.java | 5 +++++ src/main/java/be/ugent/rml/target/SolidTarget.java | 6 +++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/be/ugent/rml/target/SolidAclTarget.java b/src/main/java/be/ugent/rml/target/SolidAclTarget.java index 1f5e5c88..78a659c8 100644 --- a/src/main/java/be/ugent/rml/target/SolidAclTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidAclTarget.java @@ -24,5 +24,10 @@ public boolean equals(Object o) { return false; } } + + @Override + public String toString() { + return "acl for " + this.solidTargetInfo.get("resourceUrl"); + } } diff --git a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java index 630d19b1..c63357d7 100644 --- a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java @@ -24,5 +24,10 @@ public boolean equals(Object o) { return false; } } + + @Override + public String toString() { + return this.solidTargetInfo.get("resourceUrl").toString(); + } } diff --git a/src/main/java/be/ugent/rml/target/SolidTarget.java b/src/main/java/be/ugent/rml/target/SolidTarget.java index 3f5b7491..d76b86a0 100644 --- a/src/main/java/be/ugent/rml/target/SolidTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidTarget.java @@ -1,7 +1,6 @@ package be.ugent.rml.target; import be.ugent.rml.store.Quad; -import be.ugent.rml.store.QuadStore; import org.apache.http.client.HttpResponseException; import org.json.JSONObject; import org.slf4j.Logger; @@ -22,7 +21,7 @@ public abstract class SolidTarget implements Target { protected final JSONObject solidTargetInfo; private final List metadata; private String solidHelperUrl; - private Boolean solidHelperDocker; + private boolean solidHelperDocker; protected String solidHelperPath; private ByteArrayOutputStream byteArrayOutputStream; private static final Logger logger = LoggerFactory.getLogger(SolidTarget.class); @@ -52,7 +51,7 @@ public void setSolidHelperUrl(String solidHelperUrl){ this.solidHelperUrl = solidHelperUrl; } - public void setSolidHelperDocker(Boolean solidHelperDocker){ + public void setSolidHelperDocker(boolean solidHelperDocker){ this.solidHelperDocker = solidHelperDocker; } @@ -97,6 +96,7 @@ public void close() { logger.debug("Closing target"); try { if (solidHelperDocker) { + //TODO move the docker image to an imec account container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper:latest")) .withExposedPorts(8080) .withCommand("npm","start") From 10a4ee302f88fac98f4e0e0afe9d00a55ce38f6f Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 8 Oct 2024 17:46:07 +0200 Subject: [PATCH 021/127] SolidTargetTest: put testcontainer in try clause --- .../java/be/ugent/rml/SolidTargetTest.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index fa4c9d98..1ac9e665 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -87,18 +87,22 @@ void doMappingSolid(String mapPath, String resourceUrl, String outPath, String u } void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, String[] users) throws Exception { - GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper-and-testpods:latest")) - .withExposedPorts(8080) - .withCommand("npm","start") - .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200)); - container.start(); - String address = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/"; - Main.run(("-m " + mapPath + " -shu " + address).split(" ")); - int i = 0; - while (i < resourceUrls.length) { - JSONObject solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); - compareResourceWithOutput(outPaths[i], solidTargetInfo, address); - i++; + try { + GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper-and-testpods:latest")) + .withExposedPorts(8080) + .withCommand("npm", "start") + .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200)); + container.start(); + String address = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/"; + Main.run(("-m " + mapPath + " -shu " + address).split(" ")); + int i = 0; + while (i < resourceUrls.length) { + JSONObject solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); + compareResourceWithOutput(outPaths[i], solidTargetInfo, address); + i++; + } + } catch (Exception e) { + e.printStackTrace(); } } From 650e9b36b66618a6286170ba6974ee91d1586aef Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 14 Oct 2024 09:56:40 +0200 Subject: [PATCH 022/127] reset build number --- buildNumber.properties | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/buildNumber.properties b/buildNumber.properties index d017058d..5dbf6ed6 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,4 @@ #maven.buildNumber.plugin properties file -#Tue Oct 08 15:14:28 CEST 2024 -buildNumber0=379 +#Tue Aug 13 08:29:04 GMT 2024 +buildNumber0=373 + From daeb42dd452ba634a1801d604dbabf310535a00c Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 14 Oct 2024 10:03:24 +0200 Subject: [PATCH 023/127] SolidAclTarget and SolidResourceTarget: optimized equal function --- src/main/java/be/ugent/rml/target/SolidAclTarget.java | 1 - src/main/java/be/ugent/rml/target/SolidResourceTarget.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/be/ugent/rml/target/SolidAclTarget.java b/src/main/java/be/ugent/rml/target/SolidAclTarget.java index 78a659c8..b92fbe91 100644 --- a/src/main/java/be/ugent/rml/target/SolidAclTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidAclTarget.java @@ -16,7 +16,6 @@ public SolidAclTarget(JSONObject solidTargetInfo, String serializationFormat, Li @Override public boolean equals(Object o) { - if (o == this) return true; if (o instanceof SolidAclTarget) { SolidAclTarget target = (SolidAclTarget) o; return this.solidTargetInfo.get("resourceUrl").equals(target.getSolidTargetInfo().get("resourceUrl")); diff --git a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java index c63357d7..88074734 100644 --- a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java @@ -16,7 +16,6 @@ public SolidResourceTarget(JSONObject solidTargetInfo, String serializationForma @Override public boolean equals(Object o) { - if (o == this) return true; if (o instanceof SolidResourceTarget) { SolidResourceTarget target = (SolidResourceTarget) o; return this.solidTargetInfo.get("resourceUrl").equals(target.getSolidTargetInfo().get("resourceUrl")); From 4b354d1c4e0a13204554570e43e2abb6dc8eb80d Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 14 Oct 2024 10:15:24 +0200 Subject: [PATCH 024/127] SolidTarget: documented constructor --- src/main/java/be/ugent/rml/target/SolidTarget.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/be/ugent/rml/target/SolidTarget.java b/src/main/java/be/ugent/rml/target/SolidTarget.java index d76b86a0..307899e9 100644 --- a/src/main/java/be/ugent/rml/target/SolidTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidTarget.java @@ -38,8 +38,10 @@ public abstract class SolidTarget implements Target { ); // TODO hdt??? /** - * This constructor ... - * + * This constructor takes a JSON object with the solid target info, the serialization format and the metadata as argument. + * @param solidTargetInfo JSON object with all the target info (resource url and authentication info) + * @param serializationFormat String with the serialization format + * @param metadata a list of Quads containing metadata */ public SolidTarget(JSONObject solidTargetInfo, String serializationFormat, List metadata) throws IOException { this.solidTargetInfo = solidTargetInfo; @@ -120,7 +122,7 @@ public void close() { OutputStream out = connection.getOutputStream(); this.solidTargetInfo.put("data", this.byteArrayOutputStream.toString(StandardCharsets.UTF_8)); // reset the outputstream to empty memory - this.byteArrayOutputStream = new ByteArrayOutputStream(); + this.byteArrayOutputStream.reset(); this.solidTargetInfo.put("contentType", serializationFormats.get(this.serializationFormat)); out.write((solidTargetInfo.toString()).getBytes(StandardCharsets.UTF_8)); @@ -135,7 +137,7 @@ public void close() { } } catch (Exception e) { - logger.error("Failed to close target for {} to {}: {}", solidHelperPath, this.solidTargetInfo.get("resourceUrl"), e); + logger.error("Failed to close target for {} to {}= {}", solidHelperPath, this.solidTargetInfo.get("resourceUrl"), e.getMessage()); } finally { if(container != null) { From db2552f0d26a55c753c84c9f55e4bef2cb0849c4 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 14 Oct 2024 10:18:55 +0200 Subject: [PATCH 025/127] TargetFactory: added space above function parseSolidTarget --- src/main/java/be/ugent/rml/target/TargetFactory.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index e367a828..d985022c 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -373,6 +373,7 @@ else if (location.endsWith(".jsonld")) { throw new Error("Logical Target " + logicalTarget.getValue() + " does not have target."); } } + private JSONObject parseSolidTarget(QuadStore rmlStore, Term t, String resource){ Term login = getRequiredValue(t, new NamedNode(NAMESPACES.IDSA + "userAuthentication"), rmlStore); String email = getRequiredValue(login, new NamedNode(NAMESPACES.IDSA + "authUsername"), rmlStore).getValue(); From 9c7962a1e533208d6d542af23784821b9e4b7178 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 14 Oct 2024 11:21:06 +0200 Subject: [PATCH 026/127] SolidTargetTest: corrected the doMappingSolid method --- src/test/java/be/ugent/rml/SolidTargetTest.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index 1ac9e665..7c61dc43 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -87,11 +87,10 @@ void doMappingSolid(String mapPath, String resourceUrl, String outPath, String u } void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, String[] users) throws Exception { - try { - GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper-and-testpods:latest")) - .withExposedPorts(8080) - .withCommand("npm", "start") - .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200)); + try (GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper-and-testpods:latest")) + .withExposedPorts(8080) + .withCommand("npm", "start") + .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200));) { container.start(); String address = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/"; Main.run(("-m " + mapPath + " -shu " + address).split(" ")); @@ -101,8 +100,6 @@ void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, St compareResourceWithOutput(outPaths[i], solidTargetInfo, address); i++; } - } catch (Exception e) { - e.printStackTrace(); } } From 80501f864719b4009031fb2f47befdd620ab25c0 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 15 Oct 2024 08:55:04 +0200 Subject: [PATCH 027/127] SolidTarget, SolidAclTarget, SolidResourceTarget, TargetFactory: reducing the use of JSONObject --- .../java/be/ugent/rml/target/SolidAclTarget.java | 4 ++-- .../be/ugent/rml/target/SolidResourceTarget.java | 4 ++-- src/main/java/be/ugent/rml/target/SolidTarget.java | 11 ++++++----- .../java/be/ugent/rml/target/TargetFactory.java | 14 +++++--------- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/main/java/be/ugent/rml/target/SolidAclTarget.java b/src/main/java/be/ugent/rml/target/SolidAclTarget.java index b92fbe91..71b9babb 100644 --- a/src/main/java/be/ugent/rml/target/SolidAclTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidAclTarget.java @@ -1,15 +1,15 @@ package be.ugent.rml.target; import be.ugent.rml.store.Quad; -import org.json.JSONObject; import java.io.IOException; import java.util.List; +import java.util.Map; public class SolidAclTarget extends SolidTarget { - public SolidAclTarget(JSONObject solidTargetInfo, String serializationFormat, List metadata) throws IOException { + public SolidAclTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { super(solidTargetInfo, serializationFormat, metadata); solidHelperPath = "addAcl"; } diff --git a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java index 88074734..4441e8cd 100644 --- a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java @@ -1,15 +1,15 @@ package be.ugent.rml.target; import be.ugent.rml.store.Quad; -import org.json.JSONObject; import java.io.IOException; import java.util.List; +import java.util.Map; public class SolidResourceTarget extends SolidTarget { - public SolidResourceTarget(JSONObject solidTargetInfo, String serializationFormat, List metadata) throws IOException { + public SolidResourceTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { super(solidTargetInfo, serializationFormat, metadata); solidHelperPath = "addResource"; } diff --git a/src/main/java/be/ugent/rml/target/SolidTarget.java b/src/main/java/be/ugent/rml/target/SolidTarget.java index 307899e9..ae8be738 100644 --- a/src/main/java/be/ugent/rml/target/SolidTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidTarget.java @@ -18,7 +18,7 @@ public abstract class SolidTarget implements Target { - protected final JSONObject solidTargetInfo; + protected final Map solidTargetInfo; private final List metadata; private String solidHelperUrl; private boolean solidHelperDocker; @@ -43,7 +43,7 @@ public abstract class SolidTarget implements Target { * @param serializationFormat String with the serialization format * @param metadata a list of Quads containing metadata */ - public SolidTarget(JSONObject solidTargetInfo, String serializationFormat, List metadata) throws IOException { + public SolidTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { this.solidTargetInfo = solidTargetInfo; this.metadata = metadata; this.serializationFormat = serializationFormat; @@ -79,7 +79,7 @@ public String getSerializationFormat() { * This method returns the url of the Solid pod target //TODO adapt * @return url. */ - public JSONObject getSolidTargetInfo() { + public Map getSolidTargetInfo() { return this.solidTargetInfo; } @@ -124,8 +124,9 @@ public void close() { // reset the outputstream to empty memory this.byteArrayOutputStream.reset(); this.solidTargetInfo.put("contentType", serializationFormats.get(this.serializationFormat)); - - out.write((solidTargetInfo.toString()).getBytes(StandardCharsets.UTF_8)); + // use JSONObject to escape all special characters + JSONObject jsonObject = new JSONObject(this.solidTargetInfo); + out.write((jsonObject.toString()).getBytes(StandardCharsets.UTF_8)); // Close out stream out.close(); diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index d985022c..9c82c9c1 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -7,16 +7,12 @@ import be.ugent.rml.term.Literal; import be.ugent.rml.term.NamedNode; import be.ugent.rml.term.Term; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.time.Instant; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; public class TargetFactory { @@ -351,14 +347,14 @@ else if (location.endsWith(".jsonld")) { case NAMESPACES.RMLI + "SolidResourceTarget": { logger.debug("Target is a document on a resource on a Solid Pod"); String resource = getRequiredValue(t,new NamedNode(NAMESPACES.RMLI + "resource"), rmlStore).getValue(); - JSONObject solidTargetInfo = parseSolidTarget(rmlStore, t, resource); + Map solidTargetInfo = parseSolidTarget(rmlStore, t, resource); target = new SolidResourceTarget(solidTargetInfo, serializationFormat, metadata); break; } case NAMESPACES.RMLI + "SolidAclTarget": { logger.debug("Target is a acl document for a resource on a Solid Pod"); String resource = getRequiredValue(t,new NamedNode(NAMESPACES.RMLI + "forResource"), rmlStore).getValue(); - JSONObject solidTargetInfo = parseSolidTarget(rmlStore, t, resource); + Map solidTargetInfo = parseSolidTarget(rmlStore, t, resource); target = new SolidAclTarget(solidTargetInfo, serializationFormat, metadata); break; } @@ -374,14 +370,14 @@ else if (location.endsWith(".jsonld")) { } } - private JSONObject parseSolidTarget(QuadStore rmlStore, Term t, String resource){ + private Map parseSolidTarget(QuadStore rmlStore, Term t, String resource){ Term login = getRequiredValue(t, new NamedNode(NAMESPACES.IDSA + "userAuthentication"), rmlStore); String email = getRequiredValue(login, new NamedNode(NAMESPACES.IDSA + "authUsername"), rmlStore).getValue(); String password = getRequiredValue(login, new NamedNode(NAMESPACES.IDSA + "authPassword"), rmlStore).getValue(); String oidcIssuer = getRequiredValue(login, new NamedNode(NAMESPACES.SOLID + "oidcIssuer"), rmlStore).getValue(); String webId = getRequiredValue(login, new NamedNode(NAMESPACES.RMLI + "webId"), rmlStore).getValue(); // because this info will need to be sent over http in a JSON format, it is immediately stored in a JSONObject - JSONObject solidTargetInfo = new JSONObject(); + HashMap solidTargetInfo = new HashMap(); solidTargetInfo.put("email", email); solidTargetInfo.put("password",password); solidTargetInfo.put("serverUrl", oidcIssuer); From 849ce7911743b866f17f659a2ed381492b2d4b45 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 15 Oct 2024 16:40:03 +0200 Subject: [PATCH 028/127] TargetFactory, SolidTarget, SolidResourceTarget, SolidAclTarget: adapted the type of the map for solidTargetInfo. It contains only Strings so the type can be Map --- src/main/java/be/ugent/rml/target/SolidAclTarget.java | 2 +- .../java/be/ugent/rml/target/SolidResourceTarget.java | 2 +- src/main/java/be/ugent/rml/target/SolidTarget.java | 6 +++--- src/main/java/be/ugent/rml/target/TargetFactory.java | 8 ++++---- src/test/java/be/ugent/rml/SolidTargetTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/be/ugent/rml/target/SolidAclTarget.java b/src/main/java/be/ugent/rml/target/SolidAclTarget.java index 71b9babb..ebe89046 100644 --- a/src/main/java/be/ugent/rml/target/SolidAclTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidAclTarget.java @@ -9,7 +9,7 @@ public class SolidAclTarget extends SolidTarget { - public SolidAclTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { + public SolidAclTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { super(solidTargetInfo, serializationFormat, metadata); solidHelperPath = "addAcl"; } diff --git a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java index 4441e8cd..c0523c80 100644 --- a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java @@ -9,7 +9,7 @@ public class SolidResourceTarget extends SolidTarget { - public SolidResourceTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { + public SolidResourceTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { super(solidTargetInfo, serializationFormat, metadata); solidHelperPath = "addResource"; } diff --git a/src/main/java/be/ugent/rml/target/SolidTarget.java b/src/main/java/be/ugent/rml/target/SolidTarget.java index ae8be738..9fdc937d 100644 --- a/src/main/java/be/ugent/rml/target/SolidTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidTarget.java @@ -18,7 +18,7 @@ public abstract class SolidTarget implements Target { - protected final Map solidTargetInfo; + protected final Map solidTargetInfo; private final List metadata; private String solidHelperUrl; private boolean solidHelperDocker; @@ -43,7 +43,7 @@ public abstract class SolidTarget implements Target { * @param serializationFormat String with the serialization format * @param metadata a list of Quads containing metadata */ - public SolidTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { + public SolidTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { this.solidTargetInfo = solidTargetInfo; this.metadata = metadata; this.serializationFormat = serializationFormat; @@ -79,7 +79,7 @@ public String getSerializationFormat() { * This method returns the url of the Solid pod target //TODO adapt * @return url. */ - public Map getSolidTargetInfo() { + public Map getSolidTargetInfo() { return this.solidTargetInfo; } diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index 9c82c9c1..f1ae751e 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -347,14 +347,14 @@ else if (location.endsWith(".jsonld")) { case NAMESPACES.RMLI + "SolidResourceTarget": { logger.debug("Target is a document on a resource on a Solid Pod"); String resource = getRequiredValue(t,new NamedNode(NAMESPACES.RMLI + "resource"), rmlStore).getValue(); - Map solidTargetInfo = parseSolidTarget(rmlStore, t, resource); + Map solidTargetInfo = parseSolidTarget(rmlStore, t, resource); target = new SolidResourceTarget(solidTargetInfo, serializationFormat, metadata); break; } case NAMESPACES.RMLI + "SolidAclTarget": { logger.debug("Target is a acl document for a resource on a Solid Pod"); String resource = getRequiredValue(t,new NamedNode(NAMESPACES.RMLI + "forResource"), rmlStore).getValue(); - Map solidTargetInfo = parseSolidTarget(rmlStore, t, resource); + Map solidTargetInfo = parseSolidTarget(rmlStore, t, resource); target = new SolidAclTarget(solidTargetInfo, serializationFormat, metadata); break; } @@ -370,14 +370,14 @@ else if (location.endsWith(".jsonld")) { } } - private Map parseSolidTarget(QuadStore rmlStore, Term t, String resource){ + private Map parseSolidTarget(QuadStore rmlStore, Term t, String resource){ Term login = getRequiredValue(t, new NamedNode(NAMESPACES.IDSA + "userAuthentication"), rmlStore); String email = getRequiredValue(login, new NamedNode(NAMESPACES.IDSA + "authUsername"), rmlStore).getValue(); String password = getRequiredValue(login, new NamedNode(NAMESPACES.IDSA + "authPassword"), rmlStore).getValue(); String oidcIssuer = getRequiredValue(login, new NamedNode(NAMESPACES.SOLID + "oidcIssuer"), rmlStore).getValue(); String webId = getRequiredValue(login, new NamedNode(NAMESPACES.RMLI + "webId"), rmlStore).getValue(); // because this info will need to be sent over http in a JSON format, it is immediately stored in a JSONObject - HashMap solidTargetInfo = new HashMap(); + HashMap solidTargetInfo = new HashMap(); solidTargetInfo.put("email", email); solidTargetInfo.put("password",password); solidTargetInfo.put("serverUrl", oidcIssuer); diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index 7c61dc43..c62e432e 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -90,7 +90,7 @@ void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, St try (GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper-and-testpods:latest")) .withExposedPorts(8080) .withCommand("npm", "start") - .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200));) { + .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200))) { container.start(); String address = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/"; Main.run(("-m " + mapPath + " -shu " + address).split(" ")); From 923f07bc399bb5ed0935f7120db49b88c9476b18 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Wed, 23 Oct 2024 11:44:45 +0200 Subject: [PATCH 029/127] WIP: Initial implementation of solid target purely in Java. TODO: the right Docker container needs to be started for tests. --- pom.xml | 5 + src/main/java/be/ugent/rml/cli/Main.java | 25 +- .../java/be/ugent/rml/target/SolidTarget.java | 67 +----- .../ugent/rml/target/SolidTargetHelper.java | 224 ++++++++++++++++++ .../be/ugent/rml/target/TargetFactory.java | 3 +- .../java/be/ugent/rml/SolidTargetTest.java | 40 ++-- 6 files changed, 260 insertions(+), 104 deletions(-) create mode 100644 src/main/java/be/ugent/rml/target/SolidTargetHelper.java diff --git a/pom.xml b/pom.xml index 83b376d9..be972ba0 100644 --- a/pom.xml +++ b/pom.xml @@ -293,6 +293,11 @@ dataio 1.3.1 + + org.bitbucket.b_c + jose4j + 0.9.6 + org.testcontainers diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index 2deaca34..d80a0be2 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -11,7 +11,6 @@ import be.ugent.rml.store.Quad; import be.ugent.rml.store.QuadStore; import be.ugent.rml.store.RDF4JStore; -import be.ugent.rml.target.SolidTarget; import be.ugent.rml.target.Target; import be.ugent.rml.target.TargetFactory; import be.ugent.rml.term.NamedNode; @@ -162,17 +161,6 @@ public static void run(String[] args, String basePath) throws Exception { .longOpt("convert-mapping") .desc("Only convert the mapping to the latest RML specification by the W3C Community Group") .build(); - // temporary solution until the oidc authentication in is implemented in JAVA - Option solidHelperUrlOption = Option.builder("shu") - .longOpt("solidHelperUrl") - .desc("the url on which the javascript helper application for Solid targets can be reached, default http://localhost:8080/") - .hasArg() - .build(); - // temporary solution until the oidc authentication in is implemented in JAVA - Option solidHelperDockerOption = Option.builder("shd") - .longOpt("solidHelperDocker") - .desc("select this option when the docker with solid target helper inside RMLMapper is needed") - .build(); options.addOption(mappingdocOption); options.addOption(privateSecurityDataOption); @@ -193,8 +181,6 @@ public static void run(String[] args, String basePath) throws Exception { options.addOption(baseIriOption); options.addOption(provideOwnEOFMarkerOption); options.addOption(convertMapping); - options.addOption(solidHelperUrlOption); - options.addOption(solidHelperDockerOption); CommandLineParser parser = new DefaultParser(); try { @@ -468,10 +454,7 @@ public static void run(String[] args, String basePath) throws Exception { IDLabFunctions.saveState(); - String solidHelperUrl = getPriorityOptionValue(solidHelperUrlOption, lineArgs, configFile, "http://localhost:8080/"); - Boolean solidHelperDocker = checkOptionPresence(solidHelperDockerOption, lineArgs, configFile); - - writeOutputTargets(targets, rmlStore, basePath, outputFile, outputFormat, solidHelperUrl, solidHelperDocker); + writeOutputTargets(targets, rmlStore, basePath, outputFile, outputFormat); } // Get stop timestamp for post mapping metadata @@ -495,7 +478,7 @@ public static void run(String[] args, String basePath) throws Exception { } } - private static void writeOutputTargets(Map targets, QuadStore rmlStore, String basePath, String outputFileDefault, String outputFormatDefault, String solidHelperUrl, Boolean solidHelperDocker) throws Exception { + private static void writeOutputTargets(Map targets, QuadStore rmlStore, String basePath, String outputFileDefault, String outputFormatDefault) throws Exception { boolean hasNoResults = true; logger.debug("Writing to Targets: {}", targets.keySet()); @@ -532,10 +515,6 @@ private static void writeOutputTargets(Map targets, QuadStore r else { logger.debug("Exporting to Target: {}", term); Target target = targetFactory.getTarget(term, rmlStore, store); - if((target instanceof SolidTarget)) { - ((SolidTarget) target).setSolidHelperUrl(solidHelperUrl); - ((SolidTarget) target).setSolidHelperDocker(solidHelperDocker); - } if (store.size() > 1) { logger.info("{} quads were generated for {} Target", store.size(), term); } else { diff --git a/src/main/java/be/ugent/rml/target/SolidTarget.java b/src/main/java/be/ugent/rml/target/SolidTarget.java index 9fdc937d..fe12b7ff 100644 --- a/src/main/java/be/ugent/rml/target/SolidTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidTarget.java @@ -1,29 +1,22 @@ package be.ugent.rml.target; import be.ugent.rml.store.Quad; -import org.apache.http.client.HttpResponseException; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.*; -import java.net.HttpURLConnection; -import java.net.URL; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.utility.DockerImageName; public abstract class SolidTarget implements Target { protected final Map solidTargetInfo; private final List metadata; - private String solidHelperUrl; - private boolean solidHelperDocker; protected String solidHelperPath; - private ByteArrayOutputStream byteArrayOutputStream; + private final ByteArrayOutputStream byteArrayOutputStream; private static final Logger logger = LoggerFactory.getLogger(SolidTarget.class); private final String serializationFormat; @@ -43,19 +36,12 @@ public abstract class SolidTarget implements Target { * @param serializationFormat String with the serialization format * @param metadata a list of Quads containing metadata */ - public SolidTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { + public SolidTarget(Map solidTargetInfo, String serializationFormat, List metadata) { this.solidTargetInfo = solidTargetInfo; this.metadata = metadata; this.serializationFormat = serializationFormat; byteArrayOutputStream = new ByteArrayOutputStream(); } - public void setSolidHelperUrl(String solidHelperUrl){ - this.solidHelperUrl = solidHelperUrl; - } - - public void setSolidHelperDocker(boolean solidHelperDocker){ - this.solidHelperDocker = solidHelperDocker; - } /** * This method returns an OutputStream for the target. @@ -94,57 +80,18 @@ public void close() { Read the temporary file containing the exported triples. And send the output to the solid put with an authorised fetch. */ - GenericContainer container = null; logger.debug("Closing target"); try { - if (solidHelperDocker) { - //TODO move the docker image to an imec account - container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper:latest")) - .withExposedPorts(8080) - .withCommand("npm","start") - .waitingFor(Wait.forHealthcheck()); - container.start(); - solidHelperUrl = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/"; - } - // Create HTTP connection to Solid app that can handle authentication and fetch to solid pod - // Workaround to avoid the need to use javascript libraries in java - // The url can be adapted via the cli option -shu or --solidHelperUrl - // The default value is "http://localhost:8080/" - - // differentiate between ldp:Resource and acl via class - URL url = new URL(solidHelperUrl + solidHelperPath); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestProperty("Content-Type", "application/json"); - connection.setRequestProperty("Accept", "application/json"); - connection.setRequestMethod("POST"); - connection.setDoOutput(true); - - OutputStream out = connection.getOutputStream(); this.solidTargetInfo.put("data", this.byteArrayOutputStream.toString(StandardCharsets.UTF_8)); // reset the outputstream to empty memory this.byteArrayOutputStream.reset(); this.solidTargetInfo.put("contentType", serializationFormats.get(this.serializationFormat)); - // use JSONObject to escape all special characters - JSONObject jsonObject = new JSONObject(this.solidTargetInfo); - out.write((jsonObject.toString()).getBytes(StandardCharsets.UTF_8)); - - // Close out stream - out.close(); - - // Throw error if query failed (HTTP status code >= 300) - int code = connection.getResponseCode(); - if (code >= HttpURLConnection.HTTP_MULT_CHOICE) { - throw new HttpResponseException(code, "Executing Authenticated Fetch to for " + solidHelperPath + " to " + this.solidTargetInfo.get("resourceUrl") + " failed (" + code + ")"); - } + SolidTargetHelper helper = new SolidTargetHelper(); + helper.send(solidTargetInfo); } catch (Exception e) { logger.error("Failed to close target for {} to {}= {}", solidHelperPath, this.solidTargetInfo.get("resourceUrl"), e.getMessage()); } - finally { - if(container != null) { - container.stop(); - } - } } @Override diff --git a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java b/src/main/java/be/ugent/rml/target/SolidTargetHelper.java new file mode 100644 index 00000000..1f4351d2 --- /dev/null +++ b/src/main/java/be/ugent/rml/target/SolidTargetHelper.java @@ -0,0 +1,224 @@ +package be.ugent.rml.target; + + +import org.apache.http.HttpStatus; +import org.jose4j.jwk.EcJwkGenerator; +import org.jose4j.jwk.EllipticCurveJsonWebKey; +import org.jose4j.jws.AlgorithmIdentifiers; +import org.jose4j.jws.JsonWebSignature; +import org.jose4j.jwt.JwtClaims; +import org.jose4j.keys.EllipticCurves; +import org.jose4j.lang.JoseException; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.Map; + +/** + * SolidTargetHelper helps writing data to a Solid server, taking care of the Solid authorization flow. + */ +public class SolidTargetHelper { + private static final Logger log = LoggerFactory.getLogger(SolidTargetHelper.class); + private final EllipticCurveJsonWebKey jwk; + + /** + * + * Constructs a new SolidTargetHelper instance. A new private + public key pair + * gets generated which is used for communication with the Solid server, more + * specifically for Distributed Proof of Possession (DPoP). + * @throws JoseException Generating the private/public key pair goes wrong. + */ + public SolidTargetHelper() throws JoseException { + jwk = EcJwkGenerator.generateJwk(EllipticCurves.P256); + } + + /** + * Sends data to a Solid pod using Solid OIDC. + * @param solidInfo A map with all necessary data. The map should contain following keys: + * serverUrl, webId, email, password, resourceUrl, contentType, data + * @throws Exception Something goes wrong. + */ + void send(Map solidInfo) throws Exception { + + // See https://blog.stackademic.com/how-dpop-works-a-guide-to-proof-of-possession-for-web-tokens-cbeac2d4e43c + // for a simple and clear description of how DPoP works. + + try { + // TODO: this implementation is tailored to the Community Solid Server and thus uses one URL for authorization server and solid server. + String serverUrl = solidInfo.get("serverUrl"); + String webId = solidInfo.get("webId"); + String email = solidInfo.get("email"); + String password = solidInfo.get("password"); + String resourceUrl = solidInfo.get("resourceUrl"); + String contentType = solidInfo.get("contentType"); + String data = solidInfo.get("data"); + + // Initialize a HTTP client + HttpClient httpClient = HttpClient.newBuilder() + .version(HttpClient.Version.HTTP_1_1) // The Community Solid Server only accepts HTTP 1.1 and complains about upgrade headers if you don't specify this. + .build(); + + + ////// Get account controls and retrieve login URL ////// + HttpRequest accountInfoRequest = HttpRequest.newBuilder(URI.create(serverUrl + ".account/")) + .GET().build(); + HttpResponse accountInfoResponse = httpClient.send(accountInfoRequest, HttpResponse.BodyHandlers.ofString()); + String accountInfoStr = accountInfoResponse.body(); + if (accountInfoResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not get account info: {}", accountInfoStr); + throw new Exception("Could not get account info: " + accountInfoStr); + } + JSONObject accountInfo = new JSONObject(accountInfoStr); + String passwordLoginURL = accountInfo.getJSONObject("controls").getJSONObject("password").getString("login"); + log.debug("Found login URL: {}", passwordLoginURL); + + + ////// Log in using e-mail and password and get authorization token ////// + String loginMessage = "{\"email\": \"" + email + "\",\"password\":\"" + password + "\"}"; + HttpRequest loginRequest = HttpRequest.newBuilder(URI.create(passwordLoginURL)) + .POST(HttpRequest.BodyPublishers.ofString(loginMessage, StandardCharsets.UTF_8)) + .setHeader("Content-Type", "application/json") + .build(); + HttpResponse loginResponse = httpClient.send(loginRequest, HttpResponse.BodyHandlers.ofString()); + String loginInfoStr = loginResponse.body(); + if (loginResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not log in: {}", loginInfoStr); + throw new Exception("Could not get log in: " + loginInfoStr); + } + JSONObject loginInfo = new JSONObject(loginInfoStr); + String authorizationToken = loginInfo.getString("authorization"); + log.debug("Found authorization token."); + + + ////// Use authorization token to get client credentials URL, added to account info ////// + HttpRequest authorizedAccountInfoRequest = HttpRequest.newBuilder(URI.create(serverUrl + ".account/")) + .GET() + .setHeader("Authorization", "CSS-Account-Token " + authorizationToken) + .build(); + HttpResponse authorizedAccountInfoResponse = httpClient.send(authorizedAccountInfoRequest, HttpResponse.BodyHandlers.ofString()); + String authorizedAccountInfoStr = authorizedAccountInfoResponse.body(); + if (authorizedAccountInfoResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not get account info: {}", authorizedAccountInfoStr); + throw new Exception("Could not get account info: " + authorizedAccountInfoStr); + } + JSONObject authorizedAccountInfo = new JSONObject(authorizedAccountInfoStr); + String clientCredentialsURL = authorizedAccountInfo.getJSONObject("controls").getJSONObject("account").getString("clientCredentials"); + log.debug("Found client credentials URL: {}", clientCredentialsURL); + + + ////// Post WebID and token prefix to client credentials URL to get client credentials, to be used at oidc endpoint later on ////// + String webIdAndTokenMessage = "{\"name\": \"my-token\",\"webId\":\"" + webId + "\"}"; + HttpRequest getOIDCTokenRequest = HttpRequest.newBuilder(URI.create(clientCredentialsURL)) + .POST(HttpRequest.BodyPublishers.ofString(webIdAndTokenMessage, StandardCharsets.UTF_8)) + .setHeader("Authorization", "CSS-Account-Token " + authorizationToken) + .setHeader("Content-Type", "application/json") + .build(); + HttpResponse getOIDCTokenResponse = httpClient.send(getOIDCTokenRequest, HttpResponse.BodyHandlers.ofString()); + String clientCredentialsStr = getOIDCTokenResponse.body(); + if (getOIDCTokenResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not get OpenID Connect token info: {}", clientCredentialsStr); + throw new Exception("Could not get OpenID Connect token info: " + clientCredentialsStr); + } + JSONObject clientCredentials = new JSONObject(clientCredentialsStr); + String clientCredentialsId = clientCredentials.getString("id"); + log.debug("Found Client credentials. id: {}", clientCredentialsId); + String clientCredentialsSecret = clientCredentials.getString("secret"); + + + ////// Get oidc info, used to obtain oidc token endpoints ////// + // GET /.well-known/openid-configuration HTTP/1.1 + HttpRequest oidcInfoRequest = HttpRequest.newBuilder(URI.create(serverUrl + ".well-known/openid-configuration")) + .GET().build(); + HttpResponse oidcInfoResponse = httpClient.send(oidcInfoRequest, HttpResponse.BodyHandlers.ofString()); + String oidcInfoStr = oidcInfoResponse.body(); + if (oidcInfoResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not get OpenID Connect info: {}", oidcInfoStr); + throw new Exception("Could not get OpenID Connect info: " + oidcInfoStr); + } + JSONObject oidcInfo = new JSONObject(oidcInfoStr); + String oidcTokenEndpoint = oidcInfo.getString("token_endpoint"); + log.debug("Found oidc token endpoint: {}", oidcTokenEndpoint); + + String dpopJWT = generateJWT(oidcTokenEndpoint, "POST"); + + ////// POST a request to oidc token endpoint with client credentials to obtain an oidc access token ////// + + // Generate base64 string of client credentials + String clientCredentialsConcatenated = clientCredentialsId + ':' + clientCredentialsSecret; + String base64clientCredentials = Base64.getEncoder().encodeToString(clientCredentialsConcatenated.getBytes(StandardCharsets.UTF_8)); + + HttpRequest getOidcAccessTokenRequest = HttpRequest.newBuilder(URI.create(oidcTokenEndpoint)) + .POST(HttpRequest.BodyPublishers.ofString("grant_type=client_credentials&scope=webid", StandardCharsets.UTF_8)) + .setHeader("Authorization", "Basic " + base64clientCredentials) + .setHeader("Content-Type", "application/x-www-form-urlencoded") + .setHeader("DPoP", dpopJWT) + .build(); + HttpResponse oidcAccessTokenResponse = httpClient.send(getOidcAccessTokenRequest, HttpResponse.BodyHandlers.ofString()); + String oidcAccessTokenStr = oidcAccessTokenResponse.body(); + if (oidcAccessTokenResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not get OpenID Connect access token: {}", oidcAccessTokenStr); + throw new Exception("Could not get OpenID Connect info: " + oidcAccessTokenStr); + } + JSONObject oidcAccessToken = new JSONObject(oidcAccessTokenStr); + String dpopAccessToken = oidcAccessToken.getString("access_token"); + // token_type should be 'DPoP' + // We don't use 'expires' at the moment because we send the next request immediately + // and don't know if the next request would go to the same server. This can be checked + // for in future implementations. + + ////// PUt the data ////// + // Generate new JWT token for this request + String putDataJWT = generateJWT(resourceUrl, "PUT"); + + HttpRequest putDataRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) + .PUT(HttpRequest.BodyPublishers.ofString(data, StandardCharsets.UTF_8)) + .setHeader("Authorization", "DPoP " + dpopAccessToken) + .setHeader("DPoP", putDataJWT) + .setHeader("Content-Type", contentType) + .build(); + HttpResponse putDataResponse = httpClient.send(putDataRequest, HttpResponse.BodyHandlers.ofString()); + if (putDataResponse.statusCode() != HttpStatus.SC_CREATED) { + String putDataStr = putDataResponse.body(); + log.error("Could not create resource for URL {}: {}", resourceUrl, putDataStr); + throw new Exception("Could not create resource for URL: " + oidcAccessTokenStr + ": " + putDataStr); + } + + } catch (Throwable e) { // This is to catch runtime exceptions as well. + throw new Exception(e); + } + + } + + /** + * Generates a JSON Web Token for a given URL and HTTP method. + * @param url The endpoint of the request using this token. + * @param method The HTTP method of the request using this token. + * @return The signed and serialized generated JWT. + * @throws JoseException Olé José: something goes wrong generating the token. + */ + private String generateJWT(final String url, final String method) throws JoseException { + // set claims + JwtClaims claims = new JwtClaims(); + claims.setGeneratedJwtId(); // jti claim + claims.setClaim("htm", method); + claims.setClaim("htu", url); + claims.setIssuedAtToNow(); // iat claim + + // create jws + JsonWebSignature jws = new JsonWebSignature(); + jws.setPayload(claims.toJson()); + jws.setKey(jwk.getPrivateKey()); + jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.ECDSA_USING_P256_CURVE_AND_SHA256); // alg header + jws.setHeader("typ", "dpop+jwt"); + jws.setJwkHeader(jwk); + jws.sign(); + return jws.getCompactSerialization(); + } +} diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index f1ae751e..c6b2bbe8 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -376,8 +376,7 @@ private Map parseSolidTarget(QuadStore rmlStore, Term t, String r String password = getRequiredValue(login, new NamedNode(NAMESPACES.IDSA + "authPassword"), rmlStore).getValue(); String oidcIssuer = getRequiredValue(login, new NamedNode(NAMESPACES.SOLID + "oidcIssuer"), rmlStore).getValue(); String webId = getRequiredValue(login, new NamedNode(NAMESPACES.RMLI + "webId"), rmlStore).getValue(); - // because this info will need to be sent over http in a JSON format, it is immediately stored in a JSONObject - HashMap solidTargetInfo = new HashMap(); + HashMap solidTargetInfo = new HashMap<>(); solidTargetInfo.put("email", email); solidTargetInfo.put("password",password); solidTargetInfo.put("serverUrl", oidcIssuer); diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index c62e432e..11e8b8f8 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -11,11 +11,6 @@ import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; -import java.time.Duration; - -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.utility.DockerImageName; public class SolidTargetTest extends TestCore { @@ -87,20 +82,27 @@ void doMappingSolid(String mapPath, String resourceUrl, String outPath, String u } void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, String[] users) throws Exception { - try (GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper-and-testpods:latest")) - .withExposedPorts(8080) - .withCommand("npm", "start") - .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200))) { - container.start(); - String address = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/"; - Main.run(("-m " + mapPath + " -shu " + address).split(" ")); - int i = 0; - while (i < resourceUrls.length) { - JSONObject solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); - compareResourceWithOutput(outPaths[i], solidTargetInfo, address); - i++; - } - } + Main.run(("-m " + mapPath).split(" ")); + // while (i < resourceUrls.length) { +// JSONObject solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); +// compareResourceWithOutput(outPaths[i], solidTargetInfo, address); +// i++; +// } + +// try (GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper-and-testpods:latest")) +// .withExposedPorts(8080) +// .withCommand("npm", "start") +// .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200))) { +// container.start(); +// String address = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/"; +// Main.run(("-m " + mapPath + " -shu " + address).split(" ")); +// int i = 0; +// while (i < resourceUrls.length) { +// JSONObject solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); +// compareResourceWithOutput(outPaths[i], solidTargetInfo, address); +// i++; +// } +// } } // get solidTargetInfo including authentication details of testpods From bb257955bda517fc5ae54fda3767fedccf35ab26 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Wed, 23 Oct 2024 11:51:56 +0200 Subject: [PATCH 030/127] Add `SolidTargetTest` to CI tests ;) --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bb7fe81e..3c616918 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -73,7 +73,7 @@ General: - '$TEST.log' parallel: matrix: - - TEST: [ArgumentsTest, MapperCSVTest, MapperJSONTest, MapperMySQLTest, MapperPostgresR2RMLTest, MapperWoTTest, ArgumentsTestMySQLTest, MapperCSVWTest, MapperLDESTest, MapperODSTest, MapperOracleDBTest, MapperPostgresXMLTest, MapperXMLTest, CustomRMLFnOMapperCSVTest, MapperEXCELTest, MapperMappingFileURLTest, MapperSPARQLTest, MetadataTest, CustomRMLFnOMapperJSONTest, CustomRMLFnOMapperTest, MapperHTMLTest, MapperMySQLR2RMLTest, MapperPostgresCSVTest, MapperSQLServerTest, OptimizationsTest, R2RMLConverterTest, QuadTest, ReadmeTest, ReadmeFunctionTest, ConformerDetectionTest, MapperNewRMLCoreCSVTest, MapperNewRMLCoreJSONTest, MapperNewRMLCoreXMLTest, MapperNewRMLCoreMySQLTest, MapperNewRMLCorePostgresTest, MapperNewRMLIOSourceTest, MapperNewRMLIOTargetTest] + - TEST: [ArgumentsTest, MapperCSVTest, MapperJSONTest, MapperMySQLTest, MapperPostgresR2RMLTest, MapperWoTTest, ArgumentsTestMySQLTest, MapperCSVWTest, MapperLDESTest, MapperODSTest, MapperOracleDBTest, MapperPostgresXMLTest, MapperXMLTest, CustomRMLFnOMapperCSVTest, MapperEXCELTest, MapperMappingFileURLTest, MapperSPARQLTest, MetadataTest, CustomRMLFnOMapperJSONTest, CustomRMLFnOMapperTest, MapperHTMLTest, MapperMySQLR2RMLTest, MapperPostgresCSVTest, MapperSQLServerTest, OptimizationsTest, R2RMLConverterTest, QuadTest, ReadmeTest, ReadmeFunctionTest, ConformerDetectionTest, MapperNewRMLCoreCSVTest, MapperNewRMLCoreJSONTest, MapperNewRMLCoreXMLTest, MapperNewRMLCoreMySQLTest, MapperNewRMLCorePostgresTest, MapperNewRMLIOSourceTest, MapperNewRMLIOTargetTest, SolidTargetTest] except: - master - development From 9a1c5885e24554a4097298702a5b305ed6ea74cc Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Thu, 24 Oct 2024 06:43:40 +0200 Subject: [PATCH 031/127] SolidTargetHelper, SolidTarget, SolidResouceTarget, SolidAclTarget: refactored the send method to addResouce, addAcl and getResouce Implemented the new methods in the related targets --- .../be/ugent/rml/target/SolidAclTarget.java | 12 +- .../ugent/rml/target/SolidResourceTarget.java | 14 +- .../java/be/ugent/rml/target/SolidTarget.java | 21 +- .../ugent/rml/target/SolidTargetHelper.java | 179 +++++++++++++++--- 4 files changed, 183 insertions(+), 43 deletions(-) diff --git a/src/main/java/be/ugent/rml/target/SolidAclTarget.java b/src/main/java/be/ugent/rml/target/SolidAclTarget.java index ebe89046..b995e80e 100644 --- a/src/main/java/be/ugent/rml/target/SolidAclTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidAclTarget.java @@ -11,7 +11,6 @@ public class SolidAclTarget extends SolidTarget { public SolidAclTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { super(solidTargetInfo, serializationFormat, metadata); - solidHelperPath = "addAcl"; } @Override @@ -28,5 +27,16 @@ public boolean equals(Object o) { public String toString() { return "acl for " + this.solidTargetInfo.get("resourceUrl"); } + + @Override + public void close() { + super.close(); + try { + SolidTargetHelper helper = new SolidTargetHelper(); + helper.addAcl(solidTargetInfo); + } catch (Exception e) { + logger.error("Failed to close Solid ACL target for {}: {}", this.solidTargetInfo.get("resourceUrl"), e.getMessage()); + } + } } diff --git a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java index c0523c80..fc6d7c31 100644 --- a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java @@ -11,7 +11,6 @@ public class SolidResourceTarget extends SolidTarget { public SolidResourceTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { super(solidTargetInfo, serializationFormat, metadata); - solidHelperPath = "addResource"; } @Override @@ -26,7 +25,18 @@ public boolean equals(Object o) { @Override public String toString() { - return this.solidTargetInfo.get("resourceUrl").toString(); + return "resource for " + this.solidTargetInfo.get("resourceUrl").toString(); + } + + @Override + public void close() { + super.close(); + try { + SolidTargetHelper helper = new SolidTargetHelper(); + helper.addResource(solidTargetInfo); + } catch (Exception e) { + logger.error("Failed to close Solid resource target for {}: {}", this.solidTargetInfo.get("resourceUrl"), e.getMessage()); + } } } diff --git a/src/main/java/be/ugent/rml/target/SolidTarget.java b/src/main/java/be/ugent/rml/target/SolidTarget.java index fe12b7ff..75fc5d01 100644 --- a/src/main/java/be/ugent/rml/target/SolidTarget.java +++ b/src/main/java/be/ugent/rml/target/SolidTarget.java @@ -15,9 +15,8 @@ public abstract class SolidTarget implements Target { protected final Map solidTargetInfo; private final List metadata; - protected String solidHelperPath; private final ByteArrayOutputStream byteArrayOutputStream; - private static final Logger logger = LoggerFactory.getLogger(SolidTarget.class); + protected final Logger logger; private final String serializationFormat; @@ -41,6 +40,7 @@ public SolidTarget(Map solidTargetInfo, String serializationForm this.metadata = metadata; this.serializationFormat = serializationFormat; byteArrayOutputStream = new ByteArrayOutputStream(); + this.logger = LoggerFactory.getLogger(SolidTarget.class); } /** @@ -78,20 +78,13 @@ public Map getSolidTargetInfo() { public void close() { /* Read the temporary file containing the exported triples. - And send the output to the solid put with an authorised fetch. + The rest of the method is handled in the subclass */ logger.debug("Closing target"); - try { - this.solidTargetInfo.put("data", this.byteArrayOutputStream.toString(StandardCharsets.UTF_8)); - // reset the outputstream to empty memory - this.byteArrayOutputStream.reset(); - this.solidTargetInfo.put("contentType", serializationFormats.get(this.serializationFormat)); - SolidTargetHelper helper = new SolidTargetHelper(); - helper.send(solidTargetInfo); - } - catch (Exception e) { - logger.error("Failed to close target for {} to {}= {}", solidHelperPath, this.solidTargetInfo.get("resourceUrl"), e.getMessage()); - } + this.solidTargetInfo.put("data", this.byteArrayOutputStream.toString(StandardCharsets.UTF_8)); + // reset the outputstream to empty memory + this.byteArrayOutputStream.reset(); + this.solidTargetInfo.put("contentType", serializationFormats.get(this.serializationFormat)); } @Override diff --git a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java b/src/main/java/be/ugent/rml/target/SolidTargetHelper.java index 1f4351d2..c5961b8d 100644 --- a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java +++ b/src/main/java/be/ugent/rml/target/SolidTargetHelper.java @@ -19,7 +19,9 @@ import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.util.Base64; +import java.util.List; import java.util.Map; +import java.util.Optional; /** * SolidTargetHelper helps writing data to a Solid server, taking care of the Solid authorization flow. @@ -28,6 +30,7 @@ public class SolidTargetHelper { private static final Logger log = LoggerFactory.getLogger(SolidTargetHelper.class); private final EllipticCurveJsonWebKey jwk; + private HttpClient httpClient; /** * * Constructs a new SolidTargetHelper instance. A new private + public key pair @@ -37,6 +40,10 @@ public class SolidTargetHelper { */ public SolidTargetHelper() throws JoseException { jwk = EcJwkGenerator.generateJwk(EllipticCurves.P256); + // Initialize a HTTP client + httpClient = HttpClient.newBuilder() + .version(HttpClient.Version.HTTP_1_1) // The Community Solid Server only accepts HTTP 1.1 and complains about upgrade headers if you don't specify this. + .build(); } /** @@ -45,7 +52,7 @@ public SolidTargetHelper() throws JoseException { * serverUrl, webId, email, password, resourceUrl, contentType, data * @throws Exception Something goes wrong. */ - void send(Map solidInfo) throws Exception { + private String getDpopAccessToken(Map solidInfo) throws Exception { // See https://blog.stackademic.com/how-dpop-works-a-guide-to-proof-of-possession-for-web-tokens-cbeac2d4e43c // for a simple and clear description of how DPoP works. @@ -56,15 +63,6 @@ void send(Map solidInfo) throws Exception { String webId = solidInfo.get("webId"); String email = solidInfo.get("email"); String password = solidInfo.get("password"); - String resourceUrl = solidInfo.get("resourceUrl"); - String contentType = solidInfo.get("contentType"); - String data = solidInfo.get("data"); - - // Initialize a HTTP client - HttpClient httpClient = HttpClient.newBuilder() - .version(HttpClient.Version.HTTP_1_1) // The Community Solid Server only accepts HTTP 1.1 and complains about upgrade headers if you don't specify this. - .build(); - ////// Get account controls and retrieve login URL ////// HttpRequest accountInfoRequest = HttpRequest.newBuilder(URI.create(serverUrl + ".account/")) @@ -173,22 +171,7 @@ void send(Map solidInfo) throws Exception { // and don't know if the next request would go to the same server. This can be checked // for in future implementations. - ////// PUt the data ////// - // Generate new JWT token for this request - String putDataJWT = generateJWT(resourceUrl, "PUT"); - - HttpRequest putDataRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) - .PUT(HttpRequest.BodyPublishers.ofString(data, StandardCharsets.UTF_8)) - .setHeader("Authorization", "DPoP " + dpopAccessToken) - .setHeader("DPoP", putDataJWT) - .setHeader("Content-Type", contentType) - .build(); - HttpResponse putDataResponse = httpClient.send(putDataRequest, HttpResponse.BodyHandlers.ofString()); - if (putDataResponse.statusCode() != HttpStatus.SC_CREATED) { - String putDataStr = putDataResponse.body(); - log.error("Could not create resource for URL {}: {}", resourceUrl, putDataStr); - throw new Exception("Could not create resource for URL: " + oidcAccessTokenStr + ": " + putDataStr); - } + return dpopAccessToken; } catch (Throwable e) { // This is to catch runtime exceptions as well. throw new Exception(e); @@ -221,4 +204,148 @@ private String generateJWT(final String url, final String method) throws JoseExc jws.sign(); return jws.getCompactSerialization(); } + + /** Adds data to a Solid pod as a resource using Solid OIDC. + * @param solidInfo A map with all necessary data. The map should contain following keys: + * serverUrl, webId, email, password, resourceUrl, contentType, data + * @throws Exception Something goes wrong. + */ + void addResource(Map solidInfo) throws Exception{ + try { + String resourceUrl = solidInfo.get("resourceUrl"); + String contentType = solidInfo.get("contentType"); + String data = solidInfo.get("data"); + + String dpopAccessToken = getDpopAccessToken(solidInfo); + + ////// PUT the data ////// + // Generate new JWT token for this request + String putDataJWT = generateJWT(resourceUrl, "PUT"); + + HttpRequest putDataRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) + .PUT(HttpRequest.BodyPublishers.ofString(data, StandardCharsets.UTF_8)) + .setHeader("Authorization", "DPoP " + dpopAccessToken) + .setHeader("DPoP", putDataJWT) + .setHeader("Content-Type", contentType) + .build(); + + HttpResponse putDataResponse = httpClient.send(putDataRequest, HttpResponse.BodyHandlers.ofString()); + if (putDataResponse.statusCode() != HttpStatus.SC_CREATED) { + String putDataStr = putDataResponse.body(); + log.error("Could not create resource for URL {}: {}", resourceUrl, putDataStr); + throw new Exception("Could not create resource for URL: " + resourceUrl + ": " + putDataStr); + } + } catch (Throwable e) { // This is to catch runtime exceptions as well. + throw new Exception(e); + } + } + + /** Adds data to a Solid pod as an ACL for a resource using Solid OIDC. + * @param solidInfo A map with all necessary data. The map should contain following keys: + * serverUrl, webId, email, password, resourceUrl, contentType, data + * @throws Exception Something goes wrong. + */ + void addAcl(Map solidInfo) throws Exception{ + try { + String resourceUrl = solidInfo.get("resourceUrl"); + String contentType = solidInfo.get("contentType"); + String data = solidInfo.get("data"); + + String dpopAccessToken = getDpopAccessToken(solidInfo); + + ////// PUT the data ////// + // Generate new JWT token for this request + String headDataJWT = generateJWT(resourceUrl, "GET"); + + HttpRequest headRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) + .GET() + .setHeader("Authorization", "DPoP " + dpopAccessToken) + .setHeader("DPoP", headDataJWT) + .build(); + + HttpResponse headResponse = httpClient.send(headRequest, HttpResponse.BodyHandlers.ofString()); + + String putDataJWT = generateJWT(resourceUrl, "PUT"); + + if (headResponse.statusCode() != HttpStatus.SC_OK) { + + HttpRequest putEmptyResourceRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) + .PUT(HttpRequest.BodyPublishers.ofString("", StandardCharsets.UTF_8)) + .setHeader("Content-Type", "application/n-quads") // to avoid bad request http error 'HTTP request body was passed without a Content-Type header' + .setHeader("Authorization", "DPoP " + dpopAccessToken) + .setHeader("DPoP", putDataJWT) + .build(); + + HttpResponse putEmptyResourceResponse = httpClient.send(putEmptyResourceRequest, HttpResponse.BodyHandlers.ofString()); + + if (putEmptyResourceResponse.statusCode() != HttpStatus.SC_CREATED) { + String putEmptyResouceStr = putEmptyResourceResponse.body(); + log.error("Could not create empty resource for URL {}: {}", resourceUrl, putEmptyResouceStr); + throw new Exception("Could not create empty resource for URL: " + resourceUrl + ": " + putEmptyResouceStr); + } + headResponse = httpClient.send(headRequest, HttpResponse.BodyHandlers.ofString()); + } + List links = headResponse.headers().map().get("link"); + boolean foundLink = false; + int index = 0; + while (!foundLink && index < links.size() ){ + String link = links.get(index); + // a better method to parse the link header in Java would be welcome ... + if (link.contains("rel=\"acl\"")) { + String linkUrl = link.substring(link.indexOf("<") + 1, link.indexOf(">")); + String putAclJWT = generateJWT(linkUrl, "PUT"); + HttpRequest putAclRequest = HttpRequest.newBuilder(URI.create(linkUrl)) + .PUT(HttpRequest.BodyPublishers.ofString(data, StandardCharsets.UTF_8)) + .setHeader("Content-Type", contentType) + .setHeader("Authorization", "DPoP " + dpopAccessToken) + .setHeader("DPoP", putAclJWT) + .build(); + HttpResponse putAclResponse = httpClient.send(putAclRequest, HttpResponse.BodyHandlers.ofString()); + + if (putAclResponse.statusCode() != HttpStatus.SC_CREATED) { + String putAclResponseStr = putAclResponse.body(); + log.error("Could not create ACL for resource with URL {}: {}", resourceUrl, putAclResponseStr); + throw new Exception("Could not create ACL for resource with URL: " + resourceUrl + ": " + putAclResponseStr); + } + foundLink = true; + } + index += 1; + } + } catch (Throwable e) { // This is to catch runtime exceptions as well. + throw new Exception(e); + } + } + + /** Retrieve data to a Solid pod using Solid OIDC. This method is only used for testing. + * @param solidInfo A map with all necessary data. The map should contain following keys: + * serverUrl, webId, email, password, resourceUrl + * @throws Exception Something goes wrong. + */ + public String getResource(Map solidInfo) throws Exception{ + try { + String resourceUrl = solidInfo.get("resourceUrl"); + String dpopAccessToken = getDpopAccessToken(solidInfo); + + ////// GET the data ////// + // Generate new JWT token for this request + String getDataJWT = generateJWT(resourceUrl, "GET"); + + HttpRequest getDataRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) + .GET() + .setHeader("Authorization", "DPoP " + dpopAccessToken) + .setHeader("DPoP", getDataJWT) + .setHeader("Accept","application/n-quads") + .build(); + + HttpResponse getDataResponse = httpClient.send(getDataRequest, HttpResponse.BodyHandlers.ofString()); + if (getDataResponse.statusCode() != HttpStatus.SC_OK) { + String getDataStr = getDataResponse.body(); + log.error("Could not create resource for URL {}: {}", resourceUrl, getDataStr); + throw new Exception("Could not create resource for URL: " + resourceUrl + ": " + getDataStr); + } + return getDataResponse.body(); + } catch (Throwable e) { // This is to catch runtime exceptions as well. + throw new Exception(e); + } + } } From 22d521d0881c3f22b17f8e1f952080b0d589b140 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Thu, 24 Oct 2024 06:46:26 +0200 Subject: [PATCH 032/127] SolidTargetTest: adapted the testcontainer to Docker The docker testcontainer contains only testpod. The host port of the docker need to be fixed, to match the paths of the resources in the mapping files and data. --- .../java/be/ugent/rml/SolidTargetTest.java | 80 +++++++++---------- 1 file changed, 38 insertions(+), 42 deletions(-) diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index 11e8b8f8..b23f0ed5 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -3,14 +3,22 @@ import be.ugent.rml.cli.Main; import be.ugent.rml.store.QuadStore; import be.ugent.rml.store.QuadStoreFactory; +import be.ugent.rml.target.SolidTargetHelper; +import com.github.dockerjava.api.model.ExposedPort; +import com.github.dockerjava.api.model.HostConfig; +import com.github.dockerjava.api.model.PortBinding; +import com.github.dockerjava.api.model.Ports; import org.eclipse.rdf4j.rio.RDFFormat; -import org.json.JSONObject; import org.junit.jupiter.api.Test; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.DockerImageName; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; public class SolidTargetTest extends TestCore { @@ -82,32 +90,29 @@ void doMappingSolid(String mapPath, String resourceUrl, String outPath, String u } void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, String[] users) throws Exception { - Main.run(("-m " + mapPath).split(" ")); - // while (i < resourceUrls.length) { -// JSONObject solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); -// compareResourceWithOutput(outPaths[i], solidTargetInfo, address); -// i++; -// } - -// try (GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-target-helper-and-testpods:latest")) -// .withExposedPorts(8080) -// .withCommand("npm", "start") -// .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200))) { -// container.start(); -// String address = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/"; -// Main.run(("-m " + mapPath + " -shu " + address).split(" ")); -// int i = 0; -// while (i < resourceUrls.length) { -// JSONObject solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); -// compareResourceWithOutput(outPaths[i], solidTargetInfo, address); -// i++; -// } -// } + // We need a fixed host port because the port is part of the pod uri (also of the webid, acl file) + // Test containers advise against the use of a fixed host port, and deprecated the related solutions + // Finally, found a workaround here: https://github.com/testcontainers/testcontainers-java/issues/256 + PortBinding portBinding = new PortBinding(Ports.Binding.bindPort(3000), new ExposedPort(3000)); + try (GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-testpods:latest")) + .withCreateContainerCmdModifier(cmd -> cmd.withHostConfig(new HostConfig().withPortBindings(portBinding))) + .withExposedPorts(3000) + .withCommand("npm", "start") + .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200))){ + container.start(); + Main.run(("-m " + mapPath).split(" ")); + int i = 0; + while (i < resourceUrls.length) { + Map solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); + compareResourceWithOutput(outPaths[i], solidTargetInfo); + i++; + } + } } // get solidTargetInfo including authentication details of testpods - private JSONObject getSolidTargetInfo(String user, String resourceUrl){ - JSONObject solidTargetInfo = new JSONObject(); + private Map getSolidTargetInfo(String user, String resourceUrl){ + Map solidTargetInfo = new HashMap(); solidTargetInfo.put("email", "hello@" + user + ".com"); solidTargetInfo.put("password","abc123"); solidTargetInfo.put("serverUrl", "http://localhost:3000/"); @@ -116,21 +121,12 @@ private JSONObject getSolidTargetInfo(String user, String resourceUrl){ return solidTargetInfo; } - private void compareResourceWithOutput(String outPath, JSONObject solidTargetInfo, String address) throws Exception { + private void compareResourceWithOutput(String outPath, Map solidTargetInfo) throws Exception { // retrieve resource from solid pod - URL url = new URL(address + "getResource"); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestProperty("content-type", "application/json"); - connection.setRequestProperty("Accept", "text/plain"); - connection.setRequestMethod("POST"); - connection.setDoOutput(true); - OutputStream out = connection.getOutputStream(); - out.write((solidTargetInfo.toString()).getBytes(StandardCharsets.UTF_8)); - out.close(); - // get result - QuadStore result = QuadStoreFactory.read(connection.getInputStream(), RDFFormat.NQUADS); - connection.getInputStream().close(); - + SolidTargetHelper helper = new SolidTargetHelper(); + String response = helper.getResource(solidTargetInfo); + InputStream responseStream = new ByteArrayInputStream(response.getBytes()); + QuadStore result = QuadStoreFactory.read(responseStream, RDFFormat.NQUADS); // compare result to expected output result.removeDuplicates(); compareStores(filePathToStore(outPath), result); From 39247f117fcc394c0470b03794fc75fbd397bb3f Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 24 Oct 2024 11:18:33 +0200 Subject: [PATCH 033/127] SolidTargetHelper: use a (real) HEAD request to get ACL link; remove PUT empty resouce request to obtain ACL link, because it comes already with the first HEAD request. --- .../ugent/rml/target/SolidTargetHelper.java | 43 ++++++------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java b/src/main/java/be/ugent/rml/target/SolidTargetHelper.java index c5961b8d..79f4ccdc 100644 --- a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java +++ b/src/main/java/be/ugent/rml/target/SolidTargetHelper.java @@ -21,7 +21,6 @@ import java.util.Base64; import java.util.List; import java.util.Map; -import java.util.Optional; /** * SolidTargetHelper helps writing data to a Solid server, taking care of the Solid authorization flow. @@ -30,7 +29,7 @@ public class SolidTargetHelper { private static final Logger log = LoggerFactory.getLogger(SolidTargetHelper.class); private final EllipticCurveJsonWebKey jwk; - private HttpClient httpClient; + private final HttpClient httpClient; /** * * Constructs a new SolidTargetHelper instance. A new private + public key pair @@ -165,14 +164,11 @@ private String getDpopAccessToken(Map solidInfo) throws Exceptio throw new Exception("Could not get OpenID Connect info: " + oidcAccessTokenStr); } JSONObject oidcAccessToken = new JSONObject(oidcAccessTokenStr); - String dpopAccessToken = oidcAccessToken.getString("access_token"); + return oidcAccessToken.getString("access_token"); // token_type should be 'DPoP' // We don't use 'expires' at the moment because we send the next request immediately // and don't know if the next request would go to the same server. This can be checked // for in future implementations. - - return dpopAccessToken; - } catch (Throwable e) { // This is to catch runtime exceptions as well. throw new Exception(e); } @@ -253,38 +249,18 @@ void addAcl(Map solidInfo) throws Exception{ String dpopAccessToken = getDpopAccessToken(solidInfo); - ////// PUT the data ////// + ////// HEAD the resource to a get link to where the ACL should be put ////// // Generate new JWT token for this request - String headDataJWT = generateJWT(resourceUrl, "GET"); + String headDataJWT = generateJWT(resourceUrl, "HEAD"); HttpRequest headRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) - .GET() + .method("HEAD", HttpRequest.BodyPublishers.noBody()) .setHeader("Authorization", "DPoP " + dpopAccessToken) .setHeader("DPoP", headDataJWT) .build(); HttpResponse headResponse = httpClient.send(headRequest, HttpResponse.BodyHandlers.ofString()); - String putDataJWT = generateJWT(resourceUrl, "PUT"); - - if (headResponse.statusCode() != HttpStatus.SC_OK) { - - HttpRequest putEmptyResourceRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) - .PUT(HttpRequest.BodyPublishers.ofString("", StandardCharsets.UTF_8)) - .setHeader("Content-Type", "application/n-quads") // to avoid bad request http error 'HTTP request body was passed without a Content-Type header' - .setHeader("Authorization", "DPoP " + dpopAccessToken) - .setHeader("DPoP", putDataJWT) - .build(); - - HttpResponse putEmptyResourceResponse = httpClient.send(putEmptyResourceRequest, HttpResponse.BodyHandlers.ofString()); - - if (putEmptyResourceResponse.statusCode() != HttpStatus.SC_CREATED) { - String putEmptyResouceStr = putEmptyResourceResponse.body(); - log.error("Could not create empty resource for URL {}: {}", resourceUrl, putEmptyResouceStr); - throw new Exception("Could not create empty resource for URL: " + resourceUrl + ": " + putEmptyResouceStr); - } - headResponse = httpClient.send(headRequest, HttpResponse.BodyHandlers.ofString()); - } List links = headResponse.headers().map().get("link"); boolean foundLink = false; int index = 0; @@ -292,6 +268,8 @@ void addAcl(Map solidInfo) throws Exception{ String link = links.get(index); // a better method to parse the link header in Java would be welcome ... if (link.contains("rel=\"acl\"")) { + + ////// PUT the ACL to the found link ////// String linkUrl = link.substring(link.indexOf("<") + 1, link.indexOf(">")); String putAclJWT = generateJWT(linkUrl, "PUT"); HttpRequest putAclRequest = HttpRequest.newBuilder(URI.create(linkUrl)) @@ -311,6 +289,13 @@ void addAcl(Map solidInfo) throws Exception{ } index += 1; } + + if (!foundLink) { + String message = "Could not get ACL link for resource with URL: " + resourceUrl; + log.error(message); + throw new Exception(message); + } + } catch (Throwable e) { // This is to catch runtime exceptions as well. throw new Exception(e); } From 54714db5a85b9e7e08c5bf40163a6a0cbbfae70b Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 24 Oct 2024 11:50:51 +0200 Subject: [PATCH 034/127] WIP: log actual hostname of Solid container to see if addresses in test mappings need to be changed --- .../java/be/ugent/rml/SolidTargetTest.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index b23f0ed5..4910683e 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -93,17 +93,19 @@ void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, St // We need a fixed host port because the port is part of the pod uri (also of the webid, acl file) // Test containers advise against the use of a fixed host port, and deprecated the related solutions // Finally, found a workaround here: https://github.com/testcontainers/testcontainers-java/issues/256 - PortBinding portBinding = new PortBinding(Ports.Binding.bindPort(3000), new ExposedPort(3000)); + int port = 3000; + PortBinding portBinding = new PortBinding(Ports.Binding.bindPort(port), new ExposedPort(port)); try (GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-testpods:latest")) .withCreateContainerCmdModifier(cmd -> cmd.withHostConfig(new HostConfig().withPortBindings(portBinding))) - .withExposedPorts(3000) + .withExposedPorts(port) .withCommand("npm", "start") .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200))){ container.start(); + String host = container.getHost(); Main.run(("-m " + mapPath).split(" ")); int i = 0; while (i < resourceUrls.length) { - Map solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); + Map solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i], host, port); compareResourceWithOutput(outPaths[i], solidTargetInfo); i++; } @@ -111,12 +113,14 @@ void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, St } // get solidTargetInfo including authentication details of testpods - private Map getSolidTargetInfo(String user, String resourceUrl){ - Map solidTargetInfo = new HashMap(); + private Map getSolidTargetInfo(String user, String resourceUrl, String host, int port){ + final String hostURL = "http://" + host + ":" + port + "/"; + logger.info("*** Solid container runs on {}", hostURL); + Map solidTargetInfo = new HashMap<>(); solidTargetInfo.put("email", "hello@" + user + ".com"); solidTargetInfo.put("password","abc123"); - solidTargetInfo.put("serverUrl", "http://localhost:3000/"); - solidTargetInfo.put("webId", "http://localhost:3000/" + user + "/profile/card#me"); + solidTargetInfo.put("serverUrl", hostURL); + solidTargetInfo.put("webId", hostURL + user + "/profile/card#me"); solidTargetInfo.put("resourceUrl", resourceUrl); return solidTargetInfo; } From 3d717af601ea4295bc6667522e1736f5e1c0e7c5 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 24 Oct 2024 12:32:35 +0200 Subject: [PATCH 035/127] SolidTargetTest: use the host the Solid Docker container runs on instead of 'localhost'. It is not guaranteed that the Docker container running a Solid server that is started in SolidTargetTest runs on address 'localhost', for example in the GitLab CI tests. Use the hostname provided by Docker instead. As a consequence, the mapping files in src/test/resources/solid-target use a template for the host which is then replaced with the Docker host at run time. --- .../java/be/ugent/rml/SolidTargetTest.java | 30 ++++++++++++++----- .../resources/solid-target/acl1/mapping.ttl | 16 +++++----- .../resources/solid-target/acl2/mapping.ttl | 16 +++++----- .../resources/solid-target/solid1/mapping.ttl | 6 ++-- .../resources/solid-target/solid2/mapping.ttl | 6 ++-- .../resources/solid-target/solid3/mapping.ttl | 6 ++-- .../resources/solid-target/solid4/mapping.ttl | 6 ++-- .../resources/solid-target/solid5/mapping.ttl | 6 ++-- 8 files changed, 54 insertions(+), 38 deletions(-) diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index 4910683e..24586ff4 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -15,7 +15,12 @@ import org.testcontainers.utility.DockerImageName; import java.io.ByteArrayInputStream; +import java.io.File; import java.io.InputStream; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; import java.time.Duration; import java.util.HashMap; import java.util.Map; @@ -102,10 +107,23 @@ void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, St .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200))){ container.start(); String host = container.getHost(); - Main.run(("-m " + mapPath).split(" ")); + final String hostURL = "http://" + host + ":" + port; + logger.info("*** Solid Docker container runs on {}", hostURL); + + // replace URLs in mapping file, write to temporary file, and pass that to mapper. + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + String realMapPath = classLoader.getResource(mapPath).getPath(); + String mappingFileContents = Files.readString(Path.of(realMapPath), StandardCharsets.UTF_8); + String correctedMappingFileContents = mappingFileContents.replaceAll("@@HOSTPORT@@", hostURL); + File tempMappingFile = File.createTempFile("solidTargetTestMapping", ".ttl"); + tempMappingFile.deleteOnExit(); + String tmpMappingPath = tempMappingFile.getAbsolutePath(); + Files.writeString(Path.of(tmpMappingPath), correctedMappingFileContents, StandardCharsets.UTF_8); + + Main.run(("-m " + tmpMappingPath).split(" ")); int i = 0; while (i < resourceUrls.length) { - Map solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i], host, port); + Map solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i], hostURL); compareResourceWithOutput(outPaths[i], solidTargetInfo); i++; } @@ -113,14 +131,12 @@ void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, St } // get solidTargetInfo including authentication details of testpods - private Map getSolidTargetInfo(String user, String resourceUrl, String host, int port){ - final String hostURL = "http://" + host + ":" + port + "/"; - logger.info("*** Solid container runs on {}", hostURL); + private Map getSolidTargetInfo(String user, String resourceUrl, String hostURL){ Map solidTargetInfo = new HashMap<>(); solidTargetInfo.put("email", "hello@" + user + ".com"); solidTargetInfo.put("password","abc123"); - solidTargetInfo.put("serverUrl", hostURL); - solidTargetInfo.put("webId", hostURL + user + "/profile/card#me"); + solidTargetInfo.put("serverUrl", hostURL + "/"); + solidTargetInfo.put("webId", hostURL + "/" + user + "/profile/card#me"); solidTargetInfo.put("resourceUrl", resourceUrl); return solidTargetInfo; } diff --git a/src/test/resources/solid-target/acl1/mapping.ttl b/src/test/resources/solid-target/acl1/mapping.ttl index d67080d1..5b4d75b5 100644 --- a/src/test/resources/solid-target/acl1/mapping.ttl +++ b/src/test/resources/solid-target/acl1/mapping.ttl @@ -40,7 +40,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:agent; - rr:object ; + rr:object <@@HOSTPORT@@/pod1/profile/card#me>; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -48,7 +48,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:accessTo; - rr:object ; + rr:object <@@HOSTPORT@@/example/building.ttl>; ]. a rr:TriplesMap; @@ -63,7 +63,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:agent; - rr:object ; + rr:object <@@HOSTPORT@@/example/profile/card#me>; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -71,7 +71,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:accessTo; - rr:object ; + rr:object <@@HOSTPORT@@/example/building.ttl>; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -86,7 +86,7 @@ rmlt:target [ a rmlt:Target; a rmli:SolidResourceTarget; - rmli:resource ; + rmli:resource <@@HOSTPORT@@/example/building.ttl>; idsa:userAuthentication ; ]. @@ -94,13 +94,13 @@ rmlt:target [ a rmlt:Target; a rmli:SolidAclTarget; - rmli:forResource ; + rmli:forResource <@@HOSTPORT@@/example/building.ttl>; idsa:userAuthentication ; ]. a idsa:UserAuthentication; idsa:authUsername "hello@example.com"; idsa:authPassword "abc123"; - solid:oidcIssuer ; - rmli:webId . + solid:oidcIssuer <@@HOSTPORT@@/>; + rmli:webId <@@HOSTPORT@@/example/profile/card#me>. diff --git a/src/test/resources/solid-target/acl2/mapping.ttl b/src/test/resources/solid-target/acl2/mapping.ttl index 4bbeb697..542b66c4 100644 --- a/src/test/resources/solid-target/acl2/mapping.ttl +++ b/src/test/resources/solid-target/acl2/mapping.ttl @@ -40,7 +40,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:agent; - rr:object ; + rr:object <@@HOSTPORT@@/pod1/profile/card#me>; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -48,7 +48,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:accessTo; - rr:object ; + rr:object <@@HOSTPORT@@/example/building>; ]. a rr:TriplesMap; @@ -63,7 +63,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:agent; - rr:object ; + rr:object <@@HOSTPORT@@/example/profile/card#me>; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -71,7 +71,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:accessTo; - rr:object ; + rr:object <@@HOSTPORT@@/example/building>; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -86,7 +86,7 @@ rmlt:target [ a rmlt:Target; a rmli:SolidResourceTarget; - rmli:resource "http://localhost:3000/example/building"; + rmli:resource "@@HOSTPORT@@/example/building"; idsa:userAuthentication ; ]. @@ -94,7 +94,7 @@ rmlt:target [ a rmlt:Target; a rmli:SolidAclTarget; - rmli:forResource "http://localhost:3000/example/building"; + rmli:forResource "@@HOSTPORT@@/example/building"; idsa:userAuthentication ; ]. @@ -102,6 +102,6 @@ a idsa:UserAuthentication; idsa:authUsername "hello@example.com"; idsa:authPassword "abc123"; - solid:oidcIssuer ; - rmli:webId . + solid:oidcIssuer <@@HOSTPORT@@/>; + rmli:webId <@@HOSTPORT@@/example/profile/card#me>. diff --git a/src/test/resources/solid-target/solid1/mapping.ttl b/src/test/resources/solid-target/solid1/mapping.ttl index 6bc133bf..834f8f77 100644 --- a/src/test/resources/solid-target/solid1/mapping.ttl +++ b/src/test/resources/solid-target/solid1/mapping.ttl @@ -30,12 +30,12 @@ rmlt:serialization formats:Turtle; rmlt:target [ a rmlt:Target, rmli:SolidResourceTarget; - rmli:resource "http://localhost:3000/example/building"; + rmli:resource "@@HOSTPORT@@/example/building"; idsa:userAuthentication [ idsa:authUsername "hello@example.com"; idsa:authPassword "abc123"; - solid:oidcIssuer ; - rmli:webId + solid:oidcIssuer <@@HOSTPORT@@/>; + rmli:webId <@@HOSTPORT@@/example/profile/card#me> ]; ]. diff --git a/src/test/resources/solid-target/solid2/mapping.ttl b/src/test/resources/solid-target/solid2/mapping.ttl index df3a0264..f8e4d5e5 100644 --- a/src/test/resources/solid-target/solid2/mapping.ttl +++ b/src/test/resources/solid-target/solid2/mapping.ttl @@ -31,12 +31,12 @@ rmlt:target [ a rmli:Target; a rmli:SolidResourceTarget; - rmli:resource "http://localhost:3000/example/building"; + rmli:resource "@@HOSTPORT@@/example/building"; idsa:userAuthentication [ idsa:authUsername "hello@example.com"; idsa:authPassword "abc123"; - solid:oidcIssuer ; - rmli:webId + solid:oidcIssuer <@@HOSTPORT@@/>; + rmli:webId <@@HOSTPORT@@/example/profile/card#me> ]; ]. diff --git a/src/test/resources/solid-target/solid3/mapping.ttl b/src/test/resources/solid-target/solid3/mapping.ttl index d54d733c..d3202d27 100644 --- a/src/test/resources/solid-target/solid3/mapping.ttl +++ b/src/test/resources/solid-target/solid3/mapping.ttl @@ -30,12 +30,12 @@ rmlt:serialization formats:Turtle; rmlt:target [ a rmli:SolidResourceTarget; - rmli:resource "http://localhost:3000/example/building"; + rmli:resource "@@HOSTPORT@@/example/building"; idsa:userAuthentication [ idsa:authUsername "hello@example.com"; idsa:authPassword "abc123"; - solid:oidcIssuer ; - rmli:webId + solid:oidcIssuer <@@HOSTPORT@@/>; + rmli:webId <@@HOSTPORT@@/example/profile/card#me> ]; ]. diff --git a/src/test/resources/solid-target/solid4/mapping.ttl b/src/test/resources/solid-target/solid4/mapping.ttl index 252e00d7..61cb12a7 100644 --- a/src/test/resources/solid-target/solid4/mapping.ttl +++ b/src/test/resources/solid-target/solid4/mapping.ttl @@ -34,12 +34,12 @@ rmlt:target [ #rmlt:serialization formats:Turtle; a rmli:SolidResourceTarget; - rmli:resource "http://localhost:3000/example/building"; + rmli:resource "@@HOSTPORT@@/example/building"; idsa:userAuthentication [ idsa:authUsername "hello@example.com"; idsa:authPassword "abc123"; - solid:oidcIssuer ; - rmli:webId + solid:oidcIssuer <@@HOSTPORT@@/>; + rmli:webId <@@HOSTPORT@@/example/profile/card#me> ]; ]. diff --git a/src/test/resources/solid-target/solid5/mapping.ttl b/src/test/resources/solid-target/solid5/mapping.ttl index 4489bbe3..a5e930ed 100644 --- a/src/test/resources/solid-target/solid5/mapping.ttl +++ b/src/test/resources/solid-target/solid5/mapping.ttl @@ -32,12 +32,12 @@ rmlt:target [ #rmlt:serialization formats:Turtle; a rmli:SolidResourceTarget; - rmli:resource "http://localhost:3000/example/building"; + rmli:resource "@@HOSTPORT@@/example/building"; idsa:userAuthentication [ idsa:authUsername "hello@example.com"; idsa:authPassword "abc123"; - solid:oidcIssuer ; - rmli:webId + solid:oidcIssuer <@@HOSTPORT@@/>; + rmli:webId <@@HOSTPORT@@/example/profile/card#me> ]; ]. From b5313d690971e62410f573312419eb4cf3797943 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Fri, 25 Oct 2024 21:51:28 +0200 Subject: [PATCH 036/127] SolidTargetHelper: added method deleteResource For testing it is needed to delete resources (after the test is completed) --- .../ugent/rml/target/SolidTargetHelper.java | 58 ++++++++++++++----- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java b/src/main/java/be/ugent/rml/target/SolidTargetHelper.java index 79f4ccdc..85d4d26a 100644 --- a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java +++ b/src/main/java/be/ugent/rml/target/SolidTargetHelper.java @@ -226,10 +226,9 @@ void addResource(Map solidInfo) throws Exception{ .build(); HttpResponse putDataResponse = httpClient.send(putDataRequest, HttpResponse.BodyHandlers.ofString()); - if (putDataResponse.statusCode() != HttpStatus.SC_CREATED) { - String putDataStr = putDataResponse.body(); - log.error("Could not create resource for URL {}: {}", resourceUrl, putDataStr); - throw new Exception("Could not create resource for URL: " + resourceUrl + ": " + putDataStr); + if (isNotSuccessful(putDataResponse.statusCode())) { + log.error("Could not create resource for URL {}: {}", resourceUrl, putDataResponse.statusCode()); + throw new Exception("Could not create resource for URL " + resourceUrl + ": " + putDataResponse.statusCode()); } } catch (Throwable e) { // This is to catch runtime exceptions as well. throw new Exception(e); @@ -280,10 +279,9 @@ void addAcl(Map solidInfo) throws Exception{ .build(); HttpResponse putAclResponse = httpClient.send(putAclRequest, HttpResponse.BodyHandlers.ofString()); - if (putAclResponse.statusCode() != HttpStatus.SC_CREATED) { - String putAclResponseStr = putAclResponse.body(); - log.error("Could not create ACL for resource with URL {}: {}", resourceUrl, putAclResponseStr); - throw new Exception("Could not create ACL for resource with URL: " + resourceUrl + ": " + putAclResponseStr); + if (isNotSuccessful(putAclResponse.statusCode())) { + log.error("Could not create ACL for resource with URL {}: {}", resourceUrl, putAclResponse.statusCode()); + throw new Exception("Could not create ACL for resource with URL " + resourceUrl + ": " + putAclResponse.statusCode()); } foundLink = true; } @@ -291,7 +289,7 @@ void addAcl(Map solidInfo) throws Exception{ } if (!foundLink) { - String message = "Could not get ACL link for resource with URL: " + resourceUrl; + String message = "Could not get ACL link for resource with URL " + resourceUrl; log.error(message); throw new Exception(message); } @@ -323,14 +321,48 @@ public String getResource(Map solidInfo) throws Exception{ .build(); HttpResponse getDataResponse = httpClient.send(getDataRequest, HttpResponse.BodyHandlers.ofString()); - if (getDataResponse.statusCode() != HttpStatus.SC_OK) { - String getDataStr = getDataResponse.body(); - log.error("Could not create resource for URL {}: {}", resourceUrl, getDataStr); - throw new Exception("Could not create resource for URL: " + resourceUrl + ": " + getDataStr); + if (isNotSuccessful(getDataResponse.statusCode())) { + log.error("Could not get data from resource with URL {}: {}", resourceUrl, getDataResponse.statusCode()); + throw new Exception("Could not get data from resource with URL " + resourceUrl + ": " + getDataResponse.statusCode()); } return getDataResponse.body(); } catch (Throwable e) { // This is to catch runtime exceptions as well. throw new Exception(e); } } + + /** Delet a resource from a Solid pod using Solid OIDC. This method is only used for testing. + * @param solidInfo A map with all necessary data. The map should contain following keys: + * serverUrl, webId, email, password, resourceUrl + * @throws Exception Something goes wrong. + */ + public void deleteResource(Map solidInfo) throws Exception{ + try { + String resourceUrl = solidInfo.get("resourceUrl"); + String dpopAccessToken = getDpopAccessToken(solidInfo); + + //////DELETE the resource ////// + // Generate new JWT token for this request + String deleteDataJWT = generateJWT(resourceUrl, "DELETE"); + + HttpRequest deleteDataRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) + .DELETE() + .setHeader("Authorization", "DPoP " + dpopAccessToken) + .setHeader("DPoP", deleteDataJWT) + .build(); + + HttpResponse deleteDataResponse = httpClient.send(deleteDataRequest, HttpResponse.BodyHandlers.ofString()); + if (isNotSuccessful(deleteDataResponse.statusCode())) { + log.error("Could not delete resource with URL {}: {}", resourceUrl, deleteDataResponse.statusCode()); + throw new Exception("Could not delete resource with URL " + resourceUrl + ": " + deleteDataResponse.statusCode()); + } + } catch (Throwable e) { // This is to catch runtime exceptions as well. + throw new Exception(e); + } + } + + + private boolean isNotSuccessful(int statusCode){ + return (statusCode < 200) || (statusCode > 299) ; + } } From c83d4fd3b268112bccba6a510dbdb6b8e287a934 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Fri, 25 Oct 2024 21:52:53 +0200 Subject: [PATCH 037/127] SolidTargetTest: using solid playground for Solid related containers Using a docker with CSS testpods is very complex: no fixed hostname and hostport with testcontainers, therefore all URI in the test data needs to be adapted when running the tests. --- .../java/be/ugent/rml/SolidTargetTest.java | 103 +++++++----------- .../resources/solid-target/acl1/mapping.ttl | 20 ++-- .../resources/solid-target/acl2/mapping.ttl | 20 ++-- .../resources/solid-target/solid1/mapping.ttl | 10 +- .../resources/solid-target/solid2/mapping.ttl | 10 +- .../resources/solid-target/solid3/mapping.ttl | 10 +- .../resources/solid-target/solid4/mapping.ttl | 10 +- .../resources/solid-target/solid5/mapping.ttl | 10 +- 8 files changed, 86 insertions(+), 107 deletions(-) diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index 24586ff4..f0b3de1b 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -4,25 +4,17 @@ import be.ugent.rml.store.QuadStore; import be.ugent.rml.store.QuadStoreFactory; import be.ugent.rml.target.SolidTargetHelper; -import com.github.dockerjava.api.model.ExposedPort; -import com.github.dockerjava.api.model.HostConfig; -import com.github.dockerjava.api.model.PortBinding; -import com.github.dockerjava.api.model.Ports; import org.eclipse.rdf4j.rio.RDFFormat; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.utility.DockerImageName; import java.io.ByteArrayInputStream; -import java.io.File; +import java.io.IOException; import java.io.InputStream; -import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.time.Duration; import java.util.HashMap; +import java.util.List; import java.util.Map; public class SolidTargetTest extends TestCore { @@ -31,63 +23,63 @@ public class SolidTargetTest extends TestCore { @Test public void solid1() throws Exception { doMappingSolid("solid-target/solid1/mapping.ttl", - "http://localhost:3000/example/building", + "https://pod.playground.solidlab.be/user1/rmlmapper/building", "solid-target/solid1/output1.nq", - "example"); + "user1"); } //constant target in predicate map @Test public void solid2() throws Exception { doMappingSolid("solid-target/solid2/mapping.ttl", - "http://localhost:3000/example/building", + "https://pod.playground.solidlab.be/user1/rmlmapper/building", "solid-target/solid2/output1.nq", - "example"); + "user1"); } //constant target in object map @Test public void solid3() throws Exception { doMappingSolid("solid-target/solid3/mapping.ttl", - "http://localhost:3000/example/building", + "https://pod.playground.solidlab.be/user1/rmlmapper/building", "solid-target/solid3/output1.nq", - "example"); + "user1"); } //constant target in subject graph @Test public void solid4() throws Exception { doMappingSolid("solid-target/solid4/mapping.ttl", - "http://localhost:3000/example/building", + "https://pod.playground.solidlab.be/user1/rmlmapper/building", "solid-target/solid4/output1.nq", - "example"); + "user1"); } //constant target in po graph @Test public void solid5() throws Exception { doMappingSolid("solid-target/solid5/mapping.ttl", - "http://localhost:3000/example/building", + "https://pod.playground.solidlab.be/user1/rmlmapper/building", "solid-target/solid5/output1.nq", - "example"); + "user1"); } //acl for pod1, resourceUrl with .ttl @Test public void acl1() throws Exception{ doMappingSolid("solid-target/acl1/mapping.ttl", - "http://localhost:3000/example/building.ttl", + "https://pod.playground.solidlab.be/user1/rmlmapper/building.ttl", "solid-target/acl1/output1.nq", - "pod1"); + "user2"); } //acl for pod1, resourceUrl without .ttl @Test public void acl2() throws Exception{ doMappingSolid("solid-target/acl2/mapping.ttl", - "http://localhost:3000/example/building", + "https://pod.playground.solidlab.be/user1/rmlmapper/building", "solid-target/acl2/output1.nq", - "pod1"); + "user2"); } void doMappingSolid(String mapPath, String resourceUrl, String outPath, String user) throws Exception { @@ -95,48 +87,24 @@ void doMappingSolid(String mapPath, String resourceUrl, String outPath, String u } void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, String[] users) throws Exception { - // We need a fixed host port because the port is part of the pod uri (also of the webid, acl file) - // Test containers advise against the use of a fixed host port, and deprecated the related solutions - // Finally, found a workaround here: https://github.com/testcontainers/testcontainers-java/issues/256 - int port = 3000; - PortBinding portBinding = new PortBinding(Ports.Binding.bindPort(port), new ExposedPort(port)); - try (GenericContainer container = new GenericContainer<>(DockerImageName.parse("elsdvlee/solid-testpods:latest")) - .withCreateContainerCmdModifier(cmd -> cmd.withHostConfig(new HostConfig().withPortBindings(portBinding))) - .withExposedPorts(port) - .withCommand("npm", "start") - .waitingFor(Wait.forHealthcheck()).withStartupTimeout(Duration.ofSeconds(200))){ - container.start(); - String host = container.getHost(); - final String hostURL = "http://" + host + ":" + port; - logger.info("*** Solid Docker container runs on {}", hostURL); - - // replace URLs in mapping file, write to temporary file, and pass that to mapper. - ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); - String realMapPath = classLoader.getResource(mapPath).getPath(); - String mappingFileContents = Files.readString(Path.of(realMapPath), StandardCharsets.UTF_8); - String correctedMappingFileContents = mappingFileContents.replaceAll("@@HOSTPORT@@", hostURL); - File tempMappingFile = File.createTempFile("solidTargetTestMapping", ".ttl"); - tempMappingFile.deleteOnExit(); - String tmpMappingPath = tempMappingFile.getAbsolutePath(); - Files.writeString(Path.of(tmpMappingPath), correctedMappingFileContents, StandardCharsets.UTF_8); - - Main.run(("-m " + tmpMappingPath).split(" ")); - int i = 0; - while (i < resourceUrls.length) { - Map solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i], hostURL); - compareResourceWithOutput(outPaths[i], solidTargetInfo); - i++; - } + Main.run(("-m " + mapPath).split(" ")); + SolidTargetHelper helper = new SolidTargetHelper(); + int i = 0; + while (i < resourceUrls.length) { + Map solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); + compareResourceWithOutput(outPaths[i], solidTargetInfo); + helper.deleteResource(getSolidTargetInfo("user1", resourceUrls[i])); + i++; } } // get solidTargetInfo including authentication details of testpods - private Map getSolidTargetInfo(String user, String resourceUrl, String hostURL){ + private Map getSolidTargetInfo(String user, String resourceUrl){ Map solidTargetInfo = new HashMap<>(); - solidTargetInfo.put("email", "hello@" + user + ".com"); - solidTargetInfo.put("password","abc123"); - solidTargetInfo.put("serverUrl", hostURL + "/"); - solidTargetInfo.put("webId", hostURL + "/" + user + "/profile/card#me"); + solidTargetInfo.put("email", user + "@pod.playground.solidlab.be"); + solidTargetInfo.put("password",user); + solidTargetInfo.put("serverUrl", "https://pod.playground.solidlab.be/"); + solidTargetInfo.put("webId", "https://pod.playground.solidlab.be/" + user + "/profile/card#me"); solidTargetInfo.put("resourceUrl", resourceUrl); return solidTargetInfo; } @@ -151,5 +119,16 @@ private void compareResourceWithOutput(String outPath, Map solidT result.removeDuplicates(); compareStores(filePathToStore(outPath), result); } -} + private static void replaceStringInFile(Path filePath, String target, String replacement) { + try { + List lines = Files.readAllLines(filePath, StandardCharsets.UTF_8); + for (int i = 0; i < lines.size(); i++) { + lines.set(i, lines.get(i).replace(target, replacement)); + } + Files.write(filePath, lines, StandardCharsets.UTF_8); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/test/resources/solid-target/acl1/mapping.ttl b/src/test/resources/solid-target/acl1/mapping.ttl index 5b4d75b5..ab642b23 100644 --- a/src/test/resources/solid-target/acl1/mapping.ttl +++ b/src/test/resources/solid-target/acl1/mapping.ttl @@ -40,7 +40,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:agent; - rr:object <@@HOSTPORT@@/pod1/profile/card#me>; + rr:object ; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -48,7 +48,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:accessTo; - rr:object <@@HOSTPORT@@/example/building.ttl>; + rr:object ; ]. a rr:TriplesMap; @@ -63,7 +63,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:agent; - rr:object <@@HOSTPORT@@/example/profile/card#me>; + rr:object ; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -71,7 +71,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:accessTo; - rr:object <@@HOSTPORT@@/example/building.ttl>; + rr:object ; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -86,7 +86,7 @@ rmlt:target [ a rmlt:Target; a rmli:SolidResourceTarget; - rmli:resource <@@HOSTPORT@@/example/building.ttl>; + rmli:resource ; idsa:userAuthentication ; ]. @@ -94,13 +94,13 @@ rmlt:target [ a rmlt:Target; a rmli:SolidAclTarget; - rmli:forResource <@@HOSTPORT@@/example/building.ttl>; + rmli:forResource ; idsa:userAuthentication ; ]. a idsa:UserAuthentication; - idsa:authUsername "hello@example.com"; - idsa:authPassword "abc123"; - solid:oidcIssuer <@@HOSTPORT@@/>; - rmli:webId <@@HOSTPORT@@/example/profile/card#me>. + idsa:authUsername "user1@pod.playground.solidlab.be"; + idsa:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId . diff --git a/src/test/resources/solid-target/acl2/mapping.ttl b/src/test/resources/solid-target/acl2/mapping.ttl index 542b66c4..0b607b49 100644 --- a/src/test/resources/solid-target/acl2/mapping.ttl +++ b/src/test/resources/solid-target/acl2/mapping.ttl @@ -40,7 +40,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:agent; - rr:object <@@HOSTPORT@@/pod1/profile/card#me>; + rr:object ; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -48,7 +48,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:accessTo; - rr:object <@@HOSTPORT@@/example/building>; + rr:object ; ]. a rr:TriplesMap; @@ -63,7 +63,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:agent; - rr:object <@@HOSTPORT@@/example/profile/card#me>; + rr:object ; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -71,7 +71,7 @@ ]; rr:predicateObjectMap [ rr:predicate acl:accessTo; - rr:object <@@HOSTPORT@@/example/building>; + rr:object ; ]; rr:predicateObjectMap [ rr:predicate acl:mode; @@ -86,7 +86,7 @@ rmlt:target [ a rmlt:Target; a rmli:SolidResourceTarget; - rmli:resource "@@HOSTPORT@@/example/building"; + rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; idsa:userAuthentication ; ]. @@ -94,14 +94,14 @@ rmlt:target [ a rmlt:Target; a rmli:SolidAclTarget; - rmli:forResource "@@HOSTPORT@@/example/building"; + rmli:forResource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; idsa:userAuthentication ; ]. a idsa:UserAuthentication; - idsa:authUsername "hello@example.com"; - idsa:authPassword "abc123"; - solid:oidcIssuer <@@HOSTPORT@@/>; - rmli:webId <@@HOSTPORT@@/example/profile/card#me>. + idsa:authUsername "user1@pod.playground.solidlab.be"; + idsa:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId . diff --git a/src/test/resources/solid-target/solid1/mapping.ttl b/src/test/resources/solid-target/solid1/mapping.ttl index 834f8f77..7e80dcbf 100644 --- a/src/test/resources/solid-target/solid1/mapping.ttl +++ b/src/test/resources/solid-target/solid1/mapping.ttl @@ -30,12 +30,12 @@ rmlt:serialization formats:Turtle; rmlt:target [ a rmlt:Target, rmli:SolidResourceTarget; - rmli:resource "@@HOSTPORT@@/example/building"; + rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; idsa:userAuthentication [ - idsa:authUsername "hello@example.com"; - idsa:authPassword "abc123"; - solid:oidcIssuer <@@HOSTPORT@@/>; - rmli:webId <@@HOSTPORT@@/example/profile/card#me> + idsa:authUsername "user1@pod.playground.solidlab.be"; + idsa:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId ]; ]. diff --git a/src/test/resources/solid-target/solid2/mapping.ttl b/src/test/resources/solid-target/solid2/mapping.ttl index f8e4d5e5..5d39a9f6 100644 --- a/src/test/resources/solid-target/solid2/mapping.ttl +++ b/src/test/resources/solid-target/solid2/mapping.ttl @@ -31,12 +31,12 @@ rmlt:target [ a rmli:Target; a rmli:SolidResourceTarget; - rmli:resource "@@HOSTPORT@@/example/building"; + rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; idsa:userAuthentication [ - idsa:authUsername "hello@example.com"; - idsa:authPassword "abc123"; - solid:oidcIssuer <@@HOSTPORT@@/>; - rmli:webId <@@HOSTPORT@@/example/profile/card#me> + idsa:authUsername "user1@pod.playground.solidlab.be"; + idsa:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId ]; ]. diff --git a/src/test/resources/solid-target/solid3/mapping.ttl b/src/test/resources/solid-target/solid3/mapping.ttl index d3202d27..fdce9e27 100644 --- a/src/test/resources/solid-target/solid3/mapping.ttl +++ b/src/test/resources/solid-target/solid3/mapping.ttl @@ -30,12 +30,12 @@ rmlt:serialization formats:Turtle; rmlt:target [ a rmli:SolidResourceTarget; - rmli:resource "@@HOSTPORT@@/example/building"; + rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; idsa:userAuthentication [ - idsa:authUsername "hello@example.com"; - idsa:authPassword "abc123"; - solid:oidcIssuer <@@HOSTPORT@@/>; - rmli:webId <@@HOSTPORT@@/example/profile/card#me> + idsa:authUsername "user1@pod.playground.solidlab.be"; + idsa:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId ]; ]. diff --git a/src/test/resources/solid-target/solid4/mapping.ttl b/src/test/resources/solid-target/solid4/mapping.ttl index 61cb12a7..0d25b1c7 100644 --- a/src/test/resources/solid-target/solid4/mapping.ttl +++ b/src/test/resources/solid-target/solid4/mapping.ttl @@ -34,12 +34,12 @@ rmlt:target [ #rmlt:serialization formats:Turtle; a rmli:SolidResourceTarget; - rmli:resource "@@HOSTPORT@@/example/building"; + rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; idsa:userAuthentication [ - idsa:authUsername "hello@example.com"; - idsa:authPassword "abc123"; - solid:oidcIssuer <@@HOSTPORT@@/>; - rmli:webId <@@HOSTPORT@@/example/profile/card#me> + idsa:authUsername "user1@pod.playground.solidlab.be"; + idsa:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId ]; ]. diff --git a/src/test/resources/solid-target/solid5/mapping.ttl b/src/test/resources/solid-target/solid5/mapping.ttl index a5e930ed..bb79b9e1 100644 --- a/src/test/resources/solid-target/solid5/mapping.ttl +++ b/src/test/resources/solid-target/solid5/mapping.ttl @@ -32,12 +32,12 @@ rmlt:target [ #rmlt:serialization formats:Turtle; a rmli:SolidResourceTarget; - rmli:resource "@@HOSTPORT@@/example/building"; + rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; idsa:userAuthentication [ - idsa:authUsername "hello@example.com"; - idsa:authPassword "abc123"; - solid:oidcIssuer <@@HOSTPORT@@/>; - rmli:webId <@@HOSTPORT@@/example/profile/card#me> + idsa:authUsername "user1@pod.playground.solidlab.be"; + idsa:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId ]; ]. From 0d37497016fa15a0cedfd10d30b304ee5b64f078 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 08:07:53 +0100 Subject: [PATCH 038/127] SolidTargetHelper: adapted code style ///// ... ///// to /* ... */ --- .../ugent/rml/target/SolidTargetHelper.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java b/src/main/java/be/ugent/rml/target/SolidTargetHelper.java index 85d4d26a..1cbca719 100644 --- a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java +++ b/src/main/java/be/ugent/rml/target/SolidTargetHelper.java @@ -63,7 +63,7 @@ private String getDpopAccessToken(Map solidInfo) throws Exceptio String email = solidInfo.get("email"); String password = solidInfo.get("password"); - ////// Get account controls and retrieve login URL ////// + /* Get account controls and retrieve login URL */ HttpRequest accountInfoRequest = HttpRequest.newBuilder(URI.create(serverUrl + ".account/")) .GET().build(); HttpResponse accountInfoResponse = httpClient.send(accountInfoRequest, HttpResponse.BodyHandlers.ofString()); @@ -77,7 +77,7 @@ private String getDpopAccessToken(Map solidInfo) throws Exceptio log.debug("Found login URL: {}", passwordLoginURL); - ////// Log in using e-mail and password and get authorization token ////// + /* Log in using e-mail and password and get authorization token */ String loginMessage = "{\"email\": \"" + email + "\",\"password\":\"" + password + "\"}"; HttpRequest loginRequest = HttpRequest.newBuilder(URI.create(passwordLoginURL)) .POST(HttpRequest.BodyPublishers.ofString(loginMessage, StandardCharsets.UTF_8)) @@ -94,7 +94,7 @@ private String getDpopAccessToken(Map solidInfo) throws Exceptio log.debug("Found authorization token."); - ////// Use authorization token to get client credentials URL, added to account info ////// + /* Use authorization token to get client credentials URL, added to account info */ HttpRequest authorizedAccountInfoRequest = HttpRequest.newBuilder(URI.create(serverUrl + ".account/")) .GET() .setHeader("Authorization", "CSS-Account-Token " + authorizationToken) @@ -110,7 +110,7 @@ private String getDpopAccessToken(Map solidInfo) throws Exceptio log.debug("Found client credentials URL: {}", clientCredentialsURL); - ////// Post WebID and token prefix to client credentials URL to get client credentials, to be used at oidc endpoint later on ////// + /* Post WebID and token prefix to client credentials URL to get client credentials, to be used at oidc endpoint later on */ String webIdAndTokenMessage = "{\"name\": \"my-token\",\"webId\":\"" + webId + "\"}"; HttpRequest getOIDCTokenRequest = HttpRequest.newBuilder(URI.create(clientCredentialsURL)) .POST(HttpRequest.BodyPublishers.ofString(webIdAndTokenMessage, StandardCharsets.UTF_8)) @@ -129,7 +129,7 @@ private String getDpopAccessToken(Map solidInfo) throws Exceptio String clientCredentialsSecret = clientCredentials.getString("secret"); - ////// Get oidc info, used to obtain oidc token endpoints ////// + /* Get oidc info, used to obtain oidc token endpoints */ // GET /.well-known/openid-configuration HTTP/1.1 HttpRequest oidcInfoRequest = HttpRequest.newBuilder(URI.create(serverUrl + ".well-known/openid-configuration")) .GET().build(); @@ -145,7 +145,7 @@ private String getDpopAccessToken(Map solidInfo) throws Exceptio String dpopJWT = generateJWT(oidcTokenEndpoint, "POST"); - ////// POST a request to oidc token endpoint with client credentials to obtain an oidc access token ////// + /* POST a request to oidc token endpoint with client credentials to obtain an oidc access token */ // Generate base64 string of client credentials String clientCredentialsConcatenated = clientCredentialsId + ':' + clientCredentialsSecret; @@ -214,7 +214,7 @@ void addResource(Map solidInfo) throws Exception{ String dpopAccessToken = getDpopAccessToken(solidInfo); - ////// PUT the data ////// + /* PUT the data */ // Generate new JWT token for this request String putDataJWT = generateJWT(resourceUrl, "PUT"); @@ -248,7 +248,7 @@ void addAcl(Map solidInfo) throws Exception{ String dpopAccessToken = getDpopAccessToken(solidInfo); - ////// HEAD the resource to a get link to where the ACL should be put ////// + /* HEAD the resource to a get link to where the ACL should be put */ // Generate new JWT token for this request String headDataJWT = generateJWT(resourceUrl, "HEAD"); @@ -268,7 +268,7 @@ void addAcl(Map solidInfo) throws Exception{ // a better method to parse the link header in Java would be welcome ... if (link.contains("rel=\"acl\"")) { - ////// PUT the ACL to the found link ////// + /* PUT the ACL to the found link */ String linkUrl = link.substring(link.indexOf("<") + 1, link.indexOf(">")); String putAclJWT = generateJWT(linkUrl, "PUT"); HttpRequest putAclRequest = HttpRequest.newBuilder(URI.create(linkUrl)) @@ -309,7 +309,7 @@ public String getResource(Map solidInfo) throws Exception{ String resourceUrl = solidInfo.get("resourceUrl"); String dpopAccessToken = getDpopAccessToken(solidInfo); - ////// GET the data ////// + /* GET the data */ // Generate new JWT token for this request String getDataJWT = generateJWT(resourceUrl, "GET"); @@ -341,7 +341,7 @@ public void deleteResource(Map solidInfo) throws Exception{ String resourceUrl = solidInfo.get("resourceUrl"); String dpopAccessToken = getDpopAccessToken(solidInfo); - //////DELETE the resource ////// + /* DELETE the resource */ // Generate new JWT token for this request String deleteDataJWT = generateJWT(resourceUrl, "DELETE"); From b8f9afa80624a1b1ff218b6a66fe85dc1558c457 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 15:22:06 +0100 Subject: [PATCH 039/127] CHANGELOG: updated --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bcf84942..2acf1958 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - CLI option `--convert-mapping` to convert your existing R2RML and older RML mappings to the latest version by the W3C Community Group. - Solid related targets +- dynamic logical targets ## [7.1.2] - 2024-09-19 From d8167ed6d57d61f67385a9356240e03fea15b933 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 15:35:13 +0100 Subject: [PATCH 040/127] MappingInfo: added targetGenerator --- src/main/java/be/ugent/rml/MappingInfo.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/be/ugent/rml/MappingInfo.java b/src/main/java/be/ugent/rml/MappingInfo.java index 71441454..a35566d3 100644 --- a/src/main/java/be/ugent/rml/MappingInfo.java +++ b/src/main/java/be/ugent/rml/MappingInfo.java @@ -11,23 +11,27 @@ public class MappingInfo { private final Term term; private final TermGenerator termGenerator; private final List targets; + private List targetGenerators; - public MappingInfo(@Nonnull Term term, @Nonnull TermGenerator termGenerator, @Nonnull List targets) { + public MappingInfo(@Nonnull Term term, @Nonnull TermGenerator termGenerator, @Nonnull List targets, List targetGenerators) { this.term = term; this.termGenerator = termGenerator; this.targets = targets; + this.targetGenerators = targetGenerators; } public MappingInfo(@Nonnull Term term, @Nonnull TermGenerator termGenerator) { this.term = term; this.termGenerator = termGenerator; this.targets = Collections.emptyList(); + this.targetGenerators = Collections.emptyList(); } - public MappingInfo(@Nonnull Term term, @Nonnull List targets) { + public MappingInfo(@Nonnull Term term, @Nonnull List targets, List targetGenerators) { this.term = term; this.termGenerator = null; this.targets = targets; + this.targetGenerators = targetGenerators; } public Term getTerm() { @@ -42,7 +46,15 @@ public List getTargets() { return targets; } + public List getTargetGenerators() { + return this.targetGenerators; + } + public void addTargets(List targets) { this.targets.addAll(targets); } + + public void addTargetGenerators(List targetGenerators) { + getTargetGenerators().addAll(targetGenerators); + } } From 7ae3824746617bd7a4ebf78edd14809f28603113 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 16:12:30 +0100 Subject: [PATCH 041/127] MappingFactory: added target generators to all generated mappinginfo, to support dynamic targets --- .../java/be/ugent/rml/MappingFactory.java | 177 +++++++++++------- 1 file changed, 110 insertions(+), 67 deletions(-) diff --git a/src/main/java/be/ugent/rml/MappingFactory.java b/src/main/java/be/ugent/rml/MappingFactory.java index be0f3fa9..189ece28 100644 --- a/src/main/java/be/ugent/rml/MappingFactory.java +++ b/src/main/java/be/ugent/rml/MappingFactory.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.function.BiConsumer; +import static be.ugent.rml.Utils.getObjectsFromQuads; import static be.ugent.rml.Utils.isValidrrLanguage; public class MappingFactory { @@ -39,6 +40,9 @@ public class MappingFactory { // Base IRI to prepend to a relative IRI to make it absolute. private final String baseIRI; + // check on logical source is need on more than one place, so better store it + private Term logicalSource; + // StrictMode determines RMLMapper's behaviour when an IRI for a NamedNode is invalid. // If set to BEST_EFFORT, RMLMapper will not generate a NamedNode and go on. // If set to STRICT, RMLMapper will stop execution with an exception. @@ -72,8 +76,8 @@ public Mapping createMapping(Term triplesMap, QuadStore store) throws Exception private void parseSubjectMap() throws Exception { if (this.subjectMappingInfo == null) { TermGenerator generator; - List subjectmaps = Utils.getObjectsFromQuads(store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "subject"), null)); - subjectmaps.addAll(Utils.getObjectsFromQuads(store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "subjectMap"), null))); + List subjectmaps = getObjectsFromQuads(store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "subject"), null)); + subjectmaps.addAll(getObjectsFromQuads(store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "subjectMap"), null))); if (!subjectmaps.isEmpty()) { if (subjectmaps.size() > 1) { @@ -81,8 +85,8 @@ private void parseSubjectMap() throws Exception { } Term subjectmap = subjectmaps.get(0); - List functionValues = Utils.getObjectsFromQuads(store.getQuads(subjectmap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); - List termTypes = Utils.getObjectsFromQuads(store.getQuads(subjectmap, new NamedNode(NAMESPACES.RML2 + "termType"), null)); + List functionValues = getObjectsFromQuads(store.getQuads(subjectmap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); + List termTypes = getObjectsFromQuads(store.getQuads(subjectmap, new NamedNode(NAMESPACES.RML2 + "termType"), null)); if (termTypes.contains(new NamedNode(NAMESPACES.RML2 + "Literal"))) { throw new Exception(triplesMap + " is a Literal Term Map. Accepted term types for Subject Maps are: IRI, Blank Node"); @@ -115,12 +119,13 @@ private void parseSubjectMap() throws Exception { } // get targets for subject - List targets = Utils.getObjectsFromQuads(store.getQuads(subjectmap, new NamedNode(NAMESPACES.RML2 + "logicalTarget"), null)); - - this.subjectMappingInfo = new MappingInfo(subjectmap, generator, targets); + // get Target Generators for subject + List targets = getTargets(subjectmap); + List targetGenerators = getTargetGenerators(subjectmap, baseIRI, strictMode); + this.subjectMappingInfo = new MappingInfo(subjectmap, generator, targets, targetGenerators); //get classes - List classes = Utils.getObjectsFromQuads(store.getQuads(subjectmap, new NamedNode(NAMESPACES.RML2 + "class"), null)); + List classes = getObjectsFromQuads(store.getQuads(subjectmap, new NamedNode(NAMESPACES.RML2 + "class"), null)); //we create predicateobjects for the classes for (Term c : classes) { @@ -142,7 +147,7 @@ private void parseSubjectMap() throws Exception { } private void parsePredicateObjectMaps() throws Exception { - List predicateobjectmaps = Utils.getObjectsFromQuads(store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); + List predicateobjectmaps = getObjectsFromQuads(store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); for (Term pom : predicateobjectmaps) { List predicateMappingInfos = parsePredicateMapsAndShortcuts(pom); @@ -152,7 +157,7 @@ private void parsePredicateObjectMaps() throws Exception { } } - private void parseObjectMapsAndShortcutsAndGeneratePOGGenerators(Term termMap, List predicateMappingInfos, List graphMappingInfos) throws IOException { + private void parseObjectMapsAndShortcutsAndGeneratePOGGenerators(Term termMap, List predicateMappingInfos, List graphMappingInfos) throws Exception { parseObjectMapsAndShortcutsWithCallback(termMap, (oMappingInfo, childOrParent) -> { MappingInfo lMappingInfo = parseLanguageMappingInfo(oMappingInfo.getTerm()); @@ -182,15 +187,15 @@ private void parseObjectMapsAndShortcutsAndGeneratePOGGenerators(Term termMap, L }); } - private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback) throws IOException { - List objectmaps = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "objectMap"), null)); + private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback) throws Exception { + List objectmaps = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "objectMap"), null)); for (Term objectmap : objectmaps) { parseObjectMapWithCallback(objectmap, objectMapCallback, refObjectMapCallback); } //dealing with rr:object - List objectsConstants = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "object"), null)); + List objectsConstants = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "object"), null)); for (Term o : objectsConstants) { TermGenerator gen; @@ -207,13 +212,13 @@ private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback) throws IOException { - List functionValues = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); + private void parseObjectMapWithCallback(Term objectmap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback) throws Exception { + List functionValues = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); Term termType = getTermType(objectmap, true); - List datatypes = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "datatype"), null)); - List parentTriplesMaps = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "parentTriplesMap"), null)); - List parentTermMaps = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "parentTermMap"), null)); + List datatypes = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "datatype"), null)); + List parentTriplesMaps = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "parentTriplesMap"), null)); + List parentTermMaps = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "parentTermMap"), null)); List languages = getLanguageExecutorsForObjectMap(objectmap); @@ -248,12 +253,14 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer languageMaps = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "languageMap"), null)); + List languageMaps = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "languageMap"), null)); - // get targets for object map - List oTargets = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "logicalTarget"), null)); + // get targets and targetGenerators for object map + List oTargets = getTargets(objectmap); - objectMapCallback.accept(new MappingInfo(objectmap, oGen, oTargets), "child"); + List oTargetGenerators = getTargetGenerators(objectmap, baseIRI, strictMode); + + objectMapCallback.accept(new MappingInfo(objectmap, oGen, oTargets, oTargetGenerators), "child"); } else if (!parentTriplesMaps.isEmpty()) { if (parentTriplesMaps.size() > 1) { logger.warn("{} has {} Parent Triples Maps. You can only have one. A random one is taken.", triplesMap, parentTriplesMaps.size()); @@ -261,10 +268,10 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer rmljoinConditions = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML + "joinCondition"), null)); + List rmljoinConditions = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML + "joinCondition"), null)); List joinConditionFunctionExecutors = new ArrayList<>(); - List joinConditions = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "joinCondition"), null)); + List joinConditions = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "joinCondition"), null)); for (Term joinCondition : joinConditions) { @@ -293,18 +300,18 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer logicalSources = Utils.getObjectsFromQuads(store.getQuads(this.triplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)); + List logicalSources = getObjectsFromQuads(store.getQuads(this.triplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)); Term logicalSource = null; if (!logicalSources.isEmpty()) { logicalSource = logicalSources.get(0); } - List parentLogicalSources = Utils.getObjectsFromQuads(store.getQuads(parentTriplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)); + List parentLogicalSources = getObjectsFromQuads(store.getQuads(parentTriplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)); Term parentLogicalSource = null; if (!parentLogicalSources.isEmpty()) { parentLogicalSource = parentLogicalSources.get(0); @@ -337,21 +344,23 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer targets = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "logicalTarget"), null)); + // get targets and targetGenerators for object map + List targets = getTargets(objectmap); + List targetGenerators = getTargetGenerators(objectmap, baseIRI, strictMode); + + objectMapCallback.accept(new MappingInfo(objectmap, gen, targets, targetGenerators), "child"); - objectMapCallback.accept(new MappingInfo(objectmap, gen, targets), "child"); } } private List parseGraphMapsAndShortcuts(Term termMap) throws Exception { List graphMappingInfos = new ArrayList<>(); - List graphMaps = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "graphMap"), null)); + List graphMaps = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "graphMap"), null)); for (Term graphMap : graphMaps) { - List functionValues = Utils.getObjectsFromQuads(store.getQuads(graphMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); - List termTypes = Utils.getObjectsFromQuads(store.getQuads(graphMap, new NamedNode(NAMESPACES.RML2 + "termType"), null)); + List functionValues = getObjectsFromQuads(store.getQuads(graphMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); + List termTypes = getObjectsFromQuads(store.getQuads(graphMap, new NamedNode(NAMESPACES.RML2 + "termType"), null)); Term termType = null; if (!termTypes.isEmpty()) { @@ -386,13 +395,15 @@ private List parseGraphMapsAndShortcuts(Term termMap) throws Except } } - // get targets for graph maps - List targets = Utils.getObjectsFromQuads(store.getQuads(graphMap, new NamedNode(NAMESPACES.RML2 + "logicalTarget"), null)); + // get targets and target generators for graph map + List targets = getTargets(graphMap); + List targetGenerators = getTargetGenerators(graphMap, baseIRI, strictMode); + + graphMappingInfos.add(new MappingInfo(termMap, generator, targets, targetGenerators)); - graphMappingInfos.add(new MappingInfo(termMap, generator, targets)); } - List graphShortcuts = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "graph"), null)); + List graphShortcuts = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "graph"), null)); for (Term graph : graphShortcuts) { String gStr = graph.getValue(); @@ -403,30 +414,31 @@ private List parseGraphMapsAndShortcuts(Term termMap) throws Except return graphMappingInfos; } - private List parsePredicateMapsAndShortcuts(Term termMap) throws IOException { + private List parsePredicateMapsAndShortcuts(Term termMap) throws Exception { List predicateMappingInfos = new ArrayList<>(); - List predicateMaps = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "predicateMap"), null)); + List predicateMaps = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "predicateMap"), null)); for (Term predicateMap : predicateMaps) { // get functionValue for predicate maps - List functionValues = Utils.getObjectsFromQuads(store.getQuads(predicateMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); + List functionValues = getObjectsFromQuads(store.getQuads(predicateMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); - // get targets for predicate maps - List targets = Utils.getObjectsFromQuads(store.getQuads(predicateMap, new NamedNode(NAMESPACES.RML2 + "logicalTarget"), null)); + // get target generators for predicate maps + List targets = getTargets(predicateMap); + List targetGenerators = getTargetGenerators(predicateMap, baseIRI, strictMode); if (functionValues.isEmpty()) { predicateMappingInfos.add(new MappingInfo(predicateMap, new NamedNodeGenerator(RecordFunctionExecutorFactory.generate(store, predicateMap, false, ignoreDoubleQuotes), baseIRI, strictMode), - targets)); + targets, targetGenerators)); } else { SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0)); - predicateMappingInfos.add(new MappingInfo(predicateMap, new NamedNodeGenerator(functionExecutor, baseIRI, strictMode), targets)); + predicateMappingInfos.add(new MappingInfo(predicateMap, new NamedNodeGenerator(functionExecutor, baseIRI, strictMode), targets, targetGenerators)); } } - List predicateShortcuts = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "predicate"), null)); + List predicateShortcuts = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "predicate"), null)); for (Term predicate : predicateShortcuts) { String pStr = predicate.getValue(); @@ -437,8 +449,8 @@ private List parsePredicateMapsAndShortcuts(Term termMap) throws IO return predicateMappingInfos; } - private SingleRecordFunctionExecutor parseFunctionTermMap(Term functionValue) throws IOException { - List functionPOMs = Utils.getObjectsFromQuads(store.getQuads(functionValue, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); + private SingleRecordFunctionExecutor parseFunctionTermMap(Term functionValue) throws Exception { + List functionPOMs = getObjectsFromQuads(store.getQuads(functionValue, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); ArrayList params = new ArrayList<>(); for (Term pom : functionPOMs) { @@ -461,8 +473,8 @@ private SingleRecordFunctionExecutor parseFunctionTermMap(Term functionValue) th return new DynamicSingleRecordFunctionExecutor(params, functionAgent); } - private MultipleRecordsFunctionExecutor parseJoinConditionFunctionTermMap(Term functionValue) throws IOException { - List functionPOMs = Utils.getObjectsFromQuads(store.getQuads(functionValue, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); + private MultipleRecordsFunctionExecutor parseJoinConditionFunctionTermMap(Term functionValue) throws Exception { + List functionPOMs = getObjectsFromQuads(store.getQuads(functionValue, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); ArrayList params = new ArrayList<>(); for (Term pom : functionPOMs) { @@ -503,7 +515,7 @@ private MultipleRecordsFunctionExecutor generateSameLogicalSourceJoinConditionFu return new StaticMultipleRecordsFunctionExecutor(parameters, functionAgent, "https://w3id.org/imec/idlab/function#equal"); } - private List parseObjectMapsAndShortcuts(Term pom) throws IOException { + private List parseObjectMapsAndShortcuts(Term pom) throws Exception { List mappingInfos = new ArrayList<>(); parseObjectMapsAndShortcutsWithCallback(pom, (mappingInfo, childOrParent) -> { @@ -519,11 +531,11 @@ private List parseObjectMapsAndShortcuts(Term pom) throws IOExcepti * @param objectmap the object for which the executors need to be determined. * @return a list of executors that return language tags. */ - private List getLanguageExecutorsForObjectMap(Term objectmap) throws IOException { + private List getLanguageExecutorsForObjectMap(Term objectmap) throws Exception { ArrayList executors = new ArrayList<>(); // Parse rr:language - List languages = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "language"), null)); + List languages = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "language"), null)); // Validate languages. languages.stream().map(Term::getValue).forEach(language -> {if (! isValidrrLanguage(language)) { @@ -535,10 +547,10 @@ private List getLanguageExecutorsForObjectMap(Term } // Parse rml:languageMap - List languageMaps = Utils.getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "languageMap"), null)); + List languageMaps = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "languageMap"), null)); for (Term languageMap : languageMaps) { - List functionValues = Utils.getObjectsFromQuads(store.getQuads(languageMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); + List functionValues = getObjectsFromQuads(store.getQuads(languageMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); if (functionValues.isEmpty()) { executors.add(RecordFunctionExecutorFactory.generate(store, languageMap, false, ignoreDoubleQuotes)); @@ -558,11 +570,17 @@ private MappingInfo parseLanguageMappingInfo(Term objectMap) { return mappingInfo; } - List languageMaps = Utils.getObjectsFromQuads(store.getQuads(objectMap, new NamedNode(NAMESPACES.RML2 + "languageMap"), null)); + List languageMaps = getObjectsFromQuads(store.getQuads(objectMap, new NamedNode(NAMESPACES.RML2 + "languageMap"), null)); if (languageMaps.size() == 1) { Term l = languageMaps.get(0); - List lTargets = Utils.getObjectsFromQuads(store.getQuads(l, new NamedNode(NAMESPACES.RML2 + "logicalTarget"), null)); - mappingInfo = new MappingInfo(l, lTargets); + List lTargets = getTargets(l); + List lTargetGenerators = null; + try { + lTargetGenerators = getTargetGenerators(l, baseIRI, strictMode); + } catch (Exception e) { + e.printStackTrace(); + } + mappingInfo = new MappingInfo(l, lTargets, lTargetGenerators); } else if (languageMaps.size() > 1) { logger.warn("Multiple language maps found, a random language map is used"); @@ -575,14 +593,14 @@ else if (languageMaps.size() > 1) { * If no Term Type is found, a default Term Type is return based on the R2RML specification. **/ private Term getTermType(Term map, boolean isObjectMap) { - List termTypes = Utils.getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "termType"), null)); + List termTypes = getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "termType"), null)); Term termType = null; if (!termTypes.isEmpty()) { termType = termTypes.get(0); } else { - List constants = Utils.getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "constant"), null)); + List constants = getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "constant"), null)); if (!constants.isEmpty()) { Term constant = constants.get(0); @@ -595,11 +613,11 @@ private Term getTermType(Term map, boolean isObjectMap) { termType = new NamedNode(NAMESPACES.RML2 + "BlankNode"); } } else if (isObjectMap) { - boolean hasReference = !Utils.getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "reference"), null)).isEmpty(); - boolean hasFunctionValues = !Utils.getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.FNML + "functionValue"), null)).isEmpty(); - boolean hasLanguage = !Utils.getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "language"), null)).isEmpty() || - !Utils.getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "languageMap"), null)).isEmpty(); - boolean hasDatatype = !Utils.getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "datatype"), null)).isEmpty(); + boolean hasReference = !getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "reference"), null)).isEmpty(); + boolean hasFunctionValues = !getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.FNML + "functionValue"), null)).isEmpty(); + boolean hasLanguage = !getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "language"), null)).isEmpty() || + !getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "languageMap"), null)).isEmpty(); + boolean hasDatatype = !getObjectsFromQuads(store.getQuads(map, new NamedNode(NAMESPACES.RML2 + "datatype"), null)).isEmpty(); if (hasReference || hasLanguage || hasDatatype || hasFunctionValues) { termType = new NamedNode(NAMESPACES.RML2 + "Literal"); @@ -639,18 +657,18 @@ private List getPredicateObjectGraphMappingFromMult * @return true if double quotes should be ignored in references, else false. */ private boolean areDoubleQuotesIgnored(QuadStore store, Term triplesMap) { - List logicalSources = Utils.getObjectsFromQuads(store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)); + List logicalSources = getObjectsFromQuads(store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)); if (!logicalSources.isEmpty()) { Term logicalSource = logicalSources.get(0); - List sources = Utils.getObjectsFromQuads(store.getQuads(logicalSource, new NamedNode(NAMESPACES.RML2 + "source"), null)); + List sources = getObjectsFromQuads(store.getQuads(logicalSource, new NamedNode(NAMESPACES.RML2 + "source"), null)); if (!sources.isEmpty()) { Term source = sources.get(0); if (! (sources.get(0) instanceof Literal)) { - List sourceType = Utils.getObjectsFromQuads(store.getQuads(source, new NamedNode(NAMESPACES.RDF + "type"), null)); + List sourceType = getObjectsFromQuads(store.getQuads(source, new NamedNode(NAMESPACES.RDF + "type"), null)); return sourceType.get(0).getValue().equals(NAMESPACES.D2RQ + "Database"); } @@ -659,4 +677,29 @@ private boolean areDoubleQuotesIgnored(QuadStore store, Term triplesMap) { return false; } + + private List getTargetGenerators(Term termMap, String baseIRI, StrictMode strictMode) throws Exception { + List targetGenerators = new ArrayList<>(); + List logicalTargetMaps = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RMLI + "logicalTargetMap"), null)); + for (Term logicalTargetMap : logicalTargetMaps) { + SingleRecordFunctionExecutor functionExecutor; + List functionValues = getObjectsFromQuads(store.getQuads(logicalTargetMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); + if (functionValues.isEmpty()) { + //similar to subjects, dynamic targets should always be uri + functionExecutor = RecordFunctionExecutorFactory.generate(store, logicalTargetMap, true, ignoreDoubleQuotes); + } else { + functionExecutor = parseFunctionTermMap(functionValues.get(0)); + } + targetGenerators.add(new NamedNodeGenerator(functionExecutor, baseIRI, strictMode)); + } + return targetGenerators; + } + + private List getTargets(Term termMap){ + List targets = new ArrayList<>(); + List logicalTargets = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "logicalTarget"), null)); + targets.addAll(logicalTargets); + return targets; + } + } From 6e926c9cd7c69d32e92beff592916bc633d1e868 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 16:13:10 +0100 Subject: [PATCH 042/127] SolidTargetTest: optimize imports and removed unused function --- src/test/java/be/ugent/rml/SolidTargetTest.java | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index f0b3de1b..736f8046 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -8,13 +8,8 @@ import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; -import java.io.IOException; import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.HashMap; -import java.util.List; import java.util.Map; public class SolidTargetTest extends TestCore { @@ -119,16 +114,4 @@ private void compareResourceWithOutput(String outPath, Map solidT result.removeDuplicates(); compareStores(filePathToStore(outPath), result); } - - private static void replaceStringInFile(Path filePath, String target, String replacement) { - try { - List lines = Files.readAllLines(filePath, StandardCharsets.UTF_8); - for (int i = 0; i < lines.size(); i++) { - lines.set(i, lines.get(i).replace(target, replacement)); - } - Files.write(filePath, lines, StandardCharsets.UTF_8); - } catch (IOException e) { - e.printStackTrace(); - } - } } From 50b672e955dd39ec0dc8aa7151c5cbccb7b3dd87 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 16:51:31 +0100 Subject: [PATCH 043/127] Executor: include the generation of dynamic targets --- src/main/java/be/ugent/rml/Executor.java | 46 ++++++++++++++++-------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/src/main/java/be/ugent/rml/Executor.java b/src/main/java/be/ugent/rml/Executor.java index 19a6f87b..6dffd13c 100644 --- a/src/main/java/be/ugent/rml/Executor.java +++ b/src/main/java/be/ugent/rml/Executor.java @@ -322,13 +322,13 @@ private List getSubject(Term triplesMap, Mapping mapping, Recor List nodes = generator.generate(record); if (!nodes.isEmpty()) { - List targets = mapping.getSubjectMappingInfo().getTargets(); + List subjectTargets = getAllTargets(mapping.getSubjectMappingInfo(), record); List terms = new ArrayList<>(); Metadata meta = new Metadata(triplesMap, mapping.getSubjectMappingInfo().getTerm()); // TODO: only create metadata when it's required for (Term node : nodes) { - terms.add(new ProvenancedTerm(node, meta, targets)); + terms.add(new ProvenancedTerm(node, meta, subjectTargets)); } this.subjectCache.get(triplesMap).put(i, terms); return terms; @@ -399,14 +399,6 @@ public QuadStore getRMLStore() { return this.rmlStore; } - public Map getTargets(){ - if (this.targetStores.isEmpty()){ - return null; - } - return this.targetStores; - } - - public void verifySources(String basepath, String mappingPath) throws Exception { for (Term triplesMap : this.getTriplesMaps()) { List logicalSources = Utils.getObjectsFromQuads(rmlStore.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)); @@ -454,8 +446,8 @@ private void generatePredicateObjectsForSubjects(final List sub if (terms != null) { terms.forEach(term -> { if (!term.equals(new NamedNode(NAMESPACES.RML2 + "defaultGraph"))) { - List targets = mappingInfo.getTargets(); - subjectGraphs.add(new ProvenancedTerm(term, null, targets)); + List subjectGraphTargets = getAllTargets(mappingInfo, record); + subjectGraphs.add(new ProvenancedTerm(term, null, subjectGraphTargets)); } }); } @@ -477,8 +469,8 @@ private void generatePredicateObjectsForSubjects(final List sub if (pogGraphGenerator != null) { pogGraphGenerator.generate(record).forEach(term -> { if (!term.equals(new NamedNode(NAMESPACES.RML2 + "defaultGraph"))) { - List targets = pogMapping.getGraphMappingInfo().getTargets(); - poGraphs.add(new ProvenancedTerm(term, null, targets)); + List graphTargets = getAllTargets(pogMapping.getGraphMappingInfo(), record); + poGraphs.add(new ProvenancedTerm(term, null, graphTargets)); } }); } @@ -528,4 +520,30 @@ private void generatePredicateObjectsForSubjects(final List sub } } } + + private List getAllTargets(MappingInfo mappingInfo, Record record) { + List allTargets = new ArrayList<>(); + allTargets.addAll(generateTargetsAndAddToTargetStore(mappingInfo, record)); + allTargets.addAll(mappingInfo.getTargets()); + return allTargets; + } + + private List generateTargetsAndAddToTargetStore(MappingInfo mappingInfo, Record record) { + List targetGenerators = mappingInfo.getTargetGenerators(); + List generatedTargets = new ArrayList<>(); + for (TermGenerator targetGenerator : targetGenerators) { + try { + generatedTargets.addAll(targetGenerator.generate(record)); + } catch (Exception e) { + e.printStackTrace(); + } + } + for (Term generatedTarget : generatedTargets){ + if(!targetStores.containsKey(generatedTarget)){ + targetStores.put(generatedTarget, new RDF4JStore()); + } + } + return generatedTargets; + } + } From a66f3b0ab85c84bd8aa80a8c69a36f7fb1c0835a Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 16:53:51 +0100 Subject: [PATCH 044/127] PredicateObjectGraphMapping: include language target generators --- src/main/java/be/ugent/rml/PredicateObjectGraphMapping.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/be/ugent/rml/PredicateObjectGraphMapping.java b/src/main/java/be/ugent/rml/PredicateObjectGraphMapping.java index 79929a01..c49fd0be 100644 --- a/src/main/java/be/ugent/rml/PredicateObjectGraphMapping.java +++ b/src/main/java/be/ugent/rml/PredicateObjectGraphMapping.java @@ -25,6 +25,7 @@ public PredicateObjectGraphMapping(MappingInfo predicateMappingInfo, MappingInfo // Language Maps are tightly connected to the object, merge the target lists if(this.languageMappingInfo != null) { + this.objectMappingInfo.addTargetGenerators(this.languageMappingInfo.getTargetGenerators()); this.objectMappingInfo.addTargets(this.languageMappingInfo.getTargets()); } } From b1e7af3d32c063f21e0090f4079b05eae69471dd Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 17:02:18 +0100 Subject: [PATCH 045/127] Main: integrating dynamic targets > adding generated RDF with target rmli:ThisMapping to rmlstore. --- src/main/java/be/ugent/rml/cli/Main.java | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index d80a0be2..d98846e7 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -4,6 +4,7 @@ import be.ugent.idlab.knows.functions.agent.AgentFactory; import be.ugent.knows.idlabFunctions.IDLabFunctions; import be.ugent.rml.Executor; +import be.ugent.rml.NAMESPACES; import be.ugent.rml.StrictMode; import be.ugent.rml.Utils; import be.ugent.rml.metadata.MetadataGenerator; @@ -434,8 +435,9 @@ public static void run(String[] args, String basePath) throws Exception { String startTimestamp = Instant.now().toString(); QuadStore result = null; + Map targets; try { - Map targets = executor.execute(triplesMaps, checkOptionPresence(removeduplicatesOption, lineArgs, configFile), metadataGenerator); + targets = executor.execute(triplesMaps, checkOptionPresence(removeduplicatesOption, lineArgs, configFile), metadataGenerator); } catch (Exception e) { logger.error(e.getMessage()); throw e; @@ -443,7 +445,6 @@ public static void run(String[] args, String basePath) throws Exception { functionAgent.close(); } - Map targets = executor.getTargets(); if (targets != null) { result = targets.get(new NamedNode("rmlmapper://default.store")); if(result != null) { @@ -484,6 +485,12 @@ private static void writeOutputTargets(Map targets, QuadStore r logger.debug("Writing to Targets: {}", targets.keySet()); TargetFactory targetFactory = new TargetFactory(basePath); + // check if anything needs to be added to the rmlstore (e.g. dynamic targets) + if(targets.containsKey(new NamedNode(NAMESPACES.RMLI + "ThisMapping"))){ + rmlStore.addQuads(targets.get(new NamedNode(NAMESPACES.RMLI + "ThisMapping")).getQuads(null, null, null)); + targets.remove(new NamedNode(NAMESPACES.RMLI + "ThisMapping")); + } + // Go over each term and export to the Target if needed for (Map.Entry termTargetMapping: targets.entrySet()) { Term term = termTargetMapping.getKey(); @@ -516,9 +523,9 @@ private static void writeOutputTargets(Map targets, QuadStore r logger.debug("Exporting to Target: {}", term); Target target = targetFactory.getTarget(term, rmlStore, store); if (store.size() > 1) { - logger.info("{} quads were generated for {} Target", store.size(), term); + logger.info("{} quads were generated for {} Target", store.size(), target.toString()); } else { - logger.info("{} quad was generated {} Target", store.size(), term); + logger.info("{} quad was generated {} Target", store.size(), target.toString()); } String serializationFormat = target.getSerializationFormat(); @@ -526,12 +533,13 @@ private static void writeOutputTargets(Map targets, QuadStore r store.addQuads(target.getMetadata()); // Set character encoding - try (Writer out = new BufferedWriter(new OutputStreamWriter(output, Charset.defaultCharset()))) { + try (Writer out = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8))) { // Write store to target store.write(out, serializationFormat); } // Close OS resources target.close(); + logger.debug("Exporting to Target: {}", target.toString()); } } @@ -558,11 +566,6 @@ private static String getPriorityOptionValue(Option option, CommandLine lineArgs } } - private static String getPriorityOptionValue(Option option, CommandLine lineArgs, Properties properties, String defaultValue) { - String value = getPriorityOptionValue(option, lineArgs, properties); - return value == null ? defaultValue : value; - } - private static String[] getOptionValues(Option option, CommandLine lineArgs, Properties properties) { if (lineArgs.hasOption(option.getOpt())) { return lineArgs.getOptionValues(option.getOpt()); From 8d4dd6788c4b48894d8e84a1ead0129f9431b442 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 21:49:25 +0100 Subject: [PATCH 046/127] Executor: correction for dynamic targets --- src/main/java/be/ugent/rml/Executor.java | 16 ++- .../solid-target/dynamic_solid1/buildings.csv | 4 + .../solid-target/dynamic_solid1/mapping.ttl | 68 ++++++++++++ .../solid-target/dynamic_solid1/output1.nq | 2 + .../solid-target/dynamic_solid1/output2.nq | 1 + .../solid-target/dynamic_solid2/buildings.csv | 4 + .../solid-target/dynamic_solid2/mapping.ttl | 76 +++++++++++++ .../solid-target/dynamic_solid2/output1.nq | 2 + .../solid-target/dynamic_solid2/output2.nq | 1 + .../solid-target/dynamic_solid2/output3.nq | 4 + .../solid-target/dynamic_solid3/buildings.csv | 4 + .../solid-target/dynamic_solid3/mapping.ttl | 101 ++++++++++++++++++ .../solid-target/dynamic_solid3/output1.nq | 2 + .../solid-target/dynamic_solid3/output2.nq | 1 + .../solid-target/dynamic_solid3/output3.nq | 3 + .../solid-target/dynamic_solid3/output4.nq | 2 + .../solid-target/solid5/buildings.csv | 6 +- .../resources/solid-target/solid5/mapping.ttl | 8 +- 18 files changed, 293 insertions(+), 12 deletions(-) create mode 100644 src/test/resources/solid-target/dynamic_solid1/buildings.csv create mode 100644 src/test/resources/solid-target/dynamic_solid1/mapping.ttl create mode 100644 src/test/resources/solid-target/dynamic_solid1/output1.nq create mode 100644 src/test/resources/solid-target/dynamic_solid1/output2.nq create mode 100644 src/test/resources/solid-target/dynamic_solid2/buildings.csv create mode 100644 src/test/resources/solid-target/dynamic_solid2/mapping.ttl create mode 100644 src/test/resources/solid-target/dynamic_solid2/output1.nq create mode 100644 src/test/resources/solid-target/dynamic_solid2/output2.nq create mode 100644 src/test/resources/solid-target/dynamic_solid2/output3.nq create mode 100644 src/test/resources/solid-target/dynamic_solid3/buildings.csv create mode 100644 src/test/resources/solid-target/dynamic_solid3/mapping.ttl create mode 100644 src/test/resources/solid-target/dynamic_solid3/output1.nq create mode 100644 src/test/resources/solid-target/dynamic_solid3/output2.nq create mode 100644 src/test/resources/solid-target/dynamic_solid3/output3.nq create mode 100644 src/test/resources/solid-target/dynamic_solid3/output4.nq diff --git a/src/main/java/be/ugent/rml/Executor.java b/src/main/java/be/ugent/rml/Executor.java index 6dffd13c..e2bb6cf8 100644 --- a/src/main/java/be/ugent/rml/Executor.java +++ b/src/main/java/be/ugent/rml/Executor.java @@ -187,9 +187,9 @@ public Map executeWithFunction(List triplesMaps, boolean List nodes = generator.generate(record); if (!nodes.isEmpty()) { - List targets = mapping.getSubjectMappingInfo().getTargets(); + List subjectTargets = getAllTargets(mapping.getSubjectMappingInfo(), record); for (Term node : nodes) { - subjects.add(new ProvenancedTerm(node, null, targets)); + subjects.add(new ProvenancedTerm(node, null, subjectTargets)); } } // TODO this only works for the constants in the triples map! @@ -469,7 +469,7 @@ private void generatePredicateObjectsForSubjects(final List sub if (pogGraphGenerator != null) { pogGraphGenerator.generate(record).forEach(term -> { if (!term.equals(new NamedNode(NAMESPACES.RML2 + "defaultGraph"))) { - List graphTargets = getAllTargets(pogMapping.getGraphMappingInfo(), record); + List graphTargets = getAllTargets(pogGraphMappingInfo, record); poGraphs.add(new ProvenancedTerm(term, null, graphTargets)); } }); @@ -480,15 +480,21 @@ private void generatePredicateObjectsForSubjects(final List sub /* Predicates */ if (pogPredicateMappingInfo != null) { TermGenerator pogPredicateGenerator = pogPredicateMappingInfo.getTermGenerator(); - pogPredicateGenerator.generate(record).forEach(p -> predicates.add(new ProvenancedTerm(p, pogPredicateMappingInfo))); + List predicateTargets = getAllTargets(pogPredicateMappingInfo, record); + pogPredicateGenerator.generate(record).forEach(p -> predicates.add(new ProvenancedTerm(p, predicateTargets))); } /* Objects */ if (pogObjectMappingInfo != null) { TermGenerator pogObjectGenerator = pogObjectMappingInfo.getTermGenerator(); if (pogObjectGenerator != null) { + List objectTargets = getAllTargets(pogObjectMappingInfo, record); List objects = pogObjectGenerator.generate(record); - List provenancedObjects = new ArrayList<>(); + ArrayList provenancedObjects = new ArrayList<>(); + + objects.forEach(object -> { + provenancedObjects.add(new ProvenancedTerm(object, objectTargets)); + }); objects.forEach(object -> provenancedObjects.add(new ProvenancedTerm(object, pogObjectMappingInfo))); diff --git a/src/test/resources/solid-target/dynamic_solid1/buildings.csv b/src/test/resources/solid-target/dynamic_solid1/buildings.csv new file mode 100644 index 00000000..94920327 --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid1/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID,webid +building1,owner1,floortile1,http://localhost/owner1/profile/card#me +building2,owner1,floortile2,http://localhost/owner1/profile/card#me +building3,owner2,floortile1,http://localhost/owner2/profile/card#me diff --git a/src/test/resources/solid-target/dynamic_solid1/mapping.ttl b/src/test/resources/solid-target/dynamic_solid1/mapping.ttl new file mode 100644 index 00000000..d06b2a8f --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid1/mapping.ttl @@ -0,0 +1,68 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix idsa: . + + a rml:LogicalSource; + rml:source "src/test/resources/solid-target/dynamic_solid1/buildings.csv"; + rml:referenceFormulation ql:CSV. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "http://example.com/{BuildingID}"; + rmli:logicalTargetMap [ rr:template "logical_target/building/{OwnerID}" ]; + ]; + rr:predicateObjectMap [ + rr:predicate o:has-floor-tile; + rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}" ]; + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "logical_target/building/{OwnerID}"; + rr:class rml:LogicalTarget; + rml:logicalTarget rmli:ThisMapping; + ]; + rr:predicateObjectMap [ + rr:predicate rmlt:serialization; + rr:object formats:Turtle; + ]; + rr:predicateObjectMap [ + rr:predicate rmlt:target; + rr:objectMap [ rr:template "target/building/{OwnerID}" ]; + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "target/building/{OwnerID}"; + rr:class rmlt:Target, rmli:SolidResourceTarget; + rml:logicalTarget rmli:ThisMapping; + ]; + rr:predicateObjectMap [ + rr:predicate rmli:resource; + rr:objectMap [ rr:template "http://localhost:3000/example/building_{OwnerID}" ]; + ]; + rr:predicateObjectMap [ + rr:predicate idsa:userAuthentication; + rr:object ; + ]. + + a idsa:UserAuthenticaion; + idsa:authUsername "hello@example.com"; + idsa:authPassword "abc123"; + solid:oidcIssuer ; + rmli:webId . + diff --git a/src/test/resources/solid-target/dynamic_solid1/output1.nq b/src/test/resources/solid-target/dynamic_solid1/output1.nq new file mode 100644 index 00000000..73ad489c --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid1/output1.nq @@ -0,0 +1,2 @@ + . + . diff --git a/src/test/resources/solid-target/dynamic_solid1/output2.nq b/src/test/resources/solid-target/dynamic_solid1/output2.nq new file mode 100644 index 00000000..49f33f6f --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid1/output2.nq @@ -0,0 +1 @@ + . diff --git a/src/test/resources/solid-target/dynamic_solid2/buildings.csv b/src/test/resources/solid-target/dynamic_solid2/buildings.csv new file mode 100644 index 00000000..f57f933b --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid2/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID +building1,owner1,floortile1 +building2,owner1,floortile2 +building3,owner2,floortile1 diff --git a/src/test/resources/solid-target/dynamic_solid2/mapping.ttl b/src/test/resources/solid-target/dynamic_solid2/mapping.ttl new file mode 100644 index 00000000..7776882a --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid2/mapping.ttl @@ -0,0 +1,76 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix idsa: . + + a rml:LogicalSource; + rml:source "src/test/resources/solid-target/dynamic_solid2/buildings.csv"; + rml:referenceFormulation ql:CSV. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ rr:template "http://example.com/{BuildingID}" ]; + rr:predicateObjectMap [ + rr:predicate o:has-floor-tile; + rr:objectMap [ + rr:template "http://example.com/product-{FloorTileID}"; + rmli:logicalTargetMap [ rr:template "logical_target/building/{OwnerID}" ]; + rml:logicalTarget ; + ]; + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "logical_target/building/{OwnerID}"; + rr:class rml:LogicalTarget; + rml:logicalTarget rmli:ThisMapping; + ]; + rr:predicateObjectMap [ + rr:predicate rmlt:serialization; + rr:object formats:Turtle; + ]; + rr:predicateObjectMap [ + rr:predicate rmlt:target; + rr:objectMap [ rr:template "target/building/{OwnerID}" ]; + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "target/building/{OwnerID}"; + rr:class rmlt:Target, rmli:SolidResourceTarget; + rml:logicalTarget rmli:ThisMapping; + ]; + rr:predicateObjectMap [ + rr:predicate rmli:resource; + rr:objectMap [ rr:template "http://localhost:3000/example/building_{OwnerID}" ]; + ]; + rr:predicateObjectMap [ + rr:predicate idsa:userAuthentication; + rr:object ; + ]. + + rmlt:target [ + #rmlt:serialization formats:N-Quads; + a rmli:SolidResourceTarget; + rmli:resource "http://localhost:3000/example/floortile"; + idsa:userAuthentication ; +]. + + a idsa:UserAuthentication; + idsa:authUsername "hello@example.com"; + idsa:authPassword "abc123"; + solid:oidcIssuer ; + rmli:webId . + diff --git a/src/test/resources/solid-target/dynamic_solid2/output1.nq b/src/test/resources/solid-target/dynamic_solid2/output1.nq new file mode 100644 index 00000000..73ad489c --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid2/output1.nq @@ -0,0 +1,2 @@ + . + . diff --git a/src/test/resources/solid-target/dynamic_solid2/output2.nq b/src/test/resources/solid-target/dynamic_solid2/output2.nq new file mode 100644 index 00000000..49f33f6f --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid2/output2.nq @@ -0,0 +1 @@ + . diff --git a/src/test/resources/solid-target/dynamic_solid2/output3.nq b/src/test/resources/solid-target/dynamic_solid2/output3.nq new file mode 100644 index 00000000..aafe36a0 --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid2/output3.nq @@ -0,0 +1,4 @@ + . + . + . + diff --git a/src/test/resources/solid-target/dynamic_solid3/buildings.csv b/src/test/resources/solid-target/dynamic_solid3/buildings.csv new file mode 100644 index 00000000..f57f933b --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid3/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID +building1,owner1,floortile1 +building2,owner1,floortile2 +building3,owner2,floortile1 diff --git a/src/test/resources/solid-target/dynamic_solid3/mapping.ttl b/src/test/resources/solid-target/dynamic_solid3/mapping.ttl new file mode 100644 index 00000000..595a41eb --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid3/mapping.ttl @@ -0,0 +1,101 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix idsa: . + + a rml:LogicalSource; + rml:source "src/test/resources/solid-target/dynamic_solid2/buildings.csv"; + rml:referenceFormulation ql:CSV. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ rr:template "http://example.com/{BuildingID}" ]; + rr:predicateObjectMap [ + rr:predicate o:has-floor-tile; + rr:objectMap [ + rr:template "http://example.com/product-{FloorTileID}"; + rmli:logicalTargetMap [ rr:template "logical_target/building/{OwnerID}" ], + [ rr:template "logical_target/{FloorTileID}" ]; + ]; + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "logical_target/building/{OwnerID}"; + rr:class rml:LogicalTarget; + rml:logicalTarget rmli:ThisMapping; + ]; + rr:predicateObjectMap [ + rr:predicate rmlt:serialization; + rr:object formats:Turtle; + ]; + rr:predicateObjectMap [ + rr:predicate rmlt:target; + rr:objectMap [ rr:template "target/building/{OwnerID}" ]; + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "target/building/{OwnerID}"; + rr:class rmlt:Target, rmli:SolidResourceTarget; + rml:logicalTarget rmli:ThisMapping; + ]; + rr:predicateObjectMap [ + rr:predicate rmli:resource; + rr:objectMap [ rr:template "http://localhost:3000/example/building_{OwnerID}" ]; + ]; + rr:predicateObjectMap [ + rr:predicate idsa:userAuthentication; + rr:object ; + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "logical_target/{FloorTileID}"; + rr:class rml:LogicalTarget; + rml:logicalTarget rmli:ThisMapping; + ]; + rr:predicateObjectMap [ + rr:predicate rmlt:serialization; + rr:object formats:Turtle; + ]; + rr:predicateObjectMap [ + rr:predicate rmlt:target; + rr:objectMap [ rr:template "target/{FloorTileID}" ]; + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "target/{FloorTileID}"; + rr:class rmlt:Target, rmli:SolidResourceTarget; + rml:logicalTarget rmli:ThisMapping; + ]; + rr:predicateObjectMap [ + rr:predicate rmli:resource; + rr:objectMap [ rr:template "http://localhost:3000/example/{FloorTileID}" ]; + ]; + rr:predicateObjectMap [ + rr:predicate idsa:userAuthentication; + rr:object ; + ]. + + a idsa:UserAuthentication; + idsa:authUsername "hello@example.com"; + idsa:authPassword "abc123"; + solid:oidcIssuer ; + rmli:webId . + diff --git a/src/test/resources/solid-target/dynamic_solid3/output1.nq b/src/test/resources/solid-target/dynamic_solid3/output1.nq new file mode 100644 index 00000000..73ad489c --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid3/output1.nq @@ -0,0 +1,2 @@ + . + . diff --git a/src/test/resources/solid-target/dynamic_solid3/output2.nq b/src/test/resources/solid-target/dynamic_solid3/output2.nq new file mode 100644 index 00000000..49f33f6f --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid3/output2.nq @@ -0,0 +1 @@ + . diff --git a/src/test/resources/solid-target/dynamic_solid3/output3.nq b/src/test/resources/solid-target/dynamic_solid3/output3.nq new file mode 100644 index 00000000..068150a9 --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid3/output3.nq @@ -0,0 +1,3 @@ + . + . + diff --git a/src/test/resources/solid-target/dynamic_solid3/output4.nq b/src/test/resources/solid-target/dynamic_solid3/output4.nq new file mode 100644 index 00000000..d8ff7973 --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid3/output4.nq @@ -0,0 +1,2 @@ + . + diff --git a/src/test/resources/solid-target/solid5/buildings.csv b/src/test/resources/solid-target/solid5/buildings.csv index f57f933b..92cd61c6 100644 --- a/src/test/resources/solid-target/solid5/buildings.csv +++ b/src/test/resources/solid-target/solid5/buildings.csv @@ -1,4 +1,4 @@ BuildingID,OwnerID,FloorTileID -building1,owner1,floortile1 -building2,owner1,floortile2 -building3,owner2,floortile1 +building1,user2,floortile1 +building2,user2,floortile2 +building3,user3,floortile1 diff --git a/src/test/resources/solid-target/solid5/mapping.ttl b/src/test/resources/solid-target/solid5/mapping.ttl index bb79b9e1..2e60eb0e 100644 --- a/src/test/resources/solid-target/solid5/mapping.ttl +++ b/src/test/resources/solid-target/solid5/mapping.ttl @@ -11,7 +11,7 @@ @prefix solid: . @prefix acl: . @prefix rmli: . -@prefix idsa: . +@prefix ids: . a rr:TriplesMap; rml:logicalSource [ @@ -33,9 +33,9 @@ #rmlt:serialization formats:Turtle; a rmli:SolidResourceTarget; rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - idsa:userAuthentication [ - idsa:authUsername "user1@pod.playground.solidlab.be"; - idsa:authPassword "user1"; + ids:userAuthentication [ + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; solid:oidcIssuer ; rmli:webId ]; From 2a25c7fe3ead4dc1fea662a955901eb107a18c1e Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 21:51:04 +0100 Subject: [PATCH 047/127] Main: mappingconformer for dynamic targets --- src/main/java/be/ugent/rml/cli/Main.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index d98846e7..562e875c 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -7,6 +7,7 @@ import be.ugent.rml.NAMESPACES; import be.ugent.rml.StrictMode; import be.ugent.rml.Utils; +import be.ugent.rml.conformer.MappingConformer; import be.ugent.rml.metadata.MetadataGenerator; import be.ugent.rml.records.RecordsFactory; import be.ugent.rml.store.Quad; @@ -488,6 +489,16 @@ private static void writeOutputTargets(Map targets, QuadStore r // check if anything needs to be added to the rmlstore (e.g. dynamic targets) if(targets.containsKey(new NamedNode(NAMESPACES.RMLI + "ThisMapping"))){ rmlStore.addQuads(targets.get(new NamedNode(NAMESPACES.RMLI + "ThisMapping")).getQuads(null, null, null)); + MappingConformer conformer = new MappingConformer(rmlStore, null); + try { + boolean conversionNeeded = conformer.conform(); + + if (conversionNeeded) { + logger.info("Conversion to RML was needed."); + } + } catch (Exception e) { + logger.error("Failed to make dynamic targets conformant to RML spec.", e); + } targets.remove(new NamedNode(NAMESPACES.RMLI + "ThisMapping")); } From e6a77f8fef02d1cce67fc9563d2067873e635ae1 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 21:53:12 +0100 Subject: [PATCH 048/127] MappingFactory: removed unnecessary blank line --- src/main/java/be/ugent/rml/MappingFactory.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/be/ugent/rml/MappingFactory.java b/src/main/java/be/ugent/rml/MappingFactory.java index 189ece28..16390796 100644 --- a/src/main/java/be/ugent/rml/MappingFactory.java +++ b/src/main/java/be/ugent/rml/MappingFactory.java @@ -257,7 +257,6 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer oTargets = getTargets(objectmap); - List oTargetGenerators = getTargetGenerators(objectmap, baseIRI, strictMode); objectMapCallback.accept(new MappingInfo(objectmap, oGen, oTargets, oTargetGenerators), "child"); From dc6f6166f89eadc54cbb60d5034823b43ec1bd73 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 28 Oct 2024 21:56:55 +0100 Subject: [PATCH 049/127] SolidTargetTests and test resources: adding tests for dynamic targets --- .../be/ugent/rml/term/ProvenancedTerm.java | 18 ++++++--- .../java/be/ugent/rml/SolidTargetTest.java | 39 +++++++++++++++++++ .../resources/solid-target/acl1/buildings.csv | 6 +-- .../resources/solid-target/acl1/mapping.ttl | 12 +++--- .../resources/solid-target/acl2/buildings.csv | 6 +-- .../resources/solid-target/acl2/mapping.ttl | 12 +++--- .../solid-target/dynamic_solid1/buildings.csv | 6 +-- .../solid-target/dynamic_solid1/mapping.ttl | 22 +++++------ .../solid-target/dynamic_solid2/buildings.csv | 6 +-- .../solid-target/dynamic_solid2/mapping.ttl | 22 +++++------ .../solid-target/dynamic_solid3/buildings.csv | 6 +-- .../solid-target/dynamic_solid3/mapping.ttl | 28 ++++++------- .../solid-target/solid1/buildings.csv | 6 +-- .../resources/solid-target/solid1/mapping.ttl | 8 ++-- .../solid-target/solid2/buildings.csv | 6 +-- .../resources/solid-target/solid2/mapping.ttl | 8 ++-- .../solid-target/solid3/buildings.csv | 6 +-- .../resources/solid-target/solid3/mapping.ttl | 8 ++-- .../solid-target/solid4/buildings.csv | 6 +-- .../resources/solid-target/solid4/mapping.ttl | 8 ++-- 20 files changed, 143 insertions(+), 96 deletions(-) diff --git a/src/main/java/be/ugent/rml/term/ProvenancedTerm.java b/src/main/java/be/ugent/rml/term/ProvenancedTerm.java index 56724a27..d3c88757 100644 --- a/src/main/java/be/ugent/rml/term/ProvenancedTerm.java +++ b/src/main/java/be/ugent/rml/term/ProvenancedTerm.java @@ -10,26 +10,32 @@ public class ProvenancedTerm { private Term term; private Metadata metadata; - private List targets; + private List targets = new ArrayList<>(); public ProvenancedTerm(Term term, Metadata metadata, List targets) { this.term = term; this.metadata = metadata; - this.targets = targets; + this.targets.addAll(targets); } public ProvenancedTerm(Term term, MappingInfo mappingInfo) { this.term = term; this.metadata = new Metadata(); this.metadata.setSourceMap(mappingInfo.getTerm()); - this.targets = mappingInfo.getTargets(); + this.targets.addAll(mappingInfo.getTargets()); } public ProvenancedTerm(Term term) { this.term = term; - this.targets = new ArrayList(); + this.targets = new ArrayList<>(); } + public ProvenancedTerm(Term term, List targets) { + this.term = term; + this.targets.addAll(targets); + } + + public Term getTerm() { return term; } @@ -38,5 +44,7 @@ public Metadata getMetadata() { return metadata; } - public List getTargets() { return targets; }; + public List getTargets() { + return targets; + }; } diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index 736f8046..f633d979 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -77,6 +77,45 @@ public void acl2() throws Exception{ "user2"); } + //dynamic target on subject + @Test + public void dynamic_solid1() throws Exception{ + doMappingSolid("solid-target/dynamic_solid1/mapping.ttl", + new String[]{"https://pod.playground.solidlab.be/user1/rmlmapper/building_user2", + "https://pod.playground.solidlab.be/user1/rmlmapper/building_user3"}, + new String[]{"solid-target/dynamic_solid1/output1.nq", + "solid-target/dynamic_solid1/output2.nq"}, + new String[]{"user1", "user1"}); + } + + // constant and dynamic target in object map + @Test + public void dynamic_solid2() throws Exception{ + doMappingSolid("solid-target/dynamic_solid2/mapping.ttl", + new String[]{"https://pod.playground.solidlab.be/user1/rmlmapper/building_user2", + "https://pod.playground.solidlab.be/user1/rmlmapper/building_user3", + "https://pod.playground.solidlab.be/user1/rmlmapper/floortile"}, + new String[]{"solid-target/dynamic_solid2/output1.nq", + "solid-target/dynamic_solid2/output2.nq", + "solid-target/dynamic_solid2/output3.nq"}, + new String[]{"user1", "user1", "user1"}); + } + + //2 dynamic targets in object map + @Test + public void dynamic_solid3() throws Exception { + doMappingSolid("solid-target/dynamic_solid3/mapping.ttl", + new String[]{"https://pod.playground.solidlab.be/user1/rmlmapper/building_user2", + "https://pod.playground.solidlab.be/user1/rmlmapper/building_user3", + "https://pod.playground.solidlab.be/user1/rmlmapper/floortile1", + "https://pod.playground.solidlab.be/user1/rmlmapper/floortile2"}, + new String[]{"solid-target/dynamic_solid3/output1.nq", + "solid-target/dynamic_solid3/output2.nq", + "solid-target/dynamic_solid3/output3.nq", + "solid-target/dynamic_solid3/output4.nq"}, + new String[]{"user1", "user1", "user1", "user1"}); + } + void doMappingSolid(String mapPath, String resourceUrl, String outPath, String user) throws Exception { doMappingSolid(mapPath, new String[]{resourceUrl}, new String[]{outPath},new String[]{user}); } diff --git a/src/test/resources/solid-target/acl1/buildings.csv b/src/test/resources/solid-target/acl1/buildings.csv index f57f933b..92cd61c6 100644 --- a/src/test/resources/solid-target/acl1/buildings.csv +++ b/src/test/resources/solid-target/acl1/buildings.csv @@ -1,4 +1,4 @@ BuildingID,OwnerID,FloorTileID -building1,owner1,floortile1 -building2,owner1,floortile2 -building3,owner2,floortile1 +building1,user2,floortile1 +building2,user2,floortile2 +building3,user3,floortile1 diff --git a/src/test/resources/solid-target/acl1/mapping.ttl b/src/test/resources/solid-target/acl1/mapping.ttl index ab642b23..ded70ad5 100644 --- a/src/test/resources/solid-target/acl1/mapping.ttl +++ b/src/test/resources/solid-target/acl1/mapping.ttl @@ -11,7 +11,7 @@ @prefix solid: . @prefix acl: . @prefix rmli: . -@prefix idsa: . +@prefix ids: . @prefix void: . a rr:TriplesMap; @@ -87,7 +87,7 @@ a rmlt:Target; a rmli:SolidResourceTarget; rmli:resource ; - idsa:userAuthentication ; + ids:userAuthentication ; ]. rmlt:serialization formats:Turtle; @@ -95,12 +95,12 @@ a rmlt:Target; a rmli:SolidAclTarget; rmli:forResource ; - idsa:userAuthentication ; + ids:userAuthentication ; ]. - a idsa:UserAuthentication; - idsa:authUsername "user1@pod.playground.solidlab.be"; - idsa:authPassword "user1"; + a ids:UserAuthentication; + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; solid:oidcIssuer ; rmli:webId . diff --git a/src/test/resources/solid-target/acl2/buildings.csv b/src/test/resources/solid-target/acl2/buildings.csv index f57f933b..92cd61c6 100644 --- a/src/test/resources/solid-target/acl2/buildings.csv +++ b/src/test/resources/solid-target/acl2/buildings.csv @@ -1,4 +1,4 @@ BuildingID,OwnerID,FloorTileID -building1,owner1,floortile1 -building2,owner1,floortile2 -building3,owner2,floortile1 +building1,user2,floortile1 +building2,user2,floortile2 +building3,user3,floortile1 diff --git a/src/test/resources/solid-target/acl2/mapping.ttl b/src/test/resources/solid-target/acl2/mapping.ttl index 0b607b49..e43dc8ae 100644 --- a/src/test/resources/solid-target/acl2/mapping.ttl +++ b/src/test/resources/solid-target/acl2/mapping.ttl @@ -11,7 +11,7 @@ @prefix solid: . @prefix acl: . @prefix rmli: . -@prefix idsa: . +@prefix ids: . @prefix void: . a rr:TriplesMap; @@ -87,7 +87,7 @@ a rmlt:Target; a rmli:SolidResourceTarget; rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - idsa:userAuthentication ; + ids:userAuthentication ; ]. rmlt:serialization formats:Turtle; @@ -95,13 +95,13 @@ a rmlt:Target; a rmli:SolidAclTarget; rmli:forResource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - idsa:userAuthentication ; + ids:userAuthentication ; ]. - a idsa:UserAuthentication; - idsa:authUsername "user1@pod.playground.solidlab.be"; - idsa:authPassword "user1"; + a ids:UserAuthentication; + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; solid:oidcIssuer ; rmli:webId . diff --git a/src/test/resources/solid-target/dynamic_solid1/buildings.csv b/src/test/resources/solid-target/dynamic_solid1/buildings.csv index 94920327..ca2d1f77 100644 --- a/src/test/resources/solid-target/dynamic_solid1/buildings.csv +++ b/src/test/resources/solid-target/dynamic_solid1/buildings.csv @@ -1,4 +1,4 @@ BuildingID,OwnerID,FloorTileID,webid -building1,owner1,floortile1,http://localhost/owner1/profile/card#me -building2,owner1,floortile2,http://localhost/owner1/profile/card#me -building3,owner2,floortile1,http://localhost/owner2/profile/card#me +building1,user2,floortile1,https://pod.playground.solidlab.be/user2/profile/card#me +building2,user2,floortile2,https://pod.playground.solidlab.be/user2/profile/card#me +building3,user3,floortile1,https://pod.playground.solidlab.be/user3/profile/card#me diff --git a/src/test/resources/solid-target/dynamic_solid1/mapping.ttl b/src/test/resources/solid-target/dynamic_solid1/mapping.ttl index d06b2a8f..7e95f2e6 100644 --- a/src/test/resources/solid-target/dynamic_solid1/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid1/mapping.ttl @@ -11,7 +11,7 @@ @prefix solid: . @prefix acl: . @prefix rmli: . -@prefix idsa: . +@prefix ids: . a rml:LogicalSource; rml:source "src/test/resources/solid-target/dynamic_solid1/buildings.csv"; @@ -28,7 +28,7 @@ rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}" ]; ]. - a rr:TriplesMap; + a rr:TriplesMap; rml:logicalSource ; rr:subjectMap [ rr:template "logical_target/building/{OwnerID}"; @@ -44,7 +44,7 @@ rr:objectMap [ rr:template "target/building/{OwnerID}" ]; ]. - a rr:TriplesMap; + a rr:TriplesMap; rml:logicalSource ; rr:subjectMap [ rr:template "target/building/{OwnerID}"; @@ -53,16 +53,16 @@ ]; rr:predicateObjectMap [ rr:predicate rmli:resource; - rr:objectMap [ rr:template "http://localhost:3000/example/building_{OwnerID}" ]; + rr:objectMap [ rr:template "https://pod.playground.solidlab.be/user1/rmlmapper/building_{OwnerID}" ]; ]; rr:predicateObjectMap [ - rr:predicate idsa:userAuthentication; - rr:object ; + rr:predicate ids:userAuthentication; + rr:object ; ]. - a idsa:UserAuthenticaion; - idsa:authUsername "hello@example.com"; - idsa:authPassword "abc123"; - solid:oidcIssuer ; - rmli:webId . + a ids:UserAuthenticaion; + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId . diff --git a/src/test/resources/solid-target/dynamic_solid2/buildings.csv b/src/test/resources/solid-target/dynamic_solid2/buildings.csv index f57f933b..92cd61c6 100644 --- a/src/test/resources/solid-target/dynamic_solid2/buildings.csv +++ b/src/test/resources/solid-target/dynamic_solid2/buildings.csv @@ -1,4 +1,4 @@ BuildingID,OwnerID,FloorTileID -building1,owner1,floortile1 -building2,owner1,floortile2 -building3,owner2,floortile1 +building1,user2,floortile1 +building2,user2,floortile2 +building3,user3,floortile1 diff --git a/src/test/resources/solid-target/dynamic_solid2/mapping.ttl b/src/test/resources/solid-target/dynamic_solid2/mapping.ttl index 7776882a..a5b3cc2a 100644 --- a/src/test/resources/solid-target/dynamic_solid2/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid2/mapping.ttl @@ -11,7 +11,7 @@ @prefix solid: . @prefix acl: . @prefix rmli: . -@prefix idsa: . +@prefix ids: . a rml:LogicalSource; rml:source "src/test/resources/solid-target/dynamic_solid2/buildings.csv"; @@ -54,23 +54,23 @@ ]; rr:predicateObjectMap [ rr:predicate rmli:resource; - rr:objectMap [ rr:template "http://localhost:3000/example/building_{OwnerID}" ]; + rr:objectMap [ rr:template "https://pod.playground.solidlab.be/user1/rmlmapper/building_{OwnerID}" ]; ]; rr:predicateObjectMap [ - rr:predicate idsa:userAuthentication; - rr:object ; + rr:predicate ids:userAuthentication; + rr:object ; ]. rmlt:target [ #rmlt:serialization formats:N-Quads; a rmli:SolidResourceTarget; - rmli:resource "http://localhost:3000/example/floortile"; - idsa:userAuthentication ; + rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/floortile"; + ids:userAuthentication ; ]. - a idsa:UserAuthentication; - idsa:authUsername "hello@example.com"; - idsa:authPassword "abc123"; - solid:oidcIssuer ; - rmli:webId . + a ids:UserAuthentication; + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId . diff --git a/src/test/resources/solid-target/dynamic_solid3/buildings.csv b/src/test/resources/solid-target/dynamic_solid3/buildings.csv index f57f933b..92cd61c6 100644 --- a/src/test/resources/solid-target/dynamic_solid3/buildings.csv +++ b/src/test/resources/solid-target/dynamic_solid3/buildings.csv @@ -1,4 +1,4 @@ BuildingID,OwnerID,FloorTileID -building1,owner1,floortile1 -building2,owner1,floortile2 -building3,owner2,floortile1 +building1,user2,floortile1 +building2,user2,floortile2 +building3,user3,floortile1 diff --git a/src/test/resources/solid-target/dynamic_solid3/mapping.ttl b/src/test/resources/solid-target/dynamic_solid3/mapping.ttl index 595a41eb..93bc2ca0 100644 --- a/src/test/resources/solid-target/dynamic_solid3/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid3/mapping.ttl @@ -11,7 +11,7 @@ @prefix solid: . @prefix acl: . @prefix rmli: . -@prefix idsa: . +@prefix ids: . a rml:LogicalSource; rml:source "src/test/resources/solid-target/dynamic_solid2/buildings.csv"; @@ -29,7 +29,7 @@ ]; ]. - a rr:TriplesMap; + a rr:TriplesMap; rml:logicalSource ; rr:subjectMap [ rr:template "logical_target/building/{OwnerID}"; @@ -45,7 +45,7 @@ rr:objectMap [ rr:template "target/building/{OwnerID}" ]; ]. - a rr:TriplesMap; + a rr:TriplesMap; rml:logicalSource ; rr:subjectMap [ rr:template "target/building/{OwnerID}"; @@ -54,11 +54,11 @@ ]; rr:predicateObjectMap [ rr:predicate rmli:resource; - rr:objectMap [ rr:template "http://localhost:3000/example/building_{OwnerID}" ]; + rr:objectMap [ rr:template "https://pod.playground.solidlab.be/user1/rmlmapper/building_{OwnerID}" ]; ]; rr:predicateObjectMap [ - rr:predicate idsa:userAuthentication; - rr:object ; + rr:predicate ids:userAuthentication; + rr:object ; ]. a rr:TriplesMap; @@ -86,16 +86,16 @@ ]; rr:predicateObjectMap [ rr:predicate rmli:resource; - rr:objectMap [ rr:template "http://localhost:3000/example/{FloorTileID}" ]; + rr:objectMap [ rr:template "https://pod.playground.solidlab.be/user1/rmlmapper/{FloorTileID}" ]; ]; rr:predicateObjectMap [ - rr:predicate idsa:userAuthentication; - rr:object ; + rr:predicate ids:userAuthentication; + rr:object ; ]. - a idsa:UserAuthentication; - idsa:authUsername "hello@example.com"; - idsa:authPassword "abc123"; - solid:oidcIssuer ; - rmli:webId . + a ids:UserAuthentication; + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId . diff --git a/src/test/resources/solid-target/solid1/buildings.csv b/src/test/resources/solid-target/solid1/buildings.csv index f57f933b..92cd61c6 100644 --- a/src/test/resources/solid-target/solid1/buildings.csv +++ b/src/test/resources/solid-target/solid1/buildings.csv @@ -1,4 +1,4 @@ BuildingID,OwnerID,FloorTileID -building1,owner1,floortile1 -building2,owner1,floortile2 -building3,owner2,floortile1 +building1,user2,floortile1 +building2,user2,floortile2 +building3,user3,floortile1 diff --git a/src/test/resources/solid-target/solid1/mapping.ttl b/src/test/resources/solid-target/solid1/mapping.ttl index 7e80dcbf..d1361ff0 100644 --- a/src/test/resources/solid-target/solid1/mapping.ttl +++ b/src/test/resources/solid-target/solid1/mapping.ttl @@ -11,7 +11,7 @@ @prefix solid: . @prefix acl: . @prefix rmli: . -@prefix idsa: . +@prefix ids: . a rr:TriplesMap; rml:logicalSource [ @@ -31,9 +31,9 @@ rmlt:target [ a rmlt:Target, rmli:SolidResourceTarget; rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - idsa:userAuthentication [ - idsa:authUsername "user1@pod.playground.solidlab.be"; - idsa:authPassword "user1"; + ids:userAuthentication [ + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; solid:oidcIssuer ; rmli:webId ]; diff --git a/src/test/resources/solid-target/solid2/buildings.csv b/src/test/resources/solid-target/solid2/buildings.csv index f57f933b..92cd61c6 100644 --- a/src/test/resources/solid-target/solid2/buildings.csv +++ b/src/test/resources/solid-target/solid2/buildings.csv @@ -1,4 +1,4 @@ BuildingID,OwnerID,FloorTileID -building1,owner1,floortile1 -building2,owner1,floortile2 -building3,owner2,floortile1 +building1,user2,floortile1 +building2,user2,floortile2 +building3,user3,floortile1 diff --git a/src/test/resources/solid-target/solid2/mapping.ttl b/src/test/resources/solid-target/solid2/mapping.ttl index 5d39a9f6..cd9faacc 100644 --- a/src/test/resources/solid-target/solid2/mapping.ttl +++ b/src/test/resources/solid-target/solid2/mapping.ttl @@ -11,7 +11,7 @@ @prefix solid: . @prefix acl: . @prefix rmli: . -@prefix idsa: . +@prefix ids: . a rr:TriplesMap; rml:logicalSource [ @@ -32,9 +32,9 @@ a rmli:Target; a rmli:SolidResourceTarget; rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - idsa:userAuthentication [ - idsa:authUsername "user1@pod.playground.solidlab.be"; - idsa:authPassword "user1"; + ids:userAuthentication [ + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; solid:oidcIssuer ; rmli:webId ]; diff --git a/src/test/resources/solid-target/solid3/buildings.csv b/src/test/resources/solid-target/solid3/buildings.csv index f57f933b..92cd61c6 100644 --- a/src/test/resources/solid-target/solid3/buildings.csv +++ b/src/test/resources/solid-target/solid3/buildings.csv @@ -1,4 +1,4 @@ BuildingID,OwnerID,FloorTileID -building1,owner1,floortile1 -building2,owner1,floortile2 -building3,owner2,floortile1 +building1,user2,floortile1 +building2,user2,floortile2 +building3,user3,floortile1 diff --git a/src/test/resources/solid-target/solid3/mapping.ttl b/src/test/resources/solid-target/solid3/mapping.ttl index fdce9e27..cfd8deb2 100644 --- a/src/test/resources/solid-target/solid3/mapping.ttl +++ b/src/test/resources/solid-target/solid3/mapping.ttl @@ -11,7 +11,7 @@ @prefix solid: . @prefix acl: . @prefix rmli: . -@prefix idsa: . +@prefix ids: . a rr:TriplesMap; rml:logicalSource [ @@ -31,9 +31,9 @@ rmlt:target [ a rmli:SolidResourceTarget; rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - idsa:userAuthentication [ - idsa:authUsername "user1@pod.playground.solidlab.be"; - idsa:authPassword "user1"; + ids:userAuthentication [ + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; solid:oidcIssuer ; rmli:webId ]; diff --git a/src/test/resources/solid-target/solid4/buildings.csv b/src/test/resources/solid-target/solid4/buildings.csv index f57f933b..92cd61c6 100644 --- a/src/test/resources/solid-target/solid4/buildings.csv +++ b/src/test/resources/solid-target/solid4/buildings.csv @@ -1,4 +1,4 @@ BuildingID,OwnerID,FloorTileID -building1,owner1,floortile1 -building2,owner1,floortile2 -building3,owner2,floortile1 +building1,user2,floortile1 +building2,user2,floortile2 +building3,user3,floortile1 diff --git a/src/test/resources/solid-target/solid4/mapping.ttl b/src/test/resources/solid-target/solid4/mapping.ttl index 0d25b1c7..07bd931b 100644 --- a/src/test/resources/solid-target/solid4/mapping.ttl +++ b/src/test/resources/solid-target/solid4/mapping.ttl @@ -11,7 +11,7 @@ @prefix solid: . @prefix acl: . @prefix rmli: . -@prefix idsa: . +@prefix ids: . a rr:TriplesMap; rml:logicalSource [ @@ -35,9 +35,9 @@ #rmlt:serialization formats:Turtle; a rmli:SolidResourceTarget; rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - idsa:userAuthentication [ - idsa:authUsername "user1@pod.playground.solidlab.be"; - idsa:authPassword "user1"; + ids:userAuthentication [ + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; solid:oidcIssuer ; rmli:webId ]; From 489684dae281cfd01a2191e1082315ef72c5542e Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 29 Oct 2024 07:29:47 +0100 Subject: [PATCH 050/127] Main, Executor, ProvenancedTerm: corrections to secure metadata generation --- src/main/java/be/ugent/rml/Executor.java | 23 ++++++++++++------- src/main/java/be/ugent/rml/cli/Main.java | 4 ++-- .../be/ugent/rml/term/ProvenancedTerm.java | 1 - 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/main/java/be/ugent/rml/Executor.java b/src/main/java/be/ugent/rml/Executor.java index e2bb6cf8..67e223f0 100644 --- a/src/main/java/be/ugent/rml/Executor.java +++ b/src/main/java/be/ugent/rml/Executor.java @@ -399,6 +399,13 @@ public QuadStore getRMLStore() { return this.rmlStore; } + public Map getTargets(){ + if (this.targetStores.isEmpty()){ + return null; + } + return this.targetStores; + } + public void verifySources(String basepath, String mappingPath) throws Exception { for (Term triplesMap : this.getTriplesMaps()) { List logicalSources = Utils.getObjectsFromQuads(rmlStore.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)); @@ -476,28 +483,28 @@ private void generatePredicateObjectsForSubjects(final List sub } } - /* Predicates */ if (pogPredicateMappingInfo != null) { TermGenerator pogPredicateGenerator = pogPredicateMappingInfo.getTermGenerator(); List predicateTargets = getAllTargets(pogPredicateMappingInfo, record); - pogPredicateGenerator.generate(record).forEach(p -> predicates.add(new ProvenancedTerm(p, predicateTargets))); + pogPredicateGenerator.generate(record).forEach(p -> { + Metadata meta = new ProvenancedTerm(p, pogPredicateMappingInfo).getMetadata(); + predicates.add(new ProvenancedTerm(p, meta, predicateTargets)); + }); } /* Objects */ if (pogObjectMappingInfo != null) { TermGenerator pogObjectGenerator = pogObjectMappingInfo.getTermGenerator(); if (pogObjectGenerator != null) { - List objectTargets = getAllTargets(pogObjectMappingInfo, record); List objects = pogObjectGenerator.generate(record); - ArrayList provenancedObjects = new ArrayList<>(); - + List objectTargets = getAllTargets(pogObjectMappingInfo, record); + List provenancedObjects = new ArrayList<>(); objects.forEach(object -> { - provenancedObjects.add(new ProvenancedTerm(object, objectTargets)); + Metadata meta = new ProvenancedTerm(object, pogObjectMappingInfo).getMetadata(); + provenancedObjects.add(new ProvenancedTerm(object, meta, objectTargets)); }); - objects.forEach(object -> provenancedObjects.add(new ProvenancedTerm(object, pogObjectMappingInfo))); - if (!objects.isEmpty()) { //add pogs pogs.addAll(combineMultiplePOGs(predicates, provenancedObjects, poGraphs)); diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index 562e875c..b00d6b10 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -436,9 +436,8 @@ public static void run(String[] args, String basePath) throws Exception { String startTimestamp = Instant.now().toString(); QuadStore result = null; - Map targets; try { - targets = executor.execute(triplesMaps, checkOptionPresence(removeduplicatesOption, lineArgs, configFile), metadataGenerator); + Map targets = executor.execute(triplesMaps, checkOptionPresence(removeduplicatesOption, lineArgs, configFile), metadataGenerator); } catch (Exception e) { logger.error(e.getMessage()); throw e; @@ -446,6 +445,7 @@ public static void run(String[] args, String basePath) throws Exception { functionAgent.close(); } + Map targets = executor.getTargets(); if (targets != null) { result = targets.get(new NamedNode("rmlmapper://default.store")); if(result != null) { diff --git a/src/main/java/be/ugent/rml/term/ProvenancedTerm.java b/src/main/java/be/ugent/rml/term/ProvenancedTerm.java index d3c88757..230bc80d 100644 --- a/src/main/java/be/ugent/rml/term/ProvenancedTerm.java +++ b/src/main/java/be/ugent/rml/term/ProvenancedTerm.java @@ -27,7 +27,6 @@ public ProvenancedTerm(Term term, MappingInfo mappingInfo) { public ProvenancedTerm(Term term) { this.term = term; - this.targets = new ArrayList<>(); } public ProvenancedTerm(Term term, List targets) { From a081cc8e09edb3973602fd843d30a759c966ffa5 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 29 Oct 2024 08:53:20 +0100 Subject: [PATCH 051/127] Main: adding one space --- src/main/java/be/ugent/rml/cli/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index b00d6b10..e0bac300 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -487,7 +487,7 @@ private static void writeOutputTargets(Map targets, QuadStore r TargetFactory targetFactory = new TargetFactory(basePath); // check if anything needs to be added to the rmlstore (e.g. dynamic targets) - if(targets.containsKey(new NamedNode(NAMESPACES.RMLI + "ThisMapping"))){ + if (targets.containsKey(new NamedNode(NAMESPACES.RMLI + "ThisMapping"))){ rmlStore.addQuads(targets.get(new NamedNode(NAMESPACES.RMLI + "ThisMapping")).getQuads(null, null, null)); MappingConformer conformer = new MappingConformer(rmlStore, null); try { From 7f7ecdb877e2edccc387df5ba6f1428168bc32bd Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 29 Oct 2024 08:55:40 +0100 Subject: [PATCH 052/127] Main: restoring default character set --- src/main/java/be/ugent/rml/cli/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index e0bac300..d638e302 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -544,7 +544,7 @@ private static void writeOutputTargets(Map targets, QuadStore r store.addQuads(target.getMetadata()); // Set character encoding - try (Writer out = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8))) { + try (Writer out = new BufferedWriter(new OutputStreamWriter(output, Charset.defaultCharset()))) { // Write store to target store.write(out, serializationFormat); } From 233ee865a679e107d3b2d6812c001cfb716e7d17 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 29 Oct 2024 09:10:09 +0100 Subject: [PATCH 053/127] ProvenancedTerm: restored initial targets declaration --- src/main/java/be/ugent/rml/term/ProvenancedTerm.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/be/ugent/rml/term/ProvenancedTerm.java b/src/main/java/be/ugent/rml/term/ProvenancedTerm.java index 230bc80d..58391eb8 100644 --- a/src/main/java/be/ugent/rml/term/ProvenancedTerm.java +++ b/src/main/java/be/ugent/rml/term/ProvenancedTerm.java @@ -10,28 +10,29 @@ public class ProvenancedTerm { private Term term; private Metadata metadata; - private List targets = new ArrayList<>(); + private List targets; public ProvenancedTerm(Term term, Metadata metadata, List targets) { this.term = term; this.metadata = metadata; - this.targets.addAll(targets); + this.targets = targets; } public ProvenancedTerm(Term term, MappingInfo mappingInfo) { this.term = term; this.metadata = new Metadata(); this.metadata.setSourceMap(mappingInfo.getTerm()); - this.targets.addAll(mappingInfo.getTargets()); + this.targets = mappingInfo.getTargets(); } public ProvenancedTerm(Term term) { this.term = term; + this.targets = new ArrayList(); } public ProvenancedTerm(Term term, List targets) { this.term = term; - this.targets.addAll(targets); + this.targets = targets; } From 1158992327a602f6c8706d2245a2bad6c091c66c Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 29 Oct 2024 09:13:25 +0100 Subject: [PATCH 054/127] Main: added comment to explain need for second mapping conformer --- src/main/java/be/ugent/rml/cli/Main.java | 3 +++ src/test/java/be/ugent/rml/SolidTargetTest.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index d638e302..9f085ef5 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -489,6 +489,9 @@ private static void writeOutputTargets(Map targets, QuadStore r // check if anything needs to be added to the rmlstore (e.g. dynamic targets) if (targets.containsKey(new NamedNode(NAMESPACES.RMLI + "ThisMapping"))){ rmlStore.addQuads(targets.get(new NamedNode(NAMESPACES.RMLI + "ThisMapping")).getQuads(null, null, null)); + // The generated dynamic logical targets have been added to the RML store. + // It is possible that they are written using the old RML terminology. + // Therefore, the mapping conformer needs to conform the RML store again. MappingConformer conformer = new MappingConformer(rmlStore, null); try { boolean conversionNeeded = conformer.conform(); diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index f633d979..6ed95251 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -59,7 +59,7 @@ public void solid5() throws Exception { "user1"); } - //acl for pod1, resourceUrl with .ttl + //acl for user2, resourceUrl with .ttl @Test public void acl1() throws Exception{ doMappingSolid("solid-target/acl1/mapping.ttl", From c56b3826aa397f7243458296273e7cbcc9d8fba6 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 29 Oct 2024 09:22:04 +0100 Subject: [PATCH 055/127] MappingFactory: adding more specific exceptions --- src/main/java/be/ugent/rml/MappingFactory.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/be/ugent/rml/MappingFactory.java b/src/main/java/be/ugent/rml/MappingFactory.java index 16390796..8ff800b6 100644 --- a/src/main/java/be/ugent/rml/MappingFactory.java +++ b/src/main/java/be/ugent/rml/MappingFactory.java @@ -157,7 +157,7 @@ private void parsePredicateObjectMaps() throws Exception { } } - private void parseObjectMapsAndShortcutsAndGeneratePOGGenerators(Term termMap, List predicateMappingInfos, List graphMappingInfos) throws Exception { + private void parseObjectMapsAndShortcutsAndGeneratePOGGenerators(Term termMap, List predicateMappingInfos, List graphMappingInfos) throws IOException { parseObjectMapsAndShortcutsWithCallback(termMap, (oMappingInfo, childOrParent) -> { MappingInfo lMappingInfo = parseLanguageMappingInfo(oMappingInfo.getTerm()); @@ -187,7 +187,7 @@ private void parseObjectMapsAndShortcutsAndGeneratePOGGenerators(Term termMap, L }); } - private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback) throws Exception { + private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback) throws IOException { List objectmaps = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "objectMap"), null)); for (Term objectmap : objectmaps) { @@ -212,7 +212,7 @@ private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback) throws Exception { + private void parseObjectMapWithCallback(Term objectmap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback) throws IOException { List functionValues = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); Term termType = getTermType(objectmap, true); @@ -413,7 +413,7 @@ private List parseGraphMapsAndShortcuts(Term termMap) throws Except return graphMappingInfos; } - private List parsePredicateMapsAndShortcuts(Term termMap) throws Exception { + private List parsePredicateMapsAndShortcuts(Term termMap) throws IOException { List predicateMappingInfos = new ArrayList<>(); List predicateMaps = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "predicateMap"), null)); @@ -448,7 +448,7 @@ private List parsePredicateMapsAndShortcuts(Term termMap) throws Ex return predicateMappingInfos; } - private SingleRecordFunctionExecutor parseFunctionTermMap(Term functionValue) throws Exception { + private SingleRecordFunctionExecutor parseFunctionTermMap(Term functionValue) throws IOException { List functionPOMs = getObjectsFromQuads(store.getQuads(functionValue, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); ArrayList params = new ArrayList<>(); @@ -472,7 +472,7 @@ private SingleRecordFunctionExecutor parseFunctionTermMap(Term functionValue) th return new DynamicSingleRecordFunctionExecutor(params, functionAgent); } - private MultipleRecordsFunctionExecutor parseJoinConditionFunctionTermMap(Term functionValue) throws Exception { + private MultipleRecordsFunctionExecutor parseJoinConditionFunctionTermMap(Term functionValue) throws IOException { List functionPOMs = getObjectsFromQuads(store.getQuads(functionValue, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); ArrayList params = new ArrayList<>(); @@ -514,7 +514,7 @@ private MultipleRecordsFunctionExecutor generateSameLogicalSourceJoinConditionFu return new StaticMultipleRecordsFunctionExecutor(parameters, functionAgent, "https://w3id.org/imec/idlab/function#equal"); } - private List parseObjectMapsAndShortcuts(Term pom) throws Exception { + private List parseObjectMapsAndShortcuts(Term pom) throws IOException { List mappingInfos = new ArrayList<>(); parseObjectMapsAndShortcutsWithCallback(pom, (mappingInfo, childOrParent) -> { @@ -530,7 +530,7 @@ private List parseObjectMapsAndShortcuts(Term pom) throws Exception * @param objectmap the object for which the executors need to be determined. * @return a list of executors that return language tags. */ - private List getLanguageExecutorsForObjectMap(Term objectmap) throws Exception { + private List getLanguageExecutorsForObjectMap(Term objectmap) throws IOException { ArrayList executors = new ArrayList<>(); // Parse rr:language @@ -677,7 +677,7 @@ private boolean areDoubleQuotesIgnored(QuadStore store, Term triplesMap) { return false; } - private List getTargetGenerators(Term termMap, String baseIRI, StrictMode strictMode) throws Exception { + private List getTargetGenerators(Term termMap, String baseIRI, StrictMode strictMode) throws IOException { List targetGenerators = new ArrayList<>(); List logicalTargetMaps = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RMLI + "logicalTargetMap"), null)); for (Term logicalTargetMap : logicalTargetMaps) { From 6d02a5a5fee216895209894137b0f5d28575d61a Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 29 Oct 2024 11:26:55 +0100 Subject: [PATCH 056/127] SolidTargetTest: add test for dynamic target in language map --- .../java/be/ugent/rml/SolidTargetTest.java | 11 +++ .../solid-target/dynamic_solid4/mapping.ttl | 73 +++++++++++++++++++ .../solid-target/dynamic_solid4/output1.nq | 2 + .../solid-target/dynamic_solid4/output2.nq | 1 + .../solid-target/dynamic_solid4/student.csv | 4 + 5 files changed, 91 insertions(+) create mode 100644 src/test/resources/solid-target/dynamic_solid4/mapping.ttl create mode 100644 src/test/resources/solid-target/dynamic_solid4/output1.nq create mode 100644 src/test/resources/solid-target/dynamic_solid4/output2.nq create mode 100644 src/test/resources/solid-target/dynamic_solid4/student.csv diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index 6ed95251..27e5bef0 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -116,6 +116,17 @@ public void dynamic_solid3() throws Exception { new String[]{"user1", "user1", "user1", "user1"}); } + //dynamic target in language map + @Test + public void dynamic_solid4() throws Exception { + doMappingSolid("solid-target/dynamic_solid4/mapping.ttl", + new String[]{"https://pod.playground.solidlab.be/user1/rmlmapper/student_en", + "https://pod.playground.solidlab.be/user1/rmlmapper/student_nl"}, + new String[]{"solid-target/dynamic_solid4/output1.nq", + "solid-target/dynamic_solid4/output2.nq"}, + new String[]{"user1", "user1"}); + } + void doMappingSolid(String mapPath, String resourceUrl, String outPath, String user) throws Exception { doMappingSolid(mapPath, new String[]{resourceUrl}, new String[]{outPath},new String[]{user}); } diff --git a/src/test/resources/solid-target/dynamic_solid4/mapping.ttl b/src/test/resources/solid-target/dynamic_solid4/mapping.ttl new file mode 100644 index 00000000..c231083f --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid4/mapping.ttl @@ -0,0 +1,73 @@ +@prefix rr: . +@prefix foaf: . +@prefix ex: . +@prefix xsd: . +@prefix rml: . +@prefix ql: . +@prefix rmlt: . +@prefix formats: . +@prefix solid: . +@prefix acl: . +@prefix rmli: . +@prefix ids: . +@base . + + rml:logicalSource [ + rml:source "student.csv"; + rml:referenceFormulation ql:CSV + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "http://example.com/{ID}"; + ]; + rr:predicateObjectMap [ + rr:predicate ex:name ; + rr:objectMap [ + rml:reference "Name"; + rml:languageMap [ + rml:reference "lang"; + rmli:logicalTargetMap [ rr:template "logical_target/{lang}" ] + ] + ] + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "logical_target/{lang}"; + rr:class rml:LogicalTarget; + rml:logicalTarget rmli:ThisMapping; + ]; + rr:predicateObjectMap [ + rr:predicate rmlt:serialization; + rr:object formats:Turtle; + ]; + rr:predicateObjectMap [ + rr:predicate rmlt:target; + rr:objectMap [ rr:template "target/{lang}" ]; + ]. + + a rr:TriplesMap; + rml:logicalSource ; + rr:subjectMap [ + rr:template "target/{lang}"; + rr:class rmlt:Target, rmli:SolidResourceTarget; + rml:logicalTarget rmli:ThisMapping; + ]; + rr:predicateObjectMap [ + rr:predicate rmli:resource; + rr:objectMap [ rr:template "https://pod.playground.solidlab.be/user1/rmlmapper/student_{lang}" ]; + ]; + rr:predicateObjectMap [ + rr:predicate ids:userAuthentication; + rr:object ; + ]. + + a ids:UserAuthentication; + ids:authUsername "user1@pod.playground.solidlab.be"; + ids:authPassword "user1"; + solid:oidcIssuer ; + rmli:webId . + diff --git a/src/test/resources/solid-target/dynamic_solid4/output1.nq b/src/test/resources/solid-target/dynamic_solid4/output1.nq new file mode 100644 index 00000000..a4cc2409 --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid4/output1.nq @@ -0,0 +1,2 @@ + "Venus"@en . + "William"@en . \ No newline at end of file diff --git a/src/test/resources/solid-target/dynamic_solid4/output2.nq b/src/test/resources/solid-target/dynamic_solid4/output2.nq new file mode 100644 index 00000000..83e18943 --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid4/output2.nq @@ -0,0 +1 @@ + "Bob"@nl . \ No newline at end of file diff --git a/src/test/resources/solid-target/dynamic_solid4/student.csv b/src/test/resources/solid-target/dynamic_solid4/student.csv new file mode 100644 index 00000000..37ec786c --- /dev/null +++ b/src/test/resources/solid-target/dynamic_solid4/student.csv @@ -0,0 +1,4 @@ +ID,Name,lang +10,Venus,en +20,William,en +30,Bob,nl \ No newline at end of file From f1884d0bf5fff481416d943719e728f01e378a75 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 29 Oct 2024 12:41:52 +0100 Subject: [PATCH 057/127] MappingFactory: adapted Exception throwing --- .../java/be/ugent/rml/MappingFactory.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/be/ugent/rml/MappingFactory.java b/src/main/java/be/ugent/rml/MappingFactory.java index 8ff800b6..7c489ca4 100644 --- a/src/main/java/be/ugent/rml/MappingFactory.java +++ b/src/main/java/be/ugent/rml/MappingFactory.java @@ -573,12 +573,7 @@ private MappingInfo parseLanguageMappingInfo(Term objectMap) { if (languageMaps.size() == 1) { Term l = languageMaps.get(0); List lTargets = getTargets(l); - List lTargetGenerators = null; - try { - lTargetGenerators = getTargetGenerators(l, baseIRI, strictMode); - } catch (Exception e) { - e.printStackTrace(); - } + List lTargetGenerators = getTargetGenerators(l, baseIRI, strictMode); mappingInfo = new MappingInfo(l, lTargets, lTargetGenerators); } else if (languageMaps.size() > 1) { @@ -677,19 +672,25 @@ private boolean areDoubleQuotesIgnored(QuadStore store, Term triplesMap) { return false; } - private List getTargetGenerators(Term termMap, String baseIRI, StrictMode strictMode) throws IOException { + private List getTargetGenerators(Term termMap, String baseIRI, StrictMode strictMode) { List targetGenerators = new ArrayList<>(); List logicalTargetMaps = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RMLI + "logicalTargetMap"), null)); for (Term logicalTargetMap : logicalTargetMaps) { - SingleRecordFunctionExecutor functionExecutor; + SingleRecordFunctionExecutor functionExecutor = null; List functionValues = getObjectsFromQuads(store.getQuads(logicalTargetMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); if (functionValues.isEmpty()) { //similar to subjects, dynamic targets should always be uri functionExecutor = RecordFunctionExecutorFactory.generate(store, logicalTargetMap, true, ignoreDoubleQuotes); } else { - functionExecutor = parseFunctionTermMap(functionValues.get(0)); + try { + functionExecutor = parseFunctionTermMap(functionValues.get(0)); + } catch (IOException e) { + logger.error("Parsing function term map failed:" + e); + } + } + if (functionValues != null) { + targetGenerators.add(new NamedNodeGenerator(functionExecutor, baseIRI, strictMode)); } - targetGenerators.add(new NamedNodeGenerator(functionExecutor, baseIRI, strictMode)); } return targetGenerators; } From 07712ca288b1034627da8617fc2dccea467eee58 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Tue, 29 Oct 2024 14:39:50 +0100 Subject: [PATCH 058/127] SolidTargetTest: small corrections --- src/test/java/be/ugent/rml/SolidTargetTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/SolidTargetTest.java index 27e5bef0..7495395d 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/SolidTargetTest.java @@ -68,7 +68,7 @@ public void acl1() throws Exception{ "user2"); } - //acl for pod1, resourceUrl without .ttl + //acl for user2, resourceUrl without .ttl @Test public void acl2() throws Exception{ doMappingSolid("solid-target/acl2/mapping.ttl", From 33209b2bc193922486660dd2f746e80d92ced897 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 4 Nov 2024 10:00:37 +0100 Subject: [PATCH 059/127] Main: replace target.toString() by target --- src/main/java/be/ugent/rml/cli/Main.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index 9f085ef5..c4b2b502 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -537,9 +537,9 @@ private static void writeOutputTargets(Map targets, QuadStore r logger.debug("Exporting to Target: {}", term); Target target = targetFactory.getTarget(term, rmlStore, store); if (store.size() > 1) { - logger.info("{} quads were generated for {} Target", store.size(), target.toString()); + logger.info("{} quads were generated for {} Target", store.size(), target); } else { - logger.info("{} quad was generated {} Target", store.size(), target.toString()); + logger.info("{} quad was generated {} Target", store.size(), target); } String serializationFormat = target.getSerializationFormat(); @@ -553,7 +553,7 @@ private static void writeOutputTargets(Map targets, QuadStore r } // Close OS resources target.close(); - logger.debug("Exporting to Target: {}", target.toString()); + logger.debug("Exporting to Target: {}", target); } } From 97766ba168a725d0cdbd34ff559a3e4e6d7e01a8 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 4 Nov 2024 10:03:54 +0100 Subject: [PATCH 060/127] ProvenancedTerm: removed unused constructor --- src/main/java/be/ugent/rml/term/ProvenancedTerm.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/be/ugent/rml/term/ProvenancedTerm.java b/src/main/java/be/ugent/rml/term/ProvenancedTerm.java index 58391eb8..87655d59 100644 --- a/src/main/java/be/ugent/rml/term/ProvenancedTerm.java +++ b/src/main/java/be/ugent/rml/term/ProvenancedTerm.java @@ -30,12 +30,6 @@ public ProvenancedTerm(Term term) { this.targets = new ArrayList(); } - public ProvenancedTerm(Term term, List targets) { - this.term = term; - this.targets = targets; - } - - public Term getTerm() { return term; } From 390d4c836f2e119908704b058f9340bb24cba223 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 4 Nov 2024 10:11:10 +0100 Subject: [PATCH 061/127] Executor: replaced e.PrintStackTrace() by meaningful error message. --- src/main/java/be/ugent/rml/Executor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/be/ugent/rml/Executor.java b/src/main/java/be/ugent/rml/Executor.java index 67e223f0..028ba798 100644 --- a/src/main/java/be/ugent/rml/Executor.java +++ b/src/main/java/be/ugent/rml/Executor.java @@ -548,7 +548,7 @@ private List generateTargetsAndAddToTargetStore(MappingInfo mappingInfo, R try { generatedTargets.addAll(targetGenerator.generate(record)); } catch (Exception e) { - e.printStackTrace(); + logger.error("Error occurred when generating target", e); } } for (Term generatedTarget : generatedTargets){ From eec4d0f6a2feb7440e804ba4a42f31a01a1835a5 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Thu, 5 Dec 2024 18:15:24 +0100 Subject: [PATCH 062/127] Refactoring Solid targets to HTTP requests --- .../java/be/ugent/rml/MappingFactory.java | 2 +- src/main/java/be/ugent/rml/NAMESPACES.java | 3 +- src/main/java/be/ugent/rml/cli/Main.java | 6 +- .../rml/target/DirectHttpRequestTarget.java | 43 ++++ ...olidTarget.java => HttpRequestTarget.java} | 40 ++-- ...lper.java => HttpRequestTargetHelper.java} | 216 +++++++----------- .../rml/target/LinkedHttpRequestTarget.java | 45 ++++ .../be/ugent/rml/target/SolidAclTarget.java | 42 ---- .../ugent/rml/target/SolidResourceTarget.java | 42 ---- .../be/ugent/rml/target/TargetFactory.java | 75 ++++-- ...etTest.java => HttpRequestTargetTest.java} | 49 ++-- .../java/be/ugent/rml/store/QuadTest.java | 2 +- .../ugent/rml/store/SimpleQuadStoreTest.java | 2 +- .../resources/solid-target/acl1/mapping.ttl | 28 +-- .../resources/solid-target/acl2/mapping.ttl | 28 +-- .../solid-target/dynamic_solid1/mapping.ttl | 27 ++- .../solid-target/dynamic_solid2/mapping.ttl | 33 ++- .../solid-target/dynamic_solid3/mapping.ttl | 37 ++- .../solid-target/dynamic_solid4/mapping.ttl | 27 ++- .../resources/solid-target/solid1/mapping.ttl | 21 +- .../resources/solid-target/solid2/mapping.ttl | 22 +- .../resources/solid-target/solid3/mapping.ttl | 20 +- .../resources/solid-target/solid4/mapping.ttl | 20 +- .../resources/solid-target/solid5/mapping.ttl | 20 +- 24 files changed, 415 insertions(+), 435 deletions(-) create mode 100644 src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java rename src/main/java/be/ugent/rml/target/{SolidTarget.java => HttpRequestTarget.java} (62%) rename src/main/java/be/ugent/rml/target/{SolidTargetHelper.java => HttpRequestTargetHelper.java} (58%) create mode 100644 src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java delete mode 100644 src/main/java/be/ugent/rml/target/SolidAclTarget.java delete mode 100644 src/main/java/be/ugent/rml/target/SolidResourceTarget.java rename src/test/java/be/ugent/rml/{SolidTargetTest.java => HttpRequestTargetTest.java} (77%) diff --git a/src/main/java/be/ugent/rml/MappingFactory.java b/src/main/java/be/ugent/rml/MappingFactory.java index 7c489ca4..e145fbaf 100644 --- a/src/main/java/be/ugent/rml/MappingFactory.java +++ b/src/main/java/be/ugent/rml/MappingFactory.java @@ -674,7 +674,7 @@ private boolean areDoubleQuotesIgnored(QuadStore store, Term triplesMap) { private List getTargetGenerators(Term termMap, String baseIRI, StrictMode strictMode) { List targetGenerators = new ArrayList<>(); - List logicalTargetMaps = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RMLI + "logicalTargetMap"), null)); + List logicalTargetMaps = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RMLE + "logicalTargetMap"), null)); for (Term logicalTargetMap : logicalTargetMaps) { SingleRecordFunctionExecutor functionExecutor = null; List functionValues = getObjectsFromQuads(store.getQuads(logicalTargetMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); diff --git a/src/main/java/be/ugent/rml/NAMESPACES.java b/src/main/java/be/ugent/rml/NAMESPACES.java index 80b76367..36df0a4b 100644 --- a/src/main/java/be/ugent/rml/NAMESPACES.java +++ b/src/main/java/be/ugent/rml/NAMESPACES.java @@ -34,7 +34,6 @@ public class NAMESPACES { public static final String COMP = "http://semweb.mmlab.be/ns/rml-compression#"; public static final String LDES = "https://w3id.org/ldes#"; public static final String TREE = "https://w3id.org/tree#"; - public static final String SOLID = "http://www.w3.org/ns/solid/terms#"; - public static final String RMLI = "https://w3id.org/imec/rml/"; + public static final String RMLE = "https://rml.io/ns/extensions#"; } diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index c4b2b502..a6a89d6d 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -487,8 +487,8 @@ private static void writeOutputTargets(Map targets, QuadStore r TargetFactory targetFactory = new TargetFactory(basePath); // check if anything needs to be added to the rmlstore (e.g. dynamic targets) - if (targets.containsKey(new NamedNode(NAMESPACES.RMLI + "ThisMapping"))){ - rmlStore.addQuads(targets.get(new NamedNode(NAMESPACES.RMLI + "ThisMapping")).getQuads(null, null, null)); + if (targets.containsKey(new NamedNode(NAMESPACES.RMLE + "ThisMapping"))){ + rmlStore.addQuads(targets.get(new NamedNode(NAMESPACES.RMLE + "ThisMapping")).getQuads(null, null, null)); // The generated dynamic logical targets have been added to the RML store. // It is possible that they are written using the old RML terminology. // Therefore, the mapping conformer needs to conform the RML store again. @@ -502,7 +502,7 @@ private static void writeOutputTargets(Map targets, QuadStore r } catch (Exception e) { logger.error("Failed to make dynamic targets conformant to RML spec.", e); } - targets.remove(new NamedNode(NAMESPACES.RMLI + "ThisMapping")); + targets.remove(new NamedNode(NAMESPACES.RMLE + "ThisMapping")); } // Go over each term and export to the Target if needed diff --git a/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java b/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java new file mode 100644 index 00000000..68ec0d98 --- /dev/null +++ b/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java @@ -0,0 +1,43 @@ +package be.ugent.rml.target; + +import be.ugent.rml.store.Quad; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + + +public class DirectHttpRequestTarget extends HttpRequestTarget { + + public DirectHttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata) throws IOException { + super(httpRequestInfo, serializationFormat, metadata); + } + + @Override + public boolean equals(Object o) { + if (o instanceof DirectHttpRequestTarget) { + DirectHttpRequestTarget target = (DirectHttpRequestTarget) o; + return this.httpRequestInfo.get("absoluteURI").equals(target.getHttpRequestInfo().get("absoluteURI")); + } else { + return false; + } + } + + @Override + public String toString() { + return "http request for " + this.httpRequestInfo.get("absoluteURI").toString(); + } + + @Override + public void close() { + super.close(); + try { + HttpRequestTargetHelper helper = new HttpRequestTargetHelper(); + helper.executeHttpRequest(httpRequestInfo); + } catch (Exception e) { + logger.error("Failed to close http request target for {}: {}", + this.httpRequestInfo.get("absoluteURI"), e.getMessage()); + } + } +} + diff --git a/src/main/java/be/ugent/rml/target/SolidTarget.java b/src/main/java/be/ugent/rml/target/HttpRequestTarget.java similarity index 62% rename from src/main/java/be/ugent/rml/target/SolidTarget.java rename to src/main/java/be/ugent/rml/target/HttpRequestTarget.java index 75fc5d01..80b67d2a 100644 --- a/src/main/java/be/ugent/rml/target/SolidTarget.java +++ b/src/main/java/be/ugent/rml/target/HttpRequestTarget.java @@ -11,9 +11,9 @@ import java.util.List; import java.util.Map; -public abstract class SolidTarget implements Target { +public abstract class HttpRequestTarget implements Target { - protected final Map solidTargetInfo; + protected final Map httpRequestInfo; private final List metadata; private final ByteArrayOutputStream byteArrayOutputStream; protected final Logger logger; @@ -27,20 +27,20 @@ public abstract class SolidTarget implements Target { "trix", "text/xml", "trig", "application/trig", "nquads", "application/n-quads" - ); // TODO hdt??? + ); /** - * This constructor takes a JSON object with the solid target info, the serialization format and the metadata as argument. - * @param solidTargetInfo JSON object with all the target info (resource url and authentication info) + * This constructor takes a JSON object with the http request info, the serialization format and the metadata as argument. + * @param httpRequestInfo JSON object with all the target info * @param serializationFormat String with the serialization format * @param metadata a list of Quads containing metadata */ - public SolidTarget(Map solidTargetInfo, String serializationFormat, List metadata) { - this.solidTargetInfo = solidTargetInfo; + public HttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata) { + this.httpRequestInfo = httpRequestInfo; this.metadata = metadata; this.serializationFormat = serializationFormat; byteArrayOutputStream = new ByteArrayOutputStream(); - this.logger = LoggerFactory.getLogger(SolidTarget.class); + this.logger = LoggerFactory.getLogger(HttpRequestTarget.class); } /** @@ -62,17 +62,17 @@ public String getSerializationFormat() { } /** - * This method returns the url of the Solid pod target //TODO adapt - * @return url. + * This method returns the http request info + * @return map with http request info. */ - public Map getSolidTargetInfo() { - return this.solidTargetInfo; + public Map getHttpRequestInfo() { + return this.httpRequestInfo; } /** * This method closes the target. - * When closing a Solid target, the tempFile is put on the solid pod - * with a PUT method. + * When closing a http request target, the content of the tempFile is added to the http request as body + * and the http request is executed. */ @Override public void close() { @@ -81,10 +81,16 @@ public void close() { The rest of the method is handled in the subclass */ logger.debug("Closing target"); - this.solidTargetInfo.put("data", this.byteArrayOutputStream.toString(StandardCharsets.UTF_8)); - // reset the outputstream to empty memory + this.httpRequestInfo.put("data", this.byteArrayOutputStream.toString(StandardCharsets.UTF_8)); + // reset the output stream to empty memory this.byteArrayOutputStream.reset(); - this.solidTargetInfo.put("contentType", serializationFormats.get(this.serializationFormat)); + // add default values + if (!httpRequestInfo.containsKey("methodName")){ + this.httpRequestInfo.put("methodName", "PUT"); + } + if (!httpRequestInfo.containsKey("contentType")){ + this.httpRequestInfo.put("contentType", serializationFormats.get(this.serializationFormat)); + } } @Override diff --git a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java b/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java similarity index 58% rename from src/main/java/be/ugent/rml/target/SolidTargetHelper.java rename to src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java index 1cbca719..f5358a5a 100644 --- a/src/main/java/be/ugent/rml/target/SolidTargetHelper.java +++ b/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java @@ -1,6 +1,7 @@ package be.ugent.rml.target; +import be.ugent.rml.NAMESPACES; import org.apache.http.HttpStatus; import org.jose4j.jwk.EcJwkGenerator; import org.jose4j.jwk.EllipticCurveJsonWebKey; @@ -13,6 +14,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.lang.module.ModuleDescriptor; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -23,21 +25,21 @@ import java.util.Map; /** - * SolidTargetHelper helps writing data to a Solid server, taking care of the Solid authorization flow. + * HttpRequestTargetHelper helps writing data to a web resource, taking care of the optional authorization flow. */ -public class SolidTargetHelper { - private static final Logger log = LoggerFactory.getLogger(SolidTargetHelper.class); +public class HttpRequestTargetHelper { + private static final Logger log = LoggerFactory.getLogger(HttpRequestTargetHelper.class); private final EllipticCurveJsonWebKey jwk; private final HttpClient httpClient; /** * - * Constructs a new SolidTargetHelper instance. A new private + public key pair + * Constructs a new HttpRequestTargetHelper instance. A new private + public key pair * gets generated which is used for communication with the Solid server, more * specifically for Distributed Proof of Possession (DPoP). * @throws JoseException Generating the private/public key pair goes wrong. */ - public SolidTargetHelper() throws JoseException { + public HttpRequestTargetHelper() throws JoseException { jwk = EcJwkGenerator.generateJwk(EllipticCurves.P256); // Initialize a HTTP client httpClient = HttpClient.newBuilder() @@ -46,25 +48,26 @@ public SolidTargetHelper() throws JoseException { } /** - * Sends data to a Solid pod using Solid OIDC. - * @param solidInfo A map with all necessary data. The map should contain following keys: - * serverUrl, webId, email, password, resourceUrl, contentType, data + * Retrieves the Dpop Access Token for CSS authentication using client credentials + * @param httpRequestInfo A map with all necessary data. The map should contain following keys: + * oidcIssuer, webId, email, password + * @return The Dpop Access Token. * @throws Exception Something goes wrong. */ - private String getDpopAccessToken(Map solidInfo) throws Exception { + private String getDpopAccessToken(Map httpRequestInfo) throws Exception { // See https://blog.stackademic.com/how-dpop-works-a-guide-to-proof-of-possession-for-web-tokens-cbeac2d4e43c // for a simple and clear description of how DPoP works. try { // TODO: this implementation is tailored to the Community Solid Server and thus uses one URL for authorization server and solid server. - String serverUrl = solidInfo.get("serverUrl"); - String webId = solidInfo.get("webId"); - String email = solidInfo.get("email"); - String password = solidInfo.get("password"); + String oidcIssuer = httpRequestInfo.get("oidcIssuer"); + String webId = httpRequestInfo.get("webId"); + String email = httpRequestInfo.get("email"); + String password = httpRequestInfo.get("password"); /* Get account controls and retrieve login URL */ - HttpRequest accountInfoRequest = HttpRequest.newBuilder(URI.create(serverUrl + ".account/")) + HttpRequest accountInfoRequest = HttpRequest.newBuilder(URI.create(oidcIssuer + ".account/")) .GET().build(); HttpResponse accountInfoResponse = httpClient.send(accountInfoRequest, HttpResponse.BodyHandlers.ofString()); String accountInfoStr = accountInfoResponse.body(); @@ -95,7 +98,7 @@ private String getDpopAccessToken(Map solidInfo) throws Exceptio /* Use authorization token to get client credentials URL, added to account info */ - HttpRequest authorizedAccountInfoRequest = HttpRequest.newBuilder(URI.create(serverUrl + ".account/")) + HttpRequest authorizedAccountInfoRequest = HttpRequest.newBuilder(URI.create(oidcIssuer + ".account/")) .GET() .setHeader("Authorization", "CSS-Account-Token " + authorizationToken) .build(); @@ -131,7 +134,7 @@ private String getDpopAccessToken(Map solidInfo) throws Exceptio /* Get oidc info, used to obtain oidc token endpoints */ // GET /.well-known/openid-configuration HTTP/1.1 - HttpRequest oidcInfoRequest = HttpRequest.newBuilder(URI.create(serverUrl + ".well-known/openid-configuration")) + HttpRequest oidcInfoRequest = HttpRequest.newBuilder(URI.create(oidcIssuer + ".well-known/openid-configuration")) .GET().build(); HttpResponse oidcInfoResponse = httpClient.send(oidcInfoRequest, HttpResponse.BodyHandlers.ofString()); String oidcInfoStr = oidcInfoResponse.body(); @@ -201,97 +204,91 @@ private String generateJWT(final String url, final String method) throws JoseExc return jws.getCompactSerialization(); } - /** Adds data to a Solid pod as a resource using Solid OIDC. - * @param solidInfo A map with all necessary data. The map should contain following keys: - * serverUrl, webId, email, password, resourceUrl, contentType, data + /** Executes a HTTP request to a web resource, optionally using authentication with CSS client credentials. + * @param httpRequestInfo A map with all necessary data. The map should contain following keys: absoluteURI, methodName. + * The map may contain following keys: contentType, accept, data, + * authenticationType, email, password, oidcIssuer, webId + * absoluteURI, methodName, contentType, data + * @return response body * @throws Exception Something goes wrong. */ - void addResource(Map solidInfo) throws Exception{ + public String executeHttpRequest(Map httpRequestInfo) throws Exception{ try { - String resourceUrl = solidInfo.get("resourceUrl"); - String contentType = solidInfo.get("contentType"); - String data = solidInfo.get("data"); + String absoluteURI = httpRequestInfo.get("absoluteURI"); + String methodName = httpRequestInfo.get("methodName"); - String dpopAccessToken = getDpopAccessToken(solidInfo); + HttpRequest.Builder RequestBuilder = HttpRequest.newBuilder(URI.create(absoluteURI)); - /* PUT the data */ - // Generate new JWT token for this request - String putDataJWT = generateJWT(resourceUrl, "PUT"); - - HttpRequest putDataRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) - .PUT(HttpRequest.BodyPublishers.ofString(data, StandardCharsets.UTF_8)) - .setHeader("Authorization", "DPoP " + dpopAccessToken) - .setHeader("DPoP", putDataJWT) - .setHeader("Content-Type", contentType) - .build(); + if (httpRequestInfo.containsKey("data")){ + RequestBuilder.method(methodName, + HttpRequest.BodyPublishers.ofString(httpRequestInfo.get("data"), StandardCharsets.UTF_8)); + } else { + RequestBuilder.method(methodName, HttpRequest.BodyPublishers.noBody()); + } + if (httpRequestInfo.containsKey("contentType")){ + RequestBuilder.setHeader("Content-Type", httpRequestInfo.get("contentType")); + } + if (httpRequestInfo.containsKey("accept")){ + RequestBuilder.setHeader("Accept", httpRequestInfo.get("accept")); + } + addAuthentication(RequestBuilder, httpRequestInfo); + HttpRequest httpRequest = RequestBuilder.build(); - HttpResponse putDataResponse = httpClient.send(putDataRequest, HttpResponse.BodyHandlers.ofString()); - if (isNotSuccessful(putDataResponse.statusCode())) { - log.error("Could not create resource for URL {}: {}", resourceUrl, putDataResponse.statusCode()); - throw new Exception("Could not create resource for URL " + resourceUrl + ": " + putDataResponse.statusCode()); + HttpResponse httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString()); + if (isNotSuccessful(httpResponse.statusCode())) { + log.error("Could not successfully execute HTTP request for URI {} and method {}: {}", absoluteURI, methodName, httpResponse.statusCode()); + throw new Exception("Could not successfully execute HTTP request for URI " + absoluteURI + " and method " + methodName+ ": " + httpResponse.statusCode()); } + return httpResponse.body(); } catch (Throwable e) { // This is to catch runtime exceptions as well. throw new Exception(e); } } - /** Adds data to a Solid pod as an ACL for a resource using Solid OIDC. - * @param solidInfo A map with all necessary data. The map should contain following keys: - * serverUrl, webId, email, password, resourceUrl, contentType, data + /** Executes a HTTP request to a linked web resource, optionally using authentication with CSS client credentials. + * @param httpRequestInfo A map with all necessary data. The map should contain following keys: + * linkingAbsoluteURI, linkRelation, methodName. + * The map may contain following keys: contentType, accept, data, + * authenticationType, email, password, oidcIssuer, webId + * @return response body * @throws Exception Something goes wrong. */ - void addAcl(Map solidInfo) throws Exception{ + public String executeLinkedHttpRequest(Map httpRequestInfo) throws Exception{ try { - String resourceUrl = solidInfo.get("resourceUrl"); - String contentType = solidInfo.get("contentType"); - String data = solidInfo.get("data"); - - String dpopAccessToken = getDpopAccessToken(solidInfo); - - /* HEAD the resource to a get link to where the ACL should be put */ - // Generate new JWT token for this request - String headDataJWT = generateJWT(resourceUrl, "HEAD"); + String linkingAbsoluteURI = httpRequestInfo.get("linkingAbsoluteURI"); + String linkRelation = httpRequestInfo.get("linkRelation"); + /* HEAD request to retrieve the linked absolute URI via a link relation */ + HttpRequest.Builder RequestBuilder = HttpRequest.newBuilder(URI.create(linkingAbsoluteURI)) + .method("HEAD", HttpRequest.BodyPublishers.noBody()); + addAuthentication(RequestBuilder, httpRequestInfo); + HttpRequest httpRequest = RequestBuilder.build(); - HttpRequest headRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) - .method("HEAD", HttpRequest.BodyPublishers.noBody()) - .setHeader("Authorization", "DPoP " + dpopAccessToken) - .setHeader("DPoP", headDataJWT) - .build(); - - HttpResponse headResponse = httpClient.send(headRequest, HttpResponse.BodyHandlers.ofString()); + HttpResponse headResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString()); List links = headResponse.headers().map().get("link"); boolean foundLink = false; int index = 0; + String absoluteURI = null; + String responseBody = null; while (!foundLink && index < links.size() ){ String link = links.get(index); // a better method to parse the link header in Java would be welcome ... - if (link.contains("rel=\"acl\"")) { - - /* PUT the ACL to the found link */ - String linkUrl = link.substring(link.indexOf("<") + 1, link.indexOf(">")); - String putAclJWT = generateJWT(linkUrl, "PUT"); - HttpRequest putAclRequest = HttpRequest.newBuilder(URI.create(linkUrl)) - .PUT(HttpRequest.BodyPublishers.ofString(data, StandardCharsets.UTF_8)) - .setHeader("Content-Type", contentType) - .setHeader("Authorization", "DPoP " + dpopAccessToken) - .setHeader("DPoP", putAclJWT) - .build(); - HttpResponse putAclResponse = httpClient.send(putAclRequest, HttpResponse.BodyHandlers.ofString()); - - if (isNotSuccessful(putAclResponse.statusCode())) { - log.error("Could not create ACL for resource with URL {}: {}", resourceUrl, putAclResponse.statusCode()); - throw new Exception("Could not create ACL for resource with URL " + resourceUrl + ": " + putAclResponse.statusCode()); - } + if (link.contains("rel=\"" + linkRelation + "\"")) { + absoluteURI = link.substring(link.indexOf("<") + 1, link.indexOf(">")); + httpRequestInfo.put("absoluteURI", absoluteURI); + responseBody = executeHttpRequest(httpRequestInfo); foundLink = true; } index += 1; } if (!foundLink) { - String message = "Could not get ACL link for resource with URL " + resourceUrl; + String message = "Could not get linked absolute URI for link relation " + linkRelation + + " and linking absolute URI " + linkingAbsoluteURI; log.error(message); throw new Exception(message); + } else { + return responseBody; } } catch (Throwable e) { // This is to catch runtime exceptions as well. @@ -299,65 +296,16 @@ void addAcl(Map solidInfo) throws Exception{ } } - /** Retrieve data to a Solid pod using Solid OIDC. This method is only used for testing. - * @param solidInfo A map with all necessary data. The map should contain following keys: - * serverUrl, webId, email, password, resourceUrl - * @throws Exception Something goes wrong. - */ - public String getResource(Map solidInfo) throws Exception{ - try { - String resourceUrl = solidInfo.get("resourceUrl"); - String dpopAccessToken = getDpopAccessToken(solidInfo); - - /* GET the data */ - // Generate new JWT token for this request - String getDataJWT = generateJWT(resourceUrl, "GET"); - - HttpRequest getDataRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) - .GET() - .setHeader("Authorization", "DPoP " + dpopAccessToken) - .setHeader("DPoP", getDataJWT) - .setHeader("Accept","application/n-quads") - .build(); - - HttpResponse getDataResponse = httpClient.send(getDataRequest, HttpResponse.BodyHandlers.ofString()); - if (isNotSuccessful(getDataResponse.statusCode())) { - log.error("Could not get data from resource with URL {}: {}", resourceUrl, getDataResponse.statusCode()); - throw new Exception("Could not get data from resource with URL " + resourceUrl + ": " + getDataResponse.statusCode()); - } - return getDataResponse.body(); - } catch (Throwable e) { // This is to catch runtime exceptions as well. - throw new Exception(e); - } - } - - /** Delet a resource from a Solid pod using Solid OIDC. This method is only used for testing. - * @param solidInfo A map with all necessary data. The map should contain following keys: - * serverUrl, webId, email, password, resourceUrl - * @throws Exception Something goes wrong. - */ - public void deleteResource(Map solidInfo) throws Exception{ - try { - String resourceUrl = solidInfo.get("resourceUrl"); - String dpopAccessToken = getDpopAccessToken(solidInfo); - - /* DELETE the resource */ + private void addAuthentication(HttpRequest.Builder RequestBuilder, Map httpRequestInfo) throws Exception { + if (httpRequestInfo.containsKey("authenticationType") && + // only authentication with CSS Client Credentials implemented until now + httpRequestInfo.get("authenticationType").equals(NAMESPACES.RMLE + "CssClientCredentialsAuthentication")) { + // Get dpop access token + String dpopAccessToken = getDpopAccessToken(httpRequestInfo); + RequestBuilder.setHeader("Authorization", "DPoP " + dpopAccessToken); // Generate new JWT token for this request - String deleteDataJWT = generateJWT(resourceUrl, "DELETE"); - - HttpRequest deleteDataRequest = HttpRequest.newBuilder(URI.create(resourceUrl)) - .DELETE() - .setHeader("Authorization", "DPoP " + dpopAccessToken) - .setHeader("DPoP", deleteDataJWT) - .build(); - - HttpResponse deleteDataResponse = httpClient.send(deleteDataRequest, HttpResponse.BodyHandlers.ofString()); - if (isNotSuccessful(deleteDataResponse.statusCode())) { - log.error("Could not delete resource with URL {}: {}", resourceUrl, deleteDataResponse.statusCode()); - throw new Exception("Could not delete resource with URL " + resourceUrl + ": " + deleteDataResponse.statusCode()); - } - } catch (Throwable e) { // This is to catch runtime exceptions as well. - throw new Exception(e); + String dataJWT = generateJWT(httpRequestInfo.get("absoluteURI"), httpRequestInfo.get("methodName")); + RequestBuilder.setHeader("DPoP", dataJWT); } } diff --git a/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java b/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java new file mode 100644 index 00000000..b4aba4cd --- /dev/null +++ b/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java @@ -0,0 +1,45 @@ +package be.ugent.rml.target; + +import be.ugent.rml.store.Quad; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + + +public class LinkedHttpRequestTarget extends HttpRequestTarget { + + public LinkedHttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata) throws IOException { + super(httpRequestInfo, serializationFormat, metadata); + } + + @Override + public boolean equals(Object o) { + if (o instanceof LinkedHttpRequestTarget) { + LinkedHttpRequestTarget target = (LinkedHttpRequestTarget) o; + return this.httpRequestInfo.get("linkingAbsoluteURI").equals(target.getHttpRequestInfo().get("linkingAbsoluteURI")) & + this.httpRequestInfo.get("linkRelation").equals(target.getHttpRequestInfo().get("linkRelation")); + } else { + return false; + } + } + + @Override + public String toString() { + return "resource linked to " + this.httpRequestInfo.get("linkingAbsoluteURI") + + " with link relation " + this.httpRequestInfo.get("linkRelation"); + } + + @Override + public void close() { + super.close(); + try { + HttpRequestTargetHelper helper = new HttpRequestTargetHelper(); + helper.executeLinkedHttpRequest(httpRequestInfo); + } catch (Exception e) { + logger.error("Failed to close http request target linked to {} with link relation {}: {}", + this.httpRequestInfo.get("linkingAbsoluteURI"), this.httpRequestInfo.get("linkRelation"), e.getMessage()); + } + } +} + diff --git a/src/main/java/be/ugent/rml/target/SolidAclTarget.java b/src/main/java/be/ugent/rml/target/SolidAclTarget.java deleted file mode 100644 index b995e80e..00000000 --- a/src/main/java/be/ugent/rml/target/SolidAclTarget.java +++ /dev/null @@ -1,42 +0,0 @@ -package be.ugent.rml.target; - -import be.ugent.rml.store.Quad; - -import java.io.IOException; -import java.util.List; -import java.util.Map; - - -public class SolidAclTarget extends SolidTarget { - - public SolidAclTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { - super(solidTargetInfo, serializationFormat, metadata); - } - - @Override - public boolean equals(Object o) { - if (o instanceof SolidAclTarget) { - SolidAclTarget target = (SolidAclTarget) o; - return this.solidTargetInfo.get("resourceUrl").equals(target.getSolidTargetInfo().get("resourceUrl")); - } else { - return false; - } - } - - @Override - public String toString() { - return "acl for " + this.solidTargetInfo.get("resourceUrl"); - } - - @Override - public void close() { - super.close(); - try { - SolidTargetHelper helper = new SolidTargetHelper(); - helper.addAcl(solidTargetInfo); - } catch (Exception e) { - logger.error("Failed to close Solid ACL target for {}: {}", this.solidTargetInfo.get("resourceUrl"), e.getMessage()); - } - } -} - diff --git a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java b/src/main/java/be/ugent/rml/target/SolidResourceTarget.java deleted file mode 100644 index fc6d7c31..00000000 --- a/src/main/java/be/ugent/rml/target/SolidResourceTarget.java +++ /dev/null @@ -1,42 +0,0 @@ -package be.ugent.rml.target; - -import be.ugent.rml.store.Quad; - -import java.io.IOException; -import java.util.List; -import java.util.Map; - - -public class SolidResourceTarget extends SolidTarget { - - public SolidResourceTarget(Map solidTargetInfo, String serializationFormat, List metadata) throws IOException { - super(solidTargetInfo, serializationFormat, metadata); - } - - @Override - public boolean equals(Object o) { - if (o instanceof SolidResourceTarget) { - SolidResourceTarget target = (SolidResourceTarget) o; - return this.solidTargetInfo.get("resourceUrl").equals(target.getSolidTargetInfo().get("resourceUrl")); - } else { - return false; - } - } - - @Override - public String toString() { - return "resource for " + this.solidTargetInfo.get("resourceUrl").toString(); - } - - @Override - public void close() { - super.close(); - try { - SolidTargetHelper helper = new SolidTargetHelper(); - helper.addResource(solidTargetInfo); - } catch (Exception e) { - logger.error("Failed to close Solid resource target for {}: {}", this.solidTargetInfo.get("resourceUrl"), e.getMessage()); - } - } -} - diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index c6b2bbe8..41302310 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -344,18 +344,22 @@ else if (location.endsWith(".jsonld")) { target = new SPARQLEndpointTarget(endpoint, metadata); break; } - case NAMESPACES.RMLI + "SolidResourceTarget": { - logger.debug("Target is a document on a resource on a Solid Pod"); - String resource = getRequiredValue(t,new NamedNode(NAMESPACES.RMLI + "resource"), rmlStore).getValue(); - Map solidTargetInfo = parseSolidTarget(rmlStore, t, resource); - target = new SolidResourceTarget(solidTargetInfo, serializationFormat, metadata); + case NAMESPACES.RMLE + "DirectHttpRequest": { + logger.debug("Target is a direct HTTP request"); + Map httpRequestInfo = parseHttpRequest(rmlStore, t); + String absoluteURI = getRequiredValue(t,new NamedNode(NAMESPACES.HTV + "absoluteURI"), rmlStore); + httpRequestInfo.put("absoluteURI", absoluteURI); + target = new DirectHttpRequestTarget(httpRequestInfo, serializationFormat, metadata); break; } - case NAMESPACES.RMLI + "SolidAclTarget": { - logger.debug("Target is a acl document for a resource on a Solid Pod"); - String resource = getRequiredValue(t,new NamedNode(NAMESPACES.RMLI + "forResource"), rmlStore).getValue(); - Map solidTargetInfo = parseSolidTarget(rmlStore, t, resource); - target = new SolidAclTarget(solidTargetInfo, serializationFormat, metadata); + case NAMESPACES.RMLE + "LinkedHttpRequest": { + logger.debug("Target is a linked HTTP request"); + Map httpRequestInfo = parseHttpRequest(rmlStore, t); + String linkingAbsoluteURI = getRequiredValue(t,new NamedNode(NAMESPACES.RMLE + "linkingAbsoluteURI"), rmlStore); + String linkRelation = getRequiredValue(t,new NamedNode(NAMESPACES.RMLE + "linkRelation"), rmlStore); + httpRequestInfo.put("linkingAbsoluteURI", linkingAbsoluteURI); + httpRequestInfo.put("linkRelation", linkRelation); + target = new LinkedHttpRequestTarget(httpRequestInfo, serializationFormat, metadata); break; } default: { @@ -370,27 +374,48 @@ else if (location.endsWith(".jsonld")) { } } - private Map parseSolidTarget(QuadStore rmlStore, Term t, String resource){ - Term login = getRequiredValue(t, new NamedNode(NAMESPACES.IDSA + "userAuthentication"), rmlStore); - String email = getRequiredValue(login, new NamedNode(NAMESPACES.IDSA + "authUsername"), rmlStore).getValue(); - String password = getRequiredValue(login, new NamedNode(NAMESPACES.IDSA + "authPassword"), rmlStore).getValue(); - String oidcIssuer = getRequiredValue(login, new NamedNode(NAMESPACES.SOLID + "oidcIssuer"), rmlStore).getValue(); - String webId = getRequiredValue(login, new NamedNode(NAMESPACES.RMLI + "webId"), rmlStore).getValue(); - HashMap solidTargetInfo = new HashMap<>(); - solidTargetInfo.put("email", email); - solidTargetInfo.put("password",password); - solidTargetInfo.put("serverUrl", oidcIssuer); - solidTargetInfo.put("resourceUrl", resource); - solidTargetInfo.put("webId", webId); - return solidTargetInfo; + private Map parseHttpRequest(QuadStore rmlStore, Term t){ + HashMap httpRequestInfo= new HashMap<>(); + putOptionalValue(t, new NamedNode(NAMESPACES.HTV + "methodName"), rmlStore, httpRequestInfo, "methodName"); + putOptionalValue(t, new NamedNode(NAMESPACES.RMLE + "contentTypeHeader"), rmlStore, httpRequestInfo, "contentType"); + List authentications = Utils.getObjectsFromQuads(rmlStore.getQuads(t, new NamedNode(NAMESPACES.RMLE + "userAuthentication"), null)); + if (!authentications.isEmpty()) { + Term userAuthentication = authentications.get(0); + String authenticationType = getRequiredValue(userAuthentication, new NamedNode(NAMESPACES.RDF + "type"), rmlStore); + httpRequestInfo.put("authenticationType", authenticationType); + switch (authenticationType) { + case NAMESPACES.RMLE + "CssClientCredentialsAuthentication": { + String email = getRequiredValue(userAuthentication, new NamedNode(NAMESPACES.RMLE + "authEmail"), rmlStore); + String password = getRequiredValue(userAuthentication, new NamedNode(NAMESPACES.RMLE + "authPassword"), rmlStore); + String oidcIssuer = getRequiredValue(userAuthentication, new NamedNode(NAMESPACES.RMLE + "authOidcIssuer"), rmlStore); + String webId = getRequiredValue(userAuthentication, new NamedNode(NAMESPACES.RMLE + "authWebId"), rmlStore); + httpRequestInfo.put("email", email); + httpRequestInfo.put("password", password); + httpRequestInfo.put("oidcIssuer", oidcIssuer); + httpRequestInfo.put("webId", webId); + break; + } + default: { + throw new UnsupportedOperationException("User authentication type " + authenticationType + "is not implemented"); + } + } + } + return httpRequestInfo; } - private Term getRequiredValue(Term subject, Term predicate, QuadStore rmlStore) throws Error { + private String getRequiredValue(Term subject, Term predicate, QuadStore rmlStore) throws Error { List terms = Utils.getObjectsFromQuads(rmlStore.getQuads(subject, predicate, null)); if (terms.isEmpty()) { throw new Error(subject + " has no value for predicate " + predicate); } else { - return terms.get(0); + return terms.get(0).getValue(); + } + } + + private void putOptionalValue(Term subject, Term predicate, QuadStore rmlStore, HashMap map, String key) { + List terms = Utils.getObjectsFromQuads(rmlStore.getQuads(subject, predicate, null)); + if (!terms.isEmpty()) { + map.put(key, terms.get(0).getValue()); } } } diff --git a/src/test/java/be/ugent/rml/SolidTargetTest.java b/src/test/java/be/ugent/rml/HttpRequestTargetTest.java similarity index 77% rename from src/test/java/be/ugent/rml/SolidTargetTest.java rename to src/test/java/be/ugent/rml/HttpRequestTargetTest.java index 7495395d..b0d50aea 100644 --- a/src/test/java/be/ugent/rml/SolidTargetTest.java +++ b/src/test/java/be/ugent/rml/HttpRequestTargetTest.java @@ -3,7 +3,7 @@ import be.ugent.rml.cli.Main; import be.ugent.rml.store.QuadStore; import be.ugent.rml.store.QuadStoreFactory; -import be.ugent.rml.target.SolidTargetHelper; +import be.ugent.rml.target.HttpRequestTargetHelper; import org.eclipse.rdf4j.rio.RDFFormat; import org.junit.jupiter.api.Test; @@ -12,7 +12,7 @@ import java.util.HashMap; import java.util.Map; -public class SolidTargetTest extends TestCore { +public class HttpRequestTargetTest extends TestCore { //constant target in subject map @Test @@ -59,7 +59,7 @@ public void solid5() throws Exception { "user1"); } - //acl for user2, resourceUrl with .ttl + //acl for user2, absolute URI with .ttl @Test public void acl1() throws Exception{ doMappingSolid("solid-target/acl1/mapping.ttl", @@ -68,7 +68,7 @@ public void acl1() throws Exception{ "user2"); } - //acl for user2, resourceUrl without .ttl + //acl for user2, absolute URI without .ttl @Test public void acl2() throws Exception{ doMappingSolid("solid-target/acl2/mapping.ttl", @@ -127,37 +127,40 @@ public void dynamic_solid4() throws Exception { new String[]{"user1", "user1"}); } - void doMappingSolid(String mapPath, String resourceUrl, String outPath, String user) throws Exception { - doMappingSolid(mapPath, new String[]{resourceUrl}, new String[]{outPath},new String[]{user}); + void doMappingSolid(String mapPath, String absoluteURI, String outPath, String user) throws Exception { + doMappingSolid(mapPath, new String[]{absoluteURI}, new String[]{outPath},new String[]{user}); } - void doMappingSolid(String mapPath, String[] resourceUrls, String[] outPaths, String[] users) throws Exception { + void doMappingSolid(String mapPath, String[] absoluteURIs, String[] outPaths, String[] users) throws Exception { Main.run(("-m " + mapPath).split(" ")); - SolidTargetHelper helper = new SolidTargetHelper(); + HttpRequestTargetHelper helper = new HttpRequestTargetHelper(); int i = 0; - while (i < resourceUrls.length) { - Map solidTargetInfo = getSolidTargetInfo(users[i], resourceUrls[i]); + while (i < absoluteURIs.length) { + Map solidTargetInfo = getHttpRequestInfo(users[i], absoluteURIs[i], "GET"); compareResourceWithOutput(outPaths[i], solidTargetInfo); - helper.deleteResource(getSolidTargetInfo("user1", resourceUrls[i])); + helper.executeHttpRequest(getHttpRequestInfo("user1", absoluteURIs[i], "DELETE")); i++; } } - // get solidTargetInfo including authentication details of testpods - private Map getSolidTargetInfo(String user, String resourceUrl){ - Map solidTargetInfo = new HashMap<>(); - solidTargetInfo.put("email", user + "@pod.playground.solidlab.be"); - solidTargetInfo.put("password",user); - solidTargetInfo.put("serverUrl", "https://pod.playground.solidlab.be/"); - solidTargetInfo.put("webId", "https://pod.playground.solidlab.be/" + user + "/profile/card#me"); - solidTargetInfo.put("resourceUrl", resourceUrl); - return solidTargetInfo; + // get httpRequestInfo including authentication details of testpods + private Map getHttpRequestInfo(String user, String absoluteURI, String method){ + Map httpRequestInfo = new HashMap<>(); + httpRequestInfo.put("methodName", method); + httpRequestInfo.put("email", user + "@pod.playground.solidlab.be"); + httpRequestInfo.put("password",user); + httpRequestInfo.put("oidcIssuer", "https://pod.playground.solidlab.be/"); + httpRequestInfo.put("webId", "https://pod.playground.solidlab.be/" + user + "/profile/card#me"); + httpRequestInfo.put("authenticationType", "https://rml.io/ns/extensions#CssClientCredentialsAuthentication"); + httpRequestInfo.put("absoluteURI", absoluteURI); + return httpRequestInfo; } - private void compareResourceWithOutput(String outPath, Map solidTargetInfo) throws Exception { + private void compareResourceWithOutput(String outPath, Map httpRequestInfo) throws Exception { // retrieve resource from solid pod - SolidTargetHelper helper = new SolidTargetHelper(); - String response = helper.getResource(solidTargetInfo); + HttpRequestTargetHelper helper = new HttpRequestTargetHelper(); + httpRequestInfo.put("methodName", "GET"); + String response = helper.executeHttpRequest(httpRequestInfo); InputStream responseStream = new ByteArrayInputStream(response.getBytes()); QuadStore result = QuadStoreFactory.read(responseStream, RDFFormat.NQUADS); // compare result to expected output diff --git a/src/test/java/be/ugent/rml/store/QuadTest.java b/src/test/java/be/ugent/rml/store/QuadTest.java index 3480592d..029889e7 100644 --- a/src/test/java/be/ugent/rml/store/QuadTest.java +++ b/src/test/java/be/ugent/rml/store/QuadTest.java @@ -72,4 +72,4 @@ public void compareQuadsOneGraphNull() { assertEquals(0, q1.compareTo(q2)); } -} +} \ No newline at end of file diff --git a/src/test/java/be/ugent/rml/store/SimpleQuadStoreTest.java b/src/test/java/be/ugent/rml/store/SimpleQuadStoreTest.java index fef7be4b..ffb8dbdb 100644 --- a/src/test/java/be/ugent/rml/store/SimpleQuadStoreTest.java +++ b/src/test/java/be/ugent/rml/store/SimpleQuadStoreTest.java @@ -24,4 +24,4 @@ public void get_filtered_quads() { // get quads matching the predicate assertEquals(1, store.getQuads(null, new NamedNode(p1), null).size()); } -} +} \ No newline at end of file diff --git a/src/test/resources/solid-target/acl1/mapping.ttl b/src/test/resources/solid-target/acl1/mapping.ttl index ded70ad5..eaf55350 100644 --- a/src/test/resources/solid-target/acl1/mapping.ttl +++ b/src/test/resources/solid-target/acl1/mapping.ttl @@ -8,10 +8,9 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix solid: . @prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . @prefix void: . a rr:TriplesMap; @@ -85,22 +84,23 @@ rmlt:serialization formats:Turtle; rmlt:target [ a rmlt:Target; - a rmli:SolidResourceTarget; - rmli:resource ; - ids:userAuthentication ; + a rmle:DirectHttpRequest; + htv:absoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/building.ttl"; + rmle:userAuthentication ; ]. rmlt:serialization formats:Turtle; rmlt:target [ a rmlt:Target; - a rmli:SolidAclTarget; - rmli:forResource ; - ids:userAuthentication ; + a rmle:LinkedHttpRequest; + rmle:linkingAbsoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/building.ttl"; + rmle:linkRelation "acl"; + rmle:userAuthentication ; ]. - a ids:UserAuthentication; - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId . + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId . diff --git a/src/test/resources/solid-target/acl2/mapping.ttl b/src/test/resources/solid-target/acl2/mapping.ttl index e43dc8ae..b596c51f 100644 --- a/src/test/resources/solid-target/acl2/mapping.ttl +++ b/src/test/resources/solid-target/acl2/mapping.ttl @@ -8,10 +8,9 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix solid: . @prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . @prefix void: . a rr:TriplesMap; @@ -85,23 +84,24 @@ rmlt:serialization formats:Turtle; rmlt:target [ a rmlt:Target; - a rmli:SolidResourceTarget; - rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - ids:userAuthentication ; + a rmle:DirectHttpRequest; + htv:absoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/building"; + rmle:userAuthentication ; ]. rmlt:serialization formats:Turtle; rmlt:target [ a rmlt:Target; - a rmli:SolidAclTarget; - rmli:forResource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - ids:userAuthentication ; + a rmle:LinkedHttpRequest; + rmle:linkingAbsoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/building"; + rmle:linkRelation "acl"; + rmle:userAuthentication ; ]. - a ids:UserAuthentication; - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId . + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId . diff --git a/src/test/resources/solid-target/dynamic_solid1/mapping.ttl b/src/test/resources/solid-target/dynamic_solid1/mapping.ttl index 7e95f2e6..0cf6b783 100644 --- a/src/test/resources/solid-target/dynamic_solid1/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid1/mapping.ttl @@ -8,10 +8,9 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix solid: . @prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . a rml:LogicalSource; rml:source "src/test/resources/solid-target/dynamic_solid1/buildings.csv"; @@ -21,7 +20,7 @@ rml:logicalSource ; rr:subjectMap [ rr:template "http://example.com/{BuildingID}"; - rmli:logicalTargetMap [ rr:template "logical_target/building/{OwnerID}" ]; + rmle:logicalTargetMap [ rr:template "logical_target/building/{OwnerID}" ]; ]; rr:predicateObjectMap [ rr:predicate o:has-floor-tile; @@ -33,7 +32,7 @@ rr:subjectMap [ rr:template "logical_target/building/{OwnerID}"; rr:class rml:LogicalTarget; - rml:logicalTarget rmli:ThisMapping; + rml:logicalTarget rmle:ThisMapping; ]; rr:predicateObjectMap [ rr:predicate rmlt:serialization; @@ -48,21 +47,21 @@ rml:logicalSource ; rr:subjectMap [ rr:template "target/building/{OwnerID}"; - rr:class rmlt:Target, rmli:SolidResourceTarget; - rml:logicalTarget rmli:ThisMapping; + rr:class rmlt:Target, rmle:DirectHttpRequest; + rml:logicalTarget rmle:ThisMapping; ]; rr:predicateObjectMap [ - rr:predicate rmli:resource; + rr:predicate htv:absoluteURI; rr:objectMap [ rr:template "https://pod.playground.solidlab.be/user1/rmlmapper/building_{OwnerID}" ]; ]; rr:predicateObjectMap [ - rr:predicate ids:userAuthentication; + rr:predicate rmle:userAuthentication; rr:object ; ]. - a ids:UserAuthenticaion; - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId . + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId . diff --git a/src/test/resources/solid-target/dynamic_solid2/mapping.ttl b/src/test/resources/solid-target/dynamic_solid2/mapping.ttl index a5b3cc2a..73c82c8f 100644 --- a/src/test/resources/solid-target/dynamic_solid2/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid2/mapping.ttl @@ -8,10 +8,9 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix solid: . @prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . a rml:LogicalSource; rml:source "src/test/resources/solid-target/dynamic_solid2/buildings.csv"; @@ -24,7 +23,7 @@ rr:predicate o:has-floor-tile; rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}"; - rmli:logicalTargetMap [ rr:template "logical_target/building/{OwnerID}" ]; + rmle:logicalTargetMap [ rr:template "logical_target/building/{OwnerID}" ]; rml:logicalTarget ; ]; ]. @@ -34,7 +33,7 @@ rr:subjectMap [ rr:template "logical_target/building/{OwnerID}"; rr:class rml:LogicalTarget; - rml:logicalTarget rmli:ThisMapping; + rml:logicalTarget rmle:ThisMapping; ]; rr:predicateObjectMap [ rr:predicate rmlt:serialization; @@ -49,28 +48,28 @@ rml:logicalSource ; rr:subjectMap [ rr:template "target/building/{OwnerID}"; - rr:class rmlt:Target, rmli:SolidResourceTarget; - rml:logicalTarget rmli:ThisMapping; + rr:class rmlt:Target, rmle:DirectHttpRequest; + rml:logicalTarget rmle:ThisMapping; ]; rr:predicateObjectMap [ - rr:predicate rmli:resource; + rr:predicate htv:absoluteURI; rr:objectMap [ rr:template "https://pod.playground.solidlab.be/user1/rmlmapper/building_{OwnerID}" ]; ]; rr:predicateObjectMap [ - rr:predicate ids:userAuthentication; + rr:predicate rmle:userAuthentication; rr:object ; ]. rmlt:target [ #rmlt:serialization formats:N-Quads; - a rmli:SolidResourceTarget; - rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/floortile"; - ids:userAuthentication ; + a rmle:DirectHttpRequest; + htv:absoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/floortile"; + rmle:userAuthentication ; ]. - a ids:UserAuthentication; - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId . + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId . diff --git a/src/test/resources/solid-target/dynamic_solid3/mapping.ttl b/src/test/resources/solid-target/dynamic_solid3/mapping.ttl index 93bc2ca0..b45fec64 100644 --- a/src/test/resources/solid-target/dynamic_solid3/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid3/mapping.ttl @@ -8,10 +8,9 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix solid: . @prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . a rml:LogicalSource; rml:source "src/test/resources/solid-target/dynamic_solid2/buildings.csv"; @@ -24,7 +23,7 @@ rr:predicate o:has-floor-tile; rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}"; - rmli:logicalTargetMap [ rr:template "logical_target/building/{OwnerID}" ], + rmle:logicalTargetMap [ rr:template "logical_target/building/{OwnerID}" ], [ rr:template "logical_target/{FloorTileID}" ]; ]; ]. @@ -34,7 +33,7 @@ rr:subjectMap [ rr:template "logical_target/building/{OwnerID}"; rr:class rml:LogicalTarget; - rml:logicalTarget rmli:ThisMapping; + rml:logicalTarget rmle:ThisMapping; ]; rr:predicateObjectMap [ rr:predicate rmlt:serialization; @@ -49,15 +48,15 @@ rml:logicalSource ; rr:subjectMap [ rr:template "target/building/{OwnerID}"; - rr:class rmlt:Target, rmli:SolidResourceTarget; - rml:logicalTarget rmli:ThisMapping; + rr:class rmlt:Target, rmle:DirectHttpRequest; + rml:logicalTarget rmle:ThisMapping; ]; rr:predicateObjectMap [ - rr:predicate rmli:resource; + rr:predicate htv:absoluteURI; rr:objectMap [ rr:template "https://pod.playground.solidlab.be/user1/rmlmapper/building_{OwnerID}" ]; ]; rr:predicateObjectMap [ - rr:predicate ids:userAuthentication; + rr:predicate rmle:userAuthentication; rr:object ; ]. @@ -66,7 +65,7 @@ rr:subjectMap [ rr:template "logical_target/{FloorTileID}"; rr:class rml:LogicalTarget; - rml:logicalTarget rmli:ThisMapping; + rml:logicalTarget rmle:ThisMapping; ]; rr:predicateObjectMap [ rr:predicate rmlt:serialization; @@ -81,21 +80,21 @@ rml:logicalSource ; rr:subjectMap [ rr:template "target/{FloorTileID}"; - rr:class rmlt:Target, rmli:SolidResourceTarget; - rml:logicalTarget rmli:ThisMapping; + rr:class rmlt:Target, rmle:DirectHttpRequest; + rml:logicalTarget rmle:ThisMapping; ]; rr:predicateObjectMap [ - rr:predicate rmli:resource; + rr:predicate htv:absoluteURI; rr:objectMap [ rr:template "https://pod.playground.solidlab.be/user1/rmlmapper/{FloorTileID}" ]; ]; rr:predicateObjectMap [ - rr:predicate ids:userAuthentication; + rr:predicate rmle:userAuthentication; rr:object ; ]. - a ids:UserAuthentication; - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId . + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId . diff --git a/src/test/resources/solid-target/dynamic_solid4/mapping.ttl b/src/test/resources/solid-target/dynamic_solid4/mapping.ttl index c231083f..da2d4bf7 100644 --- a/src/test/resources/solid-target/dynamic_solid4/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid4/mapping.ttl @@ -6,10 +6,9 @@ @prefix ql: . @prefix rmlt: . @prefix formats: . -@prefix solid: . @prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . @base . rml:logicalSource [ @@ -28,7 +27,7 @@ rml:reference "Name"; rml:languageMap [ rml:reference "lang"; - rmli:logicalTargetMap [ rr:template "logical_target/{lang}" ] + rmle:logicalTargetMap [ rr:template "logical_target/{lang}" ] ] ] ]. @@ -38,7 +37,7 @@ rr:subjectMap [ rr:template "logical_target/{lang}"; rr:class rml:LogicalTarget; - rml:logicalTarget rmli:ThisMapping; + rml:logicalTarget rmle:ThisMapping; ]; rr:predicateObjectMap [ rr:predicate rmlt:serialization; @@ -53,21 +52,21 @@ rml:logicalSource ; rr:subjectMap [ rr:template "target/{lang}"; - rr:class rmlt:Target, rmli:SolidResourceTarget; - rml:logicalTarget rmli:ThisMapping; + rr:class rmlt:Target, rmle:DirectHttpRequest; + rml:logicalTarget rmle:ThisMapping; ]; rr:predicateObjectMap [ - rr:predicate rmli:resource; + rr:predicate htv:absoluteURI; rr:objectMap [ rr:template "https://pod.playground.solidlab.be/user1/rmlmapper/student_{lang}" ]; ]; rr:predicateObjectMap [ - rr:predicate ids:userAuthentication; + rr:predicate rmle:userAuthentication; rr:object ; ]. - a ids:UserAuthentication; - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId . + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId . diff --git a/src/test/resources/solid-target/solid1/mapping.ttl b/src/test/resources/solid-target/solid1/mapping.ttl index d1361ff0..c50b0d38 100644 --- a/src/test/resources/solid-target/solid1/mapping.ttl +++ b/src/test/resources/solid-target/solid1/mapping.ttl @@ -8,10 +8,8 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix solid: . -@prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . a rr:TriplesMap; rml:logicalSource [ @@ -29,13 +27,14 @@ rmlt:serialization formats:Turtle; rmlt:target [ - a rmlt:Target, rmli:SolidResourceTarget; - rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - ids:userAuthentication [ - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId + a rmlt:Target, rmle:DirectHttpRequest; + htv:absoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/building"; + rmle:userAuthentication [ + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId ]; ]. diff --git a/src/test/resources/solid-target/solid2/mapping.ttl b/src/test/resources/solid-target/solid2/mapping.ttl index cd9faacc..d52ec2d9 100644 --- a/src/test/resources/solid-target/solid2/mapping.ttl +++ b/src/test/resources/solid-target/solid2/mapping.ttl @@ -8,10 +8,9 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix solid: . @prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . a rr:TriplesMap; rml:logicalSource [ @@ -29,14 +28,15 @@ rmlt:serialization formats:Turtle; rmlt:target [ - a rmli:Target; - a rmli:SolidResourceTarget; - rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - ids:userAuthentication [ - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId + a rmle:Target; + a rmle:DirectHttpRequest; + htv:absoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/building"; + rmle:userAuthentication [ + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId ]; ]. diff --git a/src/test/resources/solid-target/solid3/mapping.ttl b/src/test/resources/solid-target/solid3/mapping.ttl index cfd8deb2..6060a101 100644 --- a/src/test/resources/solid-target/solid3/mapping.ttl +++ b/src/test/resources/solid-target/solid3/mapping.ttl @@ -8,10 +8,9 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix solid: . @prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . a rr:TriplesMap; rml:logicalSource [ @@ -29,13 +28,14 @@ rmlt:serialization formats:Turtle; rmlt:target [ - a rmli:SolidResourceTarget; - rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - ids:userAuthentication [ - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId + a rmle:DirectHttpRequest; + htv:absoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/building"; + rmle:userAuthentication [ + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId ]; ]. diff --git a/src/test/resources/solid-target/solid4/mapping.ttl b/src/test/resources/solid-target/solid4/mapping.ttl index 07bd931b..9188ee53 100644 --- a/src/test/resources/solid-target/solid4/mapping.ttl +++ b/src/test/resources/solid-target/solid4/mapping.ttl @@ -8,10 +8,9 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix solid: . @prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . a rr:TriplesMap; rml:logicalSource [ @@ -33,13 +32,14 @@ rmlt:target [ #rmlt:serialization formats:Turtle; - a rmli:SolidResourceTarget; - rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - ids:userAuthentication [ - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId + a rmle:DirectHttpRequest; + htv:absoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/building"; + rmle:userAuthentication [ + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId ]; ]. diff --git a/src/test/resources/solid-target/solid5/mapping.ttl b/src/test/resources/solid-target/solid5/mapping.ttl index 2e60eb0e..30b6d494 100644 --- a/src/test/resources/solid-target/solid5/mapping.ttl +++ b/src/test/resources/solid-target/solid5/mapping.ttl @@ -8,10 +8,9 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix solid: . @prefix acl: . -@prefix rmli: . -@prefix ids: . +@prefix rmle: . +@prefix htv: . a rr:TriplesMap; rml:logicalSource [ @@ -31,13 +30,14 @@ rmlt:target [ #rmlt:serialization formats:Turtle; - a rmli:SolidResourceTarget; - rmli:resource "https://pod.playground.solidlab.be/user1/rmlmapper/building"; - ids:userAuthentication [ - ids:authUsername "user1@pod.playground.solidlab.be"; - ids:authPassword "user1"; - solid:oidcIssuer ; - rmli:webId + a rmle:DirectHttpRequest; + htv:absoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/building"; + rmle:userAuthentication [ + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId ]; ]. From 364233d724db97bae64d6f3e793cca886d402de3 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Thu, 5 Dec 2024 18:18:37 +0100 Subject: [PATCH 063/127] updating CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2acf1958..94d0745a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Added - CLI option `--convert-mapping` to convert your existing R2RML and older RML mappings to the latest version by the W3C Community Group. -- Solid related targets +- HTTP request targets - dynamic logical targets ## [7.1.2] - 2024-09-19 From 0f6c6cf443872d92340aa71fcf7bb723f8899520 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Thu, 5 Dec 2024 21:48:32 +0100 Subject: [PATCH 064/127] .gtilab-ci.yml: HttpRequestTargetTest instead of SolidTargetTest --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3c616918..2d2ada35 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -73,7 +73,7 @@ General: - '$TEST.log' parallel: matrix: - - TEST: [ArgumentsTest, MapperCSVTest, MapperJSONTest, MapperMySQLTest, MapperPostgresR2RMLTest, MapperWoTTest, ArgumentsTestMySQLTest, MapperCSVWTest, MapperLDESTest, MapperODSTest, MapperOracleDBTest, MapperPostgresXMLTest, MapperXMLTest, CustomRMLFnOMapperCSVTest, MapperEXCELTest, MapperMappingFileURLTest, MapperSPARQLTest, MetadataTest, CustomRMLFnOMapperJSONTest, CustomRMLFnOMapperTest, MapperHTMLTest, MapperMySQLR2RMLTest, MapperPostgresCSVTest, MapperSQLServerTest, OptimizationsTest, R2RMLConverterTest, QuadTest, ReadmeTest, ReadmeFunctionTest, ConformerDetectionTest, MapperNewRMLCoreCSVTest, MapperNewRMLCoreJSONTest, MapperNewRMLCoreXMLTest, MapperNewRMLCoreMySQLTest, MapperNewRMLCorePostgresTest, MapperNewRMLIOSourceTest, MapperNewRMLIOTargetTest, SolidTargetTest] + - TEST: [ArgumentsTest, MapperCSVTest, MapperJSONTest, MapperMySQLTest, MapperPostgresR2RMLTest, MapperWoTTest, ArgumentsTestMySQLTest, MapperCSVWTest, MapperLDESTest, MapperODSTest, MapperOracleDBTest, MapperPostgresXMLTest, MapperXMLTest, CustomRMLFnOMapperCSVTest, MapperEXCELTest, MapperMappingFileURLTest, MapperSPARQLTest, MetadataTest, CustomRMLFnOMapperJSONTest, CustomRMLFnOMapperTest, MapperHTMLTest, MapperMySQLR2RMLTest, MapperPostgresCSVTest, MapperSQLServerTest, OptimizationsTest, R2RMLConverterTest, QuadTest, ReadmeTest, ReadmeFunctionTest, ConformerDetectionTest, MapperNewRMLCoreCSVTest, MapperNewRMLCoreJSONTest, MapperNewRMLCoreXMLTest, MapperNewRMLCoreMySQLTest, MapperNewRMLCorePostgresTest, MapperNewRMLIOSourceTest, MapperNewRMLIOTargetTest, HttpRequestTargetTest] except: - master - development From 4f0ceadb047db3fd0cb3048bb053916b2f8117bb Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Fri, 6 Dec 2024 08:25:29 +0100 Subject: [PATCH 065/127] correction missing new line --- src/test/java/be/ugent/rml/store/QuadTest.java | 2 +- src/test/java/be/ugent/rml/store/SimpleQuadStoreTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/be/ugent/rml/store/QuadTest.java b/src/test/java/be/ugent/rml/store/QuadTest.java index 029889e7..3480592d 100644 --- a/src/test/java/be/ugent/rml/store/QuadTest.java +++ b/src/test/java/be/ugent/rml/store/QuadTest.java @@ -72,4 +72,4 @@ public void compareQuadsOneGraphNull() { assertEquals(0, q1.compareTo(q2)); } -} \ No newline at end of file +} diff --git a/src/test/java/be/ugent/rml/store/SimpleQuadStoreTest.java b/src/test/java/be/ugent/rml/store/SimpleQuadStoreTest.java index ffb8dbdb..fef7be4b 100644 --- a/src/test/java/be/ugent/rml/store/SimpleQuadStoreTest.java +++ b/src/test/java/be/ugent/rml/store/SimpleQuadStoreTest.java @@ -24,4 +24,4 @@ public void get_filtered_quads() { // get quads matching the predicate assertEquals(1, store.getQuads(null, new NamedNode(p1), null).size()); } -} \ No newline at end of file +} From e2ba70b14f564e3ae9979b6e9a2306a96c9a0ff8 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Fri, 6 Dec 2024 09:12:22 +0100 Subject: [PATCH 066/127] HttpRequestTargetTest: use of NAMESPACE.RMLE --- src/test/java/be/ugent/rml/HttpRequestTargetTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/be/ugent/rml/HttpRequestTargetTest.java b/src/test/java/be/ugent/rml/HttpRequestTargetTest.java index b0d50aea..1f4545af 100644 --- a/src/test/java/be/ugent/rml/HttpRequestTargetTest.java +++ b/src/test/java/be/ugent/rml/HttpRequestTargetTest.java @@ -151,7 +151,7 @@ private Map getHttpRequestInfo(String user, String absoluteURI, httpRequestInfo.put("password",user); httpRequestInfo.put("oidcIssuer", "https://pod.playground.solidlab.be/"); httpRequestInfo.put("webId", "https://pod.playground.solidlab.be/" + user + "/profile/card#me"); - httpRequestInfo.put("authenticationType", "https://rml.io/ns/extensions#CssClientCredentialsAuthentication"); + httpRequestInfo.put("authenticationType", NAMESPACES.RMLE + "CssClientCredentialsAuthentication"); httpRequestInfo.put("absoluteURI", absoluteURI); return httpRequestInfo; } From 4ec4ad3c68fdbba0f37ebef303a106784c2f5103 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Sat, 7 Dec 2024 10:42:31 +0100 Subject: [PATCH 067/127] adapted README --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 143ad410..9857a8b4 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,8 @@ and see [Usage](#cli) on how to use the commandline interface! - local file - VoID dataset - SPARQL endpoint with SPARQL UPDATE + - [HTTP request access](https://rml.io/specs/access/httprequest/) + - [dynamic logical targets](https://rml.io/specs/target/dynamictarget/) ### Future - functions (all cases) @@ -69,6 +71,7 @@ and see [Usage](#cli) on how to use the commandline interface! - data sources: - NoSQL databases - TPF servers + - [HTTP request access](https://rml.io/specs/access/httprequest/) ## Releases From d926d7db27515adbcdbf8d2543303befca05317d Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 9 Dec 2024 11:13:16 +0100 Subject: [PATCH 068/127] makiing Target autoclosable --- src/main/java/be/ugent/rml/target/Target.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/be/ugent/rml/target/Target.java b/src/main/java/be/ugent/rml/target/Target.java index 7945af6f..94d53335 100644 --- a/src/main/java/be/ugent/rml/target/Target.java +++ b/src/main/java/be/ugent/rml/target/Target.java @@ -10,7 +10,7 @@ * This interface represents the target of a knowledge graph. * For example, a local file, a SOLID pod, a Triple Store, and so on. */ -public interface Target { +public interface Target extends AutoCloseable { /** * This method returns an OutputStream for the target. From f4cc4e0d23294ce2ee0c2aef4cdec6bb1c222115 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 9 Dec 2024 11:28:11 +0100 Subject: [PATCH 069/127] introducing enum HttpMethod --- buildNumber.properties | 5 ++--- src/main/java/be/ugent/rml/target/HttpMethod.java | 12 ++++++++++++ .../java/be/ugent/rml/target/HttpRequestTarget.java | 2 +- .../be/ugent/rml/target/HttpRequestTargetHelper.java | 6 +----- 4 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 src/main/java/be/ugent/rml/target/HttpMethod.java diff --git a/buildNumber.properties b/buildNumber.properties index 5dbf6ed6..98238d14 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,4 +1,3 @@ #maven.buildNumber.plugin properties file -#Tue Aug 13 08:29:04 GMT 2024 -buildNumber0=373 - +#Fri Dec 06 17:11:38 CET 2024 +buildNumber0=375 diff --git a/src/main/java/be/ugent/rml/target/HttpMethod.java b/src/main/java/be/ugent/rml/target/HttpMethod.java new file mode 100644 index 00000000..f631aa2f --- /dev/null +++ b/src/main/java/be/ugent/rml/target/HttpMethod.java @@ -0,0 +1,12 @@ +package be.ugent.rml.target; + +public enum HttpMethod { + GET, + HEAD, + POST, + PUT, + DELETE, + CONNECT, + TRACE, + PATCH +} diff --git a/src/main/java/be/ugent/rml/target/HttpRequestTarget.java b/src/main/java/be/ugent/rml/target/HttpRequestTarget.java index 80b67d2a..4244336a 100644 --- a/src/main/java/be/ugent/rml/target/HttpRequestTarget.java +++ b/src/main/java/be/ugent/rml/target/HttpRequestTarget.java @@ -86,7 +86,7 @@ public void close() { this.byteArrayOutputStream.reset(); // add default values if (!httpRequestInfo.containsKey("methodName")){ - this.httpRequestInfo.put("methodName", "PUT"); + this.httpRequestInfo.put("methodName", HttpMethod.PUT.name()); } if (!httpRequestInfo.containsKey("contentType")){ this.httpRequestInfo.put("contentType", serializationFormats.get(this.serializationFormat)); diff --git a/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java b/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java index f5358a5a..f155171f 100644 --- a/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java +++ b/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java @@ -14,7 +14,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.lang.module.ModuleDescriptor; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -24,9 +23,6 @@ import java.util.List; import java.util.Map; -/** - * HttpRequestTargetHelper helps writing data to a web resource, taking care of the optional authorization flow. - */ public class HttpRequestTargetHelper { private static final Logger log = LoggerFactory.getLogger(HttpRequestTargetHelper.class); private final EllipticCurveJsonWebKey jwk; @@ -259,7 +255,7 @@ public String executeLinkedHttpRequest(Map httpRequestInfo) thro String linkRelation = httpRequestInfo.get("linkRelation"); /* HEAD request to retrieve the linked absolute URI via a link relation */ HttpRequest.Builder RequestBuilder = HttpRequest.newBuilder(URI.create(linkingAbsoluteURI)) - .method("HEAD", HttpRequest.BodyPublishers.noBody()); + .method(HttpMethod.HEAD.name(), HttpRequest.BodyPublishers.noBody()); addAuthentication(RequestBuilder, httpRequestInfo); HttpRequest httpRequest = RequestBuilder.build(); From b09ce634a487b3635712ab268cd537523fbcb568 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 9 Dec 2024 11:39:02 +0100 Subject: [PATCH 070/127] reset buildNumber --- buildNumber.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildNumber.properties b/buildNumber.properties index 98238d14..7871fed4 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,3 @@ #maven.buildNumber.plugin properties file -#Fri Dec 06 17:11:38 CET 2024 -buildNumber0=375 +#Tue Aug 13 08:29:04 GMT 2024 +buildNumber0=373 From f52f13be69c566eda6e1609525e58d2180d8d81c Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 9 Dec 2024 11:39:45 +0100 Subject: [PATCH 071/127] reset buildNumber --- buildNumber.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/buildNumber.properties b/buildNumber.properties index 7871fed4..5dbf6ed6 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,4 @@ #maven.buildNumber.plugin properties file #Tue Aug 13 08:29:04 GMT 2024 buildNumber0=373 + From 257d91467143e8a9981d79ecaa0e96a361f05b5b Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Mon, 9 Dec 2024 15:29:57 +0100 Subject: [PATCH 072/127] CHANGELOG: bump GREL functions to v0.10.0 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94d0745a..be1721f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ to the latest version by the W3C Community Group. - HTTP request targets - dynamic logical targets +### Fixed +- GREL array functions handling. + ## [7.1.2] - 2024-09-19 ### Fixed diff --git a/pom.xml b/pom.xml index be972ba0..c421b664 100644 --- a/pom.xml +++ b/pom.xml @@ -281,7 +281,7 @@ com.github.fnoio grel-functions-java - v0.9.1 + v0.10.0 be.ugent.idlab.knows From bddd6c2e425ab89e13c2fe34970bb2b099604be2 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Mon, 9 Dec 2024 15:46:48 +0100 Subject: [PATCH 073/127] release v7.2.0 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be1721f7..41e3811d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [7.2.0] - 2024-12-09 + ### Added - CLI option `--convert-mapping` to convert your existing R2RML and older RML mappings to the latest version by the W3C Community Group. @@ -761,6 +763,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[7.2.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.2...v7.2.0 [7.1.2]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.1...v7.1.2 [7.1.1]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.0...v7.1.1 [7.1.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.0.0...v7.1.0 diff --git a/pom.xml b/pom.xml index c421b664..d90ec0ce 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 7.1.2 + 7.2.0 The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. From 2e096c848af42d91ffcd335738d17bc18e8a702d Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Mon, 6 Jan 2025 10:40:49 +0000 Subject: [PATCH 074/127] Optimization of Css Client Credentials --- CHANGELOG.md | 4 + src/main/java/be/ugent/rml/NAMESPACES.java | 2 +- .../rml/target/DirectHttpRequestTarget.java | 7 +- .../ugent/rml/target/HttpRequestTarget.java | 6 +- .../rml/target/HttpRequestTargetHelper.java | 238 ++++++++++-------- .../rml/target/LinkedHttpRequestTarget.java | 7 +- .../be/ugent/rml/target/TargetFactory.java | 22 +- .../be/ugent/rml/HttpRequestTargetTest.java | 5 +- .../resources/solid-target/acl1/mapping.ttl | 2 +- .../resources/solid-target/acl2/mapping.ttl | 2 +- .../solid-target/dynamic_solid1/mapping.ttl | 2 +- .../solid-target/dynamic_solid2/mapping.ttl | 2 +- .../solid-target/dynamic_solid3/mapping.ttl | 2 +- .../solid-target/dynamic_solid4/mapping.ttl | 2 +- .../resources/solid-target/solid1/mapping.ttl | 2 +- .../resources/solid-target/solid2/mapping.ttl | 2 +- .../resources/solid-target/solid3/mapping.ttl | 2 +- .../resources/solid-target/solid4/mapping.ttl | 2 +- .../resources/solid-target/solid5/mapping.ttl | 2 +- 19 files changed, 175 insertions(+), 138 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41e3811d..5eae81b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Fixed +- Optimization for authentication with CSS Client Credentials +- Update URI of prefix 'rmle:' to persistent w3id URI: 'https://w3id.org/imec/rml/ns/extensions#' + ## [7.2.0] - 2024-12-09 ### Added diff --git a/src/main/java/be/ugent/rml/NAMESPACES.java b/src/main/java/be/ugent/rml/NAMESPACES.java index 36df0a4b..bb8900f9 100644 --- a/src/main/java/be/ugent/rml/NAMESPACES.java +++ b/src/main/java/be/ugent/rml/NAMESPACES.java @@ -34,6 +34,6 @@ public class NAMESPACES { public static final String COMP = "http://semweb.mmlab.be/ns/rml-compression#"; public static final String LDES = "https://w3id.org/ldes#"; public static final String TREE = "https://w3id.org/tree#"; - public static final String RMLE = "https://rml.io/ns/extensions#"; + public static final String RMLE = "https://w3id.org/imec/rml/ns/extensions#"; } diff --git a/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java b/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java index 68ec0d98..45473648 100644 --- a/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java +++ b/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java @@ -9,8 +9,8 @@ public class DirectHttpRequestTarget extends HttpRequestTarget { - public DirectHttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata) throws IOException { - super(httpRequestInfo, serializationFormat, metadata); + public DirectHttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata, HttpRequestTargetHelper httpRequestTargetHelper) throws IOException { + super(httpRequestInfo, serializationFormat, metadata, httpRequestTargetHelper); } @Override @@ -32,8 +32,7 @@ public String toString() { public void close() { super.close(); try { - HttpRequestTargetHelper helper = new HttpRequestTargetHelper(); - helper.executeHttpRequest(httpRequestInfo); + this.httpRequestTargetHelper.executeHttpRequest(httpRequestInfo); } catch (Exception e) { logger.error("Failed to close http request target for {}: {}", this.httpRequestInfo.get("absoluteURI"), e.getMessage()); diff --git a/src/main/java/be/ugent/rml/target/HttpRequestTarget.java b/src/main/java/be/ugent/rml/target/HttpRequestTarget.java index 4244336a..4c6c2d27 100644 --- a/src/main/java/be/ugent/rml/target/HttpRequestTarget.java +++ b/src/main/java/be/ugent/rml/target/HttpRequestTarget.java @@ -18,7 +18,7 @@ public abstract class HttpRequestTarget implements Target { private final ByteArrayOutputStream byteArrayOutputStream; protected final Logger logger; private final String serializationFormat; - + protected HttpRequestTargetHelper httpRequestTargetHelper; private static final Map serializationFormats = Map.of( "ntriples","application/n-triples", @@ -35,12 +35,14 @@ public abstract class HttpRequestTarget implements Target { * @param serializationFormat String with the serialization format * @param metadata a list of Quads containing metadata */ - public HttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata) { + public HttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata, + HttpRequestTargetHelper httpRequestTargetHelper) { this.httpRequestInfo = httpRequestInfo; this.metadata = metadata; this.serializationFormat = serializationFormat; byteArrayOutputStream = new ByteArrayOutputStream(); this.logger = LoggerFactory.getLogger(HttpRequestTarget.class); + this.httpRequestTargetHelper = httpRequestTargetHelper; } /** diff --git a/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java b/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java index f155171f..4df90a2a 100644 --- a/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java +++ b/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java @@ -19,15 +19,16 @@ import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.List; -import java.util.Map; +import java.util.*; public class HttpRequestTargetHelper { private static final Logger log = LoggerFactory.getLogger(HttpRequestTargetHelper.class); private final EllipticCurveJsonWebKey jwk; private final HttpClient httpClient; + + private Map clientCredentialsStore; + private Map oidcAccessTokenStore; /** * * Constructs a new HttpRequestTargetHelper instance. A new private + public key pair @@ -37,10 +38,12 @@ public class HttpRequestTargetHelper { */ public HttpRequestTargetHelper() throws JoseException { jwk = EcJwkGenerator.generateJwk(EllipticCurves.P256); + this.clientCredentialsStore = new HashMap<>(); // Initialize a HTTP client httpClient = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_1_1) // The Community Solid Server only accepts HTTP 1.1 and complains about upgrade headers if you don't specify this. .build(); + this.oidcAccessTokenStore = new HashMap<>(); } /** @@ -62,116 +65,137 @@ private String getDpopAccessToken(Map httpRequestInfo) throws Ex String email = httpRequestInfo.get("email"); String password = httpRequestInfo.get("password"); - /* Get account controls and retrieve login URL */ - HttpRequest accountInfoRequest = HttpRequest.newBuilder(URI.create(oidcIssuer + ".account/")) - .GET().build(); - HttpResponse accountInfoResponse = httpClient.send(accountInfoRequest, HttpResponse.BodyHandlers.ofString()); - String accountInfoStr = accountInfoResponse.body(); - if (accountInfoResponse.statusCode() != HttpStatus.SC_OK) { - log.error("Could not get account info: {}", accountInfoStr); - throw new Exception("Could not get account info: " + accountInfoStr); - } - JSONObject accountInfo = new JSONObject(accountInfoStr); - String passwordLoginURL = accountInfo.getJSONObject("controls").getJSONObject("password").getString("login"); - log.debug("Found login URL: {}", passwordLoginURL); - - - /* Log in using e-mail and password and get authorization token */ - String loginMessage = "{\"email\": \"" + email + "\",\"password\":\"" + password + "\"}"; - HttpRequest loginRequest = HttpRequest.newBuilder(URI.create(passwordLoginURL)) - .POST(HttpRequest.BodyPublishers.ofString(loginMessage, StandardCharsets.UTF_8)) - .setHeader("Content-Type", "application/json") - .build(); - HttpResponse loginResponse = httpClient.send(loginRequest, HttpResponse.BodyHandlers.ofString()); - String loginInfoStr = loginResponse.body(); - if (loginResponse.statusCode() != HttpStatus.SC_OK) { - log.error("Could not log in: {}", loginInfoStr); - throw new Exception("Could not get log in: " + loginInfoStr); - } - JSONObject loginInfo = new JSONObject(loginInfoStr); - String authorizationToken = loginInfo.getString("authorization"); - log.debug("Found authorization token."); - - - /* Use authorization token to get client credentials URL, added to account info */ - HttpRequest authorizedAccountInfoRequest = HttpRequest.newBuilder(URI.create(oidcIssuer + ".account/")) - .GET() - .setHeader("Authorization", "CSS-Account-Token " + authorizationToken) - .build(); - HttpResponse authorizedAccountInfoResponse = httpClient.send(authorizedAccountInfoRequest, HttpResponse.BodyHandlers.ofString()); - String authorizedAccountInfoStr = authorizedAccountInfoResponse.body(); - if (authorizedAccountInfoResponse.statusCode() != HttpStatus.SC_OK) { - log.error("Could not get account info: {}", authorizedAccountInfoStr); - throw new Exception("Could not get account info: " + authorizedAccountInfoStr); - } - JSONObject authorizedAccountInfo = new JSONObject(authorizedAccountInfoStr); - String clientCredentialsURL = authorizedAccountInfo.getJSONObject("controls").getJSONObject("account").getString("clientCredentials"); - log.debug("Found client credentials URL: {}", clientCredentialsURL); - - - /* Post WebID and token prefix to client credentials URL to get client credentials, to be used at oidc endpoint later on */ - String webIdAndTokenMessage = "{\"name\": \"my-token\",\"webId\":\"" + webId + "\"}"; - HttpRequest getOIDCTokenRequest = HttpRequest.newBuilder(URI.create(clientCredentialsURL)) - .POST(HttpRequest.BodyPublishers.ofString(webIdAndTokenMessage, StandardCharsets.UTF_8)) - .setHeader("Authorization", "CSS-Account-Token " + authorizationToken) - .setHeader("Content-Type", "application/json") - .build(); - HttpResponse getOIDCTokenResponse = httpClient.send(getOIDCTokenRequest, HttpResponse.BodyHandlers.ofString()); - String clientCredentialsStr = getOIDCTokenResponse.body(); - if (getOIDCTokenResponse.statusCode() != HttpStatus.SC_OK) { - log.error("Could not get OpenID Connect token info: {}", clientCredentialsStr); - throw new Exception("Could not get OpenID Connect token info: " + clientCredentialsStr); + String clientCredentialsStr; + if (clientCredentialsStore.containsKey(webId)) { + clientCredentialsStr = clientCredentialsStore.get(webId); + } else { + /* Get account controls and retrieve login URL */ + HttpRequest accountInfoRequest = HttpRequest.newBuilder(URI.create(oidcIssuer + ".account/")) + .GET().build(); + HttpResponse accountInfoResponse = httpClient.send(accountInfoRequest, HttpResponse.BodyHandlers.ofString()); + String accountInfoStr = accountInfoResponse.body(); + if (accountInfoResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not get account info: {}", accountInfoStr); + throw new Exception("Could not get account info: " + accountInfoStr); + } + JSONObject accountInfo = new JSONObject(accountInfoStr); + String passwordLoginURL = accountInfo.getJSONObject("controls").getJSONObject("password").getString("login"); + log.debug("Found login URL: {}", passwordLoginURL); + + + /* Log in using e-mail and password and get authorization token */ + String loginMessage = "{\"email\": \"" + email + "\",\"password\":\"" + password + "\"}"; + HttpRequest loginRequest = HttpRequest.newBuilder(URI.create(passwordLoginURL)) + .POST(HttpRequest.BodyPublishers.ofString(loginMessage, StandardCharsets.UTF_8)) + .setHeader("Content-Type", "application/json") + .build(); + HttpResponse loginResponse = httpClient.send(loginRequest, HttpResponse.BodyHandlers.ofString()); + String loginInfoStr = loginResponse.body(); + if (loginResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not log in: {}", loginInfoStr); + throw new Exception("Could not get log in: " + loginInfoStr); + } + JSONObject loginInfo = new JSONObject(loginInfoStr); + String authorizationToken = loginInfo.getString("authorization"); + log.debug("Found authorization token."); + + + /* Use authorization token to get client credentials URL, added to account info */ + HttpRequest authorizedAccountInfoRequest = HttpRequest.newBuilder(URI.create(oidcIssuer + ".account/")) + .GET() + .setHeader("Authorization", "CSS-Account-Token " + authorizationToken) + .build(); + HttpResponse authorizedAccountInfoResponse = httpClient.send(authorizedAccountInfoRequest, HttpResponse.BodyHandlers.ofString()); + String authorizedAccountInfoStr = authorizedAccountInfoResponse.body(); + if (authorizedAccountInfoResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not get account info: {}", authorizedAccountInfoStr); + throw new Exception("Could not get account info: " + authorizedAccountInfoStr); + } + JSONObject authorizedAccountInfo = new JSONObject(authorizedAccountInfoStr); + String clientCredentialsURL = authorizedAccountInfo.getJSONObject("controls").getJSONObject("account").getString("clientCredentials"); + log.debug("Found client credentials URL: {}", clientCredentialsURL); + + + /* Post WebID and token prefix to client credentials URL to get client credentials, to be used at oidc endpoint later on */ + String webIdAndTokenMessage = "{\"name\": \"my-token\",\"webId\":\"" + webId + "\"}"; + HttpRequest getOIDCTokenRequest = HttpRequest.newBuilder(URI.create(clientCredentialsURL)) + .POST(HttpRequest.BodyPublishers.ofString(webIdAndTokenMessage, StandardCharsets.UTF_8)) + .setHeader("Authorization", "CSS-Account-Token " + authorizationToken) + .setHeader("Content-Type", "application/json") + .build(); + HttpResponse getOIDCTokenResponse = httpClient.send(getOIDCTokenRequest, HttpResponse.BodyHandlers.ofString()); + clientCredentialsStr = getOIDCTokenResponse.body(); + clientCredentialsStore.put(webId, clientCredentialsStr); + if (getOIDCTokenResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not get OpenID Connect token info: {}", clientCredentialsStr); + throw new Exception("Could not get OpenID Connect token info: " + clientCredentialsStr); + } } - JSONObject clientCredentials = new JSONObject(clientCredentialsStr); - String clientCredentialsId = clientCredentials.getString("id"); - log.debug("Found Client credentials. id: {}", clientCredentialsId); - String clientCredentialsSecret = clientCredentials.getString("secret"); - - - /* Get oidc info, used to obtain oidc token endpoints */ - // GET /.well-known/openid-configuration HTTP/1.1 - HttpRequest oidcInfoRequest = HttpRequest.newBuilder(URI.create(oidcIssuer + ".well-known/openid-configuration")) - .GET().build(); - HttpResponse oidcInfoResponse = httpClient.send(oidcInfoRequest, HttpResponse.BodyHandlers.ofString()); - String oidcInfoStr = oidcInfoResponse.body(); - if (oidcInfoResponse.statusCode() != HttpStatus.SC_OK) { - log.error("Could not get OpenID Connect info: {}", oidcInfoStr); - throw new Exception("Could not get OpenID Connect info: " + oidcInfoStr); + String accessTokenStr = null; + Boolean validAccessToken = false; + if (oidcAccessTokenStore.containsKey(webId)) { + JSONObject oidcAccessToken = oidcAccessTokenStore.get(webId); + Long expiresOn = oidcAccessToken.getLong("expires_on"); + Long now = ((new Date().getTime()) / 1000) + 10; //adding some safety margin; + if (now < expiresOn) { + accessTokenStr = oidcAccessToken.getString("access_token"); + validAccessToken = true; + } } - JSONObject oidcInfo = new JSONObject(oidcInfoStr); - String oidcTokenEndpoint = oidcInfo.getString("token_endpoint"); - log.debug("Found oidc token endpoint: {}", oidcTokenEndpoint); - - String dpopJWT = generateJWT(oidcTokenEndpoint, "POST"); - - /* POST a request to oidc token endpoint with client credentials to obtain an oidc access token */ - - // Generate base64 string of client credentials - String clientCredentialsConcatenated = clientCredentialsId + ':' + clientCredentialsSecret; - String base64clientCredentials = Base64.getEncoder().encodeToString(clientCredentialsConcatenated.getBytes(StandardCharsets.UTF_8)); - - HttpRequest getOidcAccessTokenRequest = HttpRequest.newBuilder(URI.create(oidcTokenEndpoint)) - .POST(HttpRequest.BodyPublishers.ofString("grant_type=client_credentials&scope=webid", StandardCharsets.UTF_8)) - .setHeader("Authorization", "Basic " + base64clientCredentials) - .setHeader("Content-Type", "application/x-www-form-urlencoded") - .setHeader("DPoP", dpopJWT) - .build(); - HttpResponse oidcAccessTokenResponse = httpClient.send(getOidcAccessTokenRequest, HttpResponse.BodyHandlers.ofString()); - String oidcAccessTokenStr = oidcAccessTokenResponse.body(); - if (oidcAccessTokenResponse.statusCode() != HttpStatus.SC_OK) { - log.error("Could not get OpenID Connect access token: {}", oidcAccessTokenStr); - throw new Exception("Could not get OpenID Connect info: " + oidcAccessTokenStr); + if (!validAccessToken){ + JSONObject clientCredentials = new JSONObject(clientCredentialsStr); + String clientCredentialsId = clientCredentials.getString("id"); + log.debug("Found Client credentials. id: {}", clientCredentialsId); + String clientCredentialsSecret = clientCredentials.getString("secret"); + + + /* Get oidc info, used to obtain oidc token endpoints */ + // GET /.well-known/openid-configuration HTTP/1.1 + HttpRequest oidcInfoRequest = HttpRequest.newBuilder(URI.create(oidcIssuer + ".well-known/openid-configuration")) + .GET().build(); + HttpResponse oidcInfoResponse = httpClient.send(oidcInfoRequest, HttpResponse.BodyHandlers.ofString()); + String oidcInfoStr = oidcInfoResponse.body(); + if (oidcInfoResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not get OpenID Connect info: {}", oidcInfoStr); + throw new Exception("Could not get OpenID Connect info: " + oidcInfoStr); + } + JSONObject oidcInfo = new JSONObject(oidcInfoStr); + String oidcTokenEndpoint = oidcInfo.getString("token_endpoint"); + log.debug("Found oidc token endpoint: {}", oidcTokenEndpoint); + + String dpopJWT = generateJWT(oidcTokenEndpoint, "POST"); + + /* POST a request to oidc token endpoint with client credentials to obtain an oidc access token */ + + // Generate base64 string of client credentials + String clientCredentialsConcatenated = clientCredentialsId + ':' + clientCredentialsSecret; + String base64clientCredentials = Base64.getEncoder().encodeToString(clientCredentialsConcatenated.getBytes(StandardCharsets.UTF_8)); + + HttpRequest getOidcAccessTokenRequest = HttpRequest.newBuilder(URI.create(oidcTokenEndpoint)) + .POST(HttpRequest.BodyPublishers.ofString("grant_type=client_credentials&scope=webid", StandardCharsets.UTF_8)) + .setHeader("Authorization", "Basic " + base64clientCredentials) + .setHeader("Content-Type", "application/x-www-form-urlencoded") + .setHeader("DPoP", dpopJWT) + .build(); + HttpResponse oidcAccessTokenResponse = httpClient.send(getOidcAccessTokenRequest, HttpResponse.BodyHandlers.ofString()); + String oidcAccessTokenStr = oidcAccessTokenResponse.body(); + if (oidcAccessTokenResponse.statusCode() != HttpStatus.SC_OK) { + log.error("Could not get OpenID Connect access token: {}", oidcAccessTokenStr); + throw new Exception("Could not get OpenID Connect info: " + oidcAccessTokenStr); + } + //oidcAccessToken has keys "access_token" and "expires_in". + // "expires_in is an integer expressed in seconds e.g. 600 + long startDate = ((new Date().getTime()) / 1000); + JSONObject oidcAccessToken = new JSONObject(oidcAccessTokenStr); + oidcAccessToken.put("expires_on", startDate + oidcAccessToken.getInt("expires_in")); + oidcAccessTokenStore.put(webId, oidcAccessToken); + accessTokenStr = oidcAccessToken.getString("access_token"); + // token_type should be 'DPoP' } - JSONObject oidcAccessToken = new JSONObject(oidcAccessTokenStr); - return oidcAccessToken.getString("access_token"); - // token_type should be 'DPoP' - // We don't use 'expires' at the moment because we send the next request immediately - // and don't know if the next request would go to the same server. This can be checked - // for in future implementations. + return accessTokenStr; } catch (Throwable e) { // This is to catch runtime exceptions as well. throw new Exception(e); } - } /** diff --git a/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java b/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java index b4aba4cd..e4cddd9e 100644 --- a/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java +++ b/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java @@ -9,8 +9,8 @@ public class LinkedHttpRequestTarget extends HttpRequestTarget { - public LinkedHttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata) throws IOException { - super(httpRequestInfo, serializationFormat, metadata); + public LinkedHttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata, HttpRequestTargetHelper httpRequestTargetHelper) throws IOException { + super(httpRequestInfo, serializationFormat, metadata, httpRequestTargetHelper); } @Override @@ -34,8 +34,7 @@ public String toString() { public void close() { super.close(); try { - HttpRequestTargetHelper helper = new HttpRequestTargetHelper(); - helper.executeLinkedHttpRequest(httpRequestInfo); + this.httpRequestTargetHelper.executeLinkedHttpRequest(httpRequestInfo); } catch (Exception e) { logger.error("Failed to close http request target linked to {} with link relation {}: {}", this.httpRequestInfo.get("linkingAbsoluteURI"), this.httpRequestInfo.get("linkRelation"), e.getMessage()); diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index 41302310..f8cd7cdd 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -7,6 +7,7 @@ import be.ugent.rml.term.Literal; import be.ugent.rml.term.NamedNode; import be.ugent.rml.term.Term; +import org.jose4j.lang.JoseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -19,12 +20,21 @@ public class TargetFactory { // The path used when local paths are not absolute. private final String basePath; private static final Logger logger = LoggerFactory.getLogger(TargetFactory.class); + // the HttpRequestTargetHelper is instantiated once, in the TargetFactory, because it stores reusable client credentials and access tokens + // it is used only for targets of the type HttpRequest + private HttpRequestTargetHelper httpRequestTargetHelper; /** * The constructor of the TargetFactory. */ public TargetFactory(String basePath) { + this.basePath = basePath; + try { + this.httpRequestTargetHelper = new HttpRequestTargetHelper(); + } catch (JoseException e) { + logger.error("Failed to initialize new HttpRequestTargetHelper: {}", e.getMessage()); + } } private void detectLDESEventStreamTarget(Term logicalTarget, List metadata, QuadStore rmlStore, QuadStore outputStore) { @@ -54,7 +64,7 @@ private void detectLDESEventStreamTarget(Term logicalTarget, List metadata // LDES RDF type EventStream metadata.add(new Quad(ldes_iri, new NamedNode(NAMESPACES.RDF + "type"), - new NamedNode(NAMESPACES.LDES + "EventStream"))); + new NamedNode(NAMESPACES.LDES + "EventStream"))); } catch (IndexOutOfBoundsException e) { logger.debug("No LDES metadata will be generated since no LDES base IRI was specified"); @@ -73,7 +83,7 @@ private void detectLDESEventStreamTarget(Term logicalTarget, List metadata if (ldes_iri != null) { try { Term shape = Utils.getObjectsFromQuads(rmlStore.getQuads(ldes, - new NamedNode(NAMESPACES.TREE + "shape"), null)).get(0); + new NamedNode(NAMESPACES.TREE + "shape"), null)).get(0); logger.debug("SHACL shape: {}", shape.getValue()); // TODO: Handle embedded SHACL shapes in RML mapping rules as well. metadata.add(new Quad(ldes_iri, new NamedNode(NAMESPACES.TREE + "shape"), shape)); @@ -81,7 +91,7 @@ private void detectLDESEventStreamTarget(Term logicalTarget, List metadata logger.debug("No TREE SHACL shape specified for LDES."); } } - + // Optional versionOf path try { versionOfPathObj = Utils.getObjectsFromQuads(rmlStore.getQuads(ldes, @@ -179,7 +189,7 @@ private void detectLDESEventStreamTarget(Term logicalTarget, List metadata List timestampObj = Utils.getObjectsFromQuads(outputStore.getQuads(m, timestampPathObj, null)); if (timestampObj.isEmpty()) { outputStore.addQuad(new Quad(memberIRI, timestampPathObj, - new Literal(Instant.ofEpochMilli(currentTime).toString(), new NamedNode(NAMESPACES.XSD + "dateTime")))); + new Literal(Instant.ofEpochMilli(currentTime).toString(), new NamedNode(NAMESPACES.XSD + "dateTime")))); } else { for (Term v : timestampObj) { outputStore.addQuad(new Quad(memberIRI, timestampPathObj, v)); @@ -349,7 +359,7 @@ else if (location.endsWith(".jsonld")) { Map httpRequestInfo = parseHttpRequest(rmlStore, t); String absoluteURI = getRequiredValue(t,new NamedNode(NAMESPACES.HTV + "absoluteURI"), rmlStore); httpRequestInfo.put("absoluteURI", absoluteURI); - target = new DirectHttpRequestTarget(httpRequestInfo, serializationFormat, metadata); + target = new DirectHttpRequestTarget(httpRequestInfo, serializationFormat, metadata, httpRequestTargetHelper); break; } case NAMESPACES.RMLE + "LinkedHttpRequest": { @@ -359,7 +369,7 @@ else if (location.endsWith(".jsonld")) { String linkRelation = getRequiredValue(t,new NamedNode(NAMESPACES.RMLE + "linkRelation"), rmlStore); httpRequestInfo.put("linkingAbsoluteURI", linkingAbsoluteURI); httpRequestInfo.put("linkRelation", linkRelation); - target = new LinkedHttpRequestTarget(httpRequestInfo, serializationFormat, metadata); + target = new LinkedHttpRequestTarget(httpRequestInfo, serializationFormat, metadata, httpRequestTargetHelper); break; } default: { diff --git a/src/test/java/be/ugent/rml/HttpRequestTargetTest.java b/src/test/java/be/ugent/rml/HttpRequestTargetTest.java index 1f4545af..5e8d8487 100644 --- a/src/test/java/be/ugent/rml/HttpRequestTargetTest.java +++ b/src/test/java/be/ugent/rml/HttpRequestTargetTest.java @@ -137,7 +137,7 @@ void doMappingSolid(String mapPath, String[] absoluteURIs, String[] outPaths, St int i = 0; while (i < absoluteURIs.length) { Map solidTargetInfo = getHttpRequestInfo(users[i], absoluteURIs[i], "GET"); - compareResourceWithOutput(outPaths[i], solidTargetInfo); + compareResourceWithOutput(outPaths[i], solidTargetInfo, helper); helper.executeHttpRequest(getHttpRequestInfo("user1", absoluteURIs[i], "DELETE")); i++; } @@ -156,9 +156,8 @@ private Map getHttpRequestInfo(String user, String absoluteURI, return httpRequestInfo; } - private void compareResourceWithOutput(String outPath, Map httpRequestInfo) throws Exception { + private void compareResourceWithOutput(String outPath, Map httpRequestInfo, HttpRequestTargetHelper helper) throws Exception { // retrieve resource from solid pod - HttpRequestTargetHelper helper = new HttpRequestTargetHelper(); httpRequestInfo.put("methodName", "GET"); String response = helper.executeHttpRequest(httpRequestInfo); InputStream responseStream = new ByteArrayInputStream(response.getBytes()); diff --git a/src/test/resources/solid-target/acl1/mapping.ttl b/src/test/resources/solid-target/acl1/mapping.ttl index eaf55350..6835a56d 100644 --- a/src/test/resources/solid-target/acl1/mapping.ttl +++ b/src/test/resources/solid-target/acl1/mapping.ttl @@ -9,7 +9,7 @@ @prefix rmlt: . @prefix formats: . @prefix acl: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . @prefix void: . diff --git a/src/test/resources/solid-target/acl2/mapping.ttl b/src/test/resources/solid-target/acl2/mapping.ttl index b596c51f..90987b81 100644 --- a/src/test/resources/solid-target/acl2/mapping.ttl +++ b/src/test/resources/solid-target/acl2/mapping.ttl @@ -9,7 +9,7 @@ @prefix rmlt: . @prefix formats: . @prefix acl: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . @prefix void: . diff --git a/src/test/resources/solid-target/dynamic_solid1/mapping.ttl b/src/test/resources/solid-target/dynamic_solid1/mapping.ttl index 0cf6b783..b53de112 100644 --- a/src/test/resources/solid-target/dynamic_solid1/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid1/mapping.ttl @@ -9,7 +9,7 @@ @prefix rmlt: . @prefix formats: . @prefix acl: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . a rml:LogicalSource; diff --git a/src/test/resources/solid-target/dynamic_solid2/mapping.ttl b/src/test/resources/solid-target/dynamic_solid2/mapping.ttl index 73c82c8f..2a5b8846 100644 --- a/src/test/resources/solid-target/dynamic_solid2/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid2/mapping.ttl @@ -9,7 +9,7 @@ @prefix rmlt: . @prefix formats: . @prefix acl: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . a rml:LogicalSource; diff --git a/src/test/resources/solid-target/dynamic_solid3/mapping.ttl b/src/test/resources/solid-target/dynamic_solid3/mapping.ttl index b45fec64..484a9d98 100644 --- a/src/test/resources/solid-target/dynamic_solid3/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid3/mapping.ttl @@ -9,7 +9,7 @@ @prefix rmlt: . @prefix formats: . @prefix acl: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . a rml:LogicalSource; diff --git a/src/test/resources/solid-target/dynamic_solid4/mapping.ttl b/src/test/resources/solid-target/dynamic_solid4/mapping.ttl index da2d4bf7..04b7f2e6 100644 --- a/src/test/resources/solid-target/dynamic_solid4/mapping.ttl +++ b/src/test/resources/solid-target/dynamic_solid4/mapping.ttl @@ -7,7 +7,7 @@ @prefix rmlt: . @prefix formats: . @prefix acl: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . @base . diff --git a/src/test/resources/solid-target/solid1/mapping.ttl b/src/test/resources/solid-target/solid1/mapping.ttl index c50b0d38..a0c53897 100644 --- a/src/test/resources/solid-target/solid1/mapping.ttl +++ b/src/test/resources/solid-target/solid1/mapping.ttl @@ -8,7 +8,7 @@ @prefix ex: . @prefix rmlt: . @prefix formats: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . a rr:TriplesMap; diff --git a/src/test/resources/solid-target/solid2/mapping.ttl b/src/test/resources/solid-target/solid2/mapping.ttl index d52ec2d9..955a0a36 100644 --- a/src/test/resources/solid-target/solid2/mapping.ttl +++ b/src/test/resources/solid-target/solid2/mapping.ttl @@ -9,7 +9,7 @@ @prefix rmlt: . @prefix formats: . @prefix acl: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . a rr:TriplesMap; diff --git a/src/test/resources/solid-target/solid3/mapping.ttl b/src/test/resources/solid-target/solid3/mapping.ttl index 6060a101..54e5b1c7 100644 --- a/src/test/resources/solid-target/solid3/mapping.ttl +++ b/src/test/resources/solid-target/solid3/mapping.ttl @@ -9,7 +9,7 @@ @prefix rmlt: . @prefix formats: . @prefix acl: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . a rr:TriplesMap; diff --git a/src/test/resources/solid-target/solid4/mapping.ttl b/src/test/resources/solid-target/solid4/mapping.ttl index 9188ee53..8e6f0e39 100644 --- a/src/test/resources/solid-target/solid4/mapping.ttl +++ b/src/test/resources/solid-target/solid4/mapping.ttl @@ -9,7 +9,7 @@ @prefix rmlt: . @prefix formats: . @prefix acl: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . a rr:TriplesMap; diff --git a/src/test/resources/solid-target/solid5/mapping.ttl b/src/test/resources/solid-target/solid5/mapping.ttl index 30b6d494..9319e310 100644 --- a/src/test/resources/solid-target/solid5/mapping.ttl +++ b/src/test/resources/solid-target/solid5/mapping.ttl @@ -9,7 +9,7 @@ @prefix rmlt: . @prefix formats: . @prefix acl: . -@prefix rmle: . +@prefix rmle: . @prefix htv: . a rr:TriplesMap; From 74d3a894f14a7c5a497d56fc5fc42e892dbe29d2 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 9 Jan 2025 12:22:26 +0100 Subject: [PATCH 075/127] Add content types for newline delimited JSON. --- CHANGELOG.md | 3 +++ src/main/java/be/ugent/rml/records/JSONRecordFactory.java | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5eae81b0..01a2bddc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,9 @@ to the latest version by the W3C Community Group. ### Fixed - GREL array functions handling. +### Fixed +- Added all known content types for newline delimited JSON + ## [7.1.2] - 2024-09-19 ### Fixed diff --git a/src/main/java/be/ugent/rml/records/JSONRecordFactory.java b/src/main/java/be/ugent/rml/records/JSONRecordFactory.java index caaea890..28785110 100644 --- a/src/main/java/be/ugent/rml/records/JSONRecordFactory.java +++ b/src/main/java/be/ugent/rml/records/JSONRecordFactory.java @@ -10,7 +10,10 @@ public class JSONRecordFactory extends IteratorFormat { @Override protected SourceIterator getIterator(Access access, String iterator) throws Exception { String contentType = access.getContentType(); - if (contentType.equals("jsonl") || contentType.equals("application/jsonl")) { + if (contentType.equals("jsonl") + || contentType.equals("application/jsonl") + || contentType.equals("x-ld+ndjson") + || contentType.equals("application/x-ld+ndjson")) { return new JSONLinesSourceIterator(access, iterator); } return new JSONSourceIterator(access, iterator); From 2edea372767df0055883fe96cd9a6b2d8c4d5b90 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 9 Jan 2025 12:23:39 +0100 Subject: [PATCH 076/127] Change testcontainers log level to WARN --- src/test/resources/logback-test.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml index 2e03584c..8ace9e8a 100644 --- a/src/test/resources/logback-test.xml +++ b/src/test/resources/logback-test.xml @@ -11,6 +11,6 @@ - + From 24caa9f30e45aa5fa0c3e691a6edca3fe594ed54 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 9 Jan 2025 13:21:40 +0100 Subject: [PATCH 077/127] Remove javax.annotation.Nonnull annotation because not all javax implementations know this causing code to not compile. --- src/main/java/be/ugent/rml/MappingInfo.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/main/java/be/ugent/rml/MappingInfo.java b/src/main/java/be/ugent/rml/MappingInfo.java index a35566d3..506e6c34 100644 --- a/src/main/java/be/ugent/rml/MappingInfo.java +++ b/src/main/java/be/ugent/rml/MappingInfo.java @@ -3,7 +3,6 @@ import be.ugent.rml.term.Term; import be.ugent.rml.termgenerator.TermGenerator; -import javax.annotation.Nonnull; import java.util.Collections; import java.util.List; @@ -11,27 +10,21 @@ public class MappingInfo { private final Term term; private final TermGenerator termGenerator; private final List targets; - private List targetGenerators; + private final List targetGenerators; - public MappingInfo(@Nonnull Term term, @Nonnull TermGenerator termGenerator, @Nonnull List targets, List targetGenerators) { + public MappingInfo(Term term, TermGenerator termGenerator, List targets, List targetGenerators) { this.term = term; this.termGenerator = termGenerator; this.targets = targets; this.targetGenerators = targetGenerators; } - public MappingInfo(@Nonnull Term term, @Nonnull TermGenerator termGenerator) { - this.term = term; - this.termGenerator = termGenerator; - this.targets = Collections.emptyList(); - this.targetGenerators = Collections.emptyList(); + public MappingInfo(Term term, TermGenerator termGenerator) { + this(term, termGenerator, Collections.emptyList(), Collections.emptyList()); } - public MappingInfo(@Nonnull Term term, @Nonnull List targets, List targetGenerators) { - this.term = term; - this.termGenerator = null; - this.targets = targets; - this.targetGenerators = targetGenerators; + public MappingInfo(Term term, List targets, List targetGenerators) { + this(term, null, targets, targetGenerators); } public Term getTerm() { From 13a3f5451426d1affad86083a710ede41a240cf7 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 9 Jan 2025 13:41:17 +0100 Subject: [PATCH 078/127] Update to DataIO 2.0.0 This is implies a breaking change, updated dependencies an test fixes. - Forced certain versions of Apache commons libraries to avoid runtime errors caused by libraries all using different versions. - Use more recent version 3.9.1 of Wiremock, hosted on Maven Central instead of Jitpack *and* using jetty 12. More recent version 3.10.0 still contains bugs. - ArgumentsTest#outputJSON: fix check on output log because JSON output slightly changed (but compatible). - Some tests are changed because record error handling has changed. - Inconsistencies in test case RMLTC0007h (mapping + all formats) and RMLTC0009a (JSON) --- CHANGELOG.md | 13 ++ pom.xml | 131 +++++++++++------- .../java/be/ugent/rml/MappingFactory.java | 14 +- .../java/be/ugent/rml/MappingOptimizer.java | 2 +- .../rml/RecordFunctionExecutorFactory.java | 6 +- src/main/java/be/ugent/rml/Utils.java | 4 +- .../ugent/rml/conformer/RMLConverterNew.java | 1 - .../rml/extractor/ReferenceExtractor.java | 29 +++- .../be/ugent/rml/records/MarkerRecord.java | 5 +- src/test/java/be/ugent/rml/ArgumentsTest.java | 2 +- src/test/java/be/ugent/rml/MapperCSVTest.java | 2 +- .../java/be/ugent/rml/MapperEXCELTest.java | 4 +- .../java/be/ugent/rml/MapperJSONTest.java | 2 +- .../be/ugent/rml/MapperMySQLR2RMLTest.java | 2 +- .../java/be/ugent/rml/MapperMySQLTest.java | 4 +- .../be/ugent/rml/MapperNewRMLCoreCSVTest.java | 2 +- .../ugent/rml/MapperNewRMLCoreMySQLTest.java | 8 +- .../rml/MapperNewRMLCorePostgresTest.java | 2 +- src/test/java/be/ugent/rml/MapperODSTest.java | 4 +- .../be/ugent/rml/MapperPostgresCSVTest.java | 2 +- .../be/ugent/rml/MapperPostgresR2RMLTest.java | 2 +- .../java/be/ugent/rml/MapperSPARQLTest.java | 14 +- .../be/ugent/rml/MapperSQLServerTest.java | 2 +- .../java/be/ugent/rml/OptimizationsTest.java | 4 +- .../core/RMLTC0007h-CSV/mapping.ttl | 4 +- .../core/RMLTC0007h-JSON/mapping.ttl | 4 +- .../core/RMLTC0007h-MySQL/mapping.ttl | 4 +- .../core/RMLTC0007h-PostgreSQL/mapping.ttl | 4 +- .../core/RMLTC0007h-SPARQL/mapping.ttl | 4 +- .../core/RMLTC0007h-SQLServer/mapping.ttl | 4 +- .../core/RMLTC0007h-XML/mapping.ttl | 4 +- .../core/RMLTC0009a-JSON/student.json | 1 + .../core/RMLTC0009b-JSON/student.json | 1 + .../test-cases/RMLTC0007h-CSV/mapping.ttl | 6 +- .../test-cases/RMLTC0007h-CSV/student.csv | 4 +- .../test-cases/RMLTC0007h-EXCEL/mapping.ttl | 4 +- .../test-cases/RMLTC0007h-JSON/mapping.ttl | 6 +- .../test-cases/RMLTC0007h-JSON/student.json | 3 +- .../test-cases/RMLTC0007h-MySQL/mapping.ttl | 6 +- .../test-cases/RMLTC0007h-MySQL/resource.sql | 5 +- .../test-cases/RMLTC0007h-ODS/mapping.ttl | 4 +- .../RMLTC0007h-PostgreSQL/mapping.ttl | 6 +- .../RMLTC0007h-PostgreSQL/resource.sql | 5 +- .../test-cases/RMLTC0007h-SPARQL/mapping.ttl | 4 +- .../RMLTC0007h-SQLServer/mapping.ttl | 4 +- .../RMLTC0007h-SQLServer/resource.sql | 6 +- .../test-cases/RMLTC0007h-XML/mapping.ttl | 6 +- .../test-cases/RMLTC0007h-XML/student.xml | 3 +- .../test-cases/RMLTC0009a-JSON/student.json | 1 + .../test-cases/RMLTC0009b-JSON/student.json | 1 + 50 files changed, 222 insertions(+), 143 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01a2bddc..0b64bc6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,11 +7,16 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +<<<<<<< HEAD ### Fixed - Optimization for authentication with CSS Client Credentials - Update URI of prefix 'rmle:' to persistent w3id URI: 'https://w3id.org/imec/rml/ns/extensions#' ## [7.2.0] - 2024-12-09 +======= +### Changed +- Some tests are changed because record error handling has changed. +>>>>>>> da10cd7c (Update to DataIO 2.0.0) ### Added - CLI option `--convert-mapping` to convert your existing R2RML and older RML mappings @@ -24,6 +29,14 @@ to the latest version by the W3C Community Group. ### Fixed - Added all known content types for newline delimited JSON +- Updated all Jena library dependencies to version 5.0.0 +- Added explicit dependencies on commons-io:2.18.0, commons-compress-1.27.1 and commons-lang3:3.17.0 to avoid runtime errors. +- Updated rdf4j-client to 5.1.0 +- Updated wiremock to 3.9.1 (3.10.0 contains bugs in combination with saxon). +- Updated grel-functions-java to v0.10.0 +- Updated dataio to 2.0.0, *the* reason for most changes ;) +- Updated testcontainers to 1.18.3 +- Inconsistencies in test case RMLTC0007h (mapping + all formats) and RMLTC0009a (JSON) ## [7.1.2] - 2024-09-19 diff --git a/pom.xml b/pom.xml index d90ec0ce..883165d1 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ 5.10.0 17 17 - 4.9.0 + 5.0.0 1.18.3 @@ -150,15 +150,44 @@ logback-classic 1.4.14 + + + + commons-io + commons-io + 2.18.0 + + + + org.apache.commons + commons-compress + 1.27.1 + + + + org.apache.commons + commons-lang3 + 3.17.0 + + + org.eclipse.rdf4j rdf4j-client - 4.3.8 + 5.1.0 pom - org.mapdb - * + commons-io + commons-io + + + commons-codec + commons-codec + + + com.opencsv + opencsv @@ -204,59 +233,22 @@ 1.4.5 - com.mysql - mysql-connector-j - 8.2.0 - provided - - - org.postgresql - postgresql - 42.6.0 - provided - - - - com.microsoft.sqlserver - mssql-jdbc - 12.4.2.jre11 - provided - - - com.oracle.database.jdbc - ojdbc11 - 23.3.0.23.09 - provided - - - com.github.tomakehurst - wiremock-jre8 - 2.35.1 + org.wiremock + wiremock-jetty12 + 3.9.1 test - - - commons-fileupload - commons-fileupload - - org.apache.jena jena-fuseki-main ${jena.version} test - org.rdfhdt hdt-java-core 3.0.10 - + org.apache.jena * @@ -265,6 +257,10 @@ junit * + + org.apache.commons + commons-compress + @@ -282,16 +278,42 @@ com.github.fnoio grel-functions-java v0.10.0 + + + org.apache.commons + commons-text + + + commons-codec + commons-codec + + be.ugent.idlab.knows idlab-functions-java 1.3.3 + + + org.apache.commons + commons-lang3 + + + org.apache.commons + commons-text + + be.ugent.idlab.knows dataio - 1.3.1 + 2.0.0 + + + org.apache.commons + commons-lang3 + + org.bitbucket.b_c @@ -345,8 +367,23 @@ org.testcontainers testcontainers - 1.17.6 + ${testcontainers.version} compile + + + org.apache.commons + commons-compress + + + commons-io + commons-io + + + org.apache.commons + commons-lang3 + + + diff --git a/src/main/java/be/ugent/rml/MappingFactory.java b/src/main/java/be/ugent/rml/MappingFactory.java index e145fbaf..774e275d 100644 --- a/src/main/java/be/ugent/rml/MappingFactory.java +++ b/src/main/java/be/ugent/rml/MappingFactory.java @@ -97,7 +97,7 @@ private void parseSubjectMap() throws Exception { if (functionValues.isEmpty()) { //checking if we are dealing with a Blank Node as subject if (isBlankNode) { - SingleRecordFunctionExecutor executor = RecordFunctionExecutorFactory.generate(store, subjectmap, true, ignoreDoubleQuotes); + SingleRecordFunctionExecutor executor = RecordFunctionExecutorFactory.generate(store, subjectmap, true, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)); if (executor != null) { generator = new BlankNodeGenerator(executor); @@ -106,7 +106,7 @@ private void parseSubjectMap() throws Exception { } } else { //we are not dealing with a Blank Node, so we create the template - generator = new NamedNodeGenerator(RecordFunctionExecutorFactory.generate(store, subjectmap, true, ignoreDoubleQuotes), baseIRI, strictMode); + generator = new NamedNodeGenerator(RecordFunctionExecutorFactory.generate(store, subjectmap, true, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)), baseIRI, strictMode); } } else { SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0)); @@ -224,7 +224,7 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer parseGraphMapsAndShortcuts(Term termMap) throws Except TermGenerator generator; if (functionValues.isEmpty()) { - SingleRecordFunctionExecutor executor = RecordFunctionExecutorFactory.generate(store, graphMap, true, ignoreDoubleQuotes); + SingleRecordFunctionExecutor executor = RecordFunctionExecutorFactory.generate(store, graphMap, true, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)); if (termType == null || termType.equals(new NamedNode(NAMESPACES.RML2 + "IRI"))) { generator = new NamedNodeGenerator(executor, baseIRI, strictMode); @@ -428,7 +428,7 @@ private List parsePredicateMapsAndShortcuts(Term termMap) throws IO if (functionValues.isEmpty()) { predicateMappingInfos.add(new MappingInfo(predicateMap, - new NamedNodeGenerator(RecordFunctionExecutorFactory.generate(store, predicateMap, false, ignoreDoubleQuotes), baseIRI, strictMode), + new NamedNodeGenerator(RecordFunctionExecutorFactory.generate(store, predicateMap, false, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)), baseIRI, strictMode), targets, targetGenerators)); } else { SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0)); @@ -552,7 +552,7 @@ private List getLanguageExecutorsForObjectMap(Term List functionValues = getObjectsFromQuads(store.getQuads(languageMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); if (functionValues.isEmpty()) { - executors.add(RecordFunctionExecutorFactory.generate(store, languageMap, false, ignoreDoubleQuotes)); + executors.add(RecordFunctionExecutorFactory.generate(store, languageMap, false, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT))); } else { executors.add(parseFunctionTermMap(functionValues.get(0))); } diff --git a/src/main/java/be/ugent/rml/MappingOptimizer.java b/src/main/java/be/ugent/rml/MappingOptimizer.java index 1057b2a9..70be3760 100644 --- a/src/main/java/be/ugent/rml/MappingOptimizer.java +++ b/src/main/java/be/ugent/rml/MappingOptimizer.java @@ -163,7 +163,7 @@ private Set getAllLinkedReferences(Term term){ references.add(linkedQuad.getObject().getValue()); } else if (predicate.equals(new NamedNode(NAMESPACES.RML2 + "template"))) { String template = linkedQuad.getObject().getValue(); - List extractors = Utils.parseTemplate(template, false); + List extractors = Utils.parseTemplate(template, false, false); for (Extractor extractor : extractors) { if (extractor instanceof ReferenceExtractor) { references.add(((ReferenceExtractor) extractor).getReference()); diff --git a/src/main/java/be/ugent/rml/RecordFunctionExecutorFactory.java b/src/main/java/be/ugent/rml/RecordFunctionExecutorFactory.java index c6b7b462..4d112a92 100644 --- a/src/main/java/be/ugent/rml/RecordFunctionExecutorFactory.java +++ b/src/main/java/be/ugent/rml/RecordFunctionExecutorFactory.java @@ -12,15 +12,15 @@ public class RecordFunctionExecutorFactory { - public static SingleRecordFunctionExecutor generate(QuadStore store, Term termMap, boolean encodeURI, boolean ignoreDoubleQuotes) { + public static SingleRecordFunctionExecutor generate(QuadStore store, Term termMap, boolean encodeURI, boolean ignoreDoubleQuotes, boolean strictReferenceResolution) { List references = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "reference"), null)); List templates = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "template"), null)); List constants = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "constant"), null)); if (!references.isEmpty()) { - return new ReferenceExtractor(references.get(0).getValue(), ignoreDoubleQuotes); + return new ReferenceExtractor(references.get(0).getValue(), ignoreDoubleQuotes, strictReferenceResolution); } else if (!templates.isEmpty()) { - return new ConcatFunction(Utils.parseTemplate(templates.get(0).getValue(), ignoreDoubleQuotes), encodeURI); + return new ConcatFunction(Utils.parseTemplate(templates.get(0).getValue(), ignoreDoubleQuotes, strictReferenceResolution), encodeURI); } else if (!constants.isEmpty()) { return new ConstantExtractor(constants.get(0).getValue()); } else { diff --git a/src/main/java/be/ugent/rml/Utils.java b/src/main/java/be/ugent/rml/Utils.java index 292c5bec..f1723e73 100644 --- a/src/main/java/be/ugent/rml/Utils.java +++ b/src/main/java/be/ugent/rml/Utils.java @@ -480,7 +480,7 @@ public static int getFreePortNumber() throws IOException { * @param template template string * @return list of extractors **/ - public static List parseTemplate(String template, boolean ignoreDoubleQuotes) { + public static List parseTemplate(String template, boolean ignoreDoubleQuotes, boolean strictReferenceResolution) { List extractors = new ArrayList<>(); String current = ""; boolean previousWasBackslash = false; @@ -509,7 +509,7 @@ public static List parseTemplate(String template, boolean ignoreDoubl current += c; previousWasBackslash = false; } else if (variableBusy) { - extractors.add(new ReferenceExtractor(current, ignoreDoubleQuotes)); + extractors.add(new ReferenceExtractor(current, ignoreDoubleQuotes, strictReferenceResolution)); current = ""; variableBusy = false; } else { diff --git a/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java b/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java index 0236dde8..eccdf5b9 100644 --- a/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java +++ b/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java @@ -61,7 +61,6 @@ public class RMLConverterNew implements Converter { put(RR + "defaultGraph", RML2 + "defaultGraph"); put(RML + "LanguageMap", RML2 + "LanguageMap"); put(RMLT + "LogicalTarget", RML2 + "LogicalTarget"); - put(RR + "GraphMap", RML2 + "GraphMap"); put(RMLT + "Target", RML2 + "Target"); }}; diff --git a/src/main/java/be/ugent/rml/extractor/ReferenceExtractor.java b/src/main/java/be/ugent/rml/extractor/ReferenceExtractor.java index 31877cfe..22f1d2ac 100644 --- a/src/main/java/be/ugent/rml/extractor/ReferenceExtractor.java +++ b/src/main/java/be/ugent/rml/extractor/ReferenceExtractor.java @@ -1,23 +1,24 @@ package be.ugent.rml.extractor; import be.ugent.idlab.knows.dataio.record.Record; +import be.ugent.idlab.knows.dataio.record.RecordValue; import be.ugent.rml.functions.SingleRecordFunctionExecutor; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; public class ReferenceExtractor implements Extractor, SingleRecordFunctionExecutor { public String reference; - private boolean ignoreDoubleQuotes; + private final boolean ignoreDoubleQuotes; + private final boolean strictReferenceResolution; - public ReferenceExtractor(String reference, boolean ignoreDoubleQuotes) { + public ReferenceExtractor(String reference, boolean ignoreDoubleQuotes, boolean strictReferenceResolution) { this.reference = reference; this.ignoreDoubleQuotes = ignoreDoubleQuotes; - } - - public ReferenceExtractor(String reference) { - this(reference, false); + this.strictReferenceResolution = strictReferenceResolution; } @Override @@ -28,7 +29,21 @@ public List extract(Record record) { temp = temp.substring(1, temp.length() - 1); } - return record.get(temp); + RecordValue recordValue = record.get(temp); + + if (recordValue.isOk()) { + Object value = recordValue.getValue(); + if (value instanceof Iterable) { + return new ArrayList<>((Collection) value); + } else { + return List.of(value); + } + } else if (recordValue.isEmpty() || + recordValue.isNotFound() && !strictReferenceResolution) { + return List.of(); + } else { + throw new IllegalArgumentException(recordValue.getMessage()); + } } @Override diff --git a/src/main/java/be/ugent/rml/records/MarkerRecord.java b/src/main/java/be/ugent/rml/records/MarkerRecord.java index 6f96c776..5a31d36e 100644 --- a/src/main/java/be/ugent/rml/records/MarkerRecord.java +++ b/src/main/java/be/ugent/rml/records/MarkerRecord.java @@ -1,6 +1,7 @@ package be.ugent.rml.records; import be.ugent.idlab.knows.dataio.record.Record; +import be.ugent.idlab.knows.dataio.record.RecordValue; import be.ugent.knows.idlabFunctions.IDLabFunctions; import java.util.Collections; @@ -19,7 +20,7 @@ public class MarkerRecord extends Record { * @return a list of objects for the column. */ @Override - public List get(String value) { - return marker; + public RecordValue get(String value) { + return RecordValue.ok(marker); } } diff --git a/src/test/java/be/ugent/rml/ArgumentsTest.java b/src/test/java/be/ugent/rml/ArgumentsTest.java index 3f0e5490..e31327d8 100644 --- a/src/test/java/be/ugent/rml/ArgumentsTest.java +++ b/src/test/java/be/ugent/rml/ArgumentsTest.java @@ -300,7 +300,7 @@ public void outputJSON() throws Exception { byte[] encoded = Files.readAllBytes(Paths.get(actualJSONPath)); String content = new String(encoded, StandardCharsets.UTF_8); - assertTrue(content.contains("\"http://xmlns.com/foaf/0.1/name\" : [")); + assertTrue(content.contains("\"http://xmlns.com/foaf/0.1/name\": [")); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/test/java/be/ugent/rml/MapperCSVTest.java b/src/test/java/be/ugent/rml/MapperCSVTest.java index bae4952f..f8052a47 100644 --- a/src/test/java/be/ugent/rml/MapperCSVTest.java +++ b/src/test/java/be/ugent/rml/MapperCSVTest.java @@ -35,7 +35,7 @@ public void evaluate_0002b_CSV() { @Test public void evaluate_0002c_CSV() { - doMappingExpectError("./test-cases/RMLTC0002c-CSV/mapping.ttl"); + doMappingExpectError("./test-cases/RMLTC0002c-CSV/mapping.ttl", StrictMode.STRICT); } @Test diff --git a/src/test/java/be/ugent/rml/MapperEXCELTest.java b/src/test/java/be/ugent/rml/MapperEXCELTest.java index 0c65b184..bb3c6ceb 100644 --- a/src/test/java/be/ugent/rml/MapperEXCELTest.java +++ b/src/test/java/be/ugent/rml/MapperEXCELTest.java @@ -30,7 +30,7 @@ public void evaluate_0002b_EXCEL() { @Test public void evaluate_0002c_EXCEL() { - doMapping("./test-cases/RMLTC0002c-EXCEL/mapping.ttl", "./test-cases/RMLTC0002c-EXCEL/output.nq"); + doMappingExpectError("./test-cases/RMLTC0002c-EXCEL/mapping.ttl", StrictMode.STRICT); } @Test @@ -100,7 +100,7 @@ public void evaluate_0007g_EXCEL() { @Test public void evaluate_0007h_EXCEL() { - doMapping("./test-cases/RMLTC0007h-EXCEL/mapping.ttl", "./test-cases/RMLTC0007h-EXCEL/output.nq"); + doMappingExpectError("./test-cases/RMLTC0007h-EXCEL/mapping.ttl"); } @Test diff --git a/src/test/java/be/ugent/rml/MapperJSONTest.java b/src/test/java/be/ugent/rml/MapperJSONTest.java index 3b1feb10..19066c1f 100644 --- a/src/test/java/be/ugent/rml/MapperJSONTest.java +++ b/src/test/java/be/ugent/rml/MapperJSONTest.java @@ -41,7 +41,7 @@ public void evaluate_0002b_JSON() { @Test public void evaluate_0002c_JSON() { - doMapping("./test-cases/RMLTC0002c-JSON/mapping.ttl", "./test-cases/RMLTC0002c-JSON/output.nq"); + doMappingExpectError("./test-cases/RMLTC0002c-JSON/mapping.ttl", StrictMode.STRICT); } @Test diff --git a/src/test/java/be/ugent/rml/MapperMySQLR2RMLTest.java b/src/test/java/be/ugent/rml/MapperMySQLR2RMLTest.java index b2ce20c2..fc851510 100644 --- a/src/test/java/be/ugent/rml/MapperMySQLR2RMLTest.java +++ b/src/test/java/be/ugent/rml/MapperMySQLR2RMLTest.java @@ -30,7 +30,7 @@ public static Stream data() { Arguments.of("R2RMLTC0001b", false, BOTH), Arguments.of("R2RMLTC0002a", false, BOTH), Arguments.of("R2RMLTC0002b", false, BOTH), - Arguments.of("R2RMLTC0002c", true, BOTH), + Arguments.of("R2RMLTC0002c", true, STRICT_ONLY), Arguments.of("R2RMLTC0002d", false, BOTH), Arguments.of("R2RMLTC0002e", true, BOTH), //Arguments.of("R2RMLTC0002f", true, BOTH), Issue #189: excluded due to non-compliance: diff --git a/src/test/java/be/ugent/rml/MapperMySQLTest.java b/src/test/java/be/ugent/rml/MapperMySQLTest.java index b852e569..c2eb4ab8 100644 --- a/src/test/java/be/ugent/rml/MapperMySQLTest.java +++ b/src/test/java/be/ugent/rml/MapperMySQLTest.java @@ -27,12 +27,12 @@ static Stream data() { Arguments.of("RMLTC0001b", false, BOTH), Arguments.of("RMLTC0002a", false, BOTH), Arguments.of("RMLTC0002b", false, BOTH), - Arguments.of("RMLTC0002c", true, BOTH), + Arguments.of("RMLTC0002c", true, STRICT_ONLY), Arguments.of("RMLTC0002d", false, BOTH), Arguments.of("RMLTC0002e", true, BOTH), //Arguments.of("RMLTC0002f", false, TestMode.BOTH), Arguments.of("RMLTC0002g", true, BOTH), - Arguments.of("RMLTC0002h", true, BOTH), + Arguments.of("RMLTC0002h", true, STRICT_ONLY), Arguments.of("RMLTC0002i", false, BOTH), Arguments.of("RMLTC0002j", false, BOTH), Arguments.of("RMLTC0002k", false, BOTH), diff --git a/src/test/java/be/ugent/rml/MapperNewRMLCoreCSVTest.java b/src/test/java/be/ugent/rml/MapperNewRMLCoreCSVTest.java index 9eb589e9..bedc37e5 100644 --- a/src/test/java/be/ugent/rml/MapperNewRMLCoreCSVTest.java +++ b/src/test/java/be/ugent/rml/MapperNewRMLCoreCSVTest.java @@ -30,7 +30,7 @@ public void evaluate_new_0002b_CSV() { @Test public void evaluate_new_0002c_CSV() { - doMappingExpectError("./new-test-cases/core/RMLTC0002c-CSV/mapping.ttl"); + doMappingExpectError("./new-test-cases/core/RMLTC0002c-CSV/mapping.ttl", StrictMode.STRICT); } @Test diff --git a/src/test/java/be/ugent/rml/MapperNewRMLCoreMySQLTest.java b/src/test/java/be/ugent/rml/MapperNewRMLCoreMySQLTest.java index 7200c2b5..b50fcfff 100644 --- a/src/test/java/be/ugent/rml/MapperNewRMLCoreMySQLTest.java +++ b/src/test/java/be/ugent/rml/MapperNewRMLCoreMySQLTest.java @@ -27,14 +27,14 @@ static Stream data() { Arguments.of("RMLTC0001b", false, BOTH), Arguments.of("RMLTC0002a", false, BOTH), Arguments.of("RMLTC0002b", false, BOTH), - Arguments.of("RMLTC0002c", true, BOTH), + Arguments.of("RMLTC0002c", true, STRICT_ONLY), Arguments.of("RMLTC0002d", false, BOTH), Arguments.of("RMLTC0002e", true, BOTH), Arguments.of("RMLTC0002g", true, BOTH), - Arguments.of("RMLTC0002h", true, BOTH), - Arguments.of("RMLTC0002i", true, BOTH), + Arguments.of("RMLTC0002h", true, STRICT_ONLY), + Arguments.of("RMLTC0002i", true, STRICT_ONLY), Arguments.of("RMLTC0002j", true, BOTH), - Arguments.of("RMLTC0003a", true, BOTH), + Arguments.of("RMLTC0003a", true, STRICT_ONLY), Arguments.of("RMLTC0003b", false, BOTH), Arguments.of("RMLTC0003c", false, BOTH), Arguments.of("RMLTC0004a", false, BOTH), diff --git a/src/test/java/be/ugent/rml/MapperNewRMLCorePostgresTest.java b/src/test/java/be/ugent/rml/MapperNewRMLCorePostgresTest.java index f906522f..acd20c2f 100644 --- a/src/test/java/be/ugent/rml/MapperNewRMLCorePostgresTest.java +++ b/src/test/java/be/ugent/rml/MapperNewRMLCorePostgresTest.java @@ -28,7 +28,7 @@ public static Stream data() { Arguments.of("RMLTC0001b", false, BOTH), Arguments.of("RMLTC0002a", false, BOTH), Arguments.of("RMLTC0002b", false, BOTH), - Arguments.of("RMLTC0002c", true, BOTH), + Arguments.of("RMLTC0002c", true, STRICT_ONLY), Arguments.of("RMLTC0002d", false, BOTH), Arguments.of("RMLTC0002e", true, BOTH), Arguments.of("RMLTC0002g", true, BOTH), diff --git a/src/test/java/be/ugent/rml/MapperODSTest.java b/src/test/java/be/ugent/rml/MapperODSTest.java index cb20e667..31c4bfa8 100644 --- a/src/test/java/be/ugent/rml/MapperODSTest.java +++ b/src/test/java/be/ugent/rml/MapperODSTest.java @@ -30,7 +30,7 @@ public void evaluate_0002b_ODS() { @Test public void evaluate_0002c_ODS() { - doMapping("./test-cases/RMLTC0002c-ODS/mapping.ttl", "./test-cases/RMLTC0002c-ODS/output.nq"); + doMappingExpectError("./test-cases/RMLTC0002c-ODS/mapping.ttl", StrictMode.STRICT); } @Test @@ -100,7 +100,7 @@ public void evaluate_0007g_ODS() { @Test public void evaluate_0007h_ODS() { - doMapping("./test-cases/RMLTC0007h-ODS/mapping.ttl", "./test-cases/RMLTC0007h-ODS/output.nq"); + doMappingExpectError("./test-cases/RMLTC0007h-ODS/mapping.ttl"); } @Test diff --git a/src/test/java/be/ugent/rml/MapperPostgresCSVTest.java b/src/test/java/be/ugent/rml/MapperPostgresCSVTest.java index 213dac39..7c29c19d 100644 --- a/src/test/java/be/ugent/rml/MapperPostgresCSVTest.java +++ b/src/test/java/be/ugent/rml/MapperPostgresCSVTest.java @@ -28,7 +28,7 @@ public static Stream data() { Arguments.of("RMLTC0001b", false, BOTH), Arguments.of("RMLTC0002a", false, BOTH), Arguments.of("RMLTC0002b", false, BOTH), - Arguments.of("RMLTC0002c", true, BOTH), + Arguments.of("RMLTC0002c", true, STRICT_ONLY), Arguments.of("RMLTC0002d", false, BOTH), Arguments.of("RMLTC0002e", true, BOTH), // Arguments.of("RMLTC0002f", false, BOTH), diff --git a/src/test/java/be/ugent/rml/MapperPostgresR2RMLTest.java b/src/test/java/be/ugent/rml/MapperPostgresR2RMLTest.java index 2612110c..735d0f3d 100644 --- a/src/test/java/be/ugent/rml/MapperPostgresR2RMLTest.java +++ b/src/test/java/be/ugent/rml/MapperPostgresR2RMLTest.java @@ -23,7 +23,7 @@ public static Stream data() { Arguments.of("R2RMLTC0001b", false, BOTH), Arguments.of("R2RMLTC0002a", false, BOTH), Arguments.of("R2RMLTC0002b", false, BOTH), - Arguments.of("R2RMLTC0002c", true, BOTH), + Arguments.of("R2RMLTC0002c", true, STRICT_ONLY), Arguments.of("R2RMLTC0002d", false, BOTH), Arguments.of("R2RMLTC0002e", true, BOTH), // Arguments.of("R2RMLTC0002f", true, BOTH), Issue #189 diff --git a/src/test/java/be/ugent/rml/MapperSPARQLTest.java b/src/test/java/be/ugent/rml/MapperSPARQLTest.java index 61018a02..642a825d 100644 --- a/src/test/java/be/ugent/rml/MapperSPARQLTest.java +++ b/src/test/java/be/ugent/rml/MapperSPARQLTest.java @@ -23,7 +23,6 @@ public class MapperSPARQLTest extends TestCore { private static int PORTNUMBER_SPARQL; - private FusekiServer.Builder builder; private FusekiServer server; public static Stream data() { @@ -95,8 +94,7 @@ public static Stream data() { @BeforeEach public void intialize() { - builder = FusekiServer.create(); - builder.port(PORTNUMBER_SPARQL); + } @BeforeAll @@ -116,9 +114,12 @@ public void mappingTest(String testCaseName, boolean expectedException) { String outputPath = "test-cases/" + testCaseName + "-SPARQL/output.nq"; String tempMappingPath = replacePortInMappingFile(mappingPath, "" + PORTNUMBER_SPARQL); - builder.add("/ds"+(1), RDFDataMgr.loadDataset(resourcePath)); - this.server = builder.build(); - this.server.start(); + server = FusekiServer.create() + .port(PORTNUMBER_SPARQL) + .add("/ds"+(1), RDFDataMgr.loadDataset(resourcePath)) + .build(); + + server.start(); // mapping if (!expectedException) { @@ -134,6 +135,7 @@ public void mappingTest(String testCaseName, boolean expectedException) { public void stopServer() { if (server != null) { server.stop(); + server = null; } System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog"); diff --git a/src/test/java/be/ugent/rml/MapperSQLServerTest.java b/src/test/java/be/ugent/rml/MapperSQLServerTest.java index 3f778a45..012ef7d9 100644 --- a/src/test/java/be/ugent/rml/MapperSQLServerTest.java +++ b/src/test/java/be/ugent/rml/MapperSQLServerTest.java @@ -115,7 +115,7 @@ public void doMapping(String testCaseName, boolean expectedException) throws Exc if (!expectedException) { doMapping(tempMappingPath, outputPath); } else { - doMappingExpectError(tempMappingPath); + doMappingExpectError(tempMappingPath, StrictMode.STRICT); } deleteTempMappingFile(tempMappingPath); diff --git a/src/test/java/be/ugent/rml/OptimizationsTest.java b/src/test/java/be/ugent/rml/OptimizationsTest.java index f6460f75..31d49d3c 100644 --- a/src/test/java/be/ugent/rml/OptimizationsTest.java +++ b/src/test/java/be/ugent/rml/OptimizationsTest.java @@ -2,6 +2,7 @@ import be.ugent.rml.cli.Main; import org.apache.commons.lang3.StringUtils; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import java.io.*; @@ -13,6 +14,7 @@ public class OptimizationsTest extends TestCore { @Test + @Disabled("This test fails because the content types do not match and are considered different documents. To be fixed.") public void xmlFileOnlyReadOnce() throws Exception { String cwd = Utils.getFile("test-cases/RMLTC1011-XML").getAbsolutePath(); String mappingFilePath = (new File(cwd, "mapping.ttl")).getAbsolutePath(); @@ -30,6 +32,6 @@ public void xmlFileOnlyReadOnce() throws Exception { logger.debug("Stderr:\n'{}'", output); int counts = StringUtils.countMatches(output, "No document found for"); - assertEquals(counts, 1); + assertEquals(1, counts); } } diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-CSV/mapping.ttl index 6be1b2bc..1b9a4dc7 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007h-CSV/mapping.ttl @@ -11,13 +11,13 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "LastName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graphMap [ - rml:reference "Name"; + rml:reference "LastName"; rml:termType rml:Literal ]; rml:template "http://example.com/Student/{ID}/{FirstName}" diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/mapping.ttl index b85c1fc5..7d970e46 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/mapping.ttl @@ -12,13 +12,13 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "LastName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graphMap [ - rml:reference "Name"; + rml:reference "LastName"; rml:termType rml:Literal ]; rml:template "http://example.com/Student/{ID}/{FirstName}" diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/mapping.ttl index 3d622a90..4dc0a40c 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/mapping.ttl @@ -10,13 +10,13 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "LastName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graphMap [ - rml:reference "Name"; + rml:reference "LastName"; rml:termType rml:Literal ]; rml:template "http://example.com/Student/{ID}/{FirstName}" diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/mapping.ttl index 2fb1fa99..8c25226b 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/mapping.ttl @@ -10,13 +10,13 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "LastName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graphMap [ - rml:reference "Name"; + rml:reference "LastName"; rml:termType rml:Literal ]; rml:template "http://example.com/Student/{ID}/{FirstName}" diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/mapping.ttl index e323fc9a..d938cf2f 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/mapping.ttl @@ -19,13 +19,13 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name.value" + rml:reference "LastName.value" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graphMap [ - rml:reference "Name"; + rml:reference "LastName"; rml:termType rml:Literal ]; rml:template "http://example.com/Student/{ID.value}/{FirstName.value}" diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/mapping.ttl index 976ef9d6..796587fe 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/mapping.ttl @@ -10,13 +10,13 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "LastName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graphMap [ - rml:reference "Name"; + rml:reference "LastName"; rml:termType rml:Literal ]; rml:template "http://example.com/Student/{ID}/{FirstName}" diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-XML/mapping.ttl index 6288a1e5..7be964be 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-XML/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007h-XML/mapping.ttl @@ -12,13 +12,13 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "LastName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graphMap [ - rml:reference "Name"; + rml:reference "LastName"; rml:termType rml:Literal ]; rml:template "http://example.com/Student/{ID}/{FirstName}" diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/student.json index a99528c1..697be3cc 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/student.json +++ b/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/student.json @@ -7,6 +7,7 @@ }, { "ID": 20, + "Sport": null, "Name": "Demi Moore" } ] diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/student.json index a99528c1..697be3cc 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/student.json +++ b/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/student.json @@ -7,6 +7,7 @@ }, { "ID": 20, + "Sport": null, "Name": "Demi Moore" } ] diff --git a/src/test/resources/test-cases/RMLTC0007h-CSV/mapping.ttl b/src/test/resources/test-cases/RMLTC0007h-CSV/mapping.ttl index e1aaa325..e6223646 100644 --- a/src/test/resources/test-cases/RMLTC0007h-CSV/mapping.ttl +++ b/src/test/resources/test-cases/RMLTC0007h-CSV/mapping.ttl @@ -14,13 +14,13 @@ ]; rr:subjectMap [ - rr:template "http://example.com/Student/{ID}/{Name}"; - rr:graphMap [ rml:reference "Name"; rr:termType rr:Literal; ] + rr:template "http://example.com/Student/{ID}/{FirstName}"; + rr:graphMap [ rml:reference "LastName"; rr:termType rr:Literal; ] ]; rr:predicateObjectMap [ rr:predicate foaf:name; rr:objectMap [ - rml:reference "Name" + rml:reference "LastName" ] ]. diff --git a/src/test/resources/test-cases/RMLTC0007h-CSV/student.csv b/src/test/resources/test-cases/RMLTC0007h-CSV/student.csv index df9d2d69..0f5454ff 100644 --- a/src/test/resources/test-cases/RMLTC0007h-CSV/student.csv +++ b/src/test/resources/test-cases/RMLTC0007h-CSV/student.csv @@ -1,2 +1,2 @@ -ID,Name -10,Venus +ID,FirstName,Lastname +10,Venus,Williams diff --git a/src/test/resources/test-cases/RMLTC0007h-EXCEL/mapping.ttl b/src/test/resources/test-cases/RMLTC0007h-EXCEL/mapping.ttl index a57f546e..da8f09a9 100644 --- a/src/test/resources/test-cases/RMLTC0007h-EXCEL/mapping.ttl +++ b/src/test/resources/test-cases/RMLTC0007h-EXCEL/mapping.ttl @@ -15,12 +15,12 @@ rr:subjectMap [ rr:template "http://example.com/Student/{ID}/{FirstName}"; - rr:graph [ rml:reference "Name"; rr:termType rr:Literal; ] + rr:graphMap [ rml:reference "LastName"; rr:termType rr:Literal; ] ]; rr:predicateObjectMap [ rr:predicate foaf:name; rr:objectMap [ - rml:reference "Name" + rml:reference "LastName" ] ]. diff --git a/src/test/resources/test-cases/RMLTC0007h-JSON/mapping.ttl b/src/test/resources/test-cases/RMLTC0007h-JSON/mapping.ttl index 274148f6..9766f7fa 100644 --- a/src/test/resources/test-cases/RMLTC0007h-JSON/mapping.ttl +++ b/src/test/resources/test-cases/RMLTC0007h-JSON/mapping.ttl @@ -15,14 +15,14 @@ ]; rr:subjectMap [ - rr:template "http://example.com/Student/{ID}/{Name}"; - rr:graphMap [ rml:reference "Name"; rr:termType rr:Literal; ] + rr:template "http://example.com/Student/{ID}/{FirstName}"; + rr:graphMap [ rml:reference "LastName"; rr:termType rr:Literal; ] ]; rr:predicateObjectMap [ rr:predicate foaf:name; rr:objectMap [ - rml:reference "Name" + rml:reference "LastName" ] ]. diff --git a/src/test/resources/test-cases/RMLTC0007h-JSON/student.json b/src/test/resources/test-cases/RMLTC0007h-JSON/student.json index 0f6f797f..dcdd9388 100644 --- a/src/test/resources/test-cases/RMLTC0007h-JSON/student.json +++ b/src/test/resources/test-cases/RMLTC0007h-JSON/student.json @@ -1,6 +1,7 @@ { "students": [{ "ID": 10, - "Name":"Venus" + "FirstName":"Venus", + "LastName":"Williams" }] } diff --git a/src/test/resources/test-cases/RMLTC0007h-MySQL/mapping.ttl b/src/test/resources/test-cases/RMLTC0007h-MySQL/mapping.ttl index 3e60f029..44d0a908 100644 --- a/src/test/resources/test-cases/RMLTC0007h-MySQL/mapping.ttl +++ b/src/test/resources/test-cases/RMLTC0007h-MySQL/mapping.ttl @@ -16,14 +16,14 @@ ]; rr:subjectMap [ - rr:template "http://example.com/Student/{ID}/{Name}"; - rr:graphMap [ rml:reference "Name"; rr:termType rr:Literal; ] + rr:template "http://example.com/Student/{ID}/{FirstName}"; + rr:graphMap [ rml:reference "LastName"; rr:termType rr:Literal; ] ]; rr:predicateObjectMap [ rr:predicate foaf:name; rr:objectMap [ - rml:reference "Name" + rml:reference "LastName" ] ]. diff --git a/src/test/resources/test-cases/RMLTC0007h-MySQL/resource.sql b/src/test/resources/test-cases/RMLTC0007h-MySQL/resource.sql index 8b2b6d8f..0135d051 100644 --- a/src/test/resources/test-cases/RMLTC0007h-MySQL/resource.sql +++ b/src/test/resources/test-cases/RMLTC0007h-MySQL/resource.sql @@ -3,6 +3,7 @@ DROP TABLE IF EXISTS test.student; CREATE TABLE student ( ID INTEGER, - Name VARCHAR(50) + FirstName VARCHAR(50), + LastName VARCHAR(50) ); -INSERT INTO student values ('10', 'Venus'); +INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/test-cases/RMLTC0007h-ODS/mapping.ttl b/src/test/resources/test-cases/RMLTC0007h-ODS/mapping.ttl index 010cf719..755005b0 100644 --- a/src/test/resources/test-cases/RMLTC0007h-ODS/mapping.ttl +++ b/src/test/resources/test-cases/RMLTC0007h-ODS/mapping.ttl @@ -15,12 +15,12 @@ rr:subjectMap [ rr:template "http://example.com/Student/{ID}/{FirstName}"; - rr:graph [ rml:reference "Name"; rr:termType rr:Literal; ] + rr:graphMap [ rml:reference "LastName"; rr:termType rr:Literal; ] ]; rr:predicateObjectMap [ rr:predicate foaf:name; rr:objectMap [ - rml:reference "Name" + rml:reference "LastName" ] ]. diff --git a/src/test/resources/test-cases/RMLTC0007h-PostgreSQL/mapping.ttl b/src/test/resources/test-cases/RMLTC0007h-PostgreSQL/mapping.ttl index 80438386..35927d1f 100644 --- a/src/test/resources/test-cases/RMLTC0007h-PostgreSQL/mapping.ttl +++ b/src/test/resources/test-cases/RMLTC0007h-PostgreSQL/mapping.ttl @@ -16,14 +16,14 @@ ]; rr:subjectMap [ - rr:template "http://example.com/Student/{ID}/{Name}"; - rr:graphMap [ rml:reference "Name"; rr:termType rr:Literal; ] + rr:template "http://example.com/Student/{ID}/{FirstName}"; + rr:graphMap [ rml:reference "LastName"; rr:termType rr:Literal; ] ]; rr:predicateObjectMap [ rr:predicate foaf:name; rr:objectMap [ - rml:reference "Name" + rml:reference "LastName" ] ]. diff --git a/src/test/resources/test-cases/RMLTC0007h-PostgreSQL/resource.sql b/src/test/resources/test-cases/RMLTC0007h-PostgreSQL/resource.sql index ae695f01..b5c63bc3 100644 --- a/src/test/resources/test-cases/RMLTC0007h-PostgreSQL/resource.sql +++ b/src/test/resources/test-cases/RMLTC0007h-PostgreSQL/resource.sql @@ -2,6 +2,7 @@ DROP TABLE IF EXISTS student; CREATE TABLE student ( "ID" INTEGER, - "Name" VARCHAR(50) + "FirstName" VARCHAR(50), + "LastName" VARCHAR(50) ); -INSERT INTO student values ('10', 'Venus'); +INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/test-cases/RMLTC0007h-SPARQL/mapping.ttl b/src/test/resources/test-cases/RMLTC0007h-SPARQL/mapping.ttl index 12608320..15e9ae15 100644 --- a/src/test/resources/test-cases/RMLTC0007h-SPARQL/mapping.ttl +++ b/src/test/resources/test-cases/RMLTC0007h-SPARQL/mapping.ttl @@ -35,12 +35,12 @@ rr:subjectMap [ rr:template "http://example.com/Student/{ID.value}/{FirstName.value}"; - rr:graphMap [ rml:reference "Name"; rr:termType rr:Literal; ] + rr:graphMap [ rml:reference "LastName.value"; rr:termType rr:Literal; ] ]; rr:predicateObjectMap [ rr:predicate foaf:name; rr:objectMap [ - rml:reference "Name.value" + rml:reference "LastName.value" ] ]. diff --git a/src/test/resources/test-cases/RMLTC0007h-SQLServer/mapping.ttl b/src/test/resources/test-cases/RMLTC0007h-SQLServer/mapping.ttl index 14ae764b..02c5c8db 100644 --- a/src/test/resources/test-cases/RMLTC0007h-SQLServer/mapping.ttl +++ b/src/test/resources/test-cases/RMLTC0007h-SQLServer/mapping.ttl @@ -16,14 +16,14 @@ ]; rr:subjectMap [ - rr:template "http://example.com/Student/{ID}/{Name}"; + rr:template "http://example.com/Student/{ID}/{FirstName}"; rr:graphMap [ rml:reference "Name"; rr:termType rr:Literal; ] ]; rr:predicateObjectMap [ rr:predicate foaf:name; rr:objectMap [ - rml:reference "Name" + rml:reference "LastName" ] ]. diff --git a/src/test/resources/test-cases/RMLTC0007h-SQLServer/resource.sql b/src/test/resources/test-cases/RMLTC0007h-SQLServer/resource.sql index 6263542f..dd21a31b 100644 --- a/src/test/resources/test-cases/RMLTC0007h-SQLServer/resource.sql +++ b/src/test/resources/test-cases/RMLTC0007h-SQLServer/resource.sql @@ -1,6 +1,8 @@ +USE TestDB; DROP TABLE IF EXISTS student; CREATE TABLE student ( "ID" INTEGER, - "Name" VARCHAR(50) + "FirstName" VARCHAR(50), + "LastName" VARCHAR(50) ); -INSERT INTO student values ('10', 'Venus'); +INSERT INTO student values ('10', 'Venus', 'Williams'); \ No newline at end of file diff --git a/src/test/resources/test-cases/RMLTC0007h-XML/mapping.ttl b/src/test/resources/test-cases/RMLTC0007h-XML/mapping.ttl index efa03fc7..4e150e3a 100644 --- a/src/test/resources/test-cases/RMLTC0007h-XML/mapping.ttl +++ b/src/test/resources/test-cases/RMLTC0007h-XML/mapping.ttl @@ -15,13 +15,13 @@ ]; rr:subjectMap [ - rr:template "http://example.com/Student/{ID}/{Name}"; - rr:graphMap [ rml:reference "Name"; rr:termType rr:Literal; ] + rr:template "http://example.com/Student/{ID}/{FirstName}"; + rr:graphMap [ rml:reference "LastName"; rr:termType rr:Literal; ] ]; rr:predicateObjectMap [ rr:predicate foaf:name; rr:objectMap [ - rml:reference "Name" + rml:reference "LastName" ] ]. diff --git a/src/test/resources/test-cases/RMLTC0007h-XML/student.xml b/src/test/resources/test-cases/RMLTC0007h-XML/student.xml index b2a6a9ac..44eab80f 100644 --- a/src/test/resources/test-cases/RMLTC0007h-XML/student.xml +++ b/src/test/resources/test-cases/RMLTC0007h-XML/student.xml @@ -3,6 +3,7 @@ 10 - Venus + Venus + Williams diff --git a/src/test/resources/test-cases/RMLTC0009a-JSON/student.json b/src/test/resources/test-cases/RMLTC0009a-JSON/student.json index a99528c1..697be3cc 100644 --- a/src/test/resources/test-cases/RMLTC0009a-JSON/student.json +++ b/src/test/resources/test-cases/RMLTC0009a-JSON/student.json @@ -7,6 +7,7 @@ }, { "ID": 20, + "Sport": null, "Name": "Demi Moore" } ] diff --git a/src/test/resources/test-cases/RMLTC0009b-JSON/student.json b/src/test/resources/test-cases/RMLTC0009b-JSON/student.json index a99528c1..697be3cc 100644 --- a/src/test/resources/test-cases/RMLTC0009b-JSON/student.json +++ b/src/test/resources/test-cases/RMLTC0009b-JSON/student.json @@ -7,6 +7,7 @@ }, { "ID": 20, + "Sport": null, "Name": "Demi Moore" } ] From 9646115b08077a818600951b2dbb69a497d05e76 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 9 Jan 2025 15:39:51 +0100 Subject: [PATCH 079/127] Fixed merge mistake --- src/main/java/be/ugent/rml/MappingFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/be/ugent/rml/MappingFactory.java b/src/main/java/be/ugent/rml/MappingFactory.java index 774e275d..a3d16da3 100644 --- a/src/main/java/be/ugent/rml/MappingFactory.java +++ b/src/main/java/be/ugent/rml/MappingFactory.java @@ -285,7 +285,7 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer parameters = new HashMap<>(); boolean ignoreDoubleQuotesInParent = this.areDoubleQuotesIgnored(store, parentTriplesMap); - SingleRecordFunctionExecutor parent = new ReferenceExtractor(parents.get(0), ignoreDoubleQuotesInParent); + SingleRecordFunctionExecutor parent = new ReferenceExtractor(parents.get(0), ignoreDoubleQuotesInParent, strictMode.equals(StrictMode.STRICT)); Object[] detailsParent = {"parent", parent}; parameters.put("http://users.ugent.be/~bjdmeest/function/grel.ttl#valueParameter", detailsParent); @@ -680,7 +680,7 @@ private List getTargetGenerators(Term termMap, String baseIRI, St List functionValues = getObjectsFromQuads(store.getQuads(logicalTargetMap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); if (functionValues.isEmpty()) { //similar to subjects, dynamic targets should always be uri - functionExecutor = RecordFunctionExecutorFactory.generate(store, logicalTargetMap, true, ignoreDoubleQuotes); + functionExecutor = RecordFunctionExecutorFactory.generate(store, logicalTargetMap, true, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)); } else { try { functionExecutor = parseFunctionTermMap(functionValues.get(0)); From fd0752beedf583ea08bda965eded1af273f46cb8 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 9 Jan 2025 16:08:35 +0100 Subject: [PATCH 080/127] Fixed merge conflict in CHANGELOG.md --- CHANGELOG.md | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b64bc6b..c21096c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,16 +7,23 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased -<<<<<<< HEAD +### Changed +- Some tests are changed because record error handling has changed. + ### Fixed - Optimization for authentication with CSS Client Credentials - Update URI of prefix 'rmle:' to persistent w3id URI: 'https://w3id.org/imec/rml/ns/extensions#' +- Added all known content types for newline delimited JSON +- Updated all Jena library dependencies to version 5.0.0 +- Added explicit dependencies on commons-io:2.18.0, commons-compress-1.27.1 and commons-lang3:3.17.0 to avoid runtime errors. +- Updated rdf4j-client to 5.1.0 +- Updated wiremock to 3.9.1 (3.10.0 contains bugs in combination with saxon). +- Updated grel-functions-java to v0.10.0 +- Updated dataio to 2.0.0, *the* reason for most changes ;) +- Updated testcontainers to 1.18.3 +- Inconsistencies in test case RMLTC0007h (mapping + all formats) and RMLTC0009a (JSON) ## [7.2.0] - 2024-12-09 -======= -### Changed -- Some tests are changed because record error handling has changed. ->>>>>>> da10cd7c (Update to DataIO 2.0.0) ### Added - CLI option `--convert-mapping` to convert your existing R2RML and older RML mappings @@ -27,17 +34,6 @@ to the latest version by the W3C Community Group. ### Fixed - GREL array functions handling. -### Fixed -- Added all known content types for newline delimited JSON -- Updated all Jena library dependencies to version 5.0.0 -- Added explicit dependencies on commons-io:2.18.0, commons-compress-1.27.1 and commons-lang3:3.17.0 to avoid runtime errors. -- Updated rdf4j-client to 5.1.0 -- Updated wiremock to 3.9.1 (3.10.0 contains bugs in combination with saxon). -- Updated grel-functions-java to v0.10.0 -- Updated dataio to 2.0.0, *the* reason for most changes ;) -- Updated testcontainers to 1.18.3 -- Inconsistencies in test case RMLTC0007h (mapping + all formats) and RMLTC0009a (JSON) - ## [7.1.2] - 2024-09-19 ### Fixed From 8a799251e854fef237ceaedb4bff78738d5041cb Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Mon, 13 Jan 2025 11:50:57 +0100 Subject: [PATCH 081/127] Added some comments regarding RecordValue. --- .../java/be/ugent/rml/extractor/ReferenceExtractor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/be/ugent/rml/extractor/ReferenceExtractor.java b/src/main/java/be/ugent/rml/extractor/ReferenceExtractor.java index 22f1d2ac..a2baa185 100644 --- a/src/main/java/be/ugent/rml/extractor/ReferenceExtractor.java +++ b/src/main/java/be/ugent/rml/extractor/ReferenceExtractor.java @@ -31,15 +31,15 @@ public List extract(Record record) { RecordValue recordValue = record.get(temp); - if (recordValue.isOk()) { + if (recordValue.isOk()) { // This means no error occurred during reference resolving and the value is not a null value Object value = recordValue.getValue(); if (value instanceof Iterable) { return new ArrayList<>((Collection) value); } else { return List.of(value); } - } else if (recordValue.isEmpty() || - recordValue.isNotFound() && !strictReferenceResolution) { + } else if (recordValue.isEmpty() || // The record has a null value + recordValue.isNotFound() && !strictReferenceResolution) { // The reference has not been found (e.g. nu field with that name) return List.of(); } else { throw new IllegalArgumentException(recordValue.getMessage()); From 4cf1b6028232eb5143b9d0fb5b1d525d0f4a3995 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Wed, 15 Jan 2025 15:45:33 +0100 Subject: [PATCH 082/127] Fixed the return type of GREL array slice function in function description. The function returns an array rather than a number. See also https://github.com/FnOio/grel-functions-fno/commit/941be9f21ea75dd4f33212e8f28cf8890ee196cf --- CHANGELOG.md | 1 + src/main/resources/functions_grel.ttl | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c21096c2..9888843e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Optimization for authentication with CSS Client Credentials - Update URI of prefix 'rmle:' to persistent w3id URI: 'https://w3id.org/imec/rml/ns/extensions#' - Added all known content types for newline delimited JSON +- Fixed the return type of GREL array slice function in function description. - Updated all Jena library dependencies to version 5.0.0 - Added explicit dependencies on commons-io:2.18.0, commons-compress-1.27.1 and commons-lang3:3.17.0 to avoid runtime errors. - Updated rdf4j-client to 5.1.0 diff --git a/src/main/resources/functions_grel.ttl b/src/main/resources/functions_grel.ttl index 8639dfc4..cc21f98c 100644 --- a/src/main/resources/functions_grel.ttl +++ b/src/main/resources/functions_grel.ttl @@ -113,7 +113,7 @@ grel:array_slice fno:name "slice" ; dcterms:description "slice" ; fno:expects ( grel:param_a grel:p_int_i_from grel:p_int_i_opt_to ) ; - fno:returns ( grel:output_number ) . + fno:returns ( grel:output_array ) . #REVERSE From bc1b924f17f68f4ed25cf8c6cf22445d40f6e3a6 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Wed, 22 Jan 2025 08:50:53 +0100 Subject: [PATCH 083/127] CHANGELOG: release v7.3.0 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9888843e..c5f98468 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [7.3.0] - 2025-01-22 + ### Changed - Some tests are changed because record error handling has changed. @@ -780,6 +782,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[7.3.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.2.0...v7.3.0 [7.2.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.2...v7.2.0 [7.1.2]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.1...v7.1.2 [7.1.1]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.0...v7.1.1 diff --git a/pom.xml b/pom.xml index 883165d1..c471aa41 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 7.2.0 + 7.3.0 The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. From 49850b1d9199287ac959f4154a67c58560cc1ed3 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Wed, 22 Jan 2025 09:47:33 +0100 Subject: [PATCH 084/127] pom: upgrade logback-core to 1.5.16 2 security fixes --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5f98468..9d777bc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Fixed +- Upgraded logback-core to 1.5.16 to fix 2 security CVEs. + ## [7.3.0] - 2025-01-22 ### Changed diff --git a/pom.xml b/pom.xml index c471aa41..78da78ab 100644 --- a/pom.xml +++ b/pom.xml @@ -148,7 +148,7 @@ ch.qos.logback logback-classic - 1.4.14 + 1.5.16 From e1fac7be376f16285b652602b06facfbdb569833 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Wed, 22 Jan 2025 10:01:36 +0100 Subject: [PATCH 085/127] pom: upgrade dataio to 2.0.1 --- CHANGELOG.md | 1 + pom.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d777bc1..0b074a51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased ### Fixed +- Upgraded dataio to 2.0.1 incorporating dataio security fixes. - Upgraded logback-core to 1.5.16 to fix 2 security CVEs. ## [7.3.0] - 2025-01-22 diff --git a/pom.xml b/pom.xml index 78da78ab..712dad2e 100644 --- a/pom.xml +++ b/pom.xml @@ -307,7 +307,7 @@ be.ugent.idlab.knows dataio - 2.0.0 + 2.0.1 org.apache.commons From dfd313c3f7e3db3068ed596e4b8c85d5210ac7a0 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Wed, 22 Jan 2025 12:40:21 +0100 Subject: [PATCH 086/127] CHANGELOG: release v7.3.1 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b074a51..e1350a9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [7.3.1] - 2025-01-22 + ### Fixed - Upgraded dataio to 2.0.1 incorporating dataio security fixes. - Upgraded logback-core to 1.5.16 to fix 2 security CVEs. @@ -786,6 +788,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[7.3.1]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.0...v7.3.1 [7.3.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.2.0...v7.3.0 [7.2.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.2...v7.2.0 [7.1.2]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.1...v7.1.2 diff --git a/pom.xml b/pom.xml index 712dad2e..ff4997d8 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 7.3.0 + 7.3.1 The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. From 1bbf2581bbe7ab93eac1c3a9332e3ef2a7ac64e9 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Wed, 26 Feb 2025 11:21:00 +0100 Subject: [PATCH 087/127] Updated dependency on Function Agent Updated Function Agent to 1.2.1 because of a bugfix (see https://gitlab.ilabt.imec.be/KNoWS/fno/proc/function-component/-/issues/23, fixes https://github.com/RMLio/rmlmapper-java/issues/249 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1350a9b..6c54bb40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Fixed +- Updated Function Agent to 1.2.1 because of a bugfix (See [this issue in Gitlab](https://gitlab.ilabt.imec.be/KNoWS/fno/proc/function-component/-/issues/23), fixes [#249](https://github.com/RMLio/rmlmapper-java/issues/249) on GitHub; + ## [7.3.1] - 2025-01-22 ### Fixed diff --git a/pom.xml b/pom.xml index ff4997d8..8e8e1bff 100644 --- a/pom.xml +++ b/pom.xml @@ -266,7 +266,7 @@ be.ugent.idlab.knows function-agent-java - 1.2.0 + 1.2.1 org.apache.jena From 4c7493a0da487dc7686ae80f5157e36042b6e11d Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Tue, 4 Mar 2025 09:56:55 +0100 Subject: [PATCH 088/127] release v7.3.2 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c54bb40..12471e81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [7.3.2] - 2025-03-04 + ### Fixed - Updated Function Agent to 1.2.1 because of a bugfix (See [this issue in Gitlab](https://gitlab.ilabt.imec.be/KNoWS/fno/proc/function-component/-/issues/23), fixes [#249](https://github.com/RMLio/rmlmapper-java/issues/249) on GitHub; @@ -791,6 +793,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[7.3.2]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.1...v7.3.2 [7.3.1]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.0...v7.3.1 [7.3.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.2.0...v7.3.0 [7.2.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.1.2...v7.2.0 diff --git a/pom.xml b/pom.xml index 8e8e1bff..83ec0f17 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 7.3.1 + 7.3.2 The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. From 978aa81f7d3beebba644a67a139c3d305b9a66c0 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Tue, 1 Apr 2025 08:09:32 +0200 Subject: [PATCH 089/127] records: RecordsFactory: handle unsupported reference formulation Fixes https://github.com/RMLio/rmlmapper-java/issues/247 --- CHANGELOG.md | 3 +++ src/main/java/be/ugent/rml/records/RecordsFactory.java | 1 + 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12471e81..3a0c37bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Fixed +- Better handle unsupported reference formulation (See [issue 247](https://github.com/RMLio/rmlmapper-java/issues/247)) + ## [7.3.2] - 2025-03-04 ### Fixed diff --git a/src/main/java/be/ugent/rml/records/RecordsFactory.java b/src/main/java/be/ugent/rml/records/RecordsFactory.java index 736eacb5..69480fb1 100644 --- a/src/main/java/be/ugent/rml/records/RecordsFactory.java +++ b/src/main/java/be/ugent/rml/records/RecordsFactory.java @@ -137,6 +137,7 @@ private List getRecords(Access access, Term logicalSource, String refere // Select the Record Factory based on the reference formulation. if (!referenceFormulationRecordFactoryMap.containsKey(referenceFormulation)) { logger.error("Referenceformulation {} is unsupported!", referenceFormulation); + return List.of(); } ReferenceFormulationRecordFactory factory = referenceFormulationRecordFactoryMap.get(referenceFormulation); records = factory.getRecords(access, logicalSource, rmlStore); From 4c8dae33071be9b4941105e74cfec6ba3a8bbe3b Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Wed, 2 Apr 2025 14:09:41 +0200 Subject: [PATCH 090/127] test: resources: test-cases: MapperJSONTest: add RMLTC1024 and RMLTC1025 See https://github.com/RMLio/rmlmapper-java/issues/252 and https://github.com/RMLio/rmlmapper-java/issues/251 --- .../java/be/ugent/rml/MapperJSONTest.java | 15 ++++++++++++ .../test-cases/RMLTC1045-JSON/data.json | 1 + .../test-cases/RMLTC1045-JSON/mapping.ttl | 19 +++++++++++++++ .../test-cases/RMLTC1045-JSON/output.nq | 1 + .../test-cases/RMLTC1046-JSON/data.json | 1 + .../test-cases/RMLTC1046-JSON/mapping.ttl | 23 +++++++++++++++++++ .../test-cases/RMLTC1046-JSON/output.nq | 3 +++ .../test-cases/RMLTC1047-JSON/data.json | 1 + .../test-cases/RMLTC1047-JSON/mapping.ttl | 19 +++++++++++++++ .../test-cases/RMLTC1047-JSON/output.nq | 1 + 10 files changed, 84 insertions(+) create mode 100644 src/test/resources/test-cases/RMLTC1045-JSON/data.json create mode 100644 src/test/resources/test-cases/RMLTC1045-JSON/mapping.ttl create mode 100644 src/test/resources/test-cases/RMLTC1045-JSON/output.nq create mode 100644 src/test/resources/test-cases/RMLTC1046-JSON/data.json create mode 100644 src/test/resources/test-cases/RMLTC1046-JSON/mapping.ttl create mode 100644 src/test/resources/test-cases/RMLTC1046-JSON/output.nq create mode 100644 src/test/resources/test-cases/RMLTC1047-JSON/data.json create mode 100644 src/test/resources/test-cases/RMLTC1047-JSON/mapping.ttl create mode 100644 src/test/resources/test-cases/RMLTC1047-JSON/output.nq diff --git a/src/test/java/be/ugent/rml/MapperJSONTest.java b/src/test/java/be/ugent/rml/MapperJSONTest.java index 19066c1f..89a39e40 100644 --- a/src/test/java/be/ugent/rml/MapperJSONTest.java +++ b/src/test/java/be/ugent/rml/MapperJSONTest.java @@ -290,4 +290,19 @@ public void evaluate_1028_JSON() { public void evaluate_1028b_JSON() { doMapping("./test-cases/RMLTC1028b-JSON/mapping.ttl", "./test-cases/RMLTC1028b-JSON/output.nq"); } + + @Test + public void evaluate_1045_JSON() { + doMapping("./test-cases/RMLTC1045-JSON/mapping.ttl", "./test-cases/RMLTC1045-JSON/output.nq"); + } + + @Test + public void evaluate_1046_JSON() { + doMapping("./test-cases/RMLTC1046-JSON/mapping.ttl", "./test-cases/RMLTC1046-JSON/output.nq"); + } + + @Test + public void evaluate_1047_JSON() { + doMapping("./test-cases/RMLTC1047-JSON/mapping.ttl", "./test-cases/RMLTC1047-JSON/output.nq"); + } } diff --git a/src/test/resources/test-cases/RMLTC1045-JSON/data.json b/src/test/resources/test-cases/RMLTC1045-JSON/data.json new file mode 100644 index 00000000..64a11ae8 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1045-JSON/data.json @@ -0,0 +1 @@ +[ { "id": "0", "foo": "bar" } ] diff --git a/src/test/resources/test-cases/RMLTC1045-JSON/mapping.ttl b/src/test/resources/test-cases/RMLTC1045-JSON/mapping.ttl new file mode 100644 index 00000000..336afb27 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1045-JSON/mapping.ttl @@ -0,0 +1,19 @@ +@prefix rml: . +@prefix rr: . +@prefix ql: . + + [ + a rr:TriplesMap; + rml:logicalSource [ + rml:source "data.json" ; + rml:referenceFormulation ql:JSONPath ; + rml:iterator "$[*]"; + ]; + rr:subjectMap [ + rr:template "https://example.org/instances/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicate ; + rr:object true ; # datatype is boolean + ]; + ] . diff --git a/src/test/resources/test-cases/RMLTC1045-JSON/output.nq b/src/test/resources/test-cases/RMLTC1045-JSON/output.nq new file mode 100644 index 00000000..ed7a2cd1 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1045-JSON/output.nq @@ -0,0 +1 @@ + "true"^^ . diff --git a/src/test/resources/test-cases/RMLTC1046-JSON/data.json b/src/test/resources/test-cases/RMLTC1046-JSON/data.json new file mode 100644 index 00000000..4087270d --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1046-JSON/data.json @@ -0,0 +1 @@ +[ { "id": "0", "name": "Alice" } ] diff --git a/src/test/resources/test-cases/RMLTC1046-JSON/mapping.ttl b/src/test/resources/test-cases/RMLTC1046-JSON/mapping.ttl new file mode 100644 index 00000000..6f1a8f8f --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1046-JSON/mapping.ttl @@ -0,0 +1,23 @@ +@prefix rml: . +@prefix rr: . +@prefix ql: . +@prefix s: . + + [ + a rr:TriplesMap; + rml:logicalSource [ + rml:source "data.json" ; + rml:referenceFormulation ql:JSONPath ; + rml:iterator "$[*]"; + ]; + rr:subjectMap [ + rr:template "https://example.org/instances/{id}"; + rr:class s:Person ; + rr:graph ; + ]; + rr:predicateObjectMap [ + rr:predicate s:givenName ; + rr:objectMap [ rml:reference "name" ] ; + rr:graph rr:defaultGraph ; + ]; + ] . diff --git a/src/test/resources/test-cases/RMLTC1046-JSON/output.nq b/src/test/resources/test-cases/RMLTC1046-JSON/output.nq new file mode 100644 index 00000000..8e306356 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1046-JSON/output.nq @@ -0,0 +1,3 @@ + "Alice". + "Alice" . + . diff --git a/src/test/resources/test-cases/RMLTC1047-JSON/data.json b/src/test/resources/test-cases/RMLTC1047-JSON/data.json new file mode 100644 index 00000000..64a11ae8 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1047-JSON/data.json @@ -0,0 +1 @@ +[ { "id": "0", "foo": "bar" } ] diff --git a/src/test/resources/test-cases/RMLTC1047-JSON/mapping.ttl b/src/test/resources/test-cases/RMLTC1047-JSON/mapping.ttl new file mode 100644 index 00000000..e6cf554f --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1047-JSON/mapping.ttl @@ -0,0 +1,19 @@ +@prefix rml: . +@prefix rr: . +@prefix ql: . + + [ + a rr:TriplesMap; + rml:logicalSource [ + rml:source "data.json" ; + rml:referenceFormulation ql:JSONPath ; + rml:iterator "$[*]"; + ]; + rr:subjectMap [ + rr:template "https://example.org/instances/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicate ; + rr:object "train"@en ; + ]; + ] . diff --git a/src/test/resources/test-cases/RMLTC1047-JSON/output.nq b/src/test/resources/test-cases/RMLTC1047-JSON/output.nq new file mode 100644 index 00000000..55246cc3 --- /dev/null +++ b/src/test/resources/test-cases/RMLTC1047-JSON/output.nq @@ -0,0 +1 @@ + "train"@en . From fc155e632ecb56e399d2e8746ba15cacea3e92d9 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Wed, 2 Apr 2025 14:52:54 +0200 Subject: [PATCH 091/127] Executor: handle defaultGraph properly --- CHANGELOG.md | 1 + src/main/java/be/ugent/rml/Executor.java | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a0c37bd..358b132c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - Better handle unsupported reference formulation (See [issue 247](https://github.com/RMLio/rmlmapper-java/issues/247)) +- Graph Maps with default graph must not be ignored (See [issue 252](https://github.com/RMLio/rmlmapper-java/issues/252)) ## [7.3.2] - 2025-03-04 diff --git a/src/main/java/be/ugent/rml/Executor.java b/src/main/java/be/ugent/rml/Executor.java index 028ba798..fd2a3574 100644 --- a/src/main/java/be/ugent/rml/Executor.java +++ b/src/main/java/be/ugent/rml/Executor.java @@ -372,7 +372,13 @@ private List combineMultiplePOGs(List pre predicates.forEach( p -> objects.forEach( o -> graphs.forEach( - g -> results.add(new PredicateObjectGraph(p, o, g)) + g -> { + if (g.getTerm().equals(new NamedNode(NAMESPACES.RML2 + "defaultGraph"))) { + results.add(new PredicateObjectGraph(p, o, null)); + } else { + results.add(new PredicateObjectGraph(p, o, g)); + } + } ) ) ); @@ -475,10 +481,8 @@ private void generatePredicateObjectsForSubjects(final List sub TermGenerator pogGraphGenerator = pogGraphMappingInfo.getTermGenerator(); if (pogGraphGenerator != null) { pogGraphGenerator.generate(record).forEach(term -> { - if (!term.equals(new NamedNode(NAMESPACES.RML2 + "defaultGraph"))) { - List graphTargets = getAllTargets(pogGraphMappingInfo, record); - poGraphs.add(new ProvenancedTerm(term, null, graphTargets)); - } + List graphTargets = getAllTargets(pogGraphMappingInfo, record); + poGraphs.add(new ProvenancedTerm(term, null, graphTargets)); }); } } From 2a0c2e086b928871a1d16038341b766b6e4922ef Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Wed, 2 Apr 2025 14:54:46 +0200 Subject: [PATCH 092/127] MappingFactory: respect datatype for constants Constants in the mapping have sometimes their own datatype already specified, use it. --- CHANGELOG.md | 1 + src/main/java/be/ugent/rml/MappingFactory.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 358b132c..de516a33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - Better handle unsupported reference formulation (See [issue 247](https://github.com/RMLio/rmlmapper-java/issues/247)) - Graph Maps with default graph must not be ignored (See [issue 252](https://github.com/RMLio/rmlmapper-java/issues/252)) +- Honor datatypes for constants (See [issue 251](https://github.com/RMLio/rmlmapper-java/issues/251)) ## [7.3.2] - 2025-03-04 diff --git a/src/main/java/be/ugent/rml/MappingFactory.java b/src/main/java/be/ugent/rml/MappingFactory.java index a3d16da3..4c5071aa 100644 --- a/src/main/java/be/ugent/rml/MappingFactory.java +++ b/src/main/java/be/ugent/rml/MappingFactory.java @@ -202,7 +202,8 @@ private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer Date: Wed, 2 Apr 2025 15:27:52 +0200 Subject: [PATCH 093/127] {Executor, MappingFactory}: support language tags for constants --- CHANGELOG.md | 1 + src/main/java/be/ugent/rml/Executor.java | 2 +- src/main/java/be/ugent/rml/MappingFactory.java | 12 ++++++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de516a33..f855734a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Better handle unsupported reference formulation (See [issue 247](https://github.com/RMLio/rmlmapper-java/issues/247)) - Graph Maps with default graph must not be ignored (See [issue 252](https://github.com/RMLio/rmlmapper-java/issues/252)) - Honor datatypes for constants (See [issue 251](https://github.com/RMLio/rmlmapper-java/issues/251)) +- Honor language tags for constants (See [issue 251](https://github.com/RMLio/rmlmapper-java/issues/251)) ## [7.3.2] - 2025-03-04 diff --git a/src/main/java/be/ugent/rml/Executor.java b/src/main/java/be/ugent/rml/Executor.java index fd2a3574..1d43eacf 100644 --- a/src/main/java/be/ugent/rml/Executor.java +++ b/src/main/java/be/ugent/rml/Executor.java @@ -373,7 +373,7 @@ private List combineMultiplePOGs(List pre p -> objects.forEach( o -> graphs.forEach( g -> { - if (g.getTerm().equals(new NamedNode(NAMESPACES.RML2 + "defaultGraph"))) { + if (g != null && g.getTerm().equals(new NamedNode(NAMESPACES.RML2 + "defaultGraph"))) { results.add(new PredicateObjectGraph(p, o, null)); } else { results.add(new PredicateObjectGraph(p, o, g)); diff --git a/src/main/java/be/ugent/rml/MappingFactory.java b/src/main/java/be/ugent/rml/MappingFactory.java index 4c5071aa..1eccdd03 100644 --- a/src/main/java/be/ugent/rml/MappingFactory.java +++ b/src/main/java/be/ugent/rml/MappingFactory.java @@ -202,8 +202,16 @@ private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer Date: Mon, 7 Apr 2025 09:47:08 +0200 Subject: [PATCH 094/127] release v7.3.3 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f855734a..03531984 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [7.3.3] - 2025-04-07 + ### Fixed - Better handle unsupported reference formulation (See [issue 247](https://github.com/RMLio/rmlmapper-java/issues/247)) - Graph Maps with default graph must not be ignored (See [issue 252](https://github.com/RMLio/rmlmapper-java/issues/252)) @@ -799,6 +801,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[7.3.3]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.2...v7.3.3 [7.3.2]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.1...v7.3.2 [7.3.1]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.0...v7.3.1 [7.3.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.2.0...v7.3.0 diff --git a/pom.xml b/pom.xml index 83ec0f17..b0c9adea 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 7.3.2 + 7.3.3 The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. From 58fad00327688b13e67635ca05c9ab86ebb47542 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Wed, 23 Apr 2025 10:39:30 +0200 Subject: [PATCH 095/127] Fixes 'A join between triples maps with different targets might result in quads ending up in the wrong targets' Problem is that Terms (especially subjects and objects) are cached with their targets. But a subject can act as an object after a join, where the original target doesn't count anymore. The fix is removing the targets from the objects coming from the parent triples map while joining. Fixes GitLab issue #283 --- CHANGELOG.md | 3 + src/main/java/be/ugent/rml/Executor.java | 11 ++- .../rml/MapperJoinAndTargetsBugTest.java | 20 +++++ .../joins-and-targets/mapping.rml.ttl | 76 +++++++++++++++++++ .../resources/joins-and-targets/sport.csv | 2 + .../resources/joins-and-targets/sports.ttl | 3 + .../resources/joins-and-targets/student.csv | 3 + .../resources/joins-and-targets/students.ttl | 5 ++ 8 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 src/test/java/be/ugent/rml/MapperJoinAndTargetsBugTest.java create mode 100644 src/test/resources/joins-and-targets/mapping.rml.ttl create mode 100644 src/test/resources/joins-and-targets/sport.csv create mode 100644 src/test/resources/joins-and-targets/sports.ttl create mode 100644 src/test/resources/joins-and-targets/student.csv create mode 100644 src/test/resources/joins-and-targets/students.ttl diff --git a/CHANGELOG.md b/CHANGELOG.md index 03531984..181dcb82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Fixed +- A join between triples maps with different logical targets might result in quads ending up in wrong targets. + ## [7.3.3] - 2025-04-07 ### Fixed diff --git a/src/main/java/be/ugent/rml/Executor.java b/src/main/java/be/ugent/rml/Executor.java index 1d43eacf..7abfc8f9 100644 --- a/src/main/java/be/ugent/rml/Executor.java +++ b/src/main/java/be/ugent/rml/Executor.java @@ -529,7 +529,16 @@ private void generatePredicateObjectsForSubjects(final List sub objects = this.getAllIRIs(pogMapping.getParentTriplesMap()); } - pogs.addAll(combineMultiplePOGs(predicates, objects, poGraphs)); + // Remove targets from objects because they come from another triples map! + // They need to be "cloned" because they are terms that might be cached to use as subject, + // in which case the targets must NOT be removed. + final List objectsWithoutTargets = objects.stream().map(provenancedTerm -> { + List noTargets = Collections.emptyList(); + return new ProvenancedTerm( + provenancedTerm.getTerm(), provenancedTerm.getMetadata(), noTargets); + }).toList(); + + pogs.addAll(combineMultiplePOGs(predicates, objectsWithoutTargets, poGraphs)); } } diff --git a/src/test/java/be/ugent/rml/MapperJoinAndTargetsBugTest.java b/src/test/java/be/ugent/rml/MapperJoinAndTargetsBugTest.java new file mode 100644 index 00000000..747dd54f --- /dev/null +++ b/src/test/java/be/ugent/rml/MapperJoinAndTargetsBugTest.java @@ -0,0 +1,20 @@ +package be.ugent.rml; + +import be.ugent.rml.term.NamedNode; +import be.ugent.rml.term.Term; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.Map; + +public class MapperJoinAndTargetsBugTest extends TestCore { + @Test + public void evaluate_joins_and_targets() { + Map outPaths = new HashMap<>(); + outPaths.put(new NamedNode("http://example.com/base/StudentTarget"), "./joins-and-targets/students.ttl"); + outPaths.put(new NamedNode("http://example.com/base/SportTarget"), "./joins-and-targets/sports.ttl"); + //outPaths.put(new NamedNode("rmlmapper://default.store"), "./new-test-cases/io/RMLTTC0002f/default.nq"); + doMapping("./joins-and-targets/mapping.rml.ttl", outPaths); + } +} diff --git a/src/test/resources/joins-and-targets/mapping.rml.ttl b/src/test/resources/joins-and-targets/mapping.rml.ttl new file mode 100644 index 00000000..1dbc33eb --- /dev/null +++ b/src/test/resources/joins-and-targets/mapping.rml.ttl @@ -0,0 +1,76 @@ +@prefix rr: . +@prefix foaf: . +@prefix ex: . +@prefix xsd: . +@prefix rml: . +@prefix ql: . +@prefix activity: . +@prefix rdfs: . +@prefix rmlt: . +@prefix formats: . + +@base . + + + a rr:TriplesMap; + + rml:logicalSource [ + rml:source "student.csv"; + rml:referenceFormulation ql:CSV + ]; + + rr:subjectMap [ + rr:template "http://example.com/resource/student_{ID}" ; + rml:logicalTarget + ]; + + rr:predicateObjectMap [ + rr:predicate foaf:name ; + rr:objectMap [ rml:reference "Name" ] + ] ; + + rr:predicateObjectMap [ + rr:predicate ; + rr:objectMap [ + a rr:RefObjectMap ; + rr:parentTriplesMap ; + rr:joinCondition [ + rr:child "Sport" ; + rr:parent "ID" ; + ] + ] + ] . + + + a rr:TriplesMap; + + rml:logicalSource [ + rml:source "sport.csv"; + rml:referenceFormulation ql:CSV + ]; + + rr:subjectMap [ + rr:template "http://example.com/resource/sport_{ID}" ; + rml:logicalTarget + ]; + + rr:predicateObjectMap [ + rr:predicate rdfs:label ; + rr:objectMap [ rml:reference "Name" ]; + ]. + + + a rmlt:LogicalTarget ; + rmlt:serialization formats:Turtle ; + rmlt:target [ + a void:Dataset ; + void:dataDump + ] . + + + a rmlt:LogicalTarget ; + rmlt:serialization formats:Turtle ; + rmlt:target [ + a void:Dataset ; + void:dataDump + ] . \ No newline at end of file diff --git a/src/test/resources/joins-and-targets/sport.csv b/src/test/resources/joins-and-targets/sport.csv new file mode 100644 index 00000000..800f4446 --- /dev/null +++ b/src/test/resources/joins-and-targets/sport.csv @@ -0,0 +1,2 @@ +ID,Name +100,Tennis diff --git a/src/test/resources/joins-and-targets/sports.ttl b/src/test/resources/joins-and-targets/sports.ttl new file mode 100644 index 00000000..710cd370 --- /dev/null +++ b/src/test/resources/joins-and-targets/sports.ttl @@ -0,0 +1,3 @@ + + + "Tennis" . diff --git a/src/test/resources/joins-and-targets/student.csv b/src/test/resources/joins-and-targets/student.csv new file mode 100644 index 00000000..1ed4c175 --- /dev/null +++ b/src/test/resources/joins-and-targets/student.csv @@ -0,0 +1,3 @@ +ID,Sport,Name +10,100,Venus Williams +20,,Demi Moore diff --git a/src/test/resources/joins-and-targets/students.ttl b/src/test/resources/joins-and-targets/students.ttl new file mode 100644 index 00000000..4b3411ec --- /dev/null +++ b/src/test/resources/joins-and-targets/students.ttl @@ -0,0 +1,5 @@ + + ; + "Venus Williams" . + + "Demi Moore" . From 29df2efb830b7fcbcea59e8982fdc93a4afcdca7 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Wed, 23 Apr 2025 11:09:14 +0200 Subject: [PATCH 096/127] Remove unused line of code --- src/test/java/be/ugent/rml/MapperJoinAndTargetsBugTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/be/ugent/rml/MapperJoinAndTargetsBugTest.java b/src/test/java/be/ugent/rml/MapperJoinAndTargetsBugTest.java index 747dd54f..4e0cedc0 100644 --- a/src/test/java/be/ugent/rml/MapperJoinAndTargetsBugTest.java +++ b/src/test/java/be/ugent/rml/MapperJoinAndTargetsBugTest.java @@ -14,7 +14,6 @@ public void evaluate_joins_and_targets() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/base/StudentTarget"), "./joins-and-targets/students.ttl"); outPaths.put(new NamedNode("http://example.com/base/SportTarget"), "./joins-and-targets/sports.ttl"); - //outPaths.put(new NamedNode("rmlmapper://default.store"), "./new-test-cases/io/RMLTTC0002f/default.nq"); doMapping("./joins-and-targets/mapping.rml.ttl", outPaths); } } From ad3abc35396473ba12921d452072082b0d7ebc11 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 24 Apr 2025 14:31:51 +0000 Subject: [PATCH 097/127] test: resources: new-test-cases: update test cases --- .gitlab-ci.yml | 2 +- CHANGELOG.md | 3 + .../java/be/ugent/rml/MappingFactory.java | 126 +++++----- .../rml/RecordFunctionExecutorFactory.java | 19 +- .../be/ugent/rml/access/AccessFactory.java | 15 +- src/main/java/be/ugent/rml/cli/Main.java | 6 +- .../be/ugent/rml/records/IteratorFormat.java | 2 + .../be/ugent/rml/target/LocalFileTarget.java | 4 +- .../be/ugent/rml/target/TargetFactory.java | 24 +- .../java/be/ugent/rml/MapperLDESTest.java | 2 +- .../be/ugent/rml/MapperNewRMLCoreCSVTest.java | 215 ------------------ .../ugent/rml/MapperNewRMLCoreJSONTest.java | 127 ++++++++++- .../ugent/rml/MapperNewRMLCoreMySQLTest.java | 118 ---------- .../rml/MapperNewRMLCorePostgresTest.java | 122 ---------- .../be/ugent/rml/MapperNewRMLCoreXMLTest.java | 190 ---------------- .../ugent/rml/MapperNewRMLIOSourceTest.java | 114 +++++++--- .../ugent/rml/MapperNewRMLIOTargetTest.java | 62 ++--- src/test/java/be/ugent/rml/TestCore.java | 2 +- .../core/RMLTC0000-CSV/output.nq | 1 - .../core/RMLTC0000-CSV/student.csv | 1 - .../core/RMLTC0000-JSON/README.md | 48 ++++ .../core/RMLTC0000-JSON/mapping.ttl | 4 +- .../core/RMLTC0000-MySQL/mapping.ttl | 25 -- .../core/RMLTC0000-MySQL/output.nq | 1 - .../core/RMLTC0000-MySQL/resource.sql | 5 - .../core/RMLTC0000-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0000-PostgreSQL/output.nq | 1 - .../core/RMLTC0000-PostgreSQL/resource.sql | 4 - .../core/RMLTC0000-SPARQL/mapping.ttl | 28 --- .../core/RMLTC0000-SPARQL/resource.ttl | 1 - .../core/RMLTC0000-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0000-SQLServer/output.nq | 1 - .../core/RMLTC0000-SQLServer/resource.sql | 7 - .../core/RMLTC0000-XML/mapping.ttl | 21 -- .../core/RMLTC0000-XML/output.nq | 1 - .../core/RMLTC0000-XML/student.xml | 5 - .../core/RMLTC0001a-CSV/output.nq | 2 - .../core/RMLTC0001a-CSV/student.csv | 2 - .../core/RMLTC0001a-JSON/README.md | 51 +++++ .../core/RMLTC0001a-JSON/mapping.ttl | 4 +- .../core/RMLTC0001a-MySQL/mapping.ttl | 25 -- .../core/RMLTC0001a-MySQL/output.nq | 1 - .../core/RMLTC0001a-MySQL/resource.sql | 6 - .../core/RMLTC0001a-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0001a-PostgreSQL/output.nq | 1 - .../core/RMLTC0001a-PostgreSQL/resource.sql | 5 - .../core/RMLTC0001a-SPARQL/mapping.ttl | 29 --- .../core/RMLTC0001a-SPARQL/output.nq | 1 - .../core/RMLTC0001a-SPARQL/resource.ttl | 4 - .../core/RMLTC0001a-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0001a-SQLServer/output.nq | 1 - .../core/RMLTC0001a-SQLServer/resource.sql | 8 - .../core/RMLTC0001a-XML/mapping.ttl | 21 -- .../core/RMLTC0001a-XML/output.nq | 2 - .../core/RMLTC0001a-XML/student.xml | 7 - .../core/RMLTC0001b-CSV/output.nq | 2 - .../core/RMLTC0001b-CSV/student.csv | 2 - .../core/RMLTC0001b-JSON/README.md | 52 +++++ .../core/RMLTC0001b-JSON/mapping.ttl | 4 +- .../core/RMLTC0001b-MySQL/mapping.ttl | 25 -- .../core/RMLTC0001b-MySQL/output.nq | 1 - .../core/RMLTC0001b-MySQL/resource.sql | 6 - .../core/RMLTC0001b-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0001b-PostgreSQL/output.nq | 1 - .../core/RMLTC0001b-PostgreSQL/resource.sql | 5 - .../core/RMLTC0001b-SPARQL/mapping.ttl | 29 --- .../core/RMLTC0001b-SPARQL/output.nq | 1 - .../core/RMLTC0001b-SPARQL/resource.ttl | 4 - .../core/RMLTC0001b-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0001b-SQLServer/output.nq | 1 - .../core/RMLTC0001b-SQLServer/resource.sql | 8 - .../core/RMLTC0001b-XML/mapping.ttl | 22 -- .../core/RMLTC0001b-XML/output.nq | 2 - .../core/RMLTC0001b-XML/student.xml | 7 - .../core/RMLTC0002a-CSV/mapping.ttl | 27 --- .../core/RMLTC0002a-CSV/output.nq | 4 - .../core/RMLTC0002a-CSV/student.csv | 2 - .../core/RMLTC0002a-JSON/README.md | 61 +++++ .../core/RMLTC0002a-JSON/mapping.ttl | 6 +- .../core/RMLTC0002a-MySQL/mapping.ttl | 32 --- .../core/RMLTC0002a-MySQL/output.nq | 3 - .../core/RMLTC0002a-MySQL/resource.sql | 8 - .../core/RMLTC0002a-PostgreSQL/mapping.ttl | 32 --- .../core/RMLTC0002a-PostgreSQL/output.nq | 3 - .../core/RMLTC0002a-PostgreSQL/resource.sql | 7 - .../core/RMLTC0002a-SPARQL/mapping.ttl | 38 ---- .../core/RMLTC0002a-SPARQL/output.nq | 3 - .../core/RMLTC0002a-SPARQL/resource.ttl | 6 - .../core/RMLTC0002a-SQLServer/mapping.ttl | 32 --- .../core/RMLTC0002a-SQLServer/output.nq | 3 - .../core/RMLTC0002a-SQLServer/resource.sql | 10 - .../core/RMLTC0002a-XML/mapping.ttl | 28 --- .../core/RMLTC0002a-XML/output.nq | 4 - .../core/RMLTC0002a-XML/student.xml | 8 - .../core/RMLTC0002b-CSV/mapping.ttl | 21 -- .../core/RMLTC0002b-CSV/output.nq | 2 - .../core/RMLTC0002b-CSV/student.csv | 2 - .../core/RMLTC0002b-JSON/README.md | 53 +++++ .../core/RMLTC0002b-JSON/mapping.ttl | 4 +- .../core/RMLTC0002b-MySQL/mapping.ttl | 26 --- .../core/RMLTC0002b-MySQL/output.nq | 2 - .../core/RMLTC0002b-MySQL/resource.sql | 7 - .../core/RMLTC0002b-PostgreSQL/mapping.ttl | 26 --- .../core/RMLTC0002b-PostgreSQL/output.nq | 1 - .../core/RMLTC0002b-PostgreSQL/resource.sql | 6 - .../core/RMLTC0002b-SPARQL/mapping.ttl | 32 --- .../core/RMLTC0002b-SPARQL/output.nq | 1 - .../core/RMLTC0002b-SPARQL/resource.ttl | 6 - .../core/RMLTC0002b-SQLServer/mapping.ttl | 26 --- .../core/RMLTC0002b-SQLServer/output.nq | 2 - .../core/RMLTC0002b-SQLServer/resource.sql | 9 - .../core/RMLTC0002b-XML/mapping.ttl | 22 -- .../core/RMLTC0002b-XML/output.nq | 2 - .../core/RMLTC0002b-XML/student.xml | 8 - .../core/RMLTC0002c-CSV/mapping.ttl | 20 -- .../core/RMLTC0002c-CSV/student.csv | 2 - .../core/RMLTC0002c-MySQL/mapping.ttl | 25 -- .../core/RMLTC0002c-MySQL/resource.sql | 7 - .../core/RMLTC0002c-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0002c-PostgreSQL/resource.sql | 6 - .../core/RMLTC0002c-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0002c-SQLServer/resource.sql | 9 - .../core/RMLTC0002d-MySQL/mapping.ttl | 26 --- .../core/RMLTC0002d-MySQL/output.nq | 1 - .../core/RMLTC0002d-MySQL/resource.sql | 7 - .../core/RMLTC0002d-PostgreSQL/mapping.ttl | 26 --- .../core/RMLTC0002d-PostgreSQL/output.nq | 1 - .../core/RMLTC0002d-PostgreSQL/resource.sql | 6 - .../core/RMLTC0002d-SQLServer/mapping.ttl | 26 --- .../core/RMLTC0002d-SQLServer/output.nq | 1 - .../core/RMLTC0002d-SQLServer/resource.sql | 9 - .../core/RMLTC0002e-CSV/mapping.ttl | 20 -- .../core/RMLTC0002e-CSV/student.csv | 2 - .../core/RMLTC0002e-JSON/README.md | 45 ++++ .../core/RMLTC0002e-JSON/mapping.ttl | 4 +- .../core/RMLTC0002e-MySQL/mapping.ttl | 25 -- .../core/RMLTC0002e-MySQL/resource.sql | 7 - .../core/RMLTC0002e-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0002e-PostgreSQL/resource.sql | 6 - .../core/RMLTC0002e-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0002e-SQLServer/resource.sql | 9 - .../core/RMLTC0002e-XML/mapping.ttl | 21 -- .../core/RMLTC0002e-XML/student.xml | 8 - .../core/RMLTC0002f-MySQL/mapping.ttl | 32 --- .../core/RMLTC0002f-MySQL/resource.sql | 7 - .../core/RMLTC0002f-PostgreSQL/mapping.ttl | 32 --- .../core/RMLTC0002f-PostgreSQL/resource.sql | 6 - .../core/RMLTC0002f-SQLServer/mapping.ttl | 32 --- .../core/RMLTC0002f-SQLServer/resource.sql | 7 - .../core/RMLTC0002g-JSON/README.md | 45 ++++ .../core/RMLTC0002g-JSON/mapping.ttl | 4 +- .../core/RMLTC0002g-MySQL/mapping.ttl | 25 -- .../core/RMLTC0002g-MySQL/resource.sql | 7 - .../core/RMLTC0002g-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0002g-PostgreSQL/resource.sql | 6 - .../core/RMLTC0002g-SPARQL/mapping.ttl | 31 --- .../core/RMLTC0002g-SPARQL/resource.ttl | 6 - .../core/RMLTC0002g-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0002g-SQLServer/resource.sql | 9 - .../core/RMLTC0002h-MySQL/mapping.ttl | 25 -- .../core/RMLTC0002h-MySQL/resource.sql | 7 - .../core/RMLTC0002h-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0002h-PostgreSQL/resource.sql | 6 - .../core/RMLTC0002h-SPARQL/mapping.ttl | 30 --- .../core/RMLTC0002h-SPARQL/resource.ttl | 6 - .../core/RMLTC0002h-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0002h-SQLServer/resource.sql | 8 - .../core/RMLTC0002i-MySQL/mapping.ttl | 25 -- .../core/RMLTC0002i-MySQL/resource.sql | 7 - .../core/RMLTC0002i-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0002i-PostgreSQL/resource.sql | 6 - .../core/RMLTC0002i-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0002i-SQLServer/resource.sql | 9 - .../core/RMLTC0002j-MySQL/mapping.ttl | 25 -- .../core/RMLTC0002j-MySQL/resource.sql | 7 - .../core/RMLTC0002j-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0002j-PostgreSQL/resource.sql | 6 - .../core/RMLTC0002j-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0002j-SQLServer/resource.sql | 9 - .../core/RMLTC0003a-MySQL/mapping.ttl | 25 -- .../core/RMLTC0003a-MySQL/resource.sql | 8 - .../core/RMLTC0003a-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0003a-PostgreSQL/resource.sql | 7 - .../core/RMLTC0003a-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0003a-SQLServer/resource.sql | 10 - .../core/RMLTC0003b-MySQL/mapping.ttl | 26 --- .../core/RMLTC0003b-MySQL/output.nq | 1 - .../core/RMLTC0003b-MySQL/resource.sql | 8 - .../core/RMLTC0003b-PostgreSQL/mapping.ttl | 26 --- .../core/RMLTC0003b-PostgreSQL/output.nq | 1 - .../core/RMLTC0003b-PostgreSQL/resource.sql | 7 - .../core/RMLTC0003b-SQLServer/mapping.ttl | 26 --- .../core/RMLTC0003b-SQLServer/output.nq | 1 - .../core/RMLTC0003b-SQLServer/resource.sql | 10 - .../core/RMLTC0003c-CSV/mapping.ttl | 21 -- .../core/RMLTC0003c-CSV/output.nq | 1 - .../core/RMLTC0003c-CSV/student.csv | 2 - .../core/RMLTC0003c-JSON/README.md | 53 +++++ .../core/RMLTC0003c-JSON/mapping.ttl | 4 +- .../core/RMLTC0003c-MySQL/mapping.ttl | 26 --- .../core/RMLTC0003c-MySQL/output.nq | 1 - .../core/RMLTC0003c-MySQL/resource.sql | 9 - .../core/RMLTC0003c-PostgreSQL/mapping.ttl | 26 --- .../core/RMLTC0003c-PostgreSQL/output.nq | 1 - .../core/RMLTC0003c-PostgreSQL/resource.sql | 7 - .../core/RMLTC0003c-SPARQL/mapping.ttl | 33 --- .../core/RMLTC0003c-SPARQL/output.nq | 1 - .../core/RMLTC0003c-SPARQL/resource.ttl | 7 - .../core/RMLTC0003c-SQLServer/mapping.ttl | 26 --- .../core/RMLTC0003c-SQLServer/output.nq | 1 - .../core/RMLTC0003c-SQLServer/resource.sql | 10 - .../core/RMLTC0003c-XML/mapping.ttl | 22 -- .../core/RMLTC0003c-XML/output.nq | 1 - .../core/RMLTC0003c-XML/student.xml | 9 - .../core/RMLTC0004a-CSV/output.nq | 5 - .../core/RMLTC0004a-CSV/student_sport.csv | 2 - .../core/RMLTC0004a-JSON/README.md | 77 +++++++ .../core/RMLTC0004a-JSON/mapping.ttl | 8 +- .../core/RMLTC0004a-MySQL/mapping.ttl | 44 ---- .../core/RMLTC0004a-MySQL/output.nq | 5 - .../core/RMLTC0004a-MySQL/resource.sql | 8 - .../core/RMLTC0004a-MySQL/student_sport.csv | 2 - .../core/RMLTC0004a-PostgreSQL/mapping.ttl | 44 ---- .../core/RMLTC0004a-PostgreSQL/output.nq | 4 - .../core/RMLTC0004a-PostgreSQL/resource.sql | 7 - .../RMLTC0004a-PostgreSQL/student_sport.csv | 2 - .../core/RMLTC0004a-SPARQL/mapping.ttl | 66 ------ .../core/RMLTC0004a-SPARQL/output.nq | 4 - .../core/RMLTC0004a-SPARQL/resource.ttl | 8 - .../core/RMLTC0004a-SQLServer/mapping.ttl | 44 ---- .../core/RMLTC0004a-SQLServer/output.nq | 5 - .../core/RMLTC0004a-SQLServer/resource.sql | 7 - .../RMLTC0004a-SQLServer/student_sport.csv | 2 - .../core/RMLTC0004a-XML/output.nq | 5 - .../core/RMLTC0004a-XML/student_sport.xml | 8 - .../core/RMLTC0004b-CSV/mapping.ttl | 21 -- .../core/RMLTC0004b-CSV/student.csv | 2 - .../core/RMLTC0004b-JSON/README.md | 45 ++++ .../core/RMLTC0004b-JSON/mapping.ttl | 4 +- .../core/RMLTC0004b-MySQL/mapping.ttl | 26 --- .../core/RMLTC0004b-MySQL/resource.sql | 6 - .../core/RMLTC0004b-PostgreSQL/mapping.ttl | 26 --- .../core/RMLTC0004b-PostgreSQL/resource.sql | 5 - .../core/RMLTC0004b-SPARQL/mapping.ttl | 36 --- .../core/RMLTC0004b-SPARQL/resource.ttl | 4 - .../core/RMLTC0004b-SQLServer/mapping.ttl | 26 --- .../core/RMLTC0004b-SQLServer/resource.sql | 6 - .../core/RMLTC0004b-XML/mapping.ttl | 22 -- .../core/RMLTC0004b-XML/student.xml | 7 - .../core/RMLTC0005a-CSV/ious.csv | 4 - .../core/RMLTC0005a-CSV/output.nq | 5 - .../core/RMLTC0005a-JSON/README.md | 70 ++++++ .../core/RMLTC0005a-JSON/mapping.ttl | 4 +- .../core/RMLTC0005a-MySQL/mapping.ttl | 27 --- .../core/RMLTC0005a-MySQL/output.nq | 5 - .../core/RMLTC0005a-MySQL/resource.sql | 9 - .../core/RMLTC0005a-PostgreSQL/mapping.ttl | 27 --- .../core/RMLTC0005a-PostgreSQL/output.nq | 5 - .../core/RMLTC0005a-PostgreSQL/resource.sql | 8 - .../core/RMLTC0005a-SQLServer/mapping.ttl | 27 --- .../core/RMLTC0005a-SQLServer/output.nq | 5 - .../core/RMLTC0005a-SQLServer/resource.sql | 10 - .../core/RMLTC0005a-XML/ious.xml | 19 -- .../core/RMLTC0005a-XML/mapping.ttl | 23 -- .../core/RMLTC0005a-XML/output.nq | 5 - .../core/RMLTC0005b-MySQL/mapping.ttl | 36 --- .../core/RMLTC0005b-MySQL/output.nq | 9 - .../core/RMLTC0005b-MySQL/resource.sql | 9 - .../core/RMLTC0005b-PostgreSQL/mapping.ttl | 36 --- .../core/RMLTC0005b-PostgreSQL/output.nq | 9 - .../core/RMLTC0005b-PostgreSQL/resource.sql | 8 - .../core/RMLTC0005b-SQLServer/mapping.ttl | 36 --- .../core/RMLTC0005b-SQLServer/output.nq | 9 - .../core/RMLTC0005b-SQLServer/resource.sql | 9 - .../core/RMLTC0006a-CSV/mapping.ttl | 25 -- .../core/RMLTC0006a-CSV/output.nq | 1 - .../core/RMLTC0006a-CSV/student.csv | 2 - .../core/RMLTC0006a-JSON/README.md | 56 +++++ .../core/RMLTC0006a-MySQL/mapping.ttl | 30 --- .../core/RMLTC0006a-MySQL/output.nq | 1 - .../core/RMLTC0006a-MySQL/resource.sql | 9 - .../core/RMLTC0006a-PostgreSQL/mapping.ttl | 30 --- .../core/RMLTC0006a-PostgreSQL/output.nq | 1 - .../core/RMLTC0006a-PostgreSQL/resource.sql | 8 - .../core/RMLTC0006a-SPARQL/mapping.ttl | 39 ---- .../core/RMLTC0006a-SPARQL/output.nq | 1 - .../core/RMLTC0006a-SPARQL/resource.ttl | 7 - .../core/RMLTC0006a-SQLServer/mapping.ttl | 30 --- .../core/RMLTC0006a-SQLServer/output.nq | 1 - .../core/RMLTC0006a-SQLServer/resource.sql | 8 - .../core/RMLTC0006a-XML/mapping.ttl | 26 --- .../core/RMLTC0006a-XML/output.nq | 1 - .../core/RMLTC0006a-XML/student.xml | 9 - .../core/RMLTC0007a-CSV/output.nq | 2 - .../core/RMLTC0007a-CSV/student.csv | 2 - .../core/RMLTC0007a-JSON/README.md | 52 +++++ .../core/RMLTC0007a-JSON/mapping.ttl | 2 +- .../core/RMLTC0007a-MySQL/mapping.ttl | 24 -- .../core/RMLTC0007a-MySQL/output.nq | 2 - .../core/RMLTC0007a-MySQL/resource.sql | 9 - .../core/RMLTC0007a-PostgreSQL/mapping.ttl | 24 -- .../core/RMLTC0007a-PostgreSQL/output.nq | 2 - .../core/RMLTC0007a-PostgreSQL/resource.sql | 8 - .../core/RMLTC0007a-SPARQL/mapping.ttl | 31 --- .../core/RMLTC0007a-SPARQL/output.nq | 2 - .../core/RMLTC0007a-SPARQL/resource.ttl | 7 - .../core/RMLTC0007a-SQLServer/mapping.ttl | 24 -- .../core/RMLTC0007a-SQLServer/output.nq | 2 - .../core/RMLTC0007a-SQLServer/resource.sql | 8 - .../core/RMLTC0007a-XML/output.nq | 2 - .../core/RMLTC0007a-XML/student.xml | 9 - .../core/RMLTC0007b-CSV/mapping.ttl | 26 --- .../core/RMLTC0007b-CSV/output.nq | 3 - .../core/RMLTC0007b-CSV/student.csv | 2 - .../core/RMLTC0007b-JSON/README.md | 60 +++++ .../core/RMLTC0007b-JSON/mapping.ttl | 4 +- .../core/RMLTC0007b-MySQL/mapping.ttl | 31 --- .../core/RMLTC0007b-MySQL/output.nq | 3 - .../core/RMLTC0007b-MySQL/resource.sql | 9 - .../core/RMLTC0007b-PostgreSQL/mapping.ttl | 31 --- .../core/RMLTC0007b-PostgreSQL/output.nq | 3 - .../core/RMLTC0007b-PostgreSQL/resource.sql | 8 - .../core/RMLTC0007b-SPARQL/mapping.ttl | 38 ---- .../core/RMLTC0007b-SPARQL/output.nq | 3 - .../core/RMLTC0007b-SPARQL/resource.ttl | 7 - .../core/RMLTC0007b-SQLServer/mapping.ttl | 31 --- .../core/RMLTC0007b-SQLServer/output.nq | 3 - .../core/RMLTC0007b-SQLServer/resource.sql | 8 - .../core/RMLTC0007b-XML/mapping.ttl | 27 --- .../core/RMLTC0007b-XML/output.nq | 3 - .../core/RMLTC0007b-XML/student.xml | 9 - .../core/RMLTC0007c-CSV/mapping.ttl | 27 --- .../core/RMLTC0007c-CSV/output.nq | 5 - .../core/RMLTC0007c-CSV/student.csv | 2 - .../core/RMLTC0007c-JSON/README.md | 63 +++++ .../core/RMLTC0007c-JSON/mapping.ttl | 6 +- .../core/RMLTC0007c-MySQL/mapping.ttl | 32 --- .../core/RMLTC0007c-MySQL/output.nq | 5 - .../core/RMLTC0007c-MySQL/resource.sql | 9 - .../core/RMLTC0007c-PostgreSQL/mapping.ttl | 32 --- .../core/RMLTC0007c-PostgreSQL/output.nq | 5 - .../core/RMLTC0007c-PostgreSQL/resource.sql | 8 - .../core/RMLTC0007c-SPARQL/mapping.ttl | 34 --- .../core/RMLTC0007c-SPARQL/output.nq | 4 - .../core/RMLTC0007c-SPARQL/resource.ttl | 7 - .../core/RMLTC0007c-SQLServer/mapping.ttl | 32 --- .../core/RMLTC0007c-SQLServer/output.nq | 5 - .../core/RMLTC0007c-SQLServer/resource.sql | 8 - .../core/RMLTC0007c-XML/mapping.ttl | 28 --- .../core/RMLTC0007c-XML/output.nq | 5 - .../core/RMLTC0007c-XML/student.xml | 9 - .../core/RMLTC0007d-CSV/mapping.ttl | 33 --- .../core/RMLTC0007d-CSV/output.nq | 5 - .../core/RMLTC0007d-CSV/student.csv | 2 - .../core/RMLTC0007d-JSON/README.md | 69 ++++++ .../core/RMLTC0007d-JSON/mapping.ttl | 6 +- .../core/RMLTC0007d-MySQL/mapping.ttl | 38 ---- .../core/RMLTC0007d-MySQL/output.nq | 5 - .../core/RMLTC0007d-MySQL/resource.sql | 9 - .../core/RMLTC0007d-PostgreSQL/mapping.ttl | 38 ---- .../core/RMLTC0007d-PostgreSQL/output.nq | 5 - .../core/RMLTC0007d-PostgreSQL/resource.sql | 8 - .../core/RMLTC0007d-SPARQL/mapping.ttl | 40 ---- .../core/RMLTC0007d-SPARQL/output.nq | 4 - .../core/RMLTC0007d-SPARQL/resource.ttl | 7 - .../core/RMLTC0007d-SQLServer/mapping.ttl | 38 ---- .../core/RMLTC0007d-SQLServer/output.nq | 5 - .../core/RMLTC0007d-SQLServer/resource.sql | 8 - .../core/RMLTC0007d-XML/mapping.ttl | 34 --- .../core/RMLTC0007d-XML/output.nq | 5 - .../core/RMLTC0007d-XML/student.xml | 9 - .../core/RMLTC0007e-CSV/mapping.ttl | 28 --- .../core/RMLTC0007e-CSV/output.nq | 4 - .../core/RMLTC0007e-CSV/student.csv | 2 - .../core/RMLTC0007e-JSON/README.md | 62 +++++ .../core/RMLTC0007e-JSON/mapping.ttl | 6 +- .../core/RMLTC0007e-MySQL/mapping.ttl | 33 --- .../core/RMLTC0007e-MySQL/output.nq | 4 - .../core/RMLTC0007e-MySQL/resource.sql | 9 - .../core/RMLTC0007e-PostgreSQL/mapping.ttl | 33 --- .../core/RMLTC0007e-PostgreSQL/output.nq | 4 - .../core/RMLTC0007e-PostgreSQL/resource.sql | 8 - .../core/RMLTC0007e-SPARQL/mapping.ttl | 29 --- .../core/RMLTC0007e-SPARQL/output.nq | 2 - .../core/RMLTC0007e-SPARQL/resource.ttl | 7 - .../core/RMLTC0007e-SQLServer/mapping.ttl | 33 --- .../core/RMLTC0007e-SQLServer/output.nq | 4 - .../core/RMLTC0007e-SQLServer/resource.sql | 8 - .../core/RMLTC0007e-XML/mapping.ttl | 29 --- .../core/RMLTC0007e-XML/output.nq | 4 - .../core/RMLTC0007e-XML/student.xml | 8 - .../core/RMLTC0007f-CSV/mapping.ttl | 31 --- .../core/RMLTC0007f-CSV/output.nq | 4 - .../core/RMLTC0007f-CSV/student.csv | 2 - .../core/RMLTC0007f-JSON/README.md | 66 ++++++ .../core/RMLTC0007f-JSON/mapping.ttl | 6 +- .../core/RMLTC0007f-MySQL/mapping.ttl | 36 --- .../core/RMLTC0007f-MySQL/output.nq | 4 - .../core/RMLTC0007f-MySQL/resource.sql | 9 - .../core/RMLTC0007f-PostgreSQL/mapping.ttl | 36 --- .../core/RMLTC0007f-PostgreSQL/output.nq | 4 - .../core/RMLTC0007f-PostgreSQL/resource.sql | 8 - .../core/RMLTC0007f-SPARQL/mapping.ttl | 33 --- .../core/RMLTC0007f-SPARQL/output.nq | 2 - .../core/RMLTC0007f-SPARQL/resource.ttl | 7 - .../core/RMLTC0007f-SQLServer/mapping.ttl | 36 --- .../core/RMLTC0007f-SQLServer/output.nq | 4 - .../core/RMLTC0007f-SQLServer/resource.sql | 8 - .../core/RMLTC0007f-XML/mapping.ttl | 32 --- .../core/RMLTC0007f-XML/output.nq | 4 - .../core/RMLTC0007f-XML/student.xml | 9 - .../core/RMLTC0007g-CSV/mapping.ttl | 21 -- .../core/RMLTC0007g-CSV/output.nq | 2 - .../core/RMLTC0007g-CSV/student.csv | 2 - .../core/RMLTC0007g-JSON/README.md | 54 +++++ .../core/RMLTC0007g-JSON/mapping.ttl | 4 +- .../core/RMLTC0007g-MySQL/mapping.ttl | 26 --- .../core/RMLTC0007g-MySQL/output.nq | 2 - .../core/RMLTC0007g-MySQL/resource.sql | 9 - .../core/RMLTC0007g-PostgreSQL/mapping.ttl | 26 --- .../core/RMLTC0007g-PostgreSQL/output.nq | 2 - .../core/RMLTC0007g-PostgreSQL/resource.sql | 8 - .../core/RMLTC0007g-SPARQL/mapping.ttl | 33 --- .../core/RMLTC0007g-SPARQL/output.nq | 2 - .../core/RMLTC0007g-SPARQL/resource.ttl | 7 - .../core/RMLTC0007g-SQLServer/mapping.ttl | 26 --- .../core/RMLTC0007g-SQLServer/output.nq | 2 - .../core/RMLTC0007g-SQLServer/resource.sql | 8 - .../core/RMLTC0007g-XML/mapping.ttl | 22 -- .../core/RMLTC0007g-XML/output.nq | 2 - .../core/RMLTC0007g-XML/student.xml | 9 - .../core/RMLTC0007h-CSV/mapping.ttl | 24 -- .../core/RMLTC0007h-CSV/student.csv | 2 - .../core/RMLTC0007h-JSON/README.md | 50 ++++ .../core/RMLTC0007h-JSON/mapping.ttl | 6 +- .../core/RMLTC0007h-MySQL/mapping.ttl | 29 --- .../core/RMLTC0007h-MySQL/resource.sql | 9 - .../core/RMLTC0007h-PostgreSQL/mapping.ttl | 29 --- .../core/RMLTC0007h-PostgreSQL/resource.sql | 8 - .../core/RMLTC0007h-SPARQL/mapping.ttl | 36 --- .../core/RMLTC0007h-SPARQL/resource.ttl | 7 - .../core/RMLTC0007h-SQLServer/mapping.ttl | 29 --- .../core/RMLTC0007h-SQLServer/resource.sql | 8 - .../core/RMLTC0007h-XML/mapping.ttl | 25 -- .../core/RMLTC0007h-XML/student.xml | 9 - .../core/RMLTC0008a-CSV/mapping.ttl | 38 ---- .../core/RMLTC0008a-CSV/output.nq | 5 - .../core/RMLTC0008a-CSV/student.csv | 2 - .../core/RMLTC0008a-JSON/README.md | 74 ++++++ .../core/RMLTC0008a-JSON/mapping.ttl | 10 +- .../core/RMLTC0008a-MySQL/mapping.ttl | 43 ---- .../core/RMLTC0008a-MySQL/output.nq | 6 - .../core/RMLTC0008a-MySQL/resource.sql | 9 - .../core/RMLTC0008a-PostgreSQL/mapping.ttl | 43 ---- .../core/RMLTC0008a-PostgreSQL/output.nq | 6 - .../core/RMLTC0008a-PostgreSQL/resource.sql | 8 - .../core/RMLTC0008a-SPARQL/mapping.ttl | 51 ----- .../core/RMLTC0008a-SPARQL/output.nq | 5 - .../core/RMLTC0008a-SPARQL/resource.ttl | 9 - .../core/RMLTC0008a-SQLServer/mapping.ttl | 43 ---- .../core/RMLTC0008a-SQLServer/output.nq | 6 - .../core/RMLTC0008a-SQLServer/resource.sql | 8 - .../core/RMLTC0008a-XML/mapping.ttl | 39 ---- .../core/RMLTC0008a-XML/output.nq | 5 - .../core/RMLTC0008a-XML/student.xml | 9 - .../core/RMLTC0008b-CSV/mapping.ttl | 53 ----- .../core/RMLTC0008b-CSV/output.nq | 7 - .../core/RMLTC0008b-CSV/student.csv | 2 - .../core/RMLTC0008b-JSON/README.md | 92 ++++++++ .../core/RMLTC0008b-JSON/mapping.ttl | 8 +- .../core/RMLTC0008b-MySQL/mapping.ttl | 56 ----- .../core/RMLTC0008b-MySQL/output.nq | 7 - .../core/RMLTC0008b-MySQL/resource.sql | 9 - .../core/RMLTC0008b-PostgreSQL/mapping.ttl | 56 ----- .../core/RMLTC0008b-PostgreSQL/output.nq | 7 - .../core/RMLTC0008b-PostgreSQL/resource.sql | 8 - .../core/RMLTC0008b-SPARQL/mapping.ttl | 77 ------- .../core/RMLTC0008b-SPARQL/output.nq | 7 - .../core/RMLTC0008b-SPARQL/resource.ttl | 9 - .../core/RMLTC0008b-SQLServer/mapping.ttl | 56 ----- .../core/RMLTC0008b-SQLServer/output.nq | 7 - .../core/RMLTC0008b-SQLServer/resource.sql | 8 - .../core/RMLTC0008b-XML/mapping.ttl | 55 ----- .../core/RMLTC0008b-XML/output.nq | 7 - .../core/RMLTC0008b-XML/student.xml | 9 - .../core/RMLTC0008c-CSV/mapping.ttl | 21 -- .../core/RMLTC0008c-CSV/output.nq | 3 - .../core/RMLTC0008c-CSV/student.csv | 2 - .../core/RMLTC0008c-JSON/README.md | 55 +++++ .../core/RMLTC0008c-JSON/mapping.ttl | 4 +- .../core/RMLTC0008c-MySQL/mapping.ttl | 26 --- .../core/RMLTC0008c-MySQL/output.nq | 3 - .../core/RMLTC0008c-MySQL/resource.sql | 9 - .../core/RMLTC0008c-PostgreSQL/mapping.ttl | 26 --- .../core/RMLTC0008c-PostgreSQL/output.nq | 3 - .../core/RMLTC0008c-PostgreSQL/resource.sql | 8 - .../core/RMLTC0008c-SPARQL/mapping.ttl | 36 --- .../core/RMLTC0008c-SPARQL/output.nq | 3 - .../core/RMLTC0008c-SPARQL/resource.ttl | 9 - .../core/RMLTC0008c-SQLServer/mapping.ttl | 26 --- .../core/RMLTC0008c-SQLServer/output.nq | 3 - .../core/RMLTC0008c-SQLServer/resource.sql | 8 - .../core/RMLTC0008c-XML/mapping.ttl | 22 -- .../core/RMLTC0008c-XML/output.nq | 3 - .../core/RMLTC0008c-XML/student.xml | 9 - .../core/RMLTC0009a-CSV/mapping.ttl | 48 ---- .../core/RMLTC0009a-CSV/output.nq | 4 - .../core/RMLTC0009a-CSV/sport.csv | 2 - .../core/RMLTC0009a-CSV/student.csv | 3 - .../core/RMLTC0009a-JSON/README.md | 103 +++++++++ .../core/RMLTC0009a-JSON/mapping.ttl | 12 +- .../core/RMLTC0009a-JSON/student.json | 1 - .../core/RMLTC0009a-MySQL/mapping.ttl | 51 ----- .../core/RMLTC0009a-MySQL/output.nq | 4 - .../core/RMLTC0009a-MySQL/resource.sql | 18 -- .../core/RMLTC0009a-PostgreSQL/mapping.ttl | 51 ----- .../core/RMLTC0009a-PostgreSQL/note.md | 4 - .../core/RMLTC0009a-PostgreSQL/output.nq | 4 - .../core/RMLTC0009a-PostgreSQL/resource.sql | 17 -- .../core/RMLTC0009a-SPARQL/mapping.ttl | 79 ------- .../core/RMLTC0009a-SPARQL/output.nq | 4 - .../core/RMLTC0009a-SPARQL/resource1.ttl | 13 -- .../core/RMLTC0009a-SPARQL/resource2.ttl | 6 - .../core/RMLTC0009a-SQLServer/mapping.ttl | 51 ----- .../core/RMLTC0009a-SQLServer/output.nq | 4 - .../core/RMLTC0009a-SQLServer/resource.sql | 17 -- .../core/RMLTC0009a-XML/mapping.ttl | 50 ---- .../core/RMLTC0009a-XML/output.nq | 4 - .../core/RMLTC0009a-XML/sport.xml | 8 - .../core/RMLTC0009a-XML/student.xml | 13 -- .../core/RMLTC0009b-CSV/mapping.ttl | 54 ----- .../core/RMLTC0009b-CSV/output.nq | 8 - .../core/RMLTC0009b-CSV/sport.csv | 2 - .../core/RMLTC0009b-CSV/student.csv | 3 - .../core/RMLTC0009b-JSON/README.md | 113 +++++++++ .../core/RMLTC0009b-JSON/mapping.ttl | 12 +- .../core/RMLTC0009b-JSON/student.json | 1 - .../core/RMLTC0009b-MySQL/mapping.ttl | 57 ----- .../core/RMLTC0009b-MySQL/output.nq | 8 - .../core/RMLTC0009b-MySQL/resource.sql | 18 -- .../core/RMLTC0009b-PostgreSQL/mapping.ttl | 57 ----- .../core/RMLTC0009b-PostgreSQL/note.md | 4 - .../core/RMLTC0009b-PostgreSQL/output.nq | 8 - .../core/RMLTC0009b-PostgreSQL/resource.sql | 17 -- .../core/RMLTC0009b-SPARQL/mapping.ttl | 85 ------- .../core/RMLTC0009b-SPARQL/output.nq | 8 - .../core/RMLTC0009b-SPARQL/resource1.ttl | 13 -- .../core/RMLTC0009b-SPARQL/resource2.ttl | 6 - .../core/RMLTC0009b-SQLServer/mapping.ttl | 57 ----- .../core/RMLTC0009b-SQLServer/output.nq | 8 - .../core/RMLTC0009b-SQLServer/resource.sql | 18 -- .../core/RMLTC0009b-XML/mapping.ttl | 56 ----- .../core/RMLTC0009b-XML/output.nq | 8 - .../core/RMLTC0009b-XML/sport.xml | 8 - .../core/RMLTC0009b-XML/student.xml | 13 -- .../core/RMLTC0009c-MySQL/mapping.ttl | 29 --- .../core/RMLTC0009c-MySQL/output.nq | 4 - .../core/RMLTC0009c-MySQL/resource.sql | 21 -- .../core/RMLTC0009c-PostgreSQL/mapping.ttl | 29 --- .../core/RMLTC0009c-PostgreSQL/output.nq | 4 - .../core/RMLTC0009c-PostgreSQL/resource.sql | 20 -- .../core/RMLTC0009c-SQLServer/mapping.ttl | 29 --- .../core/RMLTC0009c-SQLServer/output.nq | 4 - .../core/RMLTC0009c-SQLServer/resource.sql | 21 -- .../core/RMLTC0009d-MySQL/mapping.ttl | 35 --- .../core/RMLTC0009d-MySQL/output.nq | 7 - .../core/RMLTC0009d-MySQL/resource.sql | 21 -- .../core/RMLTC0009d-PostgreSQL/mapping.ttl | 35 --- .../core/RMLTC0009d-PostgreSQL/output.nq | 7 - .../core/RMLTC0009d-PostgreSQL/resource.sql | 20 -- .../core/RMLTC0009d-SQLServer/mapping.ttl | 35 --- .../core/RMLTC0009d-SQLServer/output.nq | 7 - .../core/RMLTC0009d-SQLServer/resource.sql | 21 -- .../core/RMLTC0010a-CSV/country_info.csv | 4 - .../core/RMLTC0010a-CSV/mapping.ttl | 20 -- .../core/RMLTC0010a-CSV/output.nq | 4 - .../core/RMLTC0010a-JSON/README.md | 63 +++++ .../core/RMLTC0010a-JSON/mapping.ttl | 2 +- .../core/RMLTC0010a-MySQL/mapping.ttl | 25 -- .../core/RMLTC0010a-MySQL/output.nq | 4 - .../core/RMLTC0010a-MySQL/resource.sql | 11 - .../core/RMLTC0010a-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0010a-PostgreSQL/output.nq | 4 - .../core/RMLTC0010a-PostgreSQL/resource.sql | 10 - .../core/RMLTC0010a-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0010a-SQLServer/output.nq | 4 - .../core/RMLTC0010a-SQLServer/resource.sql | 11 - .../core/RMLTC0010b-CSV/country_info.csv | 4 - .../core/RMLTC0010b-CSV/mapping.ttl | 20 -- .../core/RMLTC0010b-CSV/output.nq | 4 - .../core/RMLTC0010b-JSON/README.md | 63 +++++ .../core/RMLTC0010b-JSON/mapping.ttl | 4 +- .../core/RMLTC0010b-MySQL/mapping.ttl | 25 -- .../core/RMLTC0010b-MySQL/output.nq | 4 - .../core/RMLTC0010b-MySQL/resource.sql | 11 - .../core/RMLTC0010b-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0010b-PostgreSQL/output.nq | 4 - .../core/RMLTC0010b-PostgreSQL/resource.sql | 10 - .../core/RMLTC0010b-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0010b-SQLServer/output.nq | 4 - .../core/RMLTC0010b-SQLServer/resource.sql | 11 - .../core/RMLTC0010b-XML/country_info.xml | 20 -- .../core/RMLTC0010b-XML/mapping.ttl | 21 -- .../core/RMLTC0010b-XML/output.nq | 4 - .../core/RMLTC0010c-CSV/country_info.csv | 4 - .../core/RMLTC0010c-CSV/mapping.ttl | 21 -- .../core/RMLTC0010c-CSV/output.nq | 4 - .../core/RMLTC0010c-JSON/README.md | 64 ++++++ .../core/RMLTC0010c-JSON/mapping.ttl | 2 +- .../core/RMLTC0010c-MySQL/mapping.ttl | 26 --- .../core/RMLTC0010c-MySQL/output.nq | 4 - .../core/RMLTC0010c-MySQL/resource.sql | 11 - .../core/RMLTC0010c-PostgreSQL/mapping.ttl | 26 --- .../core/RMLTC0010c-PostgreSQL/output.nq | 4 - .../core/RMLTC0010c-PostgreSQL/resource.sql | 10 - .../core/RMLTC0010c-SQLServer/mapping.ttl | 26 --- .../core/RMLTC0010c-SQLServer/output.nq | 4 - .../core/RMLTC0010c-SQLServer/resource.sql | 11 - .../core/RMLTC0010c-XML/country_info.xml | 20 -- .../core/RMLTC0010c-XML/mapping.ttl | 22 -- .../core/RMLTC0010c-XML/output.nq | 4 - .../core/RMLTC0011a-MySQL/mapping.ttl | 72 ------ .../core/RMLTC0011a-MySQL/output.nq | 20 -- .../core/RMLTC0011a-MySQL/resource.sql | 36 --- .../core/RMLTC0011a-PostgreSQL/mapping.ttl | 72 ------ .../core/RMLTC0011a-PostgreSQL/output.nq | 20 -- .../core/RMLTC0011a-PostgreSQL/resource.sql | 33 --- .../core/RMLTC0011a-SQLServer/mapping.ttl | 72 ------ .../core/RMLTC0011a-SQLServer/output.nq | 20 -- .../core/RMLTC0011a-SQLServer/resource.sql | 33 --- .../core/RMLTC0011b-CSV/mapping.ttl | 66 ------ .../core/RMLTC0011b-CSV/output.nq | 17 -- .../core/RMLTC0011b-CSV/sport.csv | 4 - .../core/RMLTC0011b-CSV/student.csv | 4 - .../core/RMLTC0011b-CSV/student_sport.csv | 5 - .../core/RMLTC0011b-JSON/README.md | 141 ++++++++++++ .../core/RMLTC0011b-JSON/mapping.ttl | 16 +- .../core/RMLTC0011b-MySQL/mapping.ttl | 67 ------ .../core/RMLTC0011b-MySQL/output.nq | 17 -- .../core/RMLTC0011b-MySQL/resource.sql | 34 --- .../core/RMLTC0011b-PostgreSQL/mapping.ttl | 67 ------ .../core/RMLTC0011b-PostgreSQL/output.nq | 17 -- .../core/RMLTC0011b-PostgreSQL/resource.sql | 31 --- .../core/RMLTC0011b-SQLServer/mapping.ttl | 67 ------ .../core/RMLTC0011b-SQLServer/output.nq | 17 -- .../core/RMLTC0011b-SQLServer/resource.sql | 32 --- .../core/RMLTC0011b-XML/mapping.ttl | 69 ------ .../core/RMLTC0011b-XML/output.nq | 17 -- .../core/RMLTC0011b-XML/sport.xml | 16 -- .../core/RMLTC0011b-XML/student.xml | 19 -- .../core/RMLTC0011b-XML/student_sport.xml | 20 -- .../core/RMLTC0012a-CSV/mapping.ttl | 28 --- .../core/RMLTC0012a-CSV/output.nq | 5 - .../core/RMLTC0012a-CSV/persons.csv | 4 - .../core/RMLTC0012a-JSON/README.md | 64 ++++++ .../core/RMLTC0012a-JSON/mapping.ttl | 6 +- .../core/RMLTC0012a-MySQL/mapping.ttl | 33 --- .../core/RMLTC0012a-MySQL/output.nq | 5 - .../core/RMLTC0012a-MySQL/resource.sql | 19 -- .../core/RMLTC0012a-PostgreSQL/mapping.ttl | 33 --- .../core/RMLTC0012a-PostgreSQL/output.nq | 5 - .../core/RMLTC0012a-PostgreSQL/resource.sql | 17 -- .../core/RMLTC0012a-SPARQL/mapping.ttl | 40 ---- .../core/RMLTC0012a-SPARQL/output.nq | 5 - .../core/RMLTC0012a-SPARQL/resource.ttl | 15 -- .../core/RMLTC0012a-SQLServer/mapping.ttl | 33 --- .../core/RMLTC0012a-SQLServer/output.nq | 5 - .../core/RMLTC0012a-SQLServer/resource.sql | 19 -- .../core/RMLTC0012a-XML/mapping.ttl | 29 --- .../core/RMLTC0012a-XML/output.nq | 5 - .../core/RMLTC0012a-XML/persons.xml | 19 -- .../core/RMLTC0012b-CSV/lives.csv | 4 - .../core/RMLTC0012b-CSV/output.nq | 5 - .../core/RMLTC0012b-CSV/persons.csv | 4 - .../core/RMLTC0012b-JSON/README.md | 91 ++++++++ .../core/RMLTC0012b-JSON/mapping.ttl | 8 +- .../core/RMLTC0012b-MySQL/mapping.ttl | 45 ---- .../core/RMLTC0012b-MySQL/output.nq | 5 - .../core/RMLTC0012b-MySQL/resource.sql | 22 -- .../core/RMLTC0012b-PostgreSQL/mapping.ttl | 45 ---- .../core/RMLTC0012b-PostgreSQL/output.nq | 5 - .../core/RMLTC0012b-PostgreSQL/resource.sql | 21 -- .../core/RMLTC0012b-SPARQL/mapping.ttl | 71 ------ .../core/RMLTC0012b-SPARQL/output.nq | 5 - .../core/RMLTC0012b-SPARQL/resource1.ttl | 15 -- .../core/RMLTC0012b-SPARQL/resource2.ttl | 15 -- .../core/RMLTC0012b-SQLServer/mapping.ttl | 45 ---- .../core/RMLTC0012b-SQLServer/output.nq | 5 - .../core/RMLTC0012b-SQLServer/resource.sql | 22 -- .../core/RMLTC0012b-XML/lives.xml | 19 -- .../core/RMLTC0012b-XML/output.nq | 5 - .../core/RMLTC0012b-XML/persons.xml | 19 -- .../core/RMLTC0012c-CSV/mapping.ttl | 24 -- .../core/RMLTC0012c-CSV/persons.csv | 4 - .../core/RMLTC0012c-JSON/README.md | 50 ++++ .../core/RMLTC0012c-JSON/mapping.ttl | 4 +- .../core/RMLTC0012c-MySQL/mapping.ttl | 29 --- .../core/RMLTC0012c-MySQL/resource.sql | 19 -- .../core/RMLTC0012c-PostgreSQL/mapping.ttl | 29 --- .../core/RMLTC0012c-PostgreSQL/resource.sql | 18 -- .../core/RMLTC0012c-SQLServer/mapping.ttl | 29 --- .../core/RMLTC0012c-SQLServer/resource.sql | 19 -- .../core/RMLTC0012c-XML/persons.xml | 19 -- .../core/RMLTC0012d-CSV/mapping.ttl | 31 --- .../core/RMLTC0012d-CSV/persons.csv | 4 - .../core/RMLTC0012d-JSON/README.md | 57 +++++ .../core/RMLTC0012d-JSON/mapping.ttl | 8 +- .../core/RMLTC0012d-MySQL/mapping.ttl | 27 --- .../core/RMLTC0012d-MySQL/resource.sql | 19 -- .../core/RMLTC0012d-PostgreSQL/mapping.ttl | 27 --- .../core/RMLTC0012d-PostgreSQL/resource.sql | 18 -- .../core/RMLTC0012d-SQLServer/mapping.ttl | 27 --- .../core/RMLTC0012d-SQLServer/resource.sql | 19 -- .../core/RMLTC0012d-XML/mapping.ttl | 32 --- .../core/RMLTC0012d-XML/persons.xml | 19 -- .../core/RMLTC0012e-MySQL/mapping.ttl | 69 ------ .../core/RMLTC0012e-MySQL/output.nq | 18 -- .../core/RMLTC0012e-MySQL/resource.sql | 19 -- .../core/RMLTC0012e-PostgreSQL/mapping.ttl | 69 ------ .../core/RMLTC0012e-PostgreSQL/output.nq | 18 -- .../core/RMLTC0012e-PostgreSQL/resource.sql | 18 -- .../core/RMLTC0012e-SQLServer/mapping.ttl | 69 ------ .../core/RMLTC0012e-SQLServer/output.nq | 18 -- .../core/RMLTC0012e-SQLServer/resource.sql | 19 -- .../core/RMLTC0013a-JSON/README.md | 51 +++++ .../core/RMLTC0013a-JSON/mapping.ttl | 4 +- .../core/RMLTC0013a-MySQL/mapping.ttl | 25 -- .../core/RMLTC0013a-MySQL/output.nq | 3 - .../core/RMLTC0013a-MySQL/resource.sql | 12 - .../core/RMLTC0013a-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0013a-PostgreSQL/note.md | 3 - .../core/RMLTC0013a-PostgreSQL/output.nq | 3 - .../core/RMLTC0013a-PostgreSQL/resource.sql | 11 - .../core/RMLTC0013a-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0013a-SQLServer/output.nq | 3 - .../core/RMLTC0013a-SQLServer/resource.sql | 12 - .../core/RMLTC0014d-MySQL/mapping.ttl | 31 --- .../core/RMLTC0014d-MySQL/output.nq | 1 - .../core/RMLTC0014d-MySQL/resource.sql | 25 -- .../core/RMLTC0014d-PostgreSQL/mapping.ttl | 31 --- .../core/RMLTC0014d-PostgreSQL/output.nq | 1 - .../core/RMLTC0014d-PostgreSQL/resource.sql | 24 -- .../core/RMLTC0014d-SQLServer/mapping.ttl | 31 --- .../core/RMLTC0014d-SQLServer/output.nq | 1 - .../core/RMLTC0014d-SQLServer/resource.sql | 24 -- .../core/RMLTC0015a-CSV/country_en.csv | 3 - .../core/RMLTC0015a-CSV/country_es.csv | 3 - .../core/RMLTC0015a-CSV/mapping.ttl | 40 ---- .../core/RMLTC0015a-CSV/output.nq | 6 - .../core/RMLTC0015a-JSON/README.md | 77 +++++++ .../core/RMLTC0015a-JSON/mapping.ttl | 8 +- .../core/RMLTC0015a-MySQL/mapping.ttl | 51 ----- .../core/RMLTC0015a-MySQL/output.nq | 6 - .../core/RMLTC0015a-MySQL/resource.sql | 13 -- .../core/RMLTC0015a-PostgreSQL/mapping.ttl | 51 ----- .../core/RMLTC0015a-PostgreSQL/output.nq | 6 - .../core/RMLTC0015a-PostgreSQL/resource.sql | 12 - .../core/RMLTC0015a-SQLServer/mapping.ttl | 51 ----- .../core/RMLTC0015a-SQLServer/output.nq | 6 - .../core/RMLTC0015a-SQLServer/resource.sql | 13 -- .../core/RMLTC0015a-XML/country_en.xml | 6 - .../core/RMLTC0015a-XML/country_es.xml | 6 - .../core/RMLTC0015a-XML/mapping.ttl | 42 ---- .../core/RMLTC0015a-XML/output.nq | 6 - .../core/RMLTC0015b-CSV/country_en.csv | 3 - .../core/RMLTC0015b-CSV/country_es.csv | 3 - .../core/RMLTC0015b-CSV/mapping.ttl | 40 ---- .../core/RMLTC0015b-JSON/README.md | 66 ++++++ .../core/RMLTC0015b-JSON/mapping.ttl | 8 +- .../core/RMLTC0015b-MySQL/mapping.ttl | 51 ----- .../core/RMLTC0015b-MySQL/resource.sql | 13 -- .../core/RMLTC0015b-PostgreSQL/mapping.ttl | 51 ----- .../core/RMLTC0015b-PostgreSQL/resource.sql | 12 - .../core/RMLTC0015b-SQLServer/mapping.ttl | 51 ----- .../core/RMLTC0015b-SQLServer/resource.sql | 13 -- .../core/RMLTC0015b-XML/country_en.xml | 6 - .../core/RMLTC0015b-XML/country_es.xml | 6 - .../core/RMLTC0015b-XML/mapping.ttl | 42 ---- .../core/RMLTC0016a-MySQL/mapping.ttl | 45 ---- .../core/RMLTC0016a-MySQL/output.nq | 16 -- .../core/RMLTC0016a-MySQL/resource.sql | 28 --- .../core/RMLTC0016a-PostgreSQL/mapping.ttl | 45 ---- .../core/RMLTC0016a-PostgreSQL/output.nq | 16 -- .../core/RMLTC0016a-PostgreSQL/resource.sql | 27 --- .../core/RMLTC0016a-SQLServer/mapping.ttl | 45 ---- .../core/RMLTC0016a-SQLServer/output.nq | 16 -- .../core/RMLTC0016a-SQLServer/resource.sql | 28 --- .../core/RMLTC0016b-MySQL/mapping.ttl | 35 --- .../core/RMLTC0016b-MySQL/output.nq | 9 - .../core/RMLTC0016b-MySQL/resource.sql | 28 --- .../core/RMLTC0016b-PostgreSQL/mapping.ttl | 35 --- .../core/RMLTC0016b-PostgreSQL/output.nq | 9 - .../core/RMLTC0016b-PostgreSQL/resource.sql | 27 --- .../core/RMLTC0016b-SQLServer/mapping.ttl | 35 --- .../core/RMLTC0016b-SQLServer/output.nq | 9 - .../core/RMLTC0016b-SQLServer/resource.sql | 28 --- .../core/RMLTC0016c-MySQL/mapping.ttl | 35 --- .../core/RMLTC0016c-MySQL/output.nq | 9 - .../core/RMLTC0016c-MySQL/resource.sql | 28 --- .../core/RMLTC0016c-PostgreSQL/mapping.ttl | 35 --- .../core/RMLTC0016c-PostgreSQL/output.nq | 9 - .../core/RMLTC0016c-PostgreSQL/resource.sql | 27 --- .../core/RMLTC0016c-SQLServer/mapping.ttl | 35 --- .../core/RMLTC0016c-SQLServer/output.nq | 9 - .../core/RMLTC0016c-SQLServer/resource.sql | 28 --- .../core/RMLTC0016d-MySQL/mapping.ttl | 30 --- .../core/RMLTC0016d-MySQL/output.nq | 6 - .../core/RMLTC0016d-MySQL/resource.sql | 28 --- .../core/RMLTC0016d-PostgreSQL/mapping.ttl | 30 --- .../core/RMLTC0016d-PostgreSQL/output.nq | 6 - .../core/RMLTC0016d-PostgreSQL/resource.sql | 27 --- .../core/RMLTC0016d-SQLServer/mapping.ttl | 30 --- .../core/RMLTC0016d-SQLServer/output.nq | 6 - .../core/RMLTC0016d-SQLServer/resource.sql | 28 --- .../core/RMLTC0016e-MySQL/mapping.ttl | 30 --- .../core/RMLTC0016e-MySQL/output.nq | 6 - .../core/RMLTC0016e-MySQL/resource.sql | 28 --- .../core/RMLTC0016e-PostgreSQL/mapping.ttl | 30 --- .../core/RMLTC0016e-PostgreSQL/output.nq | 6 - .../core/RMLTC0016e-PostgreSQL/resource.sql | 27 --- .../core/RMLTC0016e-SQLServer/mapping.ttl | 30 --- .../core/RMLTC0016e-SQLServer/output.nq | 6 - .../core/RMLTC0016e-SQLServer/resource.sql | 28 --- .../core/RMLTC0019a-CSV/output.nq | 2 - .../core/RMLTC0019a-CSV/persons.csv | 3 - .../core/RMLTC0019a-JSON/README.md | 60 +++++ .../core/RMLTC0019a-JSON/mapping.ttl | 4 +- .../core/RMLTC0019a-MySQL/mapping.ttl | 29 --- .../core/RMLTC0019a-MySQL/output.nq | 2 - .../core/RMLTC0019a-MySQL/resource.sql | 11 - .../core/RMLTC0019a-PostgreSQL/mapping.ttl | 29 --- .../core/RMLTC0019a-PostgreSQL/output.nq | 2 - .../core/RMLTC0019a-PostgreSQL/resource.sql | 10 - .../core/RMLTC0019a-SQLServer/mapping.ttl | 29 --- .../core/RMLTC0019a-SQLServer/output.nq | 2 - .../core/RMLTC0019a-SQLServer/resource.sql | 11 - .../core/RMLTC0019a-XML/mapping.ttl | 21 -- .../core/RMLTC0019a-XML/output.nq | 2 - .../core/RMLTC0019a-XML/persons.xml | 14 -- .../core/RMLTC0019b-CSV/persons.csv | 4 - .../core/RMLTC0019b-JSON/README.md | 63 +++++ .../core/RMLTC0019b-JSON/mapping.ttl | 4 +- .../output.nq | 0 .../core/RMLTC0019b-MySQL/mapping.ttl | 25 -- .../core/RMLTC0019b-MySQL/resource.sql | 11 - .../core/RMLTC0019b-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0019b-PostgreSQL/resource.sql | 10 - .../core/RMLTC0019b-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0019b-SQLServer/resource.sql | 11 - .../core/RMLTC0019b-XML/mapping.ttl | 21 -- .../core/RMLTC0019b-XML/persons.xml | 19 -- .../core/RMLTC0020a-CSV/mapping.ttl | 20 -- .../core/RMLTC0020a-CSV/output.nq | 5 - .../core/RMLTC0020a-CSV/student.csv | 6 - .../core/RMLTC0020a-JSON/README.md | 58 +++++ .../core/RMLTC0020a-JSON/mapping.ttl | 2 +- .../core/RMLTC0020a-MySQL/mapping.ttl | 25 -- .../core/RMLTC0020a-MySQL/output.nq | 5 - .../core/RMLTC0020a-MySQL/resource.sql | 13 -- .../core/RMLTC0020a-PostgreSQL/mapping.ttl | 25 -- .../core/RMLTC0020a-PostgreSQL/output.nq | 5 - .../core/RMLTC0020a-PostgreSQL/resource.sql | 11 - .../core/RMLTC0020a-SQLServer/mapping.ttl | 25 -- .../core/RMLTC0020a-SQLServer/output.nq | 5 - .../core/RMLTC0020a-SQLServer/resource.sql | 12 - .../core/RMLTC0020a-XML/output.nq | 5 - .../core/RMLTC0020a-XML/student.xml | 9 - .../core/RMLTC0021a-CSV/mapping.ttl | 25 -- .../core/RMLTC0021a-CSV/output.nq | 7 - .../core/RMLTC0021a-CSV/student.csv | 4 - .../core/RMLTC0021a-JSON/README.md | 73 ++++++ .../core/RMLTC0021a-JSON/mapping.ttl | 6 +- .../core/RMLTC0021a-MySQL/mapping.ttl | 30 --- .../core/RMLTC0021a-MySQL/output.nq | 7 - .../core/RMLTC0021a-MySQL/resource.sql | 11 - .../core/RMLTC0021a-PostgreSQL/mapping.ttl | 30 --- .../core/RMLTC0021a-PostgreSQL/output.nq | 7 - .../core/RMLTC0021a-PostgreSQL/resource.sql | 10 - .../core/RMLTC0021a-SPARQL/mapping.ttl | 40 ---- .../core/RMLTC0021a-SPARQL/output.nq | 7 - .../core/RMLTC0021a-SPARQL/resource.ttl | 19 -- .../core/RMLTC0021a-SQLServer/mapping.ttl | 30 --- .../core/RMLTC0021a-SQLServer/output.nq | 7 - .../core/RMLTC0021a-SQLServer/resource.sql | 10 - .../core/RMLTC0021a-XML/mapping.ttl | 26 --- .../core/RMLTC0021a-XML/output.nq | 7 - .../core/RMLTC0021a-XML/student.xml | 19 -- .../core/RMLTC0022a-CSV/student.csv | 2 - .../core/RMLTC0022a-JSON/README.md | 62 +++++ .../mapping.ttl | 11 +- .../output.nq | 2 +- .../core/RMLTC0022a-JSON/student.json | 7 + .../core/RMLTC0022b-CSV/data.csv | 3 - .../core/RMLTC0022b-JSON/README.md | 54 +++++ .../core/RMLTC0022b-JSON/data.json | 4 + .../mapping.ttl | 12 +- .../output.nq | 2 +- .../core/RMLTC0022c-CSV/data.csv | 3 - .../core/RMLTC0022c-JSON/README.md | 53 +++++ .../core/RMLTC0022c-JSON/data.json | 4 + .../mapping.ttl | 11 +- .../output.nq | 2 +- .../core/RMLTC0023a-JSON/README.md | 40 ++++ .../mapping.ttl | 14 +- .../core/RMLTC0023a-JSON/student.json | 6 + .../core/RMLTC0023a-XML/ious.xml | 10 - .../core/RMLTC0023a-XML/mapping.ttl | 23 -- .../core/RMLTC0023a-XML/output.nq | 5 - .../core/RMLTC0023b-JSON/README.md | 40 ++++ .../mapping.ttl | 14 +- .../core/RMLTC0023b-JSON/student.json | 6 + .../core/RMLTC0023c-JSON/README.md | 41 ++++ .../mapping.ttl | 15 +- .../core/RMLTC0023c-JSON/student.json | 6 + .../core/RMLTC0023d-JSON/README.md | 41 ++++ .../mapping.ttl | 15 +- .../core/RMLTC0023d-JSON/student.json | 6 + .../core/RMLTC0023e-JSON/README.md | 41 ++++ .../core/RMLTC0023e-JSON/mapping.ttl | 17 ++ .../core/RMLTC0023e-JSON/student.json | 6 + .../core/RMLTC0023f-JSON/README.md | 40 ++++ .../core/RMLTC0023f-JSON/mapping.ttl | 16 ++ .../core/RMLTC0023f-JSON/student.json | 6 + .../core/RMLTC0025b-JSON/README.md | 49 ++++ .../mapping.ttl | 14 +- .../core/RMLTC0025b-JSON/student.json | 8 + .../core/RMLTC0026a-JSON/README.md | 53 +++++ .../mapping.ttl | 15 +- .../core/RMLTC0026a-JSON/output.nq | 3 + .../core/RMLTC0026a-JSON/persons.json | 5 + .../core/RMLTC0026b-JSON/README.md | 45 ++++ .../mapping.ttl | 12 +- .../core/RMLTC0026b-JSON/persons.json | 5 + .../core/RMLTC0027a-JSON/README.md | 75 ++++++ .../mapping.ttl | 26 +-- .../core/RMLTC0027a-JSON/output.nq | 4 + .../core/RMLTC0027a-JSON/persons.json | 6 + .../core/RMLTC0027b-JSON/README.md | 76 +++++++ .../mapping.ttl | 26 ++- .../core/RMLTC0027b-JSON/output.nq | 4 + .../core/RMLTC0027b-JSON/persons.json | 6 + .../core/RMLTC0027c-JSON/README.md | 76 +++++++ .../mapping.ttl | 28 +-- .../core/RMLTC0027c-JSON/output.nq | 4 + .../core/RMLTC0027c-JSON/persons.json | 6 + .../core/RMLTC0027d-JSON/README.md | 77 +++++++ .../mapping.ttl | 30 +-- .../core/RMLTC0027d-JSON/output.nq | 4 + .../core/RMLTC0027d-JSON/persons.json | 6 + .../core/RMLTC0028a-JSON/README.md | 58 +++++ .../mapping.ttl | 8 +- .../core/RMLTC0028a-JSON/output.nq | 5 + .../core/RMLTC0028a-JSON/student.json | 9 + .../core/RMLTC0028b-JSON/README.md | 58 +++++ .../mapping.ttl | 9 +- .../core/RMLTC0028b-JSON/output.nq | 5 + .../core/RMLTC0028b-JSON/student.json | 9 + .../core/RMLTC0028c-JSON/README.md | 58 +++++ .../mapping.ttl | 10 +- .../core/RMLTC0028c-JSON/output.nq | 5 + .../core/RMLTC0028c-JSON/student.json | 9 + .../core/RMLTC0029a-JSON/README.md | 44 ++++ .../core/RMLTC0029a-JSON/data.json | 1 + .../core/RMLTC0029a-JSON/mapping.ttl | 19 ++ .../core/RMLTC0029a-JSON/output.nq | 1 + .../core/RMLTC0029b-JSON/README.md | 50 ++++ .../core/RMLTC0029b-JSON/data.json | 1 + .../core/RMLTC0029b-JSON/mapping.ttl | 23 ++ .../core/RMLTC0029b-JSON/output.nq | 3 + .../core/RMLTC0029c-JSON/README.md | 44 ++++ .../core/RMLTC0029c-JSON/data.json | 1 + .../core/RMLTC0029c-JSON/mapping.ttl | 19 ++ .../core/RMLTC0029c-JSON/output.nq | 1 + .../new-test-cases/io/RMLSTC0001a/README.md | 94 ++++++++ .../new-test-cases/io/RMLSTC0001a/mapping.ttl | 10 +- .../new-test-cases/io/RMLSTC0001b/README.md | 94 ++++++++ .../new-test-cases/io/RMLSTC0001b/mapping.ttl | 10 +- .../new-test-cases/io/RMLSTC0002a/README.md | 94 ++++++++ .../new-test-cases/io/RMLSTC0002a/mapping.ttl | 9 +- .../new-test-cases/io/RMLSTC0002b/README.md | 66 ++++++ .../new-test-cases/io/RMLSTC0002b/mapping.ttl | 11 +- .../new-test-cases/io/RMLSTC0002c/README.md | 65 ++++++ .../new-test-cases/io/RMLSTC0002c/mapping.ttl | 12 +- .../new-test-cases/io/RMLSTC0002d/README.md | 65 ++++++ .../new-test-cases/io/RMLSTC0002d/mapping.ttl | 12 +- .../new-test-cases/io/RMLSTC0002e/README.md | 65 ++++++ .../new-test-cases/io/RMLSTC0002e/mapping.ttl | 12 +- .../new-test-cases/io/RMLSTC0003/README.md | 83 +++++++ .../new-test-cases/io/RMLSTC0003/mapping.ttl | 3 +- .../io/RMLSTC0004a/Friends-NULL.csv | 14 +- .../new-test-cases/io/RMLSTC0004a/README.md | 73 ++++++ .../new-test-cases/io/RMLSTC0004a/default.nq | 2 - .../new-test-cases/io/RMLSTC0004a/mapping.ttl | 15 +- .../io/RMLSTC0004b/Friends-NULL.csv | 14 +- .../new-test-cases/io/RMLSTC0004b/README.md | 74 ++++++ .../new-test-cases/io/RMLSTC0004b/mapping.ttl | 18 +- .../io/RMLSTC0004c/Friends-NULL.csv | 8 + .../io/RMLSTC0004c/Friends-NULL2.csv | 8 - .../new-test-cases/io/RMLSTC0004c/README.md | 76 +++++++ .../new-test-cases/io/RMLSTC0004c/mapping.ttl | 20 +- .../io/RMLSTC0005a/Friends-NULL.csv | 7 - .../new-test-cases/io/RMLSTC0005b/Friends.csv | Bin 212 -> 0 bytes .../{RMLSTC0006f => RMLSTC0006a}/Friends.csv | 0 .../new-test-cases/io/RMLSTC0006a/README.md | 77 +++++++ .../new-test-cases/io/RMLSTC0006a/mapping.ttl | 21 +- .../new-test-cases/io/RMLSTC0006b/Friends.csv | 6 + .../new-test-cases/io/RMLSTC0006b/Friends.nt | 10 - .../new-test-cases/io/RMLSTC0006b/README.md | 72 ++++++ .../new-test-cases/io/RMLSTC0006b/mapping.ttl | 23 +- .../new-test-cases/io/RMLSTC0006c/Friends.nt | 10 - .../new-test-cases/io/RMLSTC0006c/default.nq | 10 - .../new-test-cases/io/RMLSTC0006c/mapping.ttl | 45 ---- .../new-test-cases/io/RMLSTC0006d/Friends.csv | 6 - .../new-test-cases/io/RMLSTC0006e/default.nq | 10 - .../new-test-cases/io/RMLSTC0006e/mapping.ttl | 43 ---- .../new-test-cases/io/RMLSTC0006f/default.nq | 10 - .../new-test-cases/io/RMLSTC0007a/README.md | 94 ++++++++ .../new-test-cases/io/RMLSTC0007a/mapping.ttl | 12 +- .../new-test-cases/io/RMLSTC0007b/README.md | 72 ++++++ .../new-test-cases/io/RMLSTC0007b/mapping.ttl | 15 +- .../new-test-cases/io/RMLSTC0007c/README.md | 88 +++++++ .../new-test-cases/io/RMLSTC0007c/mapping.ttl | 14 +- .../new-test-cases/io/RMLSTC0007d/README.md | 93 ++++++++ .../new-test-cases/io/RMLSTC0007d/mapping.ttl | 14 +- .../{RMLSTC0006a => RMLSTC0008a}/Friends.json | 0 .../io/RMLSTC0008a/Friends2.json | 7 + .../new-test-cases/io/RMLSTC0008a/README.md | 127 +++++++++++ .../{RMLSTC0005b => RMLSTC0008a}/default.nq | 2 + .../new-test-cases/io/RMLSTC0008a/mapping.ttl | 65 ++++++ .../new-test-cases/io/RMLSTC0008b/Friends.csv | 2 + .../{RMLSTC0006e => RMLSTC0008b}/Friends.json | 0 .../new-test-cases/io/RMLSTC0008b/README.md | 126 ++++++++++ .../{RMLSTC0006d => RMLSTC0008b}/default.nq | 2 + .../new-test-cases/io/RMLSTC0008b/mapping.ttl | 64 ++++++ .../new-test-cases/io/RMLSTC0009a/Friends.csv | 6 + .../mapping.ttl => RMLSTC0009a/README.md} | 41 ++-- .../{RMLSTC0006d => RMLSTC0009a}/mapping.ttl | 15 +- .../default.nq => RMLSTC0009a/output.nq} | 0 .../new-test-cases/io/RMLSTC0010a/Friends.csv | 2 + .../mapping.ttl => RMLSTC0010a/README.md} | 43 ++-- .../{RMLSTC0006f => RMLSTC0010a}/mapping.ttl | 21 +- .../new-test-cases/io/RMLSTC0010b/Friends.csv | 2 + .../new-test-cases/io/RMLSTC0010b/README.md | 44 ++++ .../new-test-cases/io/RMLSTC0010b/mapping.ttl | 24 ++ .../new-test-cases/io/RMLSTC0011a/README.md | 48 ++++ .../io/RMLSTC0011a/companies.json | 91 ++++++++ .../new-test-cases/io/RMLSTC0011a/default.nq | 2 + .../new-test-cases/io/RMLSTC0011a/mapping.ttl | 25 ++ .../new-test-cases/io/RMLSTC0011b/README.md | 51 +++++ .../io/RMLSTC0011b/companies.json | 91 ++++++++ .../new-test-cases/io/RMLSTC0011b/default.nq | 4 + .../new-test-cases/io/RMLSTC0011b/mapping.ttl | 26 +++ .../new-test-cases/io/RMLSTC0011c/README.md | 53 +++++ .../io/RMLSTC0011c/companies.json | 91 ++++++++ .../new-test-cases/io/RMLSTC0011c/default.nq | 6 + .../new-test-cases/io/RMLSTC0011c/mapping.ttl | 26 +++ .../new-test-cases/io/RMLSTC0011d/README.md | 51 +++++ .../io/RMLSTC0011d/companies.json | 91 ++++++++ .../new-test-cases/io/RMLSTC0011d/default.nq | 4 + .../new-test-cases/io/RMLSTC0011d/mapping.ttl | 26 +++ .../new-test-cases/io/RMLSTC0011e/README.md | 65 ++++++ .../io/RMLSTC0011e/companies.json | 91 ++++++++ .../new-test-cases/io/RMLSTC0011e/default.nq | 18 ++ .../new-test-cases/io/RMLSTC0011e/mapping.ttl | 26 +++ .../new-test-cases/io/RMLSTC0012a/README.md | 49 ++++ .../io/RMLSTC0012a/companies.xml | 112 +++++++++ .../new-test-cases/io/RMLSTC0012a/default.nq | 2 + .../new-test-cases/io/RMLSTC0012a/mapping.ttl | 26 +++ .../new-test-cases/io/RMLSTC0012b/README.md | 51 +++++ .../io/RMLSTC0012b/companies.xml | 112 +++++++++ .../new-test-cases/io/RMLSTC0012b/default.nq | 4 + .../new-test-cases/io/RMLSTC0012b/mapping.ttl | 26 +++ .../new-test-cases/io/RMLSTC0012c/README.md | 53 +++++ .../io/RMLSTC0012c/companies.xml | 112 +++++++++ .../new-test-cases/io/RMLSTC0012c/default.nq | 6 + .../new-test-cases/io/RMLSTC0012c/mapping.ttl | 26 +++ .../new-test-cases/io/RMLSTC0012d/README.md | 51 +++++ .../io/RMLSTC0012d/companies.xml | 112 +++++++++ .../new-test-cases/io/RMLSTC0012d/default.nq | 4 + .../new-test-cases/io/RMLSTC0012d/mapping.ttl | 26 +++ .../new-test-cases/io/RMLSTC0012e/README.md | 65 ++++++ .../io/RMLSTC0012e/companies.xml | 112 +++++++++ .../new-test-cases/io/RMLSTC0012e/default.nq | 18 ++ .../new-test-cases/io/RMLSTC0012e/mapping.ttl | 26 +++ .../new-test-cases/io/RMLTTC0000/README.md | 94 ++++++++ .../new-test-cases/io/RMLTTC0000/mapping.ttl | 11 +- .../io/RMLTTC0001a/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0001a/README.md | 108 +++++++++ .../new-test-cases/io/RMLTTC0001a/mapping.ttl | 16 +- .../io/RMLTTC0001b/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0001b/README.md | 108 +++++++++ .../new-test-cases/io/RMLTTC0001b/mapping.ttl | 16 +- .../io/RMLTTC0001c/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0001c/README.md | 108 +++++++++ .../new-test-cases/io/RMLTTC0001c/mapping.ttl | 16 +- .../io/RMLTTC0001d/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0001d/README.md | 113 +++++++++ .../new-test-cases/io/RMLTTC0001d/dump1.nq | 10 + .../new-test-cases/io/RMLTTC0001d/mapping.ttl | 15 +- .../io/RMLTTC0001e/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0001e/README.md | 111 +++++++++ .../new-test-cases/io/RMLTTC0001e/mapping.ttl | 16 +- .../io/RMLTTC0001f/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0001f/README.md | 112 +++++++++ .../new-test-cases/io/RMLTTC0001f/mapping.ttl | 16 +- .../io/RMLTTC0002a/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002a/README.md | 132 +++++++++++ .../new-test-cases/io/RMLTTC0002a/mapping.ttl | 21 +- .../io/RMLTTC0002b/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002b/README.md | 127 +++++++++++ .../new-test-cases/io/RMLTTC0002b/mapping.ttl | 21 +- .../io/RMLTTC0002c/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002c/README.md | 127 +++++++++++ .../new-test-cases/io/RMLTTC0002c/mapping.ttl | 21 +- .../io/RMLTTC0002d/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002d/README.md | 122 ++++++++++ .../new-test-cases/io/RMLTTC0002d/mapping.ttl | 21 +- .../io/RMLTTC0002e/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002e/README.md | 131 +++++++++++ .../new-test-cases/io/RMLTTC0002e/mapping.ttl | 26 +-- .../io/RMLTTC0002f/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002f/README.md | 131 +++++++++++ .../new-test-cases/io/RMLTTC0002f/dump1.nq | 10 +- .../new-test-cases/io/RMLTTC0002f/mapping.ttl | 23 +- .../io/RMLTTC0002g/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002g/README.md | 126 ++++++++++ .../new-test-cases/io/RMLTTC0002g/mapping.ttl | 21 +- .../io/RMLTTC0002h/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002h/README.md | 126 ++++++++++ .../new-test-cases/io/RMLTTC0002h/mapping.ttl | 21 +- .../io/RMLTTC0002i/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002i/README.md | 129 +++++++++++ .../new-test-cases/io/RMLTTC0002i/mapping.ttl | 21 +- .../io/RMLTTC0002j/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002j/README.md | 126 ++++++++++ .../new-test-cases/io/RMLTTC0002j/mapping.ttl | 21 +- .../io/RMLTTC0002k/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002k/README.md | 130 +++++++++++ .../new-test-cases/io/RMLTTC0002k/mapping.ttl | 21 +- .../io/RMLTTC0002l/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002l/README.md | 127 +++++++++++ .../new-test-cases/io/RMLTTC0002l/mapping.ttl | 21 +- .../io/RMLTTC0002m/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002m/README.md | 127 +++++++++++ .../new-test-cases/io/RMLTTC0002m/default.nq | 5 + .../new-test-cases/io/RMLTTC0002m/mapping.ttl | 21 +- .../io/RMLTTC0002n/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002n/README.md | 127 +++++++++++ .../new-test-cases/io/RMLTTC0002n/default.nq | 5 + .../new-test-cases/io/RMLTTC0002n/mapping.ttl | 21 +- .../io/RMLTTC0002o/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002o/README.md | 127 +++++++++++ .../new-test-cases/io/RMLTTC0002o/mapping.ttl | 27 ++- .../io/RMLTTC0002p/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002p/README.md | 141 ++++++++++++ .../new-test-cases/io/RMLTTC0002p/mapping.ttl | 21 +- .../io/RMLTTC0002q/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002q/README.md | 142 ++++++++++++ .../new-test-cases/io/RMLTTC0002q/mapping.ttl | 21 +- .../io/RMLTTC0002r/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0002r/README.md | 114 ++++++++++ .../new-test-cases/io/RMLTTC0002r/default.nq | 5 + .../new-test-cases/io/RMLTTC0002r/mapping.ttl | 16 +- .../io/RMLTTC0003a/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0003a/README.md | 136 +++++++++++ .../new-test-cases/io/RMLTTC0003a/mapping.ttl | 28 +-- .../io/RMLTTC0004a/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0004a/README.md | 131 +++++++++++ .../new-test-cases/io/RMLTTC0004a/mapping.ttl | 16 +- .../io/RMLTTC0004b/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0004b/README.md | 110 +++++++++ .../new-test-cases/io/RMLTTC0004b/mapping.ttl | 16 +- .../io/RMLTTC0004c/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0004c/README.md | 108 +++++++++ .../new-test-cases/io/RMLTTC0004c/mapping.ttl | 16 +- .../io/RMLTTC0004d/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0004d/README.md | 108 +++++++++ .../new-test-cases/io/RMLTTC0004d/mapping.ttl | 16 +- .../io/RMLTTC0004e/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0004e/README.md | 120 ++++++++++ .../new-test-cases/io/RMLTTC0004e/mapping.ttl | 16 +- .../io/RMLTTC0004f/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0004f/README.md | 121 ++++++++++ .../new-test-cases/io/RMLTTC0004f/mapping.ttl | 16 +- .../io/RMLTTC0004g/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0004g/README.md | 111 +++++++++ .../new-test-cases/io/RMLTTC0004g/dump1.ttl | 20 +- .../new-test-cases/io/RMLTTC0004g/mapping.ttl | 16 +- .../io/RMLTTC0005a/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0005a/README.md | 109 +++++++++ .../new-test-cases/io/RMLTTC0005a/mapping.ttl | 16 +- .../io/RMLTTC0005b/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0005b/README.md | 109 +++++++++ .../new-test-cases/io/RMLTTC0005b/dump1.nq | Bin 678 -> 1358 bytes .../io/RMLTTC0005b/dump1.nq.utf16 | Bin 1358 -> 0 bytes .../new-test-cases/io/RMLTTC0005b/mapping.ttl | 16 +- .../io/RMLTTC0006a/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0006a/README.md | 108 +++++++++ .../new-test-cases/io/RMLTTC0006a/mapping.ttl | 16 +- .../io/RMLTTC0006b/Friends.json | 27 +++ .../mapping.ttl => RMLTTC0006b/README.md} | 71 +++++- .../new-test-cases/io/RMLTTC0006b/dump1.nq | 10 - .../new-test-cases/io/RMLTTC0006b/mapping.ttl | 16 +- .../io/RMLTTC0006c/Friends.json | 27 +++ .../mapping.ttl => RMLTTC0006c/README.md} | 77 +++++-- .../new-test-cases/io/RMLTTC0006c/dump1.nq | 10 - .../new-test-cases/io/RMLTTC0006c/mapping.ttl | 16 +- .../io/RMLTTC0006d/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0006d/README.md | 98 ++++++++ .../new-test-cases/io/RMLTTC0006d/mapping.ttl | 16 +- .../io/RMLTTC0006e/Friends.json | 27 +++ .../mapping.ttl => RMLTTC0006e/README.md} | 70 +++++- .../new-test-cases/io/RMLTTC0006e/mapping.ttl | 16 +- .../io/RMLTTC0007a/Friends.json | 27 +++ .../new-test-cases/io/RMLTTC0007a/README.md | 108 +++++++++ .../new-test-cases/io/RMLTTC0007a/mapping.ttl | 16 +- .../new-test-cases/io/RMLTTC0007b/default.nq | 0 .../new-test-cases/io/RMLTTC0007b/dump1.nq | 10 - .../new-test-cases/io/RMLTTC0007c/default.nq | 0 .../new-test-cases/io/RMLTTC0007c/dump1.nq | 10 - .../new-test-cases/io/RMLTTC0007d/default.nq | 0 .../new-test-cases/io/RMLTTC0007d/dump1.nq | 10 - 1222 files changed, 14713 insertions(+), 15204 deletions(-) delete mode 100644 src/test/java/be/ugent/rml/MapperNewRMLCoreCSVTest.java delete mode 100644 src/test/java/be/ugent/rml/MapperNewRMLCoreMySQLTest.java delete mode 100644 src/test/java/be/ugent/rml/MapperNewRMLCorePostgresTest.java delete mode 100644 src/test/java/be/ugent/rml/MapperNewRMLCoreXMLTest.java delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0000-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001a-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0001b-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002a-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002b-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002c-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002c-CSV/student.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002c-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002c-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002c-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002c-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002c-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002c-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002e-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002f-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002f-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002f-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002f-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002f-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002f-SQLServer/resource.sql create mode 100644 src/test/resources/new-test-cases/core/RMLTC0002g-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002g-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002g-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002g-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002g-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002g-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002g-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002g-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002g-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002h-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002h-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002h-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002h-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002h-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002h-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002h-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002h-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002i-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002i-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002i-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002i-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002i-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002i-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002j-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002j-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002j-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002j-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002j-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0002j-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0003c-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-CSV/student_sport.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/student_sport.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/student_sport.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/student_sport.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004a-XML/student_sport.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0004b-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-CSV/ious.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-CSV/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-XML/ious.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0006a-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007a-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007b-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007c-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007d-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007e-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007f-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007g-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0007h-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008a-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008b-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0008c-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-CSV/sport.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/note.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/resource1.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/resource2.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-XML/sport.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009a-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-CSV/sport.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/note.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/resource1.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/resource2.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-XML/sport.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009b-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-CSV/country_info.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-CSV/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-CSV/country_info.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-CSV/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-XML/country_info.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010b-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-CSV/country_info.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-CSV/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-XML/country_info.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0010c-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-CSV/sport.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-CSV/student.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-CSV/student_sport.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-XML/sport.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0011b-XML/student_sport.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-CSV/persons.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012a-XML/persons.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-CSV/lives.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-CSV/persons.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/resource1.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/resource2.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-XML/lives.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012b-XML/persons.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012c-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012c-CSV/persons.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0012c-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012c-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012c-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012c-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012c-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012c-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012c-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012c-XML/persons.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-CSV/persons.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012d-XML/persons.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/resource.sql create mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/note.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-CSV/country_en.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-CSV/country_es.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-CSV/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-XML/country_en.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-XML/country_es.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-CSV/country_en.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-CSV/country_es.csv delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-CSV/mapping.ttl create mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-XML/country_en.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-XML/country_es.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0015b-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-CSV/persons.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019a-XML/persons.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019b-CSV/persons.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0019b-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0000-SPARQL => RMLTC0019b-JSON}/output.nq (100%) delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019b-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019b-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019b-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019b-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019b-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019b-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019b-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0019b-XML/persons.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0020a-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-CSV/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-CSV/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-JSON/README.md delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/resource.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/resource.sql delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-XML/output.nq delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0021a-XML/student.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0022a-CSV/student.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0022a-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0022a-CSV => RMLTC0022a-JSON}/mapping.ttl (73%) rename src/test/resources/new-test-cases/core/{RMLTC0022a-CSV => RMLTC0022a-JSON}/output.nq (83%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0022a-JSON/student.json delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0022b-CSV/data.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0022b-JSON/README.md create mode 100644 src/test/resources/new-test-cases/core/RMLTC0022b-JSON/data.json rename src/test/resources/new-test-cases/core/{RMLTC0022c-CSV => RMLTC0022b-JSON}/mapping.ttl (63%) rename src/test/resources/new-test-cases/core/{RMLTC0022b-CSV => RMLTC0022b-JSON}/output.nq (85%) delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0022c-CSV/data.csv create mode 100644 src/test/resources/new-test-cases/core/RMLTC0022c-JSON/README.md create mode 100644 src/test/resources/new-test-cases/core/RMLTC0022c-JSON/data.json rename src/test/resources/new-test-cases/core/{RMLTC0022b-CSV => RMLTC0022c-JSON}/mapping.ttl (65%) rename src/test/resources/new-test-cases/core/{RMLTC0022c-CSV => RMLTC0022c-JSON}/output.nq (85%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023a-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0019b-CSV => RMLTC0023a-JSON}/mapping.ttl (56%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023a-JSON/student.json delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0023a-XML/ious.xml delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0023a-XML/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/core/RMLTC0023a-XML/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023b-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0019a-CSV => RMLTC0023b-JSON}/mapping.ttl (56%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023b-JSON/student.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023c-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0000-CSV => RMLTC0023c-JSON}/mapping.ttl (55%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023c-JSON/student.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023d-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0001a-CSV => RMLTC0023d-JSON}/mapping.ttl (55%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023d-JSON/student.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023e-JSON/README.md create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023e-JSON/mapping.ttl create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023e-JSON/student.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023f-JSON/README.md create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023f-JSON/mapping.ttl create mode 100644 src/test/resources/new-test-cases/core/RMLTC0023f-JSON/student.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0025b-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0001b-CSV => RMLTC0025b-JSON}/mapping.ttl (61%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0025b-JSON/student.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0026a-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0012c-XML => RMLTC0026a-JSON}/mapping.ttl (63%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0026a-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0026a-JSON/persons.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0026b-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0005a-CSV => RMLTC0026b-JSON}/mapping.ttl (62%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0026b-JSON/persons.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027a-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0012b-CSV => RMLTC0027a-JSON}/mapping.ttl (59%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027a-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027a-JSON/persons.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027b-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0004a-CSV => RMLTC0027b-JSON}/mapping.ttl (59%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027b-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027b-JSON/persons.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027c-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0004a-XML => RMLTC0027c-JSON}/mapping.ttl (57%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027c-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027c-JSON/persons.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027d-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0012b-XML => RMLTC0027d-JSON}/mapping.ttl (57%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027d-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0027d-JSON/persons.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0028a-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0007a-CSV => RMLTC0028a-JSON}/mapping.ttl (70%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0028a-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0028a-JSON/student.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0028b-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0007a-XML => RMLTC0028b-JSON}/mapping.ttl (69%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0028b-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0028b-JSON/student.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0028c-JSON/README.md rename src/test/resources/new-test-cases/core/{RMLTC0020a-XML => RMLTC0028c-JSON}/mapping.ttl (69%) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0028c-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0028c-JSON/student.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029a-JSON/README.md create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029a-JSON/data.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029a-JSON/mapping.ttl create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029a-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029b-JSON/README.md create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029b-JSON/data.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029b-JSON/mapping.ttl create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029b-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029c-JSON/README.md create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029c-JSON/data.json create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029c-JSON/mapping.ttl create mode 100644 src/test/resources/new-test-cases/core/RMLTC0029c-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0001a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0001b/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0002a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0002b/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0002c/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0002d/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0002e/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0003/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0004a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0004b/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0004c/Friends-NULL.csv delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0004c/Friends-NULL2.csv create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0004c/README.md delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0005a/Friends-NULL.csv delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0005b/Friends.csv rename src/test/resources/new-test-cases/io/{RMLSTC0006f => RMLSTC0006a}/Friends.csv (100%) create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.csv delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.nt create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006b/README.md delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006c/Friends.nt delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006c/default.nq delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006c/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006d/Friends.csv delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006e/default.nq delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006e/mapping.ttl delete mode 100644 src/test/resources/new-test-cases/io/RMLSTC0006f/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0007a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0007b/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0007c/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0007d/README.md rename src/test/resources/new-test-cases/io/{RMLSTC0006a => RMLSTC0008a}/Friends.json (100%) create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0008a/Friends2.json create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0008a/README.md rename src/test/resources/new-test-cases/io/{RMLSTC0005b => RMLSTC0008a}/default.nq (83%) create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0008a/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0008b/Friends.csv rename src/test/resources/new-test-cases/io/{RMLSTC0006e => RMLSTC0008b}/Friends.json (100%) create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0008b/README.md rename src/test/resources/new-test-cases/io/{RMLSTC0006d => RMLSTC0008b}/default.nq (83%) create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0008b/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0009a/Friends.csv rename src/test/resources/new-test-cases/io/{RMLSTC0005b/mapping.ttl => RMLSTC0009a/README.md} (64%) rename src/test/resources/new-test-cases/io/{RMLSTC0006d => RMLSTC0009a}/mapping.ttl (68%) rename src/test/resources/new-test-cases/io/{RMLSTC0005a/default.nq => RMLSTC0009a/output.nq} (100%) create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0010a/Friends.csv rename src/test/resources/new-test-cases/io/{RMLSTC0005a/mapping.ttl => RMLSTC0010a/README.md} (60%) rename src/test/resources/new-test-cases/io/{RMLSTC0006f => RMLSTC0010a}/mapping.ttl (64%) create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0010b/Friends.csv create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0010b/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0010b/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011a/companies.json create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011a/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011a/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011b/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011b/companies.json create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011b/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011b/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011c/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011c/companies.json create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011c/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011c/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011d/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011d/companies.json create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011d/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011d/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011e/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011e/companies.json create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011e/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0011e/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012a/companies.xml create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012a/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012a/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012b/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012b/companies.xml create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012b/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012b/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012c/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012c/companies.xml create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012c/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012c/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012d/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012d/companies.xml create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012d/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012d/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012e/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012e/companies.xml create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012e/default.nq create mode 100644 src/test/resources/new-test-cases/io/RMLSTC0012e/mapping.ttl create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0000/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001a/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001b/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001b/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001c/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001c/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001d/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001d/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001e/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001e/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001f/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0001f/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002a/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002b/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002b/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002c/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002c/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002d/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002d/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002e/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002e/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002f/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002f/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002g/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002g/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002h/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002h/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002i/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002i/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002j/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002j/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002k/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002k/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002l/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002l/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002m/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002m/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002n/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002n/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002o/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002o/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002p/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002p/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002q/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002q/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002r/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0002r/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0003a/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0003a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004a/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004b/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004b/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004c/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004c/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004d/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004d/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004e/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004e/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004f/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004f/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004g/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0004g/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0005a/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0005a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0005b/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0005b/README.md delete mode 100644 src/test/resources/new-test-cases/io/RMLTTC0005b/dump1.nq.utf16 create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0006a/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0006a/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0006b/Friends.json rename src/test/resources/new-test-cases/io/{RMLTTC0007c/mapping.ttl => RMLTTC0006b/README.md} (53%) delete mode 100644 src/test/resources/new-test-cases/io/RMLTTC0006b/dump1.nq create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0006c/Friends.json rename src/test/resources/new-test-cases/io/{RMLTTC0007d/mapping.ttl => RMLTTC0006c/README.md} (54%) delete mode 100644 src/test/resources/new-test-cases/io/RMLTTC0006c/dump1.nq create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0006d/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0006d/README.md create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0006e/Friends.json rename src/test/resources/new-test-cases/io/{RMLTTC0007b/mapping.ttl => RMLTTC0006e/README.md} (53%) create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0007a/Friends.json create mode 100644 src/test/resources/new-test-cases/io/RMLTTC0007a/README.md delete mode 100644 src/test/resources/new-test-cases/io/RMLTTC0007b/default.nq delete mode 100644 src/test/resources/new-test-cases/io/RMLTTC0007b/dump1.nq delete mode 100644 src/test/resources/new-test-cases/io/RMLTTC0007c/default.nq delete mode 100644 src/test/resources/new-test-cases/io/RMLTTC0007c/dump1.nq delete mode 100644 src/test/resources/new-test-cases/io/RMLTTC0007d/default.nq delete mode 100644 src/test/resources/new-test-cases/io/RMLTTC0007d/dump1.nq diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2d2ada35..0fc0a521 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -73,7 +73,7 @@ General: - '$TEST.log' parallel: matrix: - - TEST: [ArgumentsTest, MapperCSVTest, MapperJSONTest, MapperMySQLTest, MapperPostgresR2RMLTest, MapperWoTTest, ArgumentsTestMySQLTest, MapperCSVWTest, MapperLDESTest, MapperODSTest, MapperOracleDBTest, MapperPostgresXMLTest, MapperXMLTest, CustomRMLFnOMapperCSVTest, MapperEXCELTest, MapperMappingFileURLTest, MapperSPARQLTest, MetadataTest, CustomRMLFnOMapperJSONTest, CustomRMLFnOMapperTest, MapperHTMLTest, MapperMySQLR2RMLTest, MapperPostgresCSVTest, MapperSQLServerTest, OptimizationsTest, R2RMLConverterTest, QuadTest, ReadmeTest, ReadmeFunctionTest, ConformerDetectionTest, MapperNewRMLCoreCSVTest, MapperNewRMLCoreJSONTest, MapperNewRMLCoreXMLTest, MapperNewRMLCoreMySQLTest, MapperNewRMLCorePostgresTest, MapperNewRMLIOSourceTest, MapperNewRMLIOTargetTest, HttpRequestTargetTest] + - TEST: [ArgumentsTest, MapperCSVTest, MapperJSONTest, MapperMySQLTest, MapperPostgresR2RMLTest, MapperWoTTest, ArgumentsTestMySQLTest, MapperCSVWTest, MapperLDESTest, MapperODSTest, MapperOracleDBTest, MapperPostgresXMLTest, MapperXMLTest, CustomRMLFnOMapperCSVTest, MapperEXCELTest, MapperMappingFileURLTest, MapperSPARQLTest, MetadataTest, CustomRMLFnOMapperJSONTest, CustomRMLFnOMapperTest, MapperHTMLTest, MapperMySQLR2RMLTest, MapperPostgresCSVTest, MapperSQLServerTest, OptimizationsTest, R2RMLConverterTest, QuadTest, ReadmeTest, ReadmeFunctionTest, ConformerDetectionTest, MapperNewRMLCoreJSONTest, MapperNewRMLIOSourceTest, MapperNewRMLIOTargetTest, HttpRequestTargetTest] except: - master - development diff --git a/CHANGELOG.md b/CHANGELOG.md index 181dcb82..7e8ab308 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - A join between triples maps with different logical targets might result in quads ending up in wrong targets. +### Changed +- Updated new RML test cases for IO and Core. + ## [7.3.3] - 2025-04-07 ### Fixed diff --git a/src/main/java/be/ugent/rml/MappingFactory.java b/src/main/java/be/ugent/rml/MappingFactory.java index 1eccdd03..fe7631d2 100644 --- a/src/main/java/be/ugent/rml/MappingFactory.java +++ b/src/main/java/be/ugent/rml/MappingFactory.java @@ -5,6 +5,7 @@ import be.ugent.rml.extractor.HashExtractor; import be.ugent.rml.extractor.ReferenceExtractor; import be.ugent.rml.functions.*; +import be.ugent.rml.store.Quad; import be.ugent.rml.store.QuadStore; import be.ugent.rml.term.Literal; import be.ugent.rml.term.NamedNode; @@ -63,17 +64,23 @@ public Mapping createMapping(Term triplesMap, QuadStore store) throws Exception this.predicateObjectGraphMappings = new ArrayList<>(); this.graphMappingInfos = null; this.ignoreDoubleQuotes = this.areDoubleQuotesIgnored(store, triplesMap); + String triplesMapBaseIRI = this.baseIRI; - parseSubjectMap(); - parsePredicateObjectMaps(); - graphMappingInfos = parseGraphMapsAndShortcuts(subjectMappingInfo.getTerm()); + /* Override base IRI if specified by the rml:baseIRI predicate in a RML TriplesMap */ + if (!this.store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "baseIRI"), null).isEmpty()) { + triplesMapBaseIRI = this.store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "baseIRI"), null).get(0).getObject().getValue(); + } + + parseSubjectMap(triplesMapBaseIRI); + parsePredicateObjectMaps(triplesMapBaseIRI); + graphMappingInfos = parseGraphMapsAndShortcuts(subjectMappingInfo.getTerm(), triplesMapBaseIRI); //return the mapping return new Mapping(subjectMappingInfo, predicateObjectGraphMappings, graphMappingInfos); } - private void parseSubjectMap() throws Exception { + private void parseSubjectMap(String triplesMapBaseIRI) throws Exception { if (this.subjectMappingInfo == null) { TermGenerator generator; List subjectmaps = getObjectsFromQuads(store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "subject"), null)); @@ -106,22 +113,22 @@ private void parseSubjectMap() throws Exception { } } else { //we are not dealing with a Blank Node, so we create the template - generator = new NamedNodeGenerator(RecordFunctionExecutorFactory.generate(store, subjectmap, true, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)), baseIRI, strictMode); + generator = new NamedNodeGenerator(RecordFunctionExecutorFactory.generate(store, subjectmap, true, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)), triplesMapBaseIRI, strictMode); } } else { - SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0)); + SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0), triplesMapBaseIRI); if (isBlankNode) { generator = new BlankNodeGenerator(functionExecutor); } else { - generator = new NamedNodeGenerator(functionExecutor, baseIRI, strictMode); + generator = new NamedNodeGenerator(functionExecutor, triplesMapBaseIRI, strictMode); } } // get targets for subject // get Target Generators for subject List targets = getTargets(subjectmap); - List targetGenerators = getTargetGenerators(subjectmap, baseIRI, strictMode); + List targetGenerators = getTargetGenerators(subjectmap, strictMode, triplesMapBaseIRI); this.subjectMappingInfo = new MappingInfo(subjectmap, generator, targets, targetGenerators); //get classes @@ -133,8 +140,8 @@ private void parseSubjectMap() throws Exception { * Don't put in graph for rr:class, subject is already put in graph, otherwise double export. * Same holds for targets, the rdf:type triple will be exported to the subject target already. */ - NamedNodeGenerator predicateGenerator = new NamedNodeGenerator(new ConstantExtractor(NAMESPACES.RDF + "type"), baseIRI, strictMode); - NamedNodeGenerator objectGenerator = new NamedNodeGenerator(new ConstantExtractor(c.getValue()), baseIRI, strictMode); + NamedNodeGenerator predicateGenerator = new NamedNodeGenerator(new ConstantExtractor(NAMESPACES.RDF + "type"), triplesMapBaseIRI, strictMode); + NamedNodeGenerator objectGenerator = new NamedNodeGenerator(new ConstantExtractor(c.getValue()), triplesMapBaseIRI, strictMode); predicateObjectGraphMappings.add(new PredicateObjectGraphMapping( new MappingInfo(subjectmap, predicateGenerator), new MappingInfo(subjectmap, objectGenerator), @@ -146,20 +153,20 @@ private void parseSubjectMap() throws Exception { } } - private void parsePredicateObjectMaps() throws Exception { + private void parsePredicateObjectMaps(String triplesMapBaseIRI) throws Exception { List predicateobjectmaps = getObjectsFromQuads(store.getQuads(triplesMap, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); for (Term pom : predicateobjectmaps) { - List predicateMappingInfos = parsePredicateMapsAndShortcuts(pom); - List graphMappingInfos = parseGraphMapsAndShortcuts(pom); + List predicateMappingInfos = parsePredicateMapsAndShortcuts(pom, triplesMapBaseIRI); + List graphMappingInfos = parseGraphMapsAndShortcuts(pom, triplesMapBaseIRI); - parseObjectMapsAndShortcutsAndGeneratePOGGenerators(pom, predicateMappingInfos, graphMappingInfos); + parseObjectMapsAndShortcutsAndGeneratePOGGenerators(pom, predicateMappingInfos, graphMappingInfos, triplesMapBaseIRI); } } - private void parseObjectMapsAndShortcutsAndGeneratePOGGenerators(Term termMap, List predicateMappingInfos, List graphMappingInfos) throws IOException { + private void parseObjectMapsAndShortcutsAndGeneratePOGGenerators(Term termMap, List predicateMappingInfos, List graphMappingInfos, String triplesMapBaseIRI) throws IOException { parseObjectMapsAndShortcutsWithCallback(termMap, (oMappingInfo, childOrParent) -> { - MappingInfo lMappingInfo = parseLanguageMappingInfo(oMappingInfo.getTerm()); + MappingInfo lMappingInfo = parseLanguageMappingInfo(oMappingInfo.getTerm(), triplesMapBaseIRI); predicateMappingInfos.forEach(pMappingInfo -> { if (graphMappingInfos.isEmpty()) { @@ -172,7 +179,7 @@ private void parseObjectMapsAndShortcutsAndGeneratePOGGenerators(Term termMap, L }); }, (parentTriplesMap, joinConditionFunctionExecutors) -> { predicateMappingInfos.forEach(pMappingInfo -> { - List pos = getPredicateObjectGraphMappingFromMultipleGraphMappingInfos(pMappingInfo, null, graphMappingInfos); + List pos = getPredicateObjectGraphMappingFromMultipleGraphMappingInfos(pMappingInfo, null, graphMappingInfos, triplesMapBaseIRI); pos.forEach(pogMappingInfo -> { pogMappingInfo.setParentTriplesMap(parentTriplesMap); @@ -184,14 +191,14 @@ private void parseObjectMapsAndShortcutsAndGeneratePOGGenerators(Term termMap, L predicateObjectGraphMappings.add(pogMappingInfo); }); }); - }); + }, triplesMapBaseIRI); } - private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback) throws IOException { + private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback, String triplesMapBaseIRI) throws IOException { List objectmaps = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "objectMap"), null)); for (Term objectmap : objectmaps) { - parseObjectMapWithCallback(objectmap, objectMapCallback, refObjectMapCallback); + parseObjectMapWithCallback(objectmap, objectMapCallback, refObjectMapCallback, triplesMapBaseIRI); } //dealing with rr:object @@ -213,7 +220,7 @@ private void parseObjectMapsAndShortcutsWithCallback(Term termMap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback) throws IOException { + private void parseObjectMapWithCallback(Term objectmap, BiConsumer objectMapCallback, BiConsumer> refObjectMapCallback, String triplesMapBaseIRI) throws IOException { List functionValues = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.FNML + "functionValue"), null)); Term termType = getTermType(objectmap, true); @@ -229,7 +236,7 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer parentTriplesMaps = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "parentTriplesMap"), null)); List parentTermMaps = getObjectsFromQuads(store.getQuads(objectmap, new NamedNode(NAMESPACES.RML2 + "parentTermMap"), null)); - List languages = getLanguageExecutorsForObjectMap(objectmap); + List languages = getLanguageExecutorsForObjectMap(objectmap, triplesMapBaseIRI); if (functionValues.isEmpty()) { boolean encodeIRI = termType != null && termType.getValue().equals(NAMESPACES.RML2 + "IRI"); @@ -249,7 +256,7 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer oTargets = getTargets(objectmap); - List oTargetGenerators = getTargetGenerators(objectmap, baseIRI, strictMode); + List oTargetGenerators = getTargetGenerators(objectmap, strictMode, triplesMapBaseIRI); objectMapCallback.accept(new MappingInfo(objectmap, oGen, oTargets, oTargetGenerators), "child"); } else if (!parentTriplesMaps.isEmpty()) { @@ -309,7 +316,7 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer { objectMapCallback.accept(objectGenerator, "parent"); - }, null); + }, null, triplesMapBaseIRI); } } else { - SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0)); + SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0), triplesMapBaseIRI); TermGenerator gen; //TODO is literal the default? @@ -349,19 +356,19 @@ private void parseObjectMapWithCallback(Term objectmap, BiConsumer targets = getTargets(objectmap); - List targetGenerators = getTargetGenerators(objectmap, baseIRI, strictMode); + List targetGenerators = getTargetGenerators(objectmap, strictMode, triplesMapBaseIRI); objectMapCallback.accept(new MappingInfo(objectmap, gen, targets, targetGenerators), "child"); } } - private List parseGraphMapsAndShortcuts(Term termMap) throws Exception { + private List parseGraphMapsAndShortcuts(Term termMap, String triplesMapBaseIRI) throws Exception { List graphMappingInfos = new ArrayList<>(); List graphMaps = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "graphMap"), null)); @@ -385,7 +392,7 @@ private List parseGraphMapsAndShortcuts(Term termMap) throws Except SingleRecordFunctionExecutor executor = RecordFunctionExecutorFactory.generate(store, graphMap, true, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)); if (termType == null || termType.equals(new NamedNode(NAMESPACES.RML2 + "IRI"))) { - generator = new NamedNodeGenerator(executor, baseIRI, strictMode); + generator = new NamedNodeGenerator(executor, triplesMapBaseIRI, strictMode); } else { if (executor == null) { generator = new BlankNodeGenerator(); @@ -394,10 +401,10 @@ private List parseGraphMapsAndShortcuts(Term termMap) throws Except } } } else { - SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0)); + SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0), triplesMapBaseIRI); if (termType == null || termType.equals(new NamedNode(NAMESPACES.RML2 + "IRI"))) { - generator = new NamedNodeGenerator(functionExecutor, baseIRI, strictMode); + generator = new NamedNodeGenerator(functionExecutor, triplesMapBaseIRI, strictMode); } else { generator = new BlankNodeGenerator(functionExecutor); } @@ -405,7 +412,7 @@ private List parseGraphMapsAndShortcuts(Term termMap) throws Except // get targets and target generators for graph map List targets = getTargets(graphMap); - List targetGenerators = getTargetGenerators(graphMap, baseIRI, strictMode); + List targetGenerators = getTargetGenerators(graphMap, strictMode, triplesMapBaseIRI); graphMappingInfos.add(new MappingInfo(termMap, generator, targets, targetGenerators)); @@ -416,13 +423,13 @@ private List parseGraphMapsAndShortcuts(Term termMap) throws Except for (Term graph : graphShortcuts) { String gStr = graph.getValue(); // rr:graph shortcut can never have targets - graphMappingInfos.add(new MappingInfo(termMap, new NamedNodeGenerator(new ConstantExtractor(gStr), baseIRI, strictMode))); + graphMappingInfos.add(new MappingInfo(termMap, new NamedNodeGenerator(new ConstantExtractor(gStr), triplesMapBaseIRI, strictMode))); } return graphMappingInfos; } - private List parsePredicateMapsAndShortcuts(Term termMap) throws IOException { + private List parsePredicateMapsAndShortcuts(Term termMap, String triplesMapBaseIRI) throws IOException { List predicateMappingInfos = new ArrayList<>(); List predicateMaps = getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "predicateMap"), null)); @@ -433,16 +440,16 @@ private List parsePredicateMapsAndShortcuts(Term termMap) throws IO // get target generators for predicate maps List targets = getTargets(predicateMap); - List targetGenerators = getTargetGenerators(predicateMap, baseIRI, strictMode); + List targetGenerators = getTargetGenerators(predicateMap, strictMode, triplesMapBaseIRI); if (functionValues.isEmpty()) { predicateMappingInfos.add(new MappingInfo(predicateMap, - new NamedNodeGenerator(RecordFunctionExecutorFactory.generate(store, predicateMap, false, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)), baseIRI, strictMode), + new NamedNodeGenerator(RecordFunctionExecutorFactory.generate(store, predicateMap, false, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)), triplesMapBaseIRI, strictMode), targets, targetGenerators)); } else { - SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0)); + SingleRecordFunctionExecutor functionExecutor = parseFunctionTermMap(functionValues.get(0), triplesMapBaseIRI); - predicateMappingInfos.add(new MappingInfo(predicateMap, new NamedNodeGenerator(functionExecutor, baseIRI, strictMode), targets, targetGenerators)); + predicateMappingInfos.add(new MappingInfo(predicateMap, new NamedNodeGenerator(functionExecutor, triplesMapBaseIRI, strictMode), targets, targetGenerators)); } } @@ -451,19 +458,19 @@ private List parsePredicateMapsAndShortcuts(Term termMap) throws IO for (Term predicate : predicateShortcuts) { String pStr = predicate.getValue(); // rr:predicate shortcut can never have targets - predicateMappingInfos.add(new MappingInfo(termMap, new NamedNodeGenerator(new ConstantExtractor(pStr), baseIRI, strictMode))); + predicateMappingInfos.add(new MappingInfo(termMap, new NamedNodeGenerator(new ConstantExtractor(pStr), triplesMapBaseIRI, strictMode))); } return predicateMappingInfos; } - private SingleRecordFunctionExecutor parseFunctionTermMap(Term functionValue) throws IOException { + private SingleRecordFunctionExecutor parseFunctionTermMap(Term functionValue, String triplesMapBaseIRI) throws IOException { List functionPOMs = getObjectsFromQuads(store.getQuads(functionValue, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); ArrayList params = new ArrayList<>(); for (Term pom : functionPOMs) { - List pMappingInfos = parsePredicateMapsAndShortcuts(pom); - List oMappingInfos = parseObjectMapsAndShortcuts(pom); + List pMappingInfos = parsePredicateMapsAndShortcuts(pom, triplesMapBaseIRI); + List oMappingInfos = parseObjectMapsAndShortcuts(pom, triplesMapBaseIRI); List pGenerators = new ArrayList<>(); pMappingInfos.forEach(mappingInfo -> { @@ -481,12 +488,12 @@ private SingleRecordFunctionExecutor parseFunctionTermMap(Term functionValue) th return new DynamicSingleRecordFunctionExecutor(params, functionAgent); } - private MultipleRecordsFunctionExecutor parseJoinConditionFunctionTermMap(Term functionValue) throws IOException { + private MultipleRecordsFunctionExecutor parseJoinConditionFunctionTermMap(Term functionValue, String triplesMapBaseIRI) throws IOException { List functionPOMs = getObjectsFromQuads(store.getQuads(functionValue, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), null)); ArrayList params = new ArrayList<>(); for (Term pom : functionPOMs) { - List pMappingInfos = parsePredicateMapsAndShortcuts(pom); + List pMappingInfos = parsePredicateMapsAndShortcuts(pom, triplesMapBaseIRI); List pGenerators = new ArrayList<>(); pMappingInfos.forEach(mappingInfo -> { @@ -496,7 +503,7 @@ private MultipleRecordsFunctionExecutor parseJoinConditionFunctionTermMap(Term f ArrayList objectGeneratorOriginPairs = new ArrayList<>(); parseObjectMapsAndShortcutsWithCallback(pom, (oGen, childOrParent) -> { objectGeneratorOriginPairs.add(new TermGeneratorOriginPair(oGen.getTermGenerator(), childOrParent)); - }, null); + }, null, triplesMapBaseIRI); params.add(new ParameterValueOriginPair(pGenerators, objectGeneratorOriginPairs)); } @@ -523,13 +530,13 @@ private MultipleRecordsFunctionExecutor generateSameLogicalSourceJoinConditionFu return new StaticMultipleRecordsFunctionExecutor(parameters, functionAgent, "https://w3id.org/imec/idlab/function#equal"); } - private List parseObjectMapsAndShortcuts(Term pom) throws IOException { + private List parseObjectMapsAndShortcuts(Term pom, String triplesMapBaseIRI) throws IOException { List mappingInfos = new ArrayList<>(); parseObjectMapsAndShortcutsWithCallback(pom, (mappingInfo, childOrParent) -> { mappingInfos.add(mappingInfo); }, (term, joinConditionFunctions) -> { - }); + }, triplesMapBaseIRI); return mappingInfos; } @@ -537,9 +544,10 @@ private List parseObjectMapsAndShortcuts(Term pom) throws IOExcepti /** * This method returns all executors for the languages of an Object Map. * @param objectmap the object for which the executors need to be determined. + * @param triplesMapBaseIRI the base IRI to use for this Triples Map. * @return a list of executors that return language tags. */ - private List getLanguageExecutorsForObjectMap(Term objectmap) throws IOException { + private List getLanguageExecutorsForObjectMap(Term objectmap, String triplesMapBaseIRI) throws IOException { ArrayList executors = new ArrayList<>(); // Parse rr:language @@ -563,14 +571,14 @@ private List getLanguageExecutorsForObjectMap(Term if (functionValues.isEmpty()) { executors.add(RecordFunctionExecutorFactory.generate(store, languageMap, false, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT))); } else { - executors.add(parseFunctionTermMap(functionValues.get(0))); + executors.add(parseFunctionTermMap(functionValues.get(0), triplesMapBaseIRI)); } } return executors; } - private MappingInfo parseLanguageMappingInfo(Term objectMap) { + private MappingInfo parseLanguageMappingInfo(Term objectMap, String triplesMapBaseIRI) { // get optional language map targets for object map MappingInfo mappingInfo = null; @@ -582,7 +590,7 @@ private MappingInfo parseLanguageMappingInfo(Term objectMap) { if (languageMaps.size() == 1) { Term l = languageMaps.get(0); List lTargets = getTargets(l); - List lTargetGenerators = getTargetGenerators(l, baseIRI, strictMode); + List lTargetGenerators = getTargetGenerators(l, strictMode, triplesMapBaseIRI); mappingInfo = new MappingInfo(l, lTargets, lTargetGenerators); } else if (languageMaps.size() > 1) { @@ -635,11 +643,11 @@ private Term getTermType(Term map, boolean isObjectMap) { return termType; } - private List getPredicateObjectGraphMappingFromMultipleGraphMappingInfos(MappingInfo pMappingInfo, MappingInfo oMappingInfo, List gMappingInfos) { + private List getPredicateObjectGraphMappingFromMultipleGraphMappingInfos(MappingInfo pMappingInfo, MappingInfo oMappingInfo, List gMappingInfos, String triplesMapBaseIRI) { ArrayList list = new ArrayList<>(); MappingInfo lMappingInfo = null; if(oMappingInfo != null) { - lMappingInfo = parseLanguageMappingInfo(oMappingInfo.getTerm()); + lMappingInfo = parseLanguageMappingInfo(oMappingInfo.getTerm(), triplesMapBaseIRI); } for(MappingInfo gMappingInfo: gMappingInfos) { @@ -681,7 +689,7 @@ private boolean areDoubleQuotesIgnored(QuadStore store, Term triplesMap) { return false; } - private List getTargetGenerators(Term termMap, String baseIRI, StrictMode strictMode) { + private List getTargetGenerators(Term termMap, StrictMode strictMode, String triplesMapBaseIRI) { List targetGenerators = new ArrayList<>(); List logicalTargetMaps = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RMLE + "logicalTargetMap"), null)); for (Term logicalTargetMap : logicalTargetMaps) { @@ -692,13 +700,13 @@ private List getTargetGenerators(Term termMap, String baseIRI, St functionExecutor = RecordFunctionExecutorFactory.generate(store, logicalTargetMap, true, ignoreDoubleQuotes, strictMode.equals(StrictMode.STRICT)); } else { try { - functionExecutor = parseFunctionTermMap(functionValues.get(0)); + functionExecutor = parseFunctionTermMap(functionValues.get(0), triplesMapBaseIRI); } catch (IOException e) { logger.error("Parsing function term map failed:" + e); } } if (functionValues != null) { - targetGenerators.add(new NamedNodeGenerator(functionExecutor, baseIRI, strictMode)); + targetGenerators.add(new NamedNodeGenerator(functionExecutor, triplesMapBaseIRI, strictMode)); } } return targetGenerators; diff --git a/src/main/java/be/ugent/rml/RecordFunctionExecutorFactory.java b/src/main/java/be/ugent/rml/RecordFunctionExecutorFactory.java index 4d112a92..7420b6b3 100644 --- a/src/main/java/be/ugent/rml/RecordFunctionExecutorFactory.java +++ b/src/main/java/be/ugent/rml/RecordFunctionExecutorFactory.java @@ -17,13 +17,18 @@ public static SingleRecordFunctionExecutor generate(QuadStore store, Term termMa List templates = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "template"), null)); List constants = Utils.getObjectsFromQuads(store.getQuads(termMap, new NamedNode(NAMESPACES.RML2 + "constant"), null)); - if (!references.isEmpty()) { - return new ReferenceExtractor(references.get(0).getValue(), ignoreDoubleQuotes, strictReferenceResolution); - } else if (!templates.isEmpty()) { - return new ConcatFunction(Utils.parseTemplate(templates.get(0).getValue(), ignoreDoubleQuotes, strictReferenceResolution), encodeURI); - } else if (!constants.isEmpty()) { - return new ConstantExtractor(constants.get(0).getValue()); - } else { + try { + if (!references.isEmpty()) { + return new ReferenceExtractor(references.get(0).getValue(), ignoreDoubleQuotes, strictReferenceResolution); + } else if (!templates.isEmpty()) { + return new ConcatFunction(Utils.parseTemplate(templates.get(0).getValue(), ignoreDoubleQuotes, strictReferenceResolution), encodeURI); + } else if (!constants.isEmpty()) { + return new ConstantExtractor(constants.get(0).getValue()); + } else { + return null; + } + } catch (Exception e) { + System.err.println("Extracting constant or references failed: " + e.getMessage()); return null; } } diff --git a/src/main/java/be/ugent/rml/access/AccessFactory.java b/src/main/java/be/ugent/rml/access/AccessFactory.java index d14d2929..0af68240 100644 --- a/src/main/java/be/ugent/rml/access/AccessFactory.java +++ b/src/main/java/be/ugent/rml/access/AccessFactory.java @@ -5,6 +5,7 @@ import be.ugent.rml.Utils; import be.ugent.rml.records.ReferenceFormulation; import be.ugent.rml.records.SPARQLResultFormat; +import be.ugent.rml.store.Quad; import be.ugent.rml.store.QuadStore; import be.ugent.rml.term.Literal; import be.ugent.rml.term.NamedNode; @@ -78,12 +79,18 @@ public Access getAccess(Term logicalSource, QuadStore rmlStore) { switch(sourceType.get(0).getValue()) { case NAMESPACES.RML2 + "RelativePathSource": + case NAMESPACES.RML2 + "FilePath": String path = Utils.getObjectsFromQuads(rmlStore.getQuads(source, new NamedNode(NAMESPACES.RML2 + "path"), null)).get(0).getValue(); - String root = Utils.getObjectsFromQuads(rmlStore.getQuads(source, new NamedNode(NAMESPACES.RML2 + "root"), null)).get(0).getValue(); - if (root.equals(NAMESPACES.RML2 + "MappingDirectory")) { - access = new LocalFileAccess(path, this.mappingPath); + List rootNodes = rmlStore.getQuads(source, new NamedNode(NAMESPACES.RML2 + "root"), null); + if (rootNodes.isEmpty()) { + access = new LocalFileAccess(path, null); } else { - access = new LocalFileAccess(path, this.basePath); + String root = Utils.getObjectsFromQuads(rootNodes).get(0).getValue(); + if (root.equals(NAMESPACES.RML2 + "MappingDirectory")) { + access = new LocalFileAccess(path, this.mappingPath); + } else { + access = new LocalFileAccess(path, this.basePath); + } } break; diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index a6a89d6d..3aa2ebc9 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -456,7 +456,7 @@ public static void run(String[] args, String basePath) throws Exception { IDLabFunctions.saveState(); - writeOutputTargets(targets, rmlStore, basePath, outputFile, outputFormat); + writeOutputTargets(targets, rmlStore, basePath, outputFile, outputFormat, mappingPath); } // Get stop timestamp for post mapping metadata @@ -480,11 +480,11 @@ public static void run(String[] args, String basePath) throws Exception { } } - private static void writeOutputTargets(Map targets, QuadStore rmlStore, String basePath, String outputFileDefault, String outputFormatDefault) throws Exception { + private static void writeOutputTargets(Map targets, QuadStore rmlStore, String basePath, String outputFileDefault, String outputFormatDefault, String mappingPath) throws Exception { boolean hasNoResults = true; logger.debug("Writing to Targets: {}", targets.keySet()); - TargetFactory targetFactory = new TargetFactory(basePath); + TargetFactory targetFactory = new TargetFactory(basePath, mappingPath); // check if anything needs to be added to the rmlstore (e.g. dynamic targets) if (targets.containsKey(new NamedNode(NAMESPACES.RMLE + "ThisMapping"))){ diff --git a/src/main/java/be/ugent/rml/records/IteratorFormat.java b/src/main/java/be/ugent/rml/records/IteratorFormat.java index 7e96858d..5a6263a3 100644 --- a/src/main/java/be/ugent/rml/records/IteratorFormat.java +++ b/src/main/java/be/ugent/rml/records/IteratorFormat.java @@ -17,6 +17,8 @@ import java.util.List; import java.util.Map; +import static be.ugent.rml.StrictMode.STRICT; + public abstract class IteratorFormat implements ReferenceFormulationRecordFactory { protected Logger logger = LoggerFactory.getLogger(this.getClass()); protected Map cache; diff --git a/src/main/java/be/ugent/rml/target/LocalFileTarget.java b/src/main/java/be/ugent/rml/target/LocalFileTarget.java index c2223d5b..be6f9841 100644 --- a/src/main/java/be/ugent/rml/target/LocalFileTarget.java +++ b/src/main/java/be/ugent/rml/target/LocalFileTarget.java @@ -9,7 +9,9 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.nio.file.Path; import java.util.List; +import java.util.Objects; import java.util.zip.GZIPOutputStream; import static org.apache.commons.io.FileUtils.getFile; @@ -37,7 +39,7 @@ public class LocalFileTarget implements Target { */ public LocalFileTarget(String path, String basePath, String serializationFormat, String compression, List metadata) { this.path = path; - this.basePath = basePath; + this.basePath = Objects.requireNonNullElseGet(basePath, () -> Path.of(path).toAbsolutePath().getParent().toString()); this.serializationFormat = serializationFormat; this.compression = compression; this.metadata = metadata; diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index f8cd7cdd..e0231f30 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -1,5 +1,6 @@ package be.ugent.rml.target; +import be.ugent.idlab.knows.dataio.access.LocalFileAccess; import be.ugent.rml.NAMESPACES; import be.ugent.rml.Utils; import be.ugent.rml.store.Quad; @@ -20,6 +21,7 @@ public class TargetFactory { // The path used when local paths are not absolute. private final String basePath; private static final Logger logger = LoggerFactory.getLogger(TargetFactory.class); + private final String mappingPath; // the HttpRequestTargetHelper is instantiated once, in the TargetFactory, because it stores reusable client credentials and access tokens // it is used only for targets of the type HttpRequest private HttpRequestTargetHelper httpRequestTargetHelper; @@ -27,9 +29,9 @@ public class TargetFactory { /** * The constructor of the TargetFactory. */ - public TargetFactory(String basePath) { - + public TargetFactory(String basePath, String mappingPath) { this.basePath = basePath; + this.mappingPath = mappingPath; try { this.httpRequestTargetHelper = new HttpRequestTargetHelper(); } catch (JoseException e) { @@ -336,6 +338,22 @@ else if (location.endsWith(".jsonld")) { target = new LocalFileTarget(location, this.basePath, serializationFormat, compression, metadata); break; } + case NAMESPACES.RML2 + "FilePath": { // rml:FilePath + logger.debug("Target is a RML2 FilePath"); + String path = Utils.getObjectsFromQuads(rmlStore.getQuads(t, new NamedNode(NAMESPACES.RML2 + "path"), null)).get(0).getValue(); + List rootNodes = rmlStore.getQuads(t, new NamedNode(NAMESPACES.RML2 + "root"), null); + if (rootNodes.isEmpty()) { + target = new LocalFileTarget(path, null, serializationFormat, compression, metadata); + } else { + String root = Utils.getObjectsFromQuads(rootNodes).get(0).getValue(); + if (root.equals(NAMESPACES.RML2 + "MappingDirectory")) { + target = new LocalFileTarget(path, this.mappingPath, serializationFormat, compression, metadata); + } else { + target = new LocalFileTarget(path, this.basePath, serializationFormat, compression, metadata); + } + } + break; + } case NAMESPACES.SD + "Service": { // SPARQL Service logger.debug("Target is a SD Service"); String endpoint = Utils.getObjectsFromQuads(rmlStore.getQuads(t, @@ -373,7 +391,7 @@ else if (location.endsWith(".jsonld")) { break; } default: { - throw new UnsupportedOperationException("Not implemented"); + throw new UnsupportedOperationException("Not implemented: " + targetType); } } logger.debug("Target created: {}", target); diff --git a/src/test/java/be/ugent/rml/MapperLDESTest.java b/src/test/java/be/ugent/rml/MapperLDESTest.java index e27e4384..4647a298 100644 --- a/src/test/java/be/ugent/rml/MapperLDESTest.java +++ b/src/test/java/be/ugent/rml/MapperLDESTest.java @@ -23,7 +23,7 @@ public class MapperLDESTest extends TestCore { private static Agent functionAgent; private static NamedNode LDES_LOGICAL_TARGET_IRI = new NamedNode("http://example.com/rules/#LDESLogicalTarget"); - private static TargetFactory targetFactory = new TargetFactory(System.getProperty("user.dir")); + private static TargetFactory targetFactory = new TargetFactory(System.getProperty("user.dir"), System.getProperty("user.dir")); @AfterEach public void cleanUp() throws IOException { diff --git a/src/test/java/be/ugent/rml/MapperNewRMLCoreCSVTest.java b/src/test/java/be/ugent/rml/MapperNewRMLCoreCSVTest.java deleted file mode 100644 index bedc37e5..00000000 --- a/src/test/java/be/ugent/rml/MapperNewRMLCoreCSVTest.java +++ /dev/null @@ -1,215 +0,0 @@ -package be.ugent.rml; - -import org.junit.jupiter.api.Test; - -public class MapperNewRMLCoreCSVTest extends TestCore { - @Test - public void evaluate_new_0000_CSV() { - doMapping("./new-test-cases/core/RMLTC0000-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0000-CSV/output.nq"); - } - - @Test - public void evaluate_new_0001a_CSV() { - doMapping("./new-test-cases/core/RMLTC0001a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0001a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0001b_CSV() { - doMapping("./new-test-cases/core/RMLTC0001b-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0001b-CSV/output.nq"); - } - - @Test - public void evaluate_new_0002a_CSV() { - doMapping("./new-test-cases/core/RMLTC0002a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0002a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0002b_CSV() { - doMapping("./new-test-cases/core/RMLTC0002b-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0002b-CSV/output.nq"); - } - - @Test - public void evaluate_new_0002c_CSV() { - doMappingExpectError("./new-test-cases/core/RMLTC0002c-CSV/mapping.ttl", StrictMode.STRICT); - } - - @Test - public void evaluate_new_0002e_CSV() { - doMappingExpectError("./new-test-cases/core/RMLTC0002e-CSV/mapping.ttl"); - } - - @Test - public void evaluate_new_0003c_CSV() { - doMapping("./new-test-cases/core/RMLTC0003c-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0003c-CSV/output.nq"); - } - - @Test - public void evaluate_new_0004a_CSV() { - doMapping("./new-test-cases/core/RMLTC0004a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0004a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0004b_CSV() { - doMappingExpectError("./new-test-cases/core/RMLTC0004b-CSV/mapping.ttl"); - } - - @Test - public void evaluate_new_0005a_CSV() { - doMapping("./new-test-cases/core/RMLTC0005a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0005a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0006a_CSV() { - doMapping("./new-test-cases/core/RMLTC0006a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0006a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0007a_CSV() { - doMapping("./new-test-cases/core/RMLTC0007a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0007a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0007b_CSV() { - doMapping("./new-test-cases/core/RMLTC0007b-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0007b-CSV/output.nq"); - } - - @Test - public void evaluate_new_0007c_CSV() { - doMapping("./new-test-cases/core/RMLTC0007c-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0007c-CSV/output.nq"); - } - - @Test - public void evaluate_new_0007d_CSV() { - doMapping("./new-test-cases/core/RMLTC0007d-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0007d-CSV/output.nq"); - } - - @Test - public void evaluate_new_0007e_CSV() { - doMapping("./new-test-cases/core/RMLTC0007e-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0007e-CSV/output.nq"); - } - - @Test - public void evaluate_new_0007f_CSV() { - doMapping("./new-test-cases/core/RMLTC0007f-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0007f-CSV/output.nq"); - } - - @Test - public void evaluate_new_0007g_CSV() { - doMapping("./new-test-cases/core/RMLTC0007g-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0007g-CSV/output.nq"); - } - - @Test - public void evaluate_new_0007h_CSV() { - doMappingExpectError("./new-test-cases/core/RMLTC0007h-CSV/mapping.ttl"); - } - - @Test - public void evaluate_new_0008a_CSV() { - doMapping("./new-test-cases/core/RMLTC0008a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0008a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0008b_CSV() { - doMapping("./new-test-cases/core/RMLTC0008b-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0008b-CSV/output.nq"); - } - - @Test - public void evaluate_new_0008c_CSV() { - doMapping("./new-test-cases/core/RMLTC0008c-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0008c-CSV/output.nq"); - } - - @Test - public void evaluate_new_0009a_CSV() { - doMapping("./new-test-cases/core/RMLTC0009a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0009a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0009b_CSV() { - doMapping("./new-test-cases/core/RMLTC0009b-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0009b-CSV/output.nq"); - } - - @Test - public void evaluate_new_0010a_CSV() { - doMapping("./new-test-cases/core/RMLTC0010a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0010a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0010b_CSV() { - doMapping("./new-test-cases/core/RMLTC0010b-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0010b-CSV/output.nq"); - } - - @Test - public void evaluate_new_0010c_CSV() { - doMapping("./new-test-cases/core/RMLTC0010c-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0010c-CSV/output.nq"); - } - - @Test - public void evaluate_new_0011b_CSV() { - doMapping("./new-test-cases/core/RMLTC0011b-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0011b-CSV/output.nq"); - } - - @Test - public void evaluate_new_0012a_CSV() { - doMapping("./new-test-cases/core/RMLTC0012a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0012a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0012b_CSV() { - doMapping("./new-test-cases/core/RMLTC0012b-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0012b-CSV/output.nq"); - } - - @Test - public void evaluate_new_0012c_CSV() { - doMappingExpectError("./new-test-cases/core/RMLTC0012c-CSV/mapping.ttl"); - } - - @Test - public void evaluate_new_0012d_CSV() { - doMappingExpectError("./new-test-cases/core/RMLTC0012d-CSV/mapping.ttl"); - } - - @Test - public void evaluate_new_0015a_CSV() { - doMapping("./new-test-cases/core/RMLTC0015a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0015a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0015b_CSV() { - doMappingExpectError("./new-test-cases/core/RMLTC0015b-CSV/mapping.ttl"); - } - - @Test - public void evaluate_new_0019a_CSV() { - doMapping("./new-test-cases/core/RMLTC0019a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0019a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0019b_CSV() { - doMappingExpectError("./new-test-cases/core/RMLTC0019b-CSV/mapping.ttl", StrictMode.STRICT); - } - - @Test - public void evaluate_new_0020a_CSV() { - doMapping("./new-test-cases/core/RMLTC0020a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0020a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0021a_CSV() { - doMapping("./new-test-cases/core/RMLTC0021a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0021a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0022a_CSV() { - doMapping("./new-test-cases/core/RMLTC0022a-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0022a-CSV/output.nq"); - } - - @Test - public void evaluate_new_0022b_CSV() { - doMapping("./new-test-cases/core/RMLTC0022b-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0022b-CSV/output.nq"); - } - - @Test - public void evaluate_new_0022c_CSV() { - doMapping("./new-test-cases/core/RMLTC0022c-CSV/mapping.ttl", "./new-test-cases/core/RMLTC0022c-CSV/output.nq"); - } -} diff --git a/src/test/java/be/ugent/rml/MapperNewRMLCoreJSONTest.java b/src/test/java/be/ugent/rml/MapperNewRMLCoreJSONTest.java index a3c0f01c..a5d0c025 100644 --- a/src/test/java/be/ugent/rml/MapperNewRMLCoreJSONTest.java +++ b/src/test/java/be/ugent/rml/MapperNewRMLCoreJSONTest.java @@ -4,6 +4,11 @@ import org.junit.jupiter.api.Test; public class MapperNewRMLCoreJSONTest extends TestCore { + /* + - Total number of test cases: 61 + - Failures: 6 (9.8%) + - Passes: 55 (90.2%) + */ @Test public void evaluate_new_0000_JSON() { doMapping("./new-test-cases/core/RMLTC0000-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0000-JSON/output.nq"); @@ -124,23 +129,20 @@ public void evaluate_new_0009b_JSON() { doMapping("./new-test-cases/core/RMLTC0009b-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0009b-JSON/output.nq"); } - // Needs latest JSONPath IETF support @Test - @Disabled + @Disabled("Needs latest JSONPath IETF support") public void evaluate_new_0010a_JSON() { doMapping("./new-test-cases/core/RMLTC0010a-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0010a-JSON/output.nq"); } - // Needs latest JSONPath IETF support @Test - @Disabled + @Disabled("Needs latest JSONPath IETF support") public void evaluate_new_0010b_JSON() { doMapping("./new-test-cases/core/RMLTC0010b-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0010b-JSON/output.nq"); } - // Needs latest JSONPath IETF support @Test - @Disabled + @Disabled("Needs latest JSONPath IETF support") public void evaluate_new_0010c_JSON() { doMapping("./new-test-cases/core/RMLTC0010c-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0010c-JSON/output.nq"); } @@ -204,4 +206,117 @@ public void evaluate_new_0020a_JSON() { public void evaluate_new_0021a_JSON() { doMapping("./new-test-cases/core/RMLTC0021a-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0021a-JSON/output.nq"); } + + @Test + public void evaluate_new_0022a_JSON() { + doMapping("./new-test-cases/core/RMLTC0022a-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0022a-JSON/output.nq"); + } + + @Test + public void evaluate_new_0022b_JSON() { + doMapping("./new-test-cases/core/RMLTC0022b-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0022b-JSON/output.nq"); + } + + @Test + public void evaluate_new_0022c_JSON() { + doMapping("./new-test-cases/core/RMLTC0022c-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0022c-JSON/output.nq"); + } + + @Test + public void evaluate_new_0023a_JSON() { + doMappingExpectError("./new-test-cases/core/RMLTC0023a-JSON/mapping.ttl", StrictMode.STRICT); + } + + @Test + public void evaluate_new_0023b_JSON() { + doMappingExpectError("./new-test-cases/core/RMLTC0023b-JSON/mapping.ttl", StrictMode.STRICT); + } + + @Test + public void evaluate_new_0023c_JSON() { + doMappingExpectError("./new-test-cases/core/RMLTC0023c-JSON/mapping.ttl", StrictMode.STRICT); + } + + @Test + public void evaluate_new_0023d_JSON() { + doMappingExpectError("./new-test-cases/core/RMLTC0023d-JSON/mapping.ttl", StrictMode.STRICT); + } + + @Test + @Disabled("Invalid template should fail, but RMLMapper doesn't.") + public void evaluate_new_0023e_JSON() { + doMappingExpectError("./new-test-cases/core/RMLTC0023e-JSON/mapping.ttl", StrictMode.STRICT); + } + + @Test + public void evaluate_new_0023f_JSON() { + doMappingExpectError("./new-test-cases/core/RMLTC0023f-JSON/mapping.ttl", StrictMode.STRICT); + } + + @Test + @Disabled("Should fail but doesn't.") + public void evaluate_new_0025b_JSON() { + doMappingExpectError("./new-test-cases/core/RMLTC0025b-JSON/mapping.ttl", StrictMode.STRICT); + } + + @Test + public void evaluate_new_0026a_JSON() { + doMapping("./new-test-cases/core/RMLTC0026a-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0026a-JSON/output.nq"); + } + + @Test + @Disabled("Referencing to an array instead of elements or all elements should fail, but RMLMapper doesn't fail.") + public void evaluate_new_0026b_JSON() { + doMappingExpectError("./new-test-cases/core/RMLTC0026b-JSON/mapping.ttl", StrictMode.STRICT); + } + + @Test + public void evaluate_new_0027a_JSON() { + doMapping("./new-test-cases/core/RMLTC0027a-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0027a-JSON/output.nq"); + } + + @Test + public void evaluate_new_0027b_JSON() { + doMapping("./new-test-cases/core/RMLTC0027b-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0027b-JSON/output.nq"); + } + + @Test + public void evaluate_new_0027c_JSON() { + doMapping("./new-test-cases/core/RMLTC0027c-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0027c-JSON/output.nq"); + } + + @Test + public void evaluate_new_0027d_JSON() { + doMapping("./new-test-cases/core/RMLTC0027d-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0027d-JSON/output.nq"); + } + + @Test + public void evaluate_new_0028a_JSON() { + doMapping("./new-test-cases/core/RMLTC0028a-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0028a-JSON/output.nq"); + } + + @Test + public void evaluate_new_0028b_JSON() { + doMapping("./new-test-cases/core/RMLTC0028b-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0028b-JSON/output.nq"); + } + + @Test + public void evaluate_new_0028c_JSON() { + doMapping("./new-test-cases/core/RMLTC0028c-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0028c-JSON/output.nq"); + } + + @Test + public void evaluate_new_0029a_JSON() { + doMapping("./new-test-cases/core/RMLTC0029a-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0029a-JSON/output.nq"); + } + + @Test + public void evaluate_new_0029b_JSON() { + doMapping("./new-test-cases/core/RMLTC0029b-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0029b-JSON/output.nq"); + } + + @Test + public void evaluate_new_0029c_JSON() { + doMapping("./new-test-cases/core/RMLTC0029c-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0029c-JSON/output.nq"); + } } diff --git a/src/test/java/be/ugent/rml/MapperNewRMLCoreMySQLTest.java b/src/test/java/be/ugent/rml/MapperNewRMLCoreMySQLTest.java deleted file mode 100644 index b50fcfff..00000000 --- a/src/test/java/be/ugent/rml/MapperNewRMLCoreMySQLTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package be.ugent.rml; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.TestInstance; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.slf4j.LoggerFactory; - -import java.util.stream.Stream; - -import static be.ugent.rml.MyFileUtils.getParentPath; -import static be.ugent.rml.TestStrictMode.*; - -@TestInstance(TestInstance.Lifecycle.PER_CLASS) -public class MapperNewRMLCoreMySQLTest extends MySQLTestCore { - @BeforeAll - public static void beforeClass() { - logger = LoggerFactory.getLogger(MapperNewRMLCoreMySQLTest.class); - } - - static Stream data() { - return Stream.of( - // scenarios: - Arguments.of("RMLTC0000", false, BOTH), - Arguments.of("RMLTC0001a", false, BOTH), - Arguments.of("RMLTC0001b", false, BOTH), - Arguments.of("RMLTC0002a", false, BOTH), - Arguments.of("RMLTC0002b", false, BOTH), - Arguments.of("RMLTC0002c", true, STRICT_ONLY), - Arguments.of("RMLTC0002d", false, BOTH), - Arguments.of("RMLTC0002e", true, BOTH), - Arguments.of("RMLTC0002g", true, BOTH), - Arguments.of("RMLTC0002h", true, STRICT_ONLY), - Arguments.of("RMLTC0002i", true, STRICT_ONLY), - Arguments.of("RMLTC0002j", true, BOTH), - Arguments.of("RMLTC0003a", true, STRICT_ONLY), - Arguments.of("RMLTC0003b", false, BOTH), - Arguments.of("RMLTC0003c", false, BOTH), - Arguments.of("RMLTC0004a", false, BOTH), - Arguments.of("RMLTC0004b", true, BOTH), - Arguments.of("RMLTC0005a", false, BOTH), - Arguments.of("RMLTC0005b", false, BOTH), - Arguments.of("RMLTC0006a", false, BOTH), - Arguments.of("RMLTC0007a", false, BOTH), - Arguments.of("RMLTC0007b", false, BOTH), - Arguments.of("RMLTC0007c", false, BOTH), - Arguments.of("RMLTC0007d", false, BOTH), - Arguments.of("RMLTC0007e", false, BOTH), - Arguments.of("RMLTC0007f", false, BOTH), - Arguments.of("RMLTC0007g", false, BOTH), - Arguments.of("RMLTC0007h", true, BOTH), - Arguments.of("RMLTC0008a", false, BOTH), - Arguments.of("RMLTC0008b", false, BOTH), - Arguments.of("RMLTC0008c", false, BOTH), - Arguments.of("RMLTC0009a", false, BOTH), - Arguments.of("RMLTC0009b", false, BOTH), - Arguments.of("RMLTC0009c", false, BOTH), - Arguments.of("RMLTC0009d", false, BOTH), - Arguments.of("RMLTC0010a", false, BOTH), - Arguments.of("RMLTC0010b", false, BOTH), - Arguments.of("RMLTC0010c", false, BOTH), - Arguments.of("RMLTC0011b", false, BOTH), - Arguments.of("RMLTC0012a", false, BOTH), - Arguments.of("RMLTC0012b", false, BOTH), - Arguments.of("RMLTC0012c", true, BOTH), - Arguments.of("RMLTC0012d", true, BOTH), - Arguments.of("RMLTC0012e", false, BOTH), - Arguments.of("RMLTC0013a", false, BOTH), - Arguments.of("RMLTC0014d", false, BOTH), - Arguments.of("RMLTC0015b", true, BOTH), - Arguments.of("RMLTC0016a", false, BOTH), - Arguments.of("RMLTC0016b", false, BOTH), - Arguments.of("RMLTC0016c", false, BOTH), - Arguments.of("RMLTC0016d", false, BOTH), - Arguments.of("RMLTC0016e", false, BOTH), // Issue 184, resolved - Arguments.of("RMLTC0019a", false, BOTH), - Arguments.of("RMLTC0019b", true, STRICT_ONLY), - Arguments.of("RMLTC0020a", false, BOTH), - Arguments.of("RMLTC0021a", false, BOTH) - ); - } - - @ParameterizedTest(name = "{index}: NewRMLCore_MySQL_{0}") - @MethodSource("data") - public void doMapping(String testCaseName, boolean expectedException, TestStrictMode testStrictMode) throws Exception { - prepareDatabase(String.format("src/test/resources/new-test-cases/core/%s-MySQL/resource.sql", testCaseName), USERNAME, PASSWORD); - if (testStrictMode.equals(BOTH) || testStrictMode.equals(BEST_EFFORT_ONLY)) { - // test the best-effort mode of the mapper - mappingTest(testCaseName, expectedException, StrictMode.BEST_EFFORT); - } - if (testStrictMode.equals(BOTH) || testStrictMode.equals(STRICT_ONLY)) { - // test the mapper in strict mode - mappingTest(testCaseName, expectedException, StrictMode.STRICT); - } - } - - private void mappingTest(String testCaseName, boolean expectedException, StrictMode strictMode) { - String mappingPath = "./new-test-cases/core/" + testCaseName + "-MySQL/mapping.ttl"; - String outputPath = "new-test-cases/core/" + testCaseName + "-MySQL/output.nq"; - - System.out.println(mappingPath); - - // Create a temporary copy of the mapping file and replace source details - String tempMappingPath = CreateTempMappingFileAndReplaceDSN(mappingPath); - - // mapping - String parentPath = getParentPath(getClass(), outputPath); - - if (!expectedException) { - doMapping(tempMappingPath, outputPath, parentPath, strictMode); - } else { - doMappingExpectError(tempMappingPath, strictMode); - } - - deleteTempMappingFile(tempMappingPath); - } -} diff --git a/src/test/java/be/ugent/rml/MapperNewRMLCorePostgresTest.java b/src/test/java/be/ugent/rml/MapperNewRMLCorePostgresTest.java deleted file mode 100644 index acd20c2f..00000000 --- a/src/test/java/be/ugent/rml/MapperNewRMLCorePostgresTest.java +++ /dev/null @@ -1,122 +0,0 @@ -package be.ugent.rml; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.TestInstance; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.slf4j.LoggerFactory; - -import java.util.stream.Stream; - -import static be.ugent.rml.MyFileUtils.getParentPath; -import static be.ugent.rml.TestStrictMode.*; - -@TestInstance(TestInstance.Lifecycle.PER_CLASS) -public class MapperNewRMLCorePostgresTest extends PostgresTestCore { - - @BeforeAll - public static void beforeClass() { - logger = LoggerFactory.getLogger(MapperNewRMLCorePostgresTest.class); - } - - public static Stream data() { - return Stream.of( - // scenarios: - Arguments.of("RMLTC0000", false, BOTH), - Arguments.of("RMLTC0001a", false, BOTH), - Arguments.of("RMLTC0001b", false, BOTH), - Arguments.of("RMLTC0002a", false, BOTH), - Arguments.of("RMLTC0002b", false, BOTH), - Arguments.of("RMLTC0002c", true, STRICT_ONLY), - Arguments.of("RMLTC0002d", false, BOTH), - Arguments.of("RMLTC0002e", true, BOTH), - Arguments.of("RMLTC0002g", true, BOTH), - Arguments.of("RMLTC0002h", true, BOTH), - Arguments.of("RMLTC0002i", true, BOTH), - Arguments.of("RMLTC0002j", true, BOTH), - Arguments.of("RMLTC0003a", true, BOTH), - Arguments.of("RMLTC0003b", false, BOTH), - Arguments.of("RMLTC0003c", false, BOTH), - Arguments.of("RMLTC0004a", false, BOTH), - Arguments.of("RMLTC0004b", true, BOTH), - Arguments.of("RMLTC0005a", false, BOTH), - Arguments.of("RMLTC0005b", false, BOTH), - Arguments.of("RMLTC0006a", false, BOTH), - Arguments.of("RMLTC0007a", false, BOTH), - Arguments.of("RMLTC0007b", false, BOTH), - Arguments.of("RMLTC0007c", false, BOTH), - Arguments.of("RMLTC0007d", false, BOTH), - Arguments.of("RMLTC0007e", false, BOTH), - Arguments.of("RMLTC0007f", false, BOTH), - Arguments.of("RMLTC0007g", false, BOTH), - Arguments.of("RMLTC0007h", true, BOTH), - Arguments.of("RMLTC0008a", false, BOTH), - Arguments.of("RMLTC0008b", false, BOTH), - Arguments.of("RMLTC0008c", false, BOTH), - Arguments.of("RMLTC0009a", false, BOTH), - Arguments.of("RMLTC0009b", false, BOTH), - Arguments.of("RMLTC0009c", false, BOTH), - Arguments.of("RMLTC0009d", false, BOTH), - Arguments.of("RMLTC0010a", false, BOTH), - Arguments.of("RMLTC0010b", false, BOTH), - Arguments.of("RMLTC0010c", false, BOTH), - Arguments.of("RMLTC0011b", false, BOTH), - Arguments.of("RMLTC0012a", false, BOTH), - Arguments.of("RMLTC0012b", false, BOTH), - Arguments.of("RMLTC0012c", true, BOTH), - Arguments.of("RMLTC0012d", true, BOTH), - Arguments.of("RMLTC0012e", false, BOTH), - Arguments.of("RMLTC0013a", false, BOTH), - Arguments.of("RMLTC0014d", false, BOTH), - Arguments.of("RMLTC0015b", true, BOTH), - Arguments.of("RMLTC0016a", false, BOTH), - Arguments.of("RMLTC0016c", false, BOTH), - Arguments.of("RMLTC0016d", false, BOTH), - Arguments.of("RMLTC0016e", false, BOTH), // Issue 184, resolved - Arguments.of("RMLTC0019a", false, BOTH), - /* - Expected output for RMLTC0019b is written for best-effort operation. - The case will fail in strict mode. - */ - Arguments.of("RMLTC0019b", true, STRICT_ONLY), - Arguments.of("RMLTC0020a", false, BOTH), - Arguments.of("RMLTC0021a", false, BOTH) - ); - } - - - @ParameterizedTest(name = "{index}: NewRMLCore_Postgres_CSV_Test_{0}") - @MethodSource("data") - public void doMapping(String testCaseName, boolean expectedException, TestStrictMode testStrictMode) throws Exception { - if (testStrictMode.equals(BOTH) || testStrictMode.equals(BEST_EFFORT_ONLY)) { - // test the best-effort mode of the mapper - mappingTest(testCaseName, expectedException, StrictMode.BEST_EFFORT); - } - if (testStrictMode.equals(BOTH) || testStrictMode.equals(STRICT_ONLY)) { - // test the mapper in strict mode - mappingTest(testCaseName, expectedException, StrictMode.STRICT); - } - } - - private void mappingTest(String testCaseName, boolean expectedException, StrictMode strictMode) { - prepareDatabase(String.format("src/test/resources/new-test-cases/core/%s-PostgreSQL/resource.sql", testCaseName), USERNAME, PASSWORD); - - String mappingPath = "./new-test-cases/core/" + testCaseName + "-PostgreSQL/mapping.ttl"; - String outputPath = "new-test-cases/core/" + testCaseName + "-PostgreSQL/output.nq"; - - // Create a temporary copy of the mapping file and replace source details - String tempMappingPath = CreateTempMappingFileAndReplaceDSN(mappingPath); - - // mapping - String parentPath = getParentPath(getClass(), outputPath); - - if (!expectedException) { - doMapping(tempMappingPath, outputPath, parentPath, strictMode); - } else { - doMappingExpectError(tempMappingPath, strictMode); - } - - deleteTempMappingFile(tempMappingPath); - } -} diff --git a/src/test/java/be/ugent/rml/MapperNewRMLCoreXMLTest.java b/src/test/java/be/ugent/rml/MapperNewRMLCoreXMLTest.java deleted file mode 100644 index 81ce58e8..00000000 --- a/src/test/java/be/ugent/rml/MapperNewRMLCoreXMLTest.java +++ /dev/null @@ -1,190 +0,0 @@ -package be.ugent.rml; - -import org.junit.jupiter.api.Test; - -public class MapperNewRMLCoreXMLTest extends TestCore { - @Test - public void evaluate_new_0000_XML() { - doMapping("./new-test-cases/core/RMLTC0000-XML/mapping.ttl", "./new-test-cases/core/RMLTC0000-XML/output.nq"); - } - - @Test - public void evaluate_new_0001a_XML() { - doMapping("./new-test-cases/core/RMLTC0001a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0001a-XML/output.nq"); - } - - @Test - public void evaluate_new_0001b_XML() { - doMapping("./new-test-cases/core/RMLTC0001b-XML/mapping.ttl", "./new-test-cases/core/RMLTC0001b-XML/output.nq"); - } - - @Test - public void evaluate_new_0002a_XML() { - doMapping("./new-test-cases/core/RMLTC0002a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0002a-XML/output.nq"); - } - - @Test - public void evaluate_new_0002b_XML() { - doMapping("./new-test-cases/core/RMLTC0002b-XML/mapping.ttl", "./new-test-cases/core/RMLTC0002b-XML/output.nq"); - } - - @Test - public void evaluate_new_0002e_XML() { - doMappingExpectError("./new-test-cases/core/RMLTC0002e-XML/mapping.ttl"); - } - - @Test - public void evaluate_new_0003c_XML() { - doMapping("./new-test-cases/core/RMLTC0003c-XML/mapping.ttl", "./new-test-cases/core/RMLTC0003c-XML/output.nq"); - } - - @Test - public void evaluate_new_0004a_XML() { - doMapping("./new-test-cases/core/RMLTC0004a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0004a-XML/output.nq"); - } - - @Test - public void evaluate_new_0004b_XML() { - doMappingExpectError("./new-test-cases/core/RMLTC0004b-XML/mapping.ttl"); - } - - @Test - public void evaluate_new_0005a_XML() { - doMapping("./new-test-cases/core/RMLTC0005a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0005a-XML/output.nq"); - } - - @Test - public void evaluate_new_0006a_XML() { - doMapping("./new-test-cases/core/RMLTC0006a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0006a-XML/output.nq"); - } - - @Test - public void evaluate_new_0007a_XML() { - doMapping("./new-test-cases/core/RMLTC0007a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0007a-XML/output.nq"); - } - - @Test - public void evaluate_new_0007b_XML() { - doMapping("./new-test-cases/core/RMLTC0007b-XML/mapping.ttl", "./new-test-cases/core/RMLTC0007b-XML/output.nq"); - } - - @Test - public void evaluate_new_0007c_XML() { - doMapping("./new-test-cases/core/RMLTC0007c-XML/mapping.ttl", "./new-test-cases/core/RMLTC0007c-XML/output.nq"); - } - - @Test - public void evaluate_new_0007d_XML() { - doMapping("./new-test-cases/core/RMLTC0007d-XML/mapping.ttl", "./new-test-cases/core/RMLTC0007d-XML/output.nq"); - } - - @Test - public void evaluate_new_0007e_XML() { - doMapping("./new-test-cases/core/RMLTC0007e-XML/mapping.ttl", "./new-test-cases/core/RMLTC0007e-XML/output.nq"); - } - - @Test - public void evaluate_new_0007f_XML() { - doMapping("./new-test-cases/core/RMLTC0007f-XML/mapping.ttl", "./new-test-cases/core/RMLTC0007f-XML/output.nq"); - } - - @Test - public void evaluate_new_0007g_XML() { - doMapping("./new-test-cases/core/RMLTC0007g-XML/mapping.ttl", "./new-test-cases/core/RMLTC0007g-XML/output.nq"); - } - - @Test - public void evaluate_new_0007h_XML() { - doMappingExpectError("./new-test-cases/core/RMLTC0007h-XML/mapping.ttl"); - } - - @Test - public void evaluate_new_0008a_XML() { - doMapping("./new-test-cases/core/RMLTC0008a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0008a-XML/output.nq"); - } - - @Test - public void evaluate_new_0008b_XML() { - doMapping("./new-test-cases/core/RMLTC0008b-XML/mapping.ttl", "./new-test-cases/core/RMLTC0008b-XML/output.nq"); - } - - @Test - public void evaluate_new_0008c_XML() { - doMapping("./new-test-cases/core/RMLTC0008c-XML/mapping.ttl", "./new-test-cases/core/RMLTC0008c-XML/output.nq"); - } - - @Test - public void evaluate_new_0009a_XML() { - doMapping("./new-test-cases/core/RMLTC0009a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0009a-XML/output.nq"); - } - - @Test - public void evaluate_new_0009b_XML() { - doMapping("./new-test-cases/core/RMLTC0009b-XML/mapping.ttl", "./new-test-cases/core/RMLTC0009b-XML/output.nq"); - } - - @Test - public void evaluate_new_0010b_XML() { - doMapping("./new-test-cases/core/RMLTC0010b-XML/mapping.ttl", "./new-test-cases/core/RMLTC0010b-XML/output.nq"); - } - - @Test - public void evaluate_new_0010c_XML() { - doMapping("./new-test-cases/core/RMLTC0010c-XML/mapping.ttl", "./new-test-cases/core/RMLTC0010c-XML/output.nq"); - } - - @Test - public void evaluate_new_0011b_XML() { - doMapping("./new-test-cases/core/RMLTC0011b-XML/mapping.ttl", "./new-test-cases/core/RMLTC0011b-XML/output.nq"); - } - - @Test - public void evaluate_new_0012a_XML() { - doMapping("./new-test-cases/core/RMLTC0012a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0012a-XML/output.nq"); - } - - @Test - public void evaluate_new_0012b_XML() { - doMapping("./new-test-cases/core/RMLTC0012b-XML/mapping.ttl", "./new-test-cases/core/RMLTC0012b-XML/output.nq"); - } - - @Test - public void evaluate_new_0012c_XML() { - doMappingExpectError("./new-test-cases/core/RMLTC0012c-XML/mapping.ttl"); - } - - @Test - public void evaluate_new_0012d_XML() { - doMappingExpectError("./new-test-cases/core/RMLTC0012d-XML/mapping.ttl"); - } - - @Test - public void evaluate_new_0015a_XML() { - doMapping("./new-test-cases/core/RMLTC0015a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0015a-XML/output.nq"); - } - - @Test - public void evaluate_new_0015b_XML() { - doMappingExpectError("./new-test-cases/core/RMLTC0015b-XML/mapping.ttl"); - } - - @Test - public void evaluate_new_0019a_XML() { - doMapping("./new-test-cases/core/RMLTC0019a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0019a-XML/output.nq"); - } - - @Test - public void evaluate_new_0019b_XML() { - doMappingExpectError("./new-test-cases/core/RMLTC0019b-XML/mapping.ttl", StrictMode.STRICT); - } - - @Test - public void evaluate_new_0020a_XML() { - doMapping("./new-test-cases/core/RMLTC0020a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0020a-XML/output.nq"); - } - - @Test - public void evaluate_new_0021a_XML() { - doMapping("./new-test-cases/core/RMLTC0021a-XML/mapping.ttl", "./new-test-cases/core/RMLTC0021a-XML/output.nq"); - } -} diff --git a/src/test/java/be/ugent/rml/MapperNewRMLIOSourceTest.java b/src/test/java/be/ugent/rml/MapperNewRMLIOSourceTest.java index 90ce19d1..f0c253e8 100644 --- a/src/test/java/be/ugent/rml/MapperNewRMLIOSourceTest.java +++ b/src/test/java/be/ugent/rml/MapperNewRMLIOSourceTest.java @@ -4,6 +4,11 @@ import org.junit.jupiter.api.Test; public class MapperNewRMLIOSourceTest extends TestCore { + /* + - Total number of test cases: 32 + - Failures: 12 (37.5%) + - Passes: 20 (62.5%) + */ @Test public void evaluate_RMLSTC0001a() { doMapping("./new-test-cases/io/RMLSTC0001a/mapping.ttl", "./new-test-cases/io/RMLSTC0001a/default.nq"); @@ -44,7 +49,7 @@ public void evaluate_RMLSTC0002e() { } @Test - @Disabled("RML Logical Source cannot SPARQL local files yet") + @Disabled("Crashes") public void evaluate_RMLSTC0003() { doMapping("./new-test-cases/io/RMLSTC0003/mapping.ttl", "./new-test-cases/io/RMLSTC0003/default.nq"); } @@ -67,71 +72,112 @@ public void evaluate_RMLSTC0004c() { } @Test - @Disabled("RML Logical Source cannot find 'id', parsing CSV goes wrong") - public void evaluate_RMLSTC0005a() { - doMapping("./new-test-cases/io/RMLSTC0005a/mapping.ttl", "./new-test-cases/io/RMLSTC0005a/default.nq"); + @Disabled("Needs to configure SQL support") + public void evaluate_RMLSTC0006a() { + doMapping("./new-test-cases/io/RMLSTC0006a/mapping.ttl", "./new-test-cases/io/RMLSTC0006a/default.nq"); } @Test - @Disabled("RML Logical Source cannot find 'id', parsing CSV goes wrong") - public void evaluate_RMLSTC0005b() { - doMapping("./new-test-cases/io/RMLSTC0005b/mapping.ttl", "./new-test-cases/io/RMLSTC0005b/default.nq"); + @Disabled("Output wrong") + public void evaluate_RMLSTC0006b() { + doMapping("./new-test-cases/io/RMLSTC0006b/mapping.ttl", "./new-test-cases/io/RMLSTC0006b/default.nq"); } @Test - public void evaluate_RMLSTC0006a() { - doMapping("./new-test-cases/io/RMLSTC0006a/mapping.ttl", "./new-test-cases/io/RMLSTC0006a/default.nq"); + public void evaluate_RMLSTC0007a() { + doMapping("./new-test-cases/io/RMLSTC0007a/mapping.ttl", "./new-test-cases/io/RMLSTC0007a/default.nq"); } @Test - @Disabled("RML Logical Source does not support VOID Dataset yet") - public void evaluate_RMLSTC0006b() { - doMapping("./new-test-cases/io/RMLSTC0006b/mapping.ttl", "./new-test-cases/io/RMLSTC0006b/default.nq"); + public void evaluate_RMLSTC0007b() { + doMapping("./new-test-cases/io/RMLSTC0007b/mapping.ttl", "./new-test-cases/io/RMLSTC0007b/default.nq"); } @Test - @Disabled("java.lang.Error: Unsupported rml:referenceFormulation for a SPARQL source.") - public void evaluate_RMLSTC0006c() { - doMapping("./new-test-cases/io/RMLSTC0006c/mapping.ttl", "./new-test-cases/io/RMLSTC0006c/default.nq"); + public void evaluate_RMLSTC0007c() { + doMapping("./new-test-cases/io/RMLSTC0007c/mapping.ttl", "./new-test-cases/io/RMLSTC0007c/default.nq"); } @Test - public void evaluate_RMLSTC0006d() { - doMapping("./new-test-cases/io/RMLSTC0006d/mapping.ttl", "./new-test-cases/io/RMLSTC0006d/default.nq"); + @Disabled("RML Logical Source does not support the XML reference formulation with namespaces") + public void evaluate_RMLSTC0007d() { + doMapping("./new-test-cases/io/RMLSTC0007d/mapping.ttl", "./new-test-cases/io/RMLSTC0007d/default.nq"); } @Test - public void evaluate_RMLSTC0006e() { - doMapping("./new-test-cases/io/RMLSTC0006e/mapping.ttl", "./new-test-cases/io/RMLSTC0006e/default.nq"); + public void evaluate_RMLSTC0008a() { + doMapping("./new-test-cases/io/RMLSTC0008a/mapping.ttl", "./new-test-cases/io/RMLSTC0008a/default.nq"); } @Test - @Disabled("Turtle parsing failure") - public void evaluate_RMLSTC0006f() { - // TODO: driver - doMapping("./new-test-cases/io/RMLSTC0006f/mapping.ttl", "./new-test-cases/io/RMLSTC0006f/default.nq"); + public void evaluate_RMLSTC0008b() { + doMapping("./new-test-cases/io/RMLSTC0008b/mapping.ttl", "./new-test-cases/io/RMLSTC0008b/default.nq"); } @Test - public void evaluate_RMLSTC0007a() { - doMapping("./new-test-cases/io/RMLSTC0007a/mapping.ttl", "./new-test-cases/io/RMLSTC0007a/default.nq"); + public void evaluate_RMLSTC0009a() { + doMapping("./new-test-cases/io/RMLSTC0009a/mapping.ttl", "./new-test-cases/io/RMLSTC0009a/output.nq"); } @Test - @Disabled("RML Logical Source fails parsing CSV with spaces in table, test case problem?") - public void evaluate_RMLSTC0007b() { - doMapping("./new-test-cases/io/RMLSTC0007b/mapping.ttl", "./new-test-cases/io/RMLSTC0007b/default.nq"); + @Disabled("Error expected but RMLMapper does not.") + public void evaluate_RMLSTC0010a() { + doMappingExpectError("./new-test-cases/io/RMLSTC0010a/mapping.ttl", StrictMode.STRICT); } @Test - @Disabled("RML Logical Source fails parsing XML") - public void evaluate_RMLSTC0007c() { - doMapping("./new-test-cases/io/RMLSTC0007c/mapping.ttl", "./new-test-cases/io/RMLSTC0007c/default.nq"); + @Disabled("Error expected but RMLMapper does not.") + public void evaluate_RMLSTC0010b() { + doMappingExpectError("./new-test-cases/io/RMLSTC0010b/mapping.ttl", StrictMode.STRICT); } @Test - @Disabled("RML Logical Source does not support the XML reference formulation with namespaces") - public void evaluate_RMLSTC0007d() { - doMapping("./new-test-cases/io/RMLSTC0007d/mapping.ttl", "./new-test-cases/io/RMLSTC0007d/default.nq"); + public void evaluate_RMLSTC0011a() { + doMapping("./new-test-cases/io/RMLSTC0011a/mapping.ttl", "./new-test-cases/io/RMLSTC0011a/default.nq"); + } + + @Test + public void evaluate_RMLSTC0011b() { + doMapping("./new-test-cases/io/RMLSTC0011b/mapping.ttl", "./new-test-cases/io/RMLSTC0011b/default.nq"); + } + + @Test + public void evaluate_RMLSTC0011c() { + doMapping("./new-test-cases/io/RMLSTC0011c/mapping.ttl", "./new-test-cases/io/RMLSTC0011c/default.nq"); + } + + @Test + public void evaluate_RMLSTC0011d() { + doMapping("./new-test-cases/io/RMLSTC0011d/mapping.ttl", "./new-test-cases/io/RMLSTC0011d/default.nq"); + } + + @Test + public void evaluate_RMLSTC0011e() { + doMapping("./new-test-cases/io/RMLSTC0011e/mapping.ttl", "./new-test-cases/io/RMLSTC0011e/default.nq"); + } + + @Test + public void evaluate_RMLSTC0012a() { + doMapping("./new-test-cases/io/RMLSTC0012a/mapping.ttl", "./new-test-cases/io/RMLSTC0012a/default.nq"); + } + + @Test + public void evaluate_RMLSTC0012b() { + doMapping("./new-test-cases/io/RMLSTC0012b/mapping.ttl", "./new-test-cases/io/RMLSTC0012b/default.nq"); + } + + @Test + public void evaluate_RMLSTC0012c() { + doMapping("./new-test-cases/io/RMLSTC0012c/mapping.ttl", "./new-test-cases/io/RMLSTC0012c/default.nq"); + } + + @Test + public void evaluate_RMLSTC0012d() { + doMapping("./new-test-cases/io/RMLSTC0012d/mapping.ttl", "./new-test-cases/io/RMLSTC0012d/default.nq"); + } + + @Test + public void evaluate_RMLSTC0012e() { + doMapping("./new-test-cases/io/RMLSTC0012e/mapping.ttl", "./new-test-cases/io/RMLSTC0012e/default.nq"); } } diff --git a/src/test/java/be/ugent/rml/MapperNewRMLIOTargetTest.java b/src/test/java/be/ugent/rml/MapperNewRMLIOTargetTest.java index b760127e..60468f5c 100644 --- a/src/test/java/be/ugent/rml/MapperNewRMLIOTargetTest.java +++ b/src/test/java/be/ugent/rml/MapperNewRMLIOTargetTest.java @@ -9,6 +9,11 @@ import java.util.Map; public class MapperNewRMLIOTargetTest extends TestCore { + /* + - Total number of test cases: 41 + - Failures: 20 (48.8%) + - Passes: 21 (51.2%) + */ @Test public void evaluate_RMLTTC0000() { doMapping("./new-test-cases/io/RMLTTC0000/mapping.ttl", "./new-test-cases/io/RMLTTC0000/default.nq"); @@ -39,7 +44,6 @@ public void evaluate_RMLTTC0001c() { } @Test - @Disabled("Output wrong") public void evaluate_RMLTTC0001d() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0001d/dump1.nq"); @@ -56,7 +60,7 @@ public void evaluate_RMLTTC0001e() { } @Test - @Disabled("DatatypeMap not supported yet") + @Disabled("Crashes") public void evaluate_RMLTTC0001f() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0001f/dump1.nq"); @@ -110,7 +114,7 @@ public void evaluate_RMLTTC0002e() { } @Test - @Disabled("Crashes") + @Disabled("Named graphs wrong") public void evaluate_RMLTTC0002f() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002f/dump1.nq"); @@ -120,7 +124,7 @@ public void evaluate_RMLTTC0002f() { } @Test - @Disabled("Output wrong") + @Disabled("Named graphs wrong") public void evaluate_RMLTTC0002g() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002g/dump1.nq"); @@ -130,7 +134,7 @@ public void evaluate_RMLTTC0002g() { } @Test - @Disabled("Output wrong") + @Disabled("Named graphs wrong") public void evaluate_RMLTTC0002h() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002h/dump1.nq"); @@ -140,7 +144,7 @@ public void evaluate_RMLTTC0002h() { } @Test - @Disabled("Output wrong") + @Disabled("Named graphs wrong") public void evaluate_RMLTTC0002i() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002i/dump1.nq"); @@ -159,7 +163,7 @@ public void evaluate_RMLTTC0002j() { } @Test - @Disabled("DatatypeMap not supported yet") + @Disabled("Named graphs wrong") public void evaluate_RMLTTC0002k() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002k/dump1.nq"); @@ -169,7 +173,7 @@ public void evaluate_RMLTTC0002k() { } @Test - @Disabled("Output wrong") + @Disabled("Crashes") public void evaluate_RMLTTC0002l() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002l/dump1.nq"); @@ -179,6 +183,7 @@ public void evaluate_RMLTTC0002l() { } @Test + @Disabled("No output") public void evaluate_RMLTTC0002m() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002m/dump1.nq"); @@ -188,6 +193,7 @@ public void evaluate_RMLTTC0002m() { } @Test + @Disabled("No output") public void evaluate_RMLTTC0002n() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002n/dump1.nq"); @@ -197,7 +203,6 @@ public void evaluate_RMLTTC0002n() { } @Test - @Disabled("Output wrong") public void evaluate_RMLTTC0002o() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002o/dump1.nq"); @@ -216,7 +221,7 @@ public void evaluate_RMLTTC0002p() { } @Test - @Disabled("DatatypeMap not supported yet") + @Disabled("Crashes") public void evaluate_RMLTTC0002q() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002q/dump1.nq"); @@ -226,6 +231,7 @@ public void evaluate_RMLTTC0002q() { } @Test + @Disabled("No output") public void evaluate_RMLTTC0002r() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002r/dump1.nq"); @@ -234,7 +240,6 @@ public void evaluate_RMLTTC0002r() { } @Test - @Disabled("Output wrong") public void evaluate_RMLTTC0003a() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0003a/dump1.nq"); @@ -295,6 +300,7 @@ public void evaluate_RMLTTC0004f() { } @Test + @Disabled("parsing failure?") public void evaluate_RMLTTC0004g() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0004g/dump1.ttl"); @@ -311,6 +317,7 @@ public void evaluate_RMLTTC0005a() { } @Test + @Disabled("parsing failure due to compression?") public void evaluate_RMLTTC0005b() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0005b/dump1.nq"); @@ -327,6 +334,7 @@ public void evaluate_RMLTTC0006a() { } @Test + @Disabled("Compression support missing") public void evaluate_RMLTTC0006b() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0006b/dump1.nq"); @@ -335,6 +343,7 @@ public void evaluate_RMLTTC0006b() { } @Test + @Disabled("Compression support missing") public void evaluate_RMLTTC0006c() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0006c/dump1.nq"); @@ -343,7 +352,7 @@ public void evaluate_RMLTTC0006c() { } @Test - @Disabled("Compression Tar XZ not implemented") + @Disabled("tarxz not implemented") public void evaluate_RMLTTC0006d() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0006d/dump1.nq"); @@ -352,7 +361,7 @@ public void evaluate_RMLTTC0006d() { } @Test - @Disabled("Compression Tar GZ not implemented") + @Disabled("tarxz not implemented") public void evaluate_RMLTTC0006e() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0006e/dump1.nq"); @@ -367,31 +376,4 @@ public void evaluate_RMLTTC0007a() { outPaths.put(new NamedNode("rmlmapper://default.store"), "./new-test-cases/io/RMLTTC0007a/default.nq"); doMapping("./new-test-cases/io/RMLTTC0007a/mapping.ttl", outPaths); } - - @Test - public void evaluate_RMLTTC0007b() { - Map outPaths = new HashMap<>(); - outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0007b/dump1.nq"); - outPaths.put(new NamedNode("rmlmapper://default.store"), "./new-test-cases/io/RMLTTC0007b/default.nq"); - doMapping("./new-test-cases/io/RMLTTC0007b/mapping.ttl", outPaths); - } - - @Test - @Disabled("TODO") - public void evaluate_RMLTTC0007c() { - // TODO: SPARQL endpoint - Map outPaths = new HashMap<>(); - outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0007c/dump1.nq"); - outPaths.put(new NamedNode("rmlmapper://default.store"), "./new-test-cases/io/RMLTTC0007c/default.nq"); - doMapping("./new-test-cases/io/RMLTTC0007c/mapping.ttl", outPaths); - } - - @Test - @Disabled("Target td:Thing not supported") - public void evaluate_RMLTTC0007d() { - Map outPaths = new HashMap<>(); - outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0007d/dump1.nq"); - outPaths.put(new NamedNode("rmlmapper://default.store"), "./new-test-cases/io/RMLTTC0007d/default.nq"); - doMapping("./new-test-cases/io/RMLTTC0007d/mapping.ttl", outPaths); - } } diff --git a/src/test/java/be/ugent/rml/TestCore.java b/src/test/java/be/ugent/rml/TestCore.java index 85999ed6..9df051c2 100644 --- a/src/test/java/be/ugent/rml/TestCore.java +++ b/src/test/java/be/ugent/rml/TestCore.java @@ -226,7 +226,7 @@ void doMapping(Executor executor, String outPath) throws Exception { */ void doMapping(Executor executor, Map outPaths) throws Exception { logger.debug("Comparing target outputs"); - TargetFactory targetFactory = new TargetFactory("http://example.org/rules/"); + TargetFactory targetFactory = new TargetFactory("http://example.org/rules/", System.getProperty("user.dir")); Map results = executor.execute(null); for (Map.Entry entry: outPaths.entrySet()) { diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0000-CSV/output.nq deleted file mode 100644 index ca0b9916..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-CSV/output.nq +++ /dev/null @@ -1 +0,0 @@ -# empty database diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0000-CSV/student.csv deleted file mode 100644 index 70df60c1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-CSV/student.csv +++ /dev/null @@ -1 +0,0 @@ -Name diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0000-JSON/README.md new file mode 100644 index 00000000..17168dca --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0000-JSON/README.md @@ -0,0 +1,48 @@ +## RMLTC0000-JSON + +**Title**: "one table, one column, zero rows" + +**Description**: "Tests if an empty table produces an empty RDF graph" + +**Error expected?** No + +**Input** +``` +{ + "students": [] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.Name}" + ] . + +``` + +**Output** +``` +# empty database + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0000-JSON/mapping.ttl index 3c738425..41da352f 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0000-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0000-JSON/mapping.ttl @@ -12,10 +12,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ]; rml:subjectMap [ - rml:template "http://example.com/{Name}" + rml:template "http://example.com/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0000-MySQL/mapping.ttl deleted file mode 100644 index d0ae1084..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0000-MySQL/output.nq deleted file mode 100644 index ca0b9916..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-MySQL/output.nq +++ /dev/null @@ -1 +0,0 @@ -# empty database diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0000-MySQL/resource.sql deleted file mode 100644 index 4f7db991..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-MySQL/resource.sql +++ /dev/null @@ -1,5 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - Name VARCHAR(50) -); \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/mapping.ttl deleted file mode 100644 index 8de32762..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/output.nq deleted file mode 100644 index ca0b9916..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/output.nq +++ /dev/null @@ -1 +0,0 @@ -# empty database diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/resource.sql deleted file mode 100644 index ea537fa7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-PostgreSQL/resource.sql +++ /dev/null @@ -1,4 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "Name" VARCHAR(50) -); \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0000-SPARQL/mapping.ttl deleted file mode 100644 index fc910499..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-SPARQL/mapping.ttl +++ /dev/null @@ -1,28 +0,0 @@ -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - SELECT ?name - WHERE { - ?name a rdfs:Literal . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "name.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{name.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0000-SPARQL/resource.ttl deleted file mode 100644 index 8b137891..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-SPARQL/resource.ttl +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/mapping.ttl deleted file mode 100644 index 058c5756..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/output.nq deleted file mode 100644 index ca0b9916..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/output.nq +++ /dev/null @@ -1 +0,0 @@ -# empty database diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/resource.sql deleted file mode 100644 index a5df5fb8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-SQLServer/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "Name" VARCHAR(50) -); diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0000-XML/mapping.ttl deleted file mode 100644 index 2f1946f8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-XML/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0000-XML/output.nq deleted file mode 100644 index ca0b9916..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-XML/output.nq +++ /dev/null @@ -1 +0,0 @@ -# empty database diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0000-XML/student.xml deleted file mode 100644 index c6bbef41..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0000-XML/student.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001a-CSV/output.nq deleted file mode 100644 index 73f40ddf..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-CSV/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0001a-CSV/student.csv deleted file mode 100644 index 4e683bbe..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -Name -Venus diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0001a-JSON/README.md new file mode 100644 index 00000000..0bb26b0c --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0001a-JSON/README.md @@ -0,0 +1,51 @@ +## RMLTC0001a-JSON + +**Title**: "One column mapping, subject URI generation by using rml:template" + +**Description**: "Tests: (1) one column mapping; (2) subject URI generation by using rml:template; (3) one column to one property" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "Name":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap . + + rml:template "http://example.com/{$.Name}" . + +``` + +**Output** +``` + "Venus" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001a-JSON/mapping.ttl index 5eaa9c42..0a0f009a 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0001a-JSON/mapping.ttl @@ -12,10 +12,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ]; rml:subjectMap . - rml:template "http://example.com/{Name}" . + rml:template "http://example.com/{$.Name}" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/mapping.ttl deleted file mode 100644 index d0ae1084..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/output.nq deleted file mode 100644 index efbb5543..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/resource.sql deleted file mode 100644 index b8e2a6c5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-MySQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - Name VARCHAR(50) -); -INSERT INTO student values ('Venus'); \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/mapping.ttl deleted file mode 100644 index 8de32762..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/output.nq deleted file mode 100644 index efbb5543..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/resource.sql deleted file mode 100644 index 21c51c3f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-PostgreSQL/resource.sql +++ /dev/null @@ -1,5 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "Name" VARCHAR(50) -); -INSERT INTO student values ('Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/mapping.ttl deleted file mode 100644 index 879676f1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - SELECT ?name - WHERE { - ?x foaf:name ?name . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "name.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{name.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/output.nq deleted file mode 100644 index efbb5543..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/resource.ttl deleted file mode 100644 index ac86df29..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-SPARQL/resource.ttl +++ /dev/null @@ -1,4 +0,0 @@ -@prefix foaf: . - -[] foaf:name "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/mapping.ttl deleted file mode 100644 index 058c5756..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/output.nq deleted file mode 100644 index efbb5543..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/resource.sql deleted file mode 100644 index 391b8d53..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "Name" VARCHAR(50) -); -INSERT INTO student values ('Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001a-XML/mapping.ttl deleted file mode 100644 index 2f1946f8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-XML/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001a-XML/output.nq deleted file mode 100644 index 73f40ddf..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-XML/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0001a-XML/student.xml deleted file mode 100644 index f104648b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-XML/student.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Venus - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001b-CSV/output.nq deleted file mode 100644 index 082a16c0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-CSV/output.nq +++ /dev/null @@ -1,2 +0,0 @@ -_:Venus "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0001b-CSV/student.csv deleted file mode 100644 index 4e683bbe..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -Name -Venus diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0001b-JSON/README.md new file mode 100644 index 00000000..f8e738ce --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0001b-JSON/README.md @@ -0,0 +1,52 @@ +## RMLTC0001b-JSON + +**Title**: "One column mapping, generation of a BlankNode subject by using rml:termType" + +**Description**: "Tests: (1) one column mapping; (2) generation of a BlankNode subject by using rml:termType; (3) one column to one property" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "Name":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:template "{$.Name}"; + rml:termType rml:BlankNode + ] . + +``` + +**Output** +``` +_:Venus "Venus" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001b-JSON/mapping.ttl index 3527a427..5d0a5678 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0001b-JSON/mapping.ttl @@ -12,11 +12,11 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ]; rml:subjectMap [ - rml:template "{Name}"; + rml:template "{$.Name}"; rml:termType rml:BlankNode ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/mapping.ttl deleted file mode 100644 index 054eefd1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "SELECT Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/output.nq deleted file mode 100644 index efbb5543..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/resource.sql deleted file mode 100644 index 04afa4e1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-MySQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - Name VARCHAR(50) -); -INSERT INTO student values ('Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/mapping.ttl deleted file mode 100644 index 43c823a3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "SELECT Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/output.nq deleted file mode 100644 index efbb5543..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/resource.sql deleted file mode 100644 index 601449ad..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-PostgreSQL/resource.sql +++ /dev/null @@ -1,5 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - name VARCHAR(50) -); -INSERT INTO student values ('Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/mapping.ttl deleted file mode 100644 index 879676f1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - SELECT ?name - WHERE { - ?x foaf:name ?name . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "name.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{name.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/output.nq deleted file mode 100644 index efbb5543..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/resource.ttl deleted file mode 100644 index ac86df29..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-SPARQL/resource.ttl +++ /dev/null @@ -1,4 +0,0 @@ -@prefix foaf: . - -[] foaf:name "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/mapping.ttl deleted file mode 100644 index d790ebbc..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "SELECT Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/output.nq deleted file mode 100644 index efbb5543..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/resource.sql deleted file mode 100644 index 391b8d53..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "Name" VARCHAR(50) -); -INSERT INTO student values ('Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0001b-XML/mapping.ttl deleted file mode 100644 index 39297bad..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-XML/mapping.ttl +++ /dev/null @@ -1,22 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "{Name}"; - rml:termType rml:BlankNode - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0001b-XML/output.nq deleted file mode 100644 index 082a16c0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-XML/output.nq +++ /dev/null @@ -1,2 +0,0 @@ -_:Venus "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0001b-XML/student.xml deleted file mode 100644 index f104648b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-XML/student.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Venus - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002a-CSV/mapping.ttl deleted file mode 100644 index 3f077d10..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-CSV/mapping.ttl +++ /dev/null @@ -1,27 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002a-CSV/output.nq deleted file mode 100644 index 174309a6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-CSV/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus" . - "10" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0002a-CSV/student.csv deleted file mode 100644 index df9d2d69..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,Name -10,Venus diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0002a-JSON/README.md new file mode 100644 index 00000000..850f1d5b --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0002a-JSON/README.md @@ -0,0 +1,61 @@ +## RMLTC0002a-JSON + +**Title**: "Two columns mapping, generation of a subject URI by the concatenation of two column values" + +**Description**: "Tests: (1) two column mapping, no primary key; (2) subject URI generated by the concatenation of two column values; (3) one column to one property" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.ID" + ]; + rml:predicate ex:id + ], [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:class foaf:Person; + rml:template "http://example.com/{$.ID}/{$.Name}" + ] . + +``` + +**Output** +``` + "Venus" . + "10" . + . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002a-JSON/mapping.ttl index 01e5cf26..7cee3d86 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0002a-JSON/mapping.ttl @@ -13,16 +13,16 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "ID" + rml:reference "$.ID" ]; rml:predicate ex:id ], [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:class foaf:Person; - rml:template "http://example.com/{ID}/{Name}" + rml:template "http://example.com/{$.ID}/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/mapping.ttl deleted file mode 100644 index a858a413..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/output.nq deleted file mode 100644 index 224747a6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus" . - "10"^^ . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/resource.sql deleted file mode 100644 index 3494b58f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-MySQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/mapping.ttl deleted file mode 100644 index 7a5f9e9f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/output.nq deleted file mode 100644 index 224747a6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus" . - "10"^^ . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/resource.sql deleted file mode 100644 index 2b4b5bea..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-PostgreSQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/mapping.ttl deleted file mode 100644 index 27651887..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/mapping.ttl +++ /dev/null @@ -1,38 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Name ?ID - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID.value" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{ID.value}/{Name.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/output.nq deleted file mode 100644 index ffbc3c4b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus" . - "10" . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/resource.ttl deleted file mode 100644 index da1fb834..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-SPARQL/resource.ttl +++ /dev/null @@ -1,6 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:name "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/mapping.ttl deleted file mode 100644 index a54a2198..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/output.nq deleted file mode 100644 index 224747a6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus" . - "10"^^ . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/resource.sql deleted file mode 100644 index 45bd58c0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-SQLServer/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student ("ID", "Name") values (10, 'Venus'); - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002a-XML/mapping.ttl deleted file mode 100644 index 4609c397..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-XML/mapping.ttl +++ /dev/null @@ -1,28 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002a-XML/output.nq deleted file mode 100644 index 56b13be3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-XML/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus" . - "10". - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002a-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0002a-XML/student.xml deleted file mode 100644 index b2a6a9ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002a-XML/student.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - 10 - Venus - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002b-CSV/mapping.ttl deleted file mode 100644 index 586af8e5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-CSV/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "students{ID}"; - rml:termType rml:BlankNode - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002b-CSV/output.nq deleted file mode 100644 index be918d0b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-CSV/output.nq +++ /dev/null @@ -1,2 +0,0 @@ -_:students10 "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0002b-CSV/student.csv deleted file mode 100644 index df9d2d69..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,Name -10,Venus diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0002b-JSON/README.md new file mode 100644 index 00000000..452ea19f --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0002b-JSON/README.md @@ -0,0 +1,53 @@ +## RMLTC0002b-JSON + +**Title**: "Two columns mapping, generation of a BlankNode subject by using rml:template and rml:termType" + +**Description**: "Tests: (1) two column mapping, no primary key; (2) generation of a BlankNode subject by using rml:template; (3) one column to one property" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:template "students{$.ID}"; + rml:termType rml:BlankNode + ] . + +``` + +**Output** +``` +_:students10 "Venus" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002b-JSON/mapping.ttl index 79061724..fb76dbc4 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0002b-JSON/mapping.ttl @@ -12,11 +12,11 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ]; rml:subjectMap [ - rml:template "students{ID}"; + rml:template "students{$.ID}"; rml:termType rml:BlankNode ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/mapping.ttl deleted file mode 100644 index e0c56e13..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "students{ID}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/output.nq deleted file mode 100644 index be918d0b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ -_:students10 "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/resource.sql deleted file mode 100644 index a68415ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-MySQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/mapping.ttl deleted file mode 100644 index 0cb45551..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "students{ID}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/output.nq deleted file mode 100644 index 407dd744..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/output.nq +++ /dev/null @@ -1 +0,0 @@ -_:students10 "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/resource.sql deleted file mode 100644 index 80957756..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-PostgreSQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/mapping.ttl deleted file mode 100644 index e45c8b0e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Name ?ID - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "students{ID.value}"; - rml:termType rml:BlankNode - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/output.nq deleted file mode 100644 index 407dd744..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/output.nq +++ /dev/null @@ -1 +0,0 @@ -_:students10 "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/resource.ttl deleted file mode 100644 index da1fb834..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-SPARQL/resource.ttl +++ /dev/null @@ -1,6 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:name "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/mapping.ttl deleted file mode 100644 index 7e3c5e6e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "students{ID}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/output.nq deleted file mode 100644 index be918d0b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/output.nq +++ /dev/null @@ -1,2 +0,0 @@ -_:students10 "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/resource.sql deleted file mode 100644 index 7403a330..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-SQLServer/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002b-XML/mapping.ttl deleted file mode 100644 index 9c5dab63..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-XML/mapping.ttl +++ /dev/null @@ -1,22 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "students{ID}"; - rml:termType rml:BlankNode - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002b-XML/output.nq deleted file mode 100644 index be918d0b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-XML/output.nq +++ /dev/null @@ -1,2 +0,0 @@ -_:students10 "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002b-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0002b-XML/student.xml deleted file mode 100644 index b2a6a9ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002b-XML/student.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - 10 - Venus - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002c-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002c-CSV/mapping.ttl deleted file mode 100644 index ba00bad1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002c-CSV/mapping.ttl +++ /dev/null @@ -1,20 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002c-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0002c-CSV/student.csv deleted file mode 100644 index df9d2d69..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002c-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,Name -10,Venus diff --git a/src/test/resources/new-test-cases/core/RMLTC0002c-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002c-MySQL/mapping.ttl deleted file mode 100644 index 3b0d881b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002c-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002c-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002c-MySQL/resource.sql deleted file mode 100644 index a68415ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002c-MySQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002c-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002c-PostgreSQL/mapping.ttl deleted file mode 100644 index 397c267d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002c-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002c-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002c-PostgreSQL/resource.sql deleted file mode 100644 index 80957756..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002c-PostgreSQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002c-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002c-SQLServer/mapping.ttl deleted file mode 100644 index c3b656d0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002c-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002c-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002c-SQLServer/resource.sql deleted file mode 100644 index 7403a330..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002c-SQLServer/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/mapping.ttl deleted file mode 100644 index d4a2bb0f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "SELECT CONCAT('Student', ID) AS StudentId, ID, Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "StudentId"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/output.nq deleted file mode 100644 index c9ce3cd7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/output.nq +++ /dev/null @@ -1 +0,0 @@ -_:Student10 "Venus". diff --git a/src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/resource.sql deleted file mode 100644 index a68415ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002d-MySQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/mapping.ttl deleted file mode 100644 index 2b20b148..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "SELECT ('Student' || ID) AS StudentId, ID, Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "studentid"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/output.nq deleted file mode 100644 index c9ce3cd7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/output.nq +++ /dev/null @@ -1 +0,0 @@ -_:Student10 "Venus". diff --git a/src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/resource.sql deleted file mode 100644 index b6377ea8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002d-PostgreSQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/mapping.ttl deleted file mode 100644 index e7355d78..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "SELECT CONCAT('Student', ID) AS StudentId, ID, Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "StudentId"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/output.nq deleted file mode 100644 index c9ce3cd7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/output.nq +++ /dev/null @@ -1 +0,0 @@ -_:Student10 "Venus". diff --git a/src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/resource.sql deleted file mode 100644 index 312631e3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002d-SQLServer/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002e-CSV/mapping.ttl deleted file mode 100644 index 16ef1a14..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-CSV/mapping.ttl +++ /dev/null @@ -1,20 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student2.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0002e-CSV/student.csv deleted file mode 100644 index df9d2d69..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,Name -10,Venus diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0002e-JSON/README.md new file mode 100644 index 00000000..3a237729 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0002e-JSON/README.md @@ -0,0 +1,45 @@ +## RMLTC0002e-JSON + +**Title**: "Two columns mapping, an undefined rml:path" + +**Description**: "Tests the presence of an undefined rml:path" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student2.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.IDs" + ]; + rml:predicate ex:id + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.ID}/{$.Name}" + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002e-JSON/mapping.ttl index d248fc23..5fff6df9 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0002e-JSON/mapping.ttl @@ -12,10 +12,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "IDs" + rml:reference "$.IDs" ]; rml:predicate ex:id ]; rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" + rml:template "http://example.com/{$.ID}/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002e-MySQL/mapping.ttl deleted file mode 100644 index 3243ff11..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "\"Students\"" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002e-MySQL/resource.sql deleted file mode 100644 index a68415ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-MySQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002e-PostgreSQL/mapping.ttl deleted file mode 100644 index 8c5821d5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "\"Students\"" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002e-PostgreSQL/resource.sql deleted file mode 100644 index 80957756..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-PostgreSQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002e-SQLServer/mapping.ttl deleted file mode 100644 index 7cd1f338..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "\"Students\"" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002e-SQLServer/resource.sql deleted file mode 100644 index 7403a330..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-SQLServer/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002e-XML/mapping.ttl deleted file mode 100644 index 4a3a9503..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-XML/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student2.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002e-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0002e-XML/student.xml deleted file mode 100644 index b2a6a9ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002e-XML/student.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - 10 - Venus - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002f-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002f-MySQL/mapping.ttl deleted file mode 100644 index 49ef282d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002f-MySQL/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "\"Student\"" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "\"ID\"" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "\"Name\"" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{\"ID\"}/{\"Name\"}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002f-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002f-MySQL/resource.sql deleted file mode 100644 index 79b54978..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002f-MySQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Student; -CREATE TABLE Student ( -ID INTEGER, -Name VARCHAR(15) -); -INSERT INTO Student (ID, Name) VALUES(10,'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002f-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002f-PostgreSQL/mapping.ttl deleted file mode 100644 index 49ef282d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002f-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "\"Student\"" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "\"ID\"" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "\"Name\"" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{\"ID\"}/{\"Name\"}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002f-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002f-PostgreSQL/resource.sql deleted file mode 100644 index 4359797c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002f-PostgreSQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS Student CASCADE; -CREATE TABLE Student ( -ID INTEGER, -Name VARCHAR(15) -); -INSERT INTO Student (ID, Name) VALUES(10,'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002f-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002f-SQLServer/mapping.ttl deleted file mode 100644 index 49ef282d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002f-SQLServer/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:referenceFormulation rml:SQL2008Table; - rml:source ; - rml:iterator "\"Student\"" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "\"ID\"" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "\"Name\"" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{\"ID\"}/{\"Name\"}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002f-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002f-SQLServer/resource.sql deleted file mode 100644 index b9bad140..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002f-SQLServer/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS TestDB.Student; -CREATE TABLE Student ( -ID INTEGER, -Name VARCHAR(15) -); -INSERT INTO Student (ID, Name) VALUES(10,'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002g-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0002g-JSON/README.md new file mode 100644 index 00000000..5a04f6e5 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0002g-JSON/README.md @@ -0,0 +1,45 @@ +## RMLTC0002g-JSON + +**Title**: "Two columns mapping, invalid JSONPath" + +**Description**: "Test the presence of an invalid JSONPath" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student2.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.IDs" + ]; + rml:predicate ex:id + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.ID}/{$.Name}" + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0002g-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002g-JSON/mapping.ttl index 79665fa6..f13174c8 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0002g-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0002g-JSON/mapping.ttl @@ -12,10 +12,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "IDs" + rml:reference "$.IDs" ]; rml:predicate ex:id ]; rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" + rml:template "http://example.com/{$.ID}/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002g-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002g-MySQL/mapping.ttl deleted file mode 100644 index 281f0f32..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002g-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "SELECT kjnqsdjfbqsdjfmsdnfm FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002g-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002g-MySQL/resource.sql deleted file mode 100644 index a68415ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002g-MySQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002g-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002g-PostgreSQL/mapping.ttl deleted file mode 100644 index 8e015c41..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002g-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "SELECT kjnqsdjfbqsdjfmsdnfm FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002g-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002g-PostgreSQL/resource.sql deleted file mode 100644 index 80957756..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002g-PostgreSQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002g-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002g-SPARQL/mapping.ttl deleted file mode 100644 index f25aae7a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002g-SPARQL/mapping.ttl +++ /dev/null @@ -1,31 +0,0 @@ -@prefix ex: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT qsdfqsdf sqdfqsdfsd ?Nsdfqs ame ?ID qmsndfknqskfmdnemznfmkznfmizmnknfmz - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID.value}/{Name.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002g-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0002g-SPARQL/resource.ttl deleted file mode 100644 index da1fb834..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002g-SPARQL/resource.ttl +++ /dev/null @@ -1,6 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:name "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002g-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002g-SQLServer/mapping.ttl deleted file mode 100644 index cc64991c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002g-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "SELECT kjnqsdjfbqsdjfmsdnfm FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002g-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002g-SQLServer/resource.sql deleted file mode 100644 index 7403a330..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002g-SQLServer/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002h-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002h-MySQL/mapping.ttl deleted file mode 100644 index 0ff414d9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002h-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT Name, Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002h-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002h-MySQL/resource.sql deleted file mode 100644 index a68415ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002h-MySQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002h-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002h-PostgreSQL/mapping.ttl deleted file mode 100644 index 73e6431b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002h-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT Name, Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002h-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002h-PostgreSQL/resource.sql deleted file mode 100644 index 80957756..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002h-PostgreSQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002h-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002h-SPARQL/mapping.ttl deleted file mode 100644 index df7c0e87..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002h-SPARQL/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix ex: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Name ?Name - WHERE { - ?x foaf:name ?Name ; - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID.value}/{Name.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002h-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0002h-SPARQL/resource.ttl deleted file mode 100644 index da1fb834..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002h-SPARQL/resource.ttl +++ /dev/null @@ -1,6 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:name "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0002h-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002h-SQLServer/mapping.ttl deleted file mode 100644 index d232dd56..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002h-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT Name, Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002h-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002h-SQLServer/resource.sql deleted file mode 100644 index 1673b883..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002h-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002i-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002i-MySQL/mapping.ttl deleted file mode 100644 index 0c3186b7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002i-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002i-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002i-MySQL/resource.sql deleted file mode 100644 index a68415ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002i-MySQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002i-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002i-PostgreSQL/mapping.ttl deleted file mode 100644 index 59e2fa5e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002i-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002i-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002i-PostgreSQL/resource.sql deleted file mode 100644 index 80957756..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002i-PostgreSQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002i-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002i-SQLServer/mapping.ttl deleted file mode 100644 index 0cbaf16f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002i-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002i-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002i-SQLServer/resource.sql deleted file mode 100644 index 7403a330..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002i-SQLServer/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002j-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002j-MySQL/mapping.ttl deleted file mode 100644 index c691b7eb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002j-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT NoColumnName, Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002j-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002j-MySQL/resource.sql deleted file mode 100644 index a68415ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002j-MySQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002j-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002j-PostgreSQL/mapping.ttl deleted file mode 100644 index 170765ed..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002j-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT NoColumnName, Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002j-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002j-PostgreSQL/resource.sql deleted file mode 100644 index 80957756..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002j-PostgreSQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0002j-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0002j-SQLServer/mapping.ttl deleted file mode 100644 index 0cf92cf3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002j-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT NoColumnName, Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0002j-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0002j-SQLServer/resource.sql deleted file mode 100644 index 7403a330..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0002j-SQLServer/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0003a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003a-MySQL/mapping.ttl deleted file mode 100644 index bb5ea67a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003a-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT FirstName, LastName FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0003a-MySQL/resource.sql deleted file mode 100644 index 6a1a3f3e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003a-MySQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0003a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003a-PostgreSQL/mapping.ttl deleted file mode 100644 index 69f4c6a6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT FirstName, LastName FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0003a-PostgreSQL/resource.sql deleted file mode 100644 index 339e52c6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003a-PostgreSQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0003a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003a-SQLServer/mapping.ttl deleted file mode 100644 index b6120db4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003a-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT FirstName, LastName FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "IDs" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0003a-SQLServer/resource.sql deleted file mode 100644 index 13f10776..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003a-SQLServer/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/mapping.ttl deleted file mode 100644 index 3b68c9b5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT ID, LastName, CONCAT(`FirstName`, '', `LastName`) as Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{LastName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/output.nq deleted file mode 100644 index 4ba0d6f1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "VenusWilliams" . \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/resource.sql deleted file mode 100644 index 6a1a3f3e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003b-MySQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/mapping.ttl deleted file mode 100644 index 12ae8dd6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT id, lastname, concat_ws(firstname, '', lastname) as name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "name"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{id}/{lastname}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/output.nq deleted file mode 100644 index 4ba0d6f1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "VenusWilliams" . \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/resource.sql deleted file mode 100644 index c9b85352..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003b-PostgreSQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - id INTEGER, - firstname VARCHAR(50), - lastname VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/mapping.ttl deleted file mode 100644 index ff4018ea..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator "SELECT ID, LastName, concat_ws(FirstName, '', LastName) as Name FROM student"; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{LastName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/output.nq deleted file mode 100644 index 4ba0d6f1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/output.nq +++ /dev/null @@ -1 +0,0 @@ - "VenusWilliams" . \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/resource.sql deleted file mode 100644 index 13f10776..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003b-SQLServer/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003c-CSV/mapping.ttl deleted file mode 100644 index e0a70f33..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-CSV/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{FirstName} {LastName}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student{ID}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0003c-CSV/output.nq deleted file mode 100644 index 180f90c2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-CSV/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus Williams" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0003c-CSV/student.csv deleted file mode 100644 index 1851cef9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,FirstName,LastName -10,Venus,Williams diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0003c-JSON/README.md new file mode 100644 index 00000000..67fdc5a3 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0003c-JSON/README.md @@ -0,0 +1,53 @@ +## RMLTC0003c-JSON + +**Title**: "Three columns mapping, by using a rml:template to produce literal" + +**Description**: "Tests: (1) three column mapping; and (2) the use of rml:template to produce literal" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "FirstName":"Venus", + "LastName":"Williams" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:template "{$.FirstName} {$.LastName}"; + rml:termType rml:Literal + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:template "http://example.com/Student{$.ID}" + ] . + +``` + +**Output** +``` + "Venus Williams" . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003c-JSON/mapping.ttl index 482bcf9c..0b42150f 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0003c-JSON/mapping.ttl @@ -12,11 +12,11 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:template "{FirstName} {LastName}"; + rml:template "{$.FirstName} {$.LastName}"; rml:termType rml:Literal ]; rml:predicate foaf:name ]; rml:subjectMap [ - rml:template "http://example.com/Student{ID}" + rml:template "http://example.com/Student{$.ID}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/mapping.ttl deleted file mode 100644 index c9d5d266..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{FirstName} {LastName}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/output.nq deleted file mode 100644 index 180f90c2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus Williams" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/resource.sql deleted file mode 100644 index 0135d051..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/mapping.ttl deleted file mode 100644 index d4c7bea0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{FirstName} {LastName}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/output.nq deleted file mode 100644 index 180f90c2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus Williams" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/resource.sql deleted file mode 100644 index 339e52c6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-PostgreSQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -DROP TABLE IF EXISTS student CASCADE ; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/mapping.ttl deleted file mode 100644 index 3e576f26..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/mapping.ttl +++ /dev/null @@ -1,33 +0,0 @@ -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?FirstName ?LastName ?ID - WHERE { - ?x foaf:firstName ?FirstName ; - foaf:lastName ?LastName ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{FirstName.value} {LastName.value}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student{ID.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/output.nq deleted file mode 100644 index 180f90c2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus Williams" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/resource.ttl deleted file mode 100644 index f4a7ed47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-SPARQL/resource.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:firstName "Venus" ; - foaf:lastName "Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/mapping.ttl deleted file mode 100644 index 8b4b1bb6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{FirstName} {LastName}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/output.nq deleted file mode 100644 index 180f90c2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus Williams" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/resource.sql deleted file mode 100644 index 13f10776..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-SQLServer/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0003c-XML/mapping.ttl deleted file mode 100644 index 87372229..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-XML/mapping.ttl +++ /dev/null @@ -1,22 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{FirstName} {LastName}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student{ID}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0003c-XML/output.nq deleted file mode 100644 index 180f90c2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-XML/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Venus Williams" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0003c-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0003c-XML/student.xml deleted file mode 100644 index 44eab80f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0003c-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus - Williams - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0004a-CSV/output.nq deleted file mode 100644 index 164ca8ba..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-CSV/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - . - "Tennis" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-CSV/student_sport.csv b/src/test/resources/new-test-cases/core/RMLTC0004a-CSV/student_sport.csv deleted file mode 100644 index 3c88eaa3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-CSV/student_sport.csv +++ /dev/null @@ -1,2 +0,0 @@ -Student,Sport -Venus,Tennis diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0004a-JSON/README.md new file mode 100644 index 00000000..2fcfb0be --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0004a-JSON/README.md @@ -0,0 +1,77 @@ +## RMLTC0004a-JSON + +**Title**: "Two column mapping, from one row table to two different triples" + +**Description**: "Tests: (1) two column mapping, (2) subject URI generated by a column value; (3) from one row table to two different triples (4) typing by using rml:class" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "Student": "Venus", + "Sport":"Tennis" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student_sport.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Student" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:class ex:Student; + rml:template "http://example.com/{$.Student}" + ] . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student_sport.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Sport" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:class ex:Sport; + rml:template "http://example.com/{$.Sport}" + ] . + +``` + +**Output** +``` + "Venus" . + . + "Tennis" . + . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004a-JSON/mapping.ttl index bc212d7f..ff87cbc9 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0004a-JSON/mapping.ttl @@ -13,13 +13,13 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Student" + rml:reference "$.Student" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:class ex:Student; - rml:template "http://example.com/{Student}" + rml:template "http://example.com/{$.Student}" ] . a rml:TriplesMap; @@ -33,11 +33,11 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Sport" + rml:reference "$.Sport" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:class ex:Sport; - rml:template "http://example.com/{Sport}" + rml:template "http://example.com/{$.Sport}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/mapping.ttl deleted file mode 100644 index 51eaa9f7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/mapping.ttl +++ /dev/null @@ -1,44 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student_sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Student" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Student; - rml:template "http://example.com/{Student}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student_sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Sport" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Sport; - rml:template "http://example.com/{Sport}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/output.nq deleted file mode 100644 index 164ca8ba..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - . - "Tennis" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/resource.sql deleted file mode 100644 index a98ea0fa..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student_sport; - -CREATE TABLE student_sport ( - Student VARCHAR(50), - Sport VARCHAR(50) -); -INSERT INTO student_sport values ('Venus', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/student_sport.csv b/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/student_sport.csv deleted file mode 100644 index 3c88eaa3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-MySQL/student_sport.csv +++ /dev/null @@ -1,2 +0,0 @@ -Student,Sport -Venus,Tennis diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/mapping.ttl deleted file mode 100644 index b1f8ac41..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,44 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student_sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Student" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Student; - rml:template "http://example.com/{Student}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student_sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Sport" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Sport; - rml:template "http://example.com/{Sport}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/output.nq deleted file mode 100644 index ab10283d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus" . - . - "Tennis" . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/resource.sql deleted file mode 100644 index e3fbd520..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -DROP TABLE IF EXISTS student_sport; - -CREATE TABLE student_sport ( - "Student" VARCHAR(50), - "Sport" VARCHAR(50) -); -INSERT INTO student_sport values ('Venus', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/student_sport.csv b/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/student_sport.csv deleted file mode 100644 index 3c88eaa3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-PostgreSQL/student_sport.csv +++ /dev/null @@ -1,2 +0,0 @@ -Student,Sport -Venus,Tennis diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/mapping.ttl deleted file mode 100644 index 5053c863..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/mapping.ttl +++ /dev/null @@ -1,66 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - -ex:TriplesMap1 a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Student - WHERE { - ?x a ; - foaf:name ?Student . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Student.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Student; - rml:template "http://example.com/{Student.value}" - ] . - -ex:TriplesMap2 a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Sport - WHERE { - ?x a ; - ?sportObject . - ?sportObject foaf:name ?Sport . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Sport.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Sport; - rml:template "http://example.com/{Sport.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/output.nq deleted file mode 100644 index ab10283d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus" . - . - "Tennis" . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/resource.ttl deleted file mode 100644 index 8435fe0c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-SPARQL/resource.ttl +++ /dev/null @@ -1,8 +0,0 @@ -@prefix foaf: . -@prefix ns1: . - -[] a ns1:Student ; - ns1:plays [ a ns1:Sport ; - foaf:name "Tennis" ] ; - foaf:name "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/mapping.ttl deleted file mode 100644 index 8df779a1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/mapping.ttl +++ /dev/null @@ -1,44 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student_sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Student" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Student; - rml:template "http://example.com/{Student}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student_sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Sport" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Sport; - rml:template "http://example.com/{Sport}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/output.nq deleted file mode 100644 index 164ca8ba..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - . - "Tennis" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/resource.sql deleted file mode 100644 index 6424aeaa..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/resource.sql +++ /dev/null @@ -1,7 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student_sport; -CREATE TABLE student_sport ( - "Student" VARCHAR(50), - "Sport" VARCHAR(50) -); -INSERT INTO student_sport values ('Venus', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/student_sport.csv b/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/student_sport.csv deleted file mode 100644 index 3c88eaa3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-SQLServer/student_sport.csv +++ /dev/null @@ -1,2 +0,0 @@ -Student,Sport -Venus,Tennis diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0004a-XML/output.nq deleted file mode 100644 index 164ca8ba..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-XML/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - . - "Tennis" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-XML/student_sport.xml b/src/test/resources/new-test-cases/core/RMLTC0004a-XML/student_sport.xml deleted file mode 100644 index 73b448c3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-XML/student_sport.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - Venus - Tennis - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004b-CSV/mapping.ttl deleted file mode 100644 index b34afb2e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-CSV/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}"; - rml:termType rml:Literal - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0004b-CSV/student.csv deleted file mode 100644 index 4e683bbe..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -Name -Venus diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0004b-JSON/README.md new file mode 100644 index 00000000..fcb279b2 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0004b-JSON/README.md @@ -0,0 +1,45 @@ +## RMLTC0004b-JSON + +**Title**: "One column mapping, presence of rml:termType rml:Literal on rml:subjectMap" + +**Description**: "Tests: (1) one column mapping (2) the presence of rml:termType rml:Literal on rml:subjectMap, which is invalid" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "Name":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.Name}"; + rml:termType rml:Literal + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004b-JSON/mapping.ttl index 6a0624ef..36480e52 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0004b-JSON/mapping.ttl @@ -12,11 +12,11 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ]; rml:subjectMap [ - rml:template "http://example.com/{Name}"; + rml:template "http://example.com/{$.Name}"; rml:termType rml:Literal ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004b-MySQL/mapping.ttl deleted file mode 100644 index 0214c8a7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-MySQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}"; - rml:termType rml:Literal - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0004b-MySQL/resource.sql deleted file mode 100644 index 04afa4e1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-MySQL/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; -CREATE TABLE student ( - Name VARCHAR(50) -); -INSERT INTO student values ('Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004b-PostgreSQL/mapping.ttl deleted file mode 100644 index 7e30b9e2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}"; - rml:termType rml:Literal - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0004b-PostgreSQL/resource.sql deleted file mode 100644 index 67e5510f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-PostgreSQL/resource.sql +++ /dev/null @@ -1,5 +0,0 @@ -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "Name" VARCHAR(50) -); -INSERT INTO student values ('Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004b-SPARQL/mapping.ttl deleted file mode 100644 index e425cb50..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-SPARQL/mapping.ttl +++ /dev/null @@ -1,36 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - -ex:TriplesMap1 a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Name - WHERE { - ?x foaf:name ?Name . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name.value}"; - rml:termType rml:Literal - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0004b-SPARQL/resource.ttl deleted file mode 100644 index ac86df29..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-SPARQL/resource.ttl +++ /dev/null @@ -1,4 +0,0 @@ -@prefix foaf: . - -[] foaf:name "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004b-SQLServer/mapping.ttl deleted file mode 100644 index f652128d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-SQLServer/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}"; - rml:termType rml:Literal - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0004b-SQLServer/resource.sql deleted file mode 100644 index f38006ab..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-SQLServer/resource.sql +++ /dev/null @@ -1,6 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "Name" VARCHAR(50) -); -INSERT INTO student values ('Venus'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0004b-XML/mapping.ttl deleted file mode 100644 index 6423cf78..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-XML/mapping.ttl +++ /dev/null @@ -1,22 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Name}"; - rml:termType rml:Literal - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0004b-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0004b-XML/student.xml deleted file mode 100644 index f104648b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0004b-XML/student.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Venus - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-CSV/ious.csv b/src/test/resources/new-test-cases/core/RMLTC0005a-CSV/ious.csv deleted file mode 100644 index 49ce65ff..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-CSV/ious.csv +++ /dev/null @@ -1,4 +0,0 @@ -fname,lname,amount -Bob,Smith,30.0E0 -Sue,Jones,20.0E0 -Bob,Smith,30.0E0 diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0005a-CSV/output.nq deleted file mode 100644 index 64e91da4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-CSV/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - "30.0E0" . - . - "20.0E0" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0005a-JSON/README.md new file mode 100644 index 00000000..28dae551 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0005a-JSON/README.md @@ -0,0 +1,70 @@ +## RMLTC0005a-JSON + +**Title**: "Typing of resources" + +**Description**: "Tests the typing of resources" + +**Error expected?** No + +**Input** +``` +{ + "persons": [ + { + "fname": "Bob", + "lname": "Smith", + "amount": "30.0E0" + }, + { + "fname": "Sue", + "lname": "Jones", + "amount": "20.0E0" + }, + { + "fname": "Bob", + "lname": "Smith", + "amount": "30.0E0" + } + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "ious.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:owes + ]; + rml:subjectMap [ + rml:class foaf:Person; + rml:template "http://example.com/{$.fname};{$.lname}" + ] . + +``` + +**Output** +``` + . + "30.0E0" . + . + "20.0E0" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0005a-JSON/mapping.ttl index 9232cb2b..d692582e 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0005a-JSON/mapping.ttl @@ -13,11 +13,11 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "amount" + rml:reference "$.amount" ]; rml:predicate ex:owes ]; rml:subjectMap [ rml:class foaf:Person; - rml:template "http://example.com/{fname};{lname}" + rml:template "http://example.com/{$.fname};{$.lname}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/mapping.ttl deleted file mode 100644 index e34e5337..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/mapping.ttl +++ /dev/null @@ -1,27 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:owes - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{fname};{lname}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/output.nq deleted file mode 100644 index 30bc4b1d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - "3.0E1"^^ . - . - "2.0E1"^^ . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/resource.sql deleted file mode 100644 index bad6cddf..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.IOUs; -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/mapping.ttl deleted file mode 100644 index f929dda4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,27 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:owes - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{fname};{lname}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/output.nq deleted file mode 100644 index 30bc4b1d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - "3.0E1"^^ . - . - "2.0E1"^^ . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/resource.sql deleted file mode 100644 index 32767803..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS IOUs; -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/mapping.ttl deleted file mode 100644 index 95579a1c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/mapping.ttl +++ /dev/null @@ -1,27 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:owes - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{fname};{lname}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/output.nq deleted file mode 100644 index 30bc4b1d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - "3.0E1"^^ . - . - "2.0E1"^^ . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/resource.sql deleted file mode 100644 index 64a717bb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-SQLServer/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS IOUs; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-XML/ious.xml b/src/test/resources/new-test-cases/core/RMLTC0005a-XML/ious.xml deleted file mode 100644 index 83fe72a2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-XML/ious.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Bob - Smith - 30.0E0 - - - Sue - Jones - 20.0E0 - - - Bob - Smith - 30.0E0 - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0005a-XML/mapping.ttl deleted file mode 100644 index 9c0e0c4d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-XML/mapping.ttl +++ /dev/null @@ -1,23 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/persons/person"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "ious.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:owes - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{fname};{lname}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0005a-XML/output.nq deleted file mode 100644 index 64e91da4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-XML/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - "30.0E0" . - . - "20.0E0" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/mapping.ttl deleted file mode 100644 index dd7f2618..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/mapping.ttl +++ /dev/null @@ -1,36 +0,0 @@ -@prefix d2rq: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "fname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "lname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:class ; - rml:template "{fname}_{lname}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/output.nq deleted file mode 100644 index e9744d9a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/output.nq +++ /dev/null @@ -1,9 +0,0 @@ -_:Bob_Smith . -_:Bob_Smith "Bob" . -_:Bob_Smith "Smith" . -_:Bob_Smith "3.0E1"^^ . -_:Sue_Jones . -_:Sue_Jones "Sue" . -_:Sue_Jones "Jones" . -_:Sue_Jones "2.0E1"^^ . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/resource.sql deleted file mode 100644 index bad6cddf..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005b-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.IOUs; -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); diff --git a/src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/mapping.ttl deleted file mode 100644 index a5796754..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,36 +0,0 @@ -@prefix d2rq: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "fname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "lname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:class ; - rml:template "{fname}_{lname}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/output.nq deleted file mode 100644 index e9744d9a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/output.nq +++ /dev/null @@ -1,9 +0,0 @@ -_:Bob_Smith . -_:Bob_Smith "Bob" . -_:Bob_Smith "Smith" . -_:Bob_Smith "3.0E1"^^ . -_:Sue_Jones . -_:Sue_Jones "Sue" . -_:Sue_Jones "Jones" . -_:Sue_Jones "2.0E1"^^ . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/resource.sql deleted file mode 100644 index 32767803..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005b-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS IOUs; -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); diff --git a/src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/mapping.ttl deleted file mode 100644 index 50a859f7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/mapping.ttl +++ /dev/null @@ -1,36 +0,0 @@ -@prefix d2rq: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "fname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "lname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:class ; - rml:template "{fname}_{lname}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/output.nq deleted file mode 100644 index e9744d9a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/output.nq +++ /dev/null @@ -1,9 +0,0 @@ -_:Bob_Smith . -_:Bob_Smith "Bob" . -_:Bob_Smith "Smith" . -_:Bob_Smith "3.0E1"^^ . -_:Sue_Jones . -_:Sue_Jones "Sue" . -_:Sue_Jones "Jones" . -_:Sue_Jones "2.0E1"^^ . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/resource.sql deleted file mode 100644 index 660f8c86..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0005b-SQLServer/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS IOUs; -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0006a-CSV/mapping.ttl deleted file mode 100644 index 47582add..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-CSV/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:constant "Bad Student" - ]; - rml:predicateMap [ - rml:constant ex:description - ] - ]; - rml:subjectMap [ - rml:constant ex:BadStudent; - rml:graphMap [ - rml:constant - ] - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0006a-CSV/output.nq deleted file mode 100644 index 4e6fd3ef..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-CSV/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Bad Student" . \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0006a-CSV/student.csv deleted file mode 100644 index 1851cef9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,FirstName,LastName -10,Venus,Williams diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0006a-JSON/README.md new file mode 100644 index 00000000..ffa61754 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0006a-JSON/README.md @@ -0,0 +1,56 @@ +## RMLTC0006a-JSON + +**Title**: "Use of rml:constant in rml:subjectMap, rml:predicateMap, rml:objectMap and rml:graphMap" + +**Description**: "Tests the use of rml:constant in rml:subjectMap, rml:predicateMap, rml:objectMap and rml:graphMap" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "FirstName":"Venus", + "LastName":"Williams" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:constant "Bad Student" + ]; + rml:predicateMap [ + rml:constant ex:description + ] + ]; + rml:subjectMap [ + rml:constant ex:BadStudent; + rml:graphMap [ + rml:constant + ] + ] . + +``` + +**Output** +``` + "Bad Student" . +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/mapping.ttl deleted file mode 100644 index b793aa7a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:constant "Bad Student" - ]; - rml:predicateMap [ - rml:constant ex:description - ] - ]; - rml:subjectMap [ - rml:constant ex:BadStudent; - rml:graphMap [ - rml:constant - ] - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/output.nq deleted file mode 100644 index 4e6fd3ef..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Bad Student" . \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/resource.sql deleted file mode 100644 index 0135d051..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/mapping.ttl deleted file mode 100644 index 2a8f540d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:constant "Bad Student" - ]; - rml:predicateMap [ - rml:constant ex:description - ] - ]; - rml:subjectMap [ - rml:constant ex:BadStudent; - rml:graphMap [ - rml:constant - ] - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/output.nq deleted file mode 100644 index 4e6fd3ef..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Bad Student" . \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/resource.sql deleted file mode 100644 index b5c63bc3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/mapping.ttl deleted file mode 100644 index b6820692..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/mapping.ttl +++ /dev/null @@ -1,39 +0,0 @@ -@prefix ex: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - -ex:TriplesMap1 a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?BadStudent ?LastName ?ID - WHERE { - - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:constant "Bad Student" - ]; - rml:predicateMap [ - rml:constant ex:description - ] - ]; - rml:subjectMap [ - rml:constant ex:BadStudent; - rml:graphMap [ - rml:constant - ] - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/output.nq deleted file mode 100644 index 4e6fd3ef..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Bad Student" . \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/resource.ttl deleted file mode 100644 index f4a7ed47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-SPARQL/resource.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:firstName "Venus" ; - foaf:lastName "Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/mapping.ttl deleted file mode 100644 index 00e232f7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:constant "Bad Student" - ]; - rml:predicateMap [ - rml:constant ex:description - ] - ]; - rml:subjectMap [ - rml:constant ex:BadStudent; - rml:graphMap [ - rml:constant - ] - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/output.nq deleted file mode 100644 index 4e6fd3ef..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Bad Student" . \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/resource.sql deleted file mode 100644 index 976627c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0006a-XML/mapping.ttl deleted file mode 100644 index 2f08a03b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-XML/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:constant "Bad Student" - ]; - rml:predicateMap [ - rml:constant ex:description - ] - ]; - rml:subjectMap [ - rml:constant ex:BadStudent; - rml:graphMap [ - rml:constant - ] - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0006a-XML/output.nq deleted file mode 100644 index 4e6fd3ef..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-XML/output.nq +++ /dev/null @@ -1 +0,0 @@ - "Bad Student" . \ No newline at end of file diff --git a/src/test/resources/new-test-cases/core/RMLTC0006a-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0006a-XML/student.xml deleted file mode 100644 index 44eab80f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0006a-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus - Williams - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007a-CSV/output.nq deleted file mode 100644 index 76f87f89..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-CSV/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0007a-CSV/student.csv deleted file mode 100644 index 1851cef9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,FirstName,LastName -10,Venus,Williams diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0007a-JSON/README.md new file mode 100644 index 00000000..c86dcf39 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0007a-JSON/README.md @@ -0,0 +1,52 @@ +## RMLTC0007a-JSON + +**Title**: "Typing resources by relying on rdf:type predicate" + +**Description**: "Tests the typing resources by relying on rdf:type predicate" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "FirstName":"Venus", + "LastName":"Williams" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rdf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:object foaf:Person; + rml:predicate rdf:type + ]; + rml:subjectMap [ + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" + ] . + +``` + +**Output** +``` + . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007a-JSON/mapping.ttl index 79fd925f..ac7b148b 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007a-JSON/mapping.ttl @@ -16,5 +16,5 @@ rml:predicate rdf:type ]; rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/mapping.ttl deleted file mode 100644 index db739fa2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/mapping.ttl +++ /dev/null @@ -1,24 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/output.nq deleted file mode 100644 index 76f87f89..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/resource.sql deleted file mode 100644 index 0135d051..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/mapping.ttl deleted file mode 100644 index af254a4e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,24 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/output.nq deleted file mode 100644 index 76f87f89..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/resource.sql deleted file mode 100644 index b5c63bc3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/mapping.ttl deleted file mode 100644 index 42b09838..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/mapping.ttl +++ /dev/null @@ -1,31 +0,0 @@ -@prefix foaf: . -@prefix formats: . -@prefix rdf: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?FirstName ?LastName ?ID - WHERE { - ?x foaf:firstName ?FirstName ; - foaf:lastName ?LastName ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID.value}/{FirstName.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/output.nq deleted file mode 100644 index 76f87f89..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/resource.ttl deleted file mode 100644 index f4a7ed47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-SPARQL/resource.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:firstName "Venus" ; - foaf:lastName "Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/mapping.ttl deleted file mode 100644 index 8d4b6cc7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/mapping.ttl +++ /dev/null @@ -1,24 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/output.nq deleted file mode 100644 index 76f87f89..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/resource.sql deleted file mode 100644 index 976627c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007a-XML/output.nq deleted file mode 100644 index 76f87f89..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-XML/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0007a-XML/student.xml deleted file mode 100644 index 44eab80f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus - Williams - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007b-CSV/mapping.ttl deleted file mode 100644 index 038756a4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-CSV/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007b-CSV/output.nq deleted file mode 100644 index 5c4eb261..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-CSV/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0007b-CSV/student.csv deleted file mode 100644 index 1851cef9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,FirstName,LastName -10,Venus,Williams diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0007b-JSON/README.md new file mode 100644 index 00000000..7dcbda75 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0007b-JSON/README.md @@ -0,0 +1,60 @@ +## RMLTC0007b-JSON + +**Title**: "Assigning triples to Named Graphs" + +**Description**: "Tests the generation of triples to a named graph" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "FirstName":"Venus", + "LastName":"Williams" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rdf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:object foaf:Person; + rml:predicate rdf:type + ], [ + rml:objectMap [ + rml:reference "$.FirstName" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:graph ex:PersonGraph; + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" + ] . + +``` + +**Output** +``` + "Venus" . + . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007b-JSON/mapping.ttl index 2f6423e5..d9043524 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007b-JSON/mapping.ttl @@ -17,11 +17,11 @@ rml:predicate rdf:type ], [ rml:objectMap [ - rml:reference "FirstName" + rml:reference "$.FirstName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/mapping.ttl deleted file mode 100644 index 7af7a434..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/mapping.ttl +++ /dev/null @@ -1,31 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/output.nq deleted file mode 100644 index 5c4eb261..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/resource.sql deleted file mode 100644 index 0135d051..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/mapping.ttl deleted file mode 100644 index cf2eea01..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,31 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/output.nq deleted file mode 100644 index 5c4eb261..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/resource.sql deleted file mode 100644 index b5c63bc3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/mapping.ttl deleted file mode 100644 index 77045f25..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/mapping.ttl +++ /dev/null @@ -1,38 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rdf: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?FirstName ?LastName ?ID - WHERE { - ?x foaf:firstName ?FirstName ; - foaf:lastName ?LastName ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "FirstName.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID.value}/{FirstName.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/output.nq deleted file mode 100644 index 5c4eb261..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/resource.ttl deleted file mode 100644 index f4a7ed47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-SPARQL/resource.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:firstName "Venus" ; - foaf:lastName "Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/mapping.ttl deleted file mode 100644 index 95fad185..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/mapping.ttl +++ /dev/null @@ -1,31 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/output.nq deleted file mode 100644 index 5c4eb261..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/resource.sql deleted file mode 100644 index 976627c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007b-XML/mapping.ttl deleted file mode 100644 index 7e3adee1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-XML/mapping.ttl +++ /dev/null @@ -1,27 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007b-XML/output.nq deleted file mode 100644 index 5c4eb261..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-XML/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007b-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0007b-XML/student.xml deleted file mode 100644 index 44eab80f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007b-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus - Williams - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007c-CSV/mapping.ttl deleted file mode 100644 index 172bab17..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-CSV/mapping.ttl +++ /dev/null @@ -1,27 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Student, foaf:Person; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007c-CSV/output.nq deleted file mode 100644 index fb4d7fe2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-CSV/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - "10" . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0007c-CSV/student.csv deleted file mode 100644 index 1851cef9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,FirstName,LastName -10,Venus,Williams diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0007c-JSON/README.md new file mode 100644 index 00000000..7bd10d6e --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0007c-JSON/README.md @@ -0,0 +1,63 @@ +## RMLTC0007c-JSON + +**Title**: "One row mapping, using rml:class" + +**Description**: "Tests subjectmap with more than one class IRIs, rml:class" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "FirstName":"Venus", + "LastName":"Williams" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.ID" + ]; + rml:predicate ex:id + ], [ + rml:objectMap [ + rml:reference "$.FirstName" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:class ex:Student, foaf:Person; + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" + ] . + +``` + +**Output** +``` + "Venus" . + "10" . + . + . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007c-JSON/mapping.ttl index 4e1aee0b..65764100 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007c-JSON/mapping.ttl @@ -13,16 +13,16 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "ID" + rml:reference "$.ID" ]; rml:predicate ex:id ], [ rml:objectMap [ - rml:reference "FirstName" + rml:reference "$.FirstName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:class ex:Student, foaf:Person; - rml:template "http://example.com/Student/{ID}/{FirstName}" + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/mapping.ttl deleted file mode 100644 index 82326cd6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Student, foaf:Person; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/output.nq deleted file mode 100644 index ae78ddfb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - "10"^^ . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/resource.sql deleted file mode 100644 index 0135d051..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/mapping.ttl deleted file mode 100644 index 9d146a37..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Student, foaf:Person; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/output.nq deleted file mode 100644 index ae78ddfb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - "10"^^ . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/resource.sql deleted file mode 100644 index b5c63bc3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/mapping.ttl deleted file mode 100644 index 478c50f8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/mapping.ttl +++ /dev/null @@ -1,34 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?FirstName ?LastName ?ID - WHERE { - ?x foaf:firstName ?FirstName ; - foaf:lastName ?LastName ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Student, foaf:Person; - rml:template "http://example.com/Student/{ID.value}/{FirstName.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/output.nq deleted file mode 100644 index 84570f21..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus" . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/resource.ttl deleted file mode 100644 index f4a7ed47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-SPARQL/resource.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:firstName "Venus" ; - foaf:lastName "Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/mapping.ttl deleted file mode 100644 index 66f13465..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Student, foaf:Person; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/output.nq deleted file mode 100644 index ae78ddfb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - "10"^^ . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/resource.sql deleted file mode 100644 index 976627c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007c-XML/mapping.ttl deleted file mode 100644 index 511b917d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-XML/mapping.ttl +++ /dev/null @@ -1,28 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class ex:Student, foaf:Person; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007c-XML/output.nq deleted file mode 100644 index fb4d7fe2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-XML/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - "10" . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007c-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0007c-XML/student.xml deleted file mode 100644 index 44eab80f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007c-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus - Williams - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007d-CSV/mapping.ttl deleted file mode 100644 index ebce721d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-CSV/mapping.ttl +++ /dev/null @@ -1,33 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:object ex:Student; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007d-CSV/output.nq deleted file mode 100644 index 2f24266d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-CSV/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - "10" . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0007d-CSV/student.csv deleted file mode 100644 index 1851cef9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,FirstName,LastName -10,Venus,Williams diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0007d-JSON/README.md new file mode 100644 index 00000000..82b12af4 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0007d-JSON/README.md @@ -0,0 +1,69 @@ +## RMLTC0007d-JSON + +**Title**: "One column mapping, specifying an rml:predicateObjectMap with rdf:type" + +**Description**: "Tests subjectmap with an alternative of having rml:class, i.e., by specifying an rml:predicateObjectMap with predicate rdf:type" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "FirstName":"Venus", + "LastName":"Williams" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rdf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:object foaf:Person; + rml:predicate rdf:type + ], [ + rml:object ex:Student; + rml:predicate rdf:type + ], [ + rml:objectMap [ + rml:reference "$.ID" + ]; + rml:predicate ex:id + ], [ + rml:objectMap [ + rml:reference "$.FirstName" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" + ] . + +``` + +**Output** +``` + "Venus" . + "10" . + . + . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007d-JSON/mapping.ttl index 86eff9fe..fe8e475a 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007d-JSON/mapping.ttl @@ -20,15 +20,15 @@ rml:predicate rdf:type ], [ rml:objectMap [ - rml:reference "ID" + rml:reference "$.ID" ]; rml:predicate ex:id ], [ rml:objectMap [ - rml:reference "FirstName" + rml:reference "$.FirstName" ]; rml:predicate foaf:name ]; rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/mapping.ttl deleted file mode 100644 index 5712c9cc..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/mapping.ttl +++ /dev/null @@ -1,38 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:object ex:Student; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/output.nq deleted file mode 100644 index ae78ddfb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - "10"^^ . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/resource.sql deleted file mode 100644 index 0135d051..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/mapping.ttl deleted file mode 100644 index f05bf2ed..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,38 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:object ex:Student; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/output.nq deleted file mode 100644 index ae78ddfb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - "10"^^ . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/resource.sql deleted file mode 100644 index b5c63bc3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/mapping.ttl deleted file mode 100644 index 1cac4f47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/mapping.ttl +++ /dev/null @@ -1,40 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rdf: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?FirstName ?LastName ?ID - WHERE { - ?x foaf:firstName ?FirstName ; - foaf:lastName ?LastName ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:object ex:Student; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "FirstName.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID.value}/{FirstName.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/output.nq deleted file mode 100644 index 84570f21..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus" . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/resource.ttl deleted file mode 100644 index f4a7ed47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-SPARQL/resource.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:firstName "Venus" ; - foaf:lastName "Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/mapping.ttl deleted file mode 100644 index 8849b336..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/mapping.ttl +++ /dev/null @@ -1,38 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:object ex:Student; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/output.nq deleted file mode 100644 index ae78ddfb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - "10"^^ . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/resource.sql deleted file mode 100644 index 976627c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007d-XML/mapping.ttl deleted file mode 100644 index 2de8b887..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-XML/mapping.ttl +++ /dev/null @@ -1,34 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:object ex:Student; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007d-XML/output.nq deleted file mode 100644 index 2f24266d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-XML/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - "Venus" . - "10" . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007d-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0007d-XML/student.xml deleted file mode 100644 index 44eab80f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007d-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus - Williams - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007e-CSV/mapping.ttl deleted file mode 100644 index 8de7095d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-CSV/mapping.ttl +++ /dev/null @@ -1,28 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007e-CSV/output.nq deleted file mode 100644 index 4cbaaf55..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-CSV/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "10" . - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0007e-CSV/student.csv deleted file mode 100644 index df9d2d69..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,Name -10,Venus diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0007e-JSON/README.md new file mode 100644 index 00000000..a4b5eb8b --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0007e-JSON/README.md @@ -0,0 +1,62 @@ +## RMLTC0007e-JSON + +**Title**: "One column mapping, using rml:graphMap and rml:class" + +**Description**: "Tests subjectmap with rml:graphMap and rml:class" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.ID" + ]; + rml:predicate ex:id + ], [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:class foaf:Person; + rml:graph ex:PersonGraph; + rml:template "http://example.com/Student/{$.ID}/{$.Name}" + ] . + +``` + +**Output** +``` + "10" . + "Venus" . + . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007e-JSON/mapping.ttl index 44b814a3..19e307c7 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007e-JSON/mapping.ttl @@ -13,17 +13,17 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "ID" + rml:reference "$.ID" ]; rml:predicate ex:id ], [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:class foaf:Person; rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{Name}" + rml:template "http://example.com/Student/{$.ID}/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/mapping.ttl deleted file mode 100644 index c051b269..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/mapping.ttl +++ /dev/null @@ -1,33 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/output.nq deleted file mode 100644 index c5ea4c49..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "10"^^ . - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/resource.sql deleted file mode 100644 index 0135d051..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/mapping.ttl deleted file mode 100644 index 93f0b13a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,33 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/output.nq deleted file mode 100644 index c5ea4c49..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "10"^^ . - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/resource.sql deleted file mode 100644 index b5c63bc3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/mapping.ttl deleted file mode 100644 index 4e362e6f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?FirstName ?LastName ?ID - WHERE { - ?x foaf:firstName ?FirstName ; - foaf:lastName ?LastName ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID.value}/{FirstName.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/output.nq deleted file mode 100644 index 1548749b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/resource.ttl deleted file mode 100644 index f4a7ed47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-SPARQL/resource.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:firstName "Venus" ; - foaf:lastName "Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/mapping.ttl deleted file mode 100644 index 37de1347..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/mapping.ttl +++ /dev/null @@ -1,33 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/output.nq deleted file mode 100644 index c5ea4c49..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "10"^^ . - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/resource.sql deleted file mode 100644 index 976627c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007e-XML/mapping.ttl deleted file mode 100644 index 58a876d4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-XML/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007e-XML/output.nq deleted file mode 100644 index 4cbaaf55..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-XML/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "10" . - "Venus" . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007e-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0007e-XML/student.xml deleted file mode 100644 index b2a6a9ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007e-XML/student.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - 10 - Venus - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007f-CSV/mapping.ttl deleted file mode 100644 index 1160c8bf..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-CSV/mapping.ttl +++ /dev/null @@ -1,31 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007f-CSV/output.nq deleted file mode 100644 index d4694d78..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-CSV/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - . - "Venus" . - "10" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0007f-CSV/student.csv deleted file mode 100644 index 1851cef9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,FirstName,LastName -10,Venus,Williams diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0007f-JSON/README.md new file mode 100644 index 00000000..32e9b11a --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0007f-JSON/README.md @@ -0,0 +1,66 @@ +## RMLTC0007f-JSON + +**Title**: "One column mapping, using rml:graphMap and specifying an rml:predicateObjectMap with rdf:type" + +**Description**: "Tests subjectmap with rml:graphMap and specifying an rml:predicateObjectMap with predicate rdf:type" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "FirstName":"Venus", + "LastName":"Williams" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rdf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:object foaf:Person; + rml:predicate rdf:type + ], [ + rml:objectMap [ + rml:reference "$.ID" + ]; + rml:predicate ex:id + ], [ + rml:objectMap [ + rml:reference "$.FirstName" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:graph ex:PersonGraph; + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" + ] . + +``` + +**Output** +``` + . + "Venus" . + "10" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007f-JSON/mapping.ttl index 838a06b0..8dd905cf 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007f-JSON/mapping.ttl @@ -17,16 +17,16 @@ rml:predicate rdf:type ], [ rml:objectMap [ - rml:reference "ID" + rml:reference "$.ID" ]; rml:predicate ex:id ], [ rml:objectMap [ - rml:reference "FirstName" + rml:reference "$.FirstName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/mapping.ttl deleted file mode 100644 index cb5ce945..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/mapping.ttl +++ /dev/null @@ -1,36 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/output.nq deleted file mode 100644 index fb6a536c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - . - "Venus" . - "10"^^ . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/resource.sql deleted file mode 100644 index 0135d051..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/mapping.ttl deleted file mode 100644 index 67b94e7e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,36 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/output.nq deleted file mode 100644 index fb6a536c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - . - "Venus" . - "10"^^ . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/resource.sql deleted file mode 100644 index b5c63bc3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/mapping.ttl deleted file mode 100644 index 26318a46..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/mapping.ttl +++ /dev/null @@ -1,33 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rdf: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?FirstName ?LastName ?ID - WHERE { - ?x foaf:firstName ?FirstName ; - foaf:lastName ?LastName ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID.value}/{FirstName.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/output.nq deleted file mode 100644 index 1548749b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/resource.ttl deleted file mode 100644 index f4a7ed47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-SPARQL/resource.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:firstName "Venus" ; - foaf:lastName "Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/mapping.ttl deleted file mode 100644 index 61e58591..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/mapping.ttl +++ /dev/null @@ -1,36 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/output.nq deleted file mode 100644 index fb6a536c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - . - "Venus" . - "10"^^ . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/resource.sql deleted file mode 100644 index 976627c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007f-XML/mapping.ttl deleted file mode 100644 index b9ccf20e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-XML/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph ex:PersonGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007f-XML/output.nq deleted file mode 100644 index d4694d78..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-XML/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - . - "Venus" . - "10" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007f-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0007f-XML/student.xml deleted file mode 100644 index 44eab80f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007f-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus - Williams - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007g-CSV/mapping.ttl deleted file mode 100644 index 07641fdd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-CSV/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph rml:defaultGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007g-CSV/output.nq deleted file mode 100644 index 6c29bcce..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-CSV/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0007g-CSV/student.csv deleted file mode 100644 index 1851cef9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,FirstName,LastName -10,Venus,Williams diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0007g-JSON/README.md new file mode 100644 index 00000000..3a17bc06 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0007g-JSON/README.md @@ -0,0 +1,54 @@ +## RMLTC0007g-JSON + +**Title**: "Assigning triples to the default graph" + +**Description**: "Tests the generation of triples to the default graph" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "FirstName":"Venus", + "LastName":"Williams" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.FirstName" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:graph rml:defaultGraph; + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" + ] . + +``` + +**Output** +``` + "Venus" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007g-JSON/mapping.ttl index 3d6fb710..bfacef74 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007g-JSON/mapping.ttl @@ -12,11 +12,11 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "FirstName" + rml:reference "$.FirstName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graph rml:defaultGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/mapping.ttl deleted file mode 100644 index 95cf92ac..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph rml:defaultGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/output.nq deleted file mode 100644 index 6c29bcce..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/resource.sql deleted file mode 100644 index 0135d051..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/mapping.ttl deleted file mode 100644 index bb47312d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph rml:defaultGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/output.nq deleted file mode 100644 index 6c29bcce..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/resource.sql deleted file mode 100644 index b5c63bc3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/mapping.ttl deleted file mode 100644 index 09958b72..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/mapping.ttl +++ /dev/null @@ -1,33 +0,0 @@ -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?FirstName ?LastName ?ID - WHERE { - ?x foaf:firstName ?FirstName ; - foaf:lastName ?LastName ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph rml:defaultGraph; - rml:template "http://example.com/Student/{ID.value}/{FirstName.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/output.nq deleted file mode 100644 index 6c29bcce..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/resource.ttl deleted file mode 100644 index f4a7ed47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-SPARQL/resource.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:firstName "Venus" ; - foaf:lastName "Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/mapping.ttl deleted file mode 100644 index 0cb0116a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph rml:defaultGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/output.nq deleted file mode 100644 index 6c29bcce..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/resource.sql deleted file mode 100644 index 976627c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007g-XML/mapping.ttl deleted file mode 100644 index 942a30b4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-XML/mapping.ttl +++ /dev/null @@ -1,22 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graph rml:defaultGraph; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0007g-XML/output.nq deleted file mode 100644 index 6c29bcce..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-XML/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "Venus" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007g-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0007g-XML/student.xml deleted file mode 100644 index 44eab80f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007g-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus - Williams - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-CSV/mapping.ttl deleted file mode 100644 index 1b9a4dc7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-CSV/mapping.ttl +++ /dev/null @@ -1,24 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graphMap [ - rml:reference "LastName"; - rml:termType rml:Literal - ]; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0007h-CSV/student.csv deleted file mode 100644 index 1851cef9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,FirstName,LastName -10,Venus,Williams diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/README.md new file mode 100644 index 00000000..f53be206 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/README.md @@ -0,0 +1,50 @@ +## RMLTC0007h-JSON + +**Title**: "Assigning triples to a non-IRI named graph" + +**Description**: "Tests the generation of triples to a non-IRI named graph, which is an error" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "ID": 10, + "FirstName":"Venus", + "LastName":"Williams" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.FirstName" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:graphMap [ + rml:reference "$.ID"; + rml:termType rml:Literal + ]; + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/mapping.ttl index 7d970e46..c79dd6ed 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0007h-JSON/mapping.ttl @@ -12,14 +12,14 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "LastName" + rml:reference "$.FirstName" ]; rml:predicate foaf:name ]; rml:subjectMap [ rml:graphMap [ - rml:reference "LastName"; + rml:reference "$.ID"; rml:termType rml:Literal ]; - rml:template "http://example.com/Student/{ID}/{FirstName}" + rml:template "http://example.com/Student/{$.ID}/{$.FirstName}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/mapping.ttl deleted file mode 100644 index 4dc0a40c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graphMap [ - rml:reference "LastName"; - rml:termType rml:Literal - ]; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/resource.sql deleted file mode 100644 index 0135d051..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(50), - LastName VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/mapping.ttl deleted file mode 100644 index 8c25226b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graphMap [ - rml:reference "LastName"; - rml:termType rml:Literal - ]; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/resource.sql deleted file mode 100644 index b5c63bc3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/mapping.ttl deleted file mode 100644 index d938cf2f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/mapping.ttl +++ /dev/null @@ -1,36 +0,0 @@ -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?FirstName ?LastName ?ID - WHERE { - ?x foaf:firstName ?FirstName ; - foaf:lastName ?LastName ; - rdf:ID ?ID . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "LastName.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graphMap [ - rml:reference "LastName"; - rml:termType rml:Literal - ]; - rml:template "http://example.com/Student/{ID.value}/{FirstName.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/resource.ttl deleted file mode 100644 index f4a7ed47..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-SPARQL/resource.ttl +++ /dev/null @@ -1,7 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "10" ; - foaf:firstName "Venus" ; - foaf:lastName "Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/mapping.ttl deleted file mode 100644 index 796587fe..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graphMap [ - rml:reference "LastName"; - rml:termType rml:Literal - ]; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/resource.sql deleted file mode 100644 index 976627c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "FirstName" VARCHAR(50), - "LastName" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus', 'Williams'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0007h-XML/mapping.ttl deleted file mode 100644 index 7be964be..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-XML/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:graphMap [ - rml:reference "LastName"; - rml:termType rml:Literal - ]; - rml:template "http://example.com/Student/{ID}/{FirstName}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0007h-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0007h-XML/student.xml deleted file mode 100644 index 44eab80f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0007h-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus - Williams - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008a-CSV/mapping.ttl deleted file mode 100644 index 0764fee6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-CSV/mapping.ttl +++ /dev/null @@ -1,38 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "Sport" - ]; - rml:predicate ex:Sport - ]; - rml:subjectMap [ - rml:graphMap [ - rml:template "http://example.com/graph/Student/{ID}/{Name}" - ]; - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008a-CSV/output.nq deleted file mode 100644 index 2856ef24..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-CSV/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - "Venus Williams" . - "10" . - "Tennis" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0008a-CSV/student.csv deleted file mode 100644 index fb130b76..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,Name,Sport -10,Venus Williams,Tennis diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0008a-JSON/README.md new file mode 100644 index 00000000..8f103be4 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0008a-JSON/README.md @@ -0,0 +1,74 @@ +## RMLTC0008a-JSON + +**Title**: "Generation of triples to a target graph by using rml:graphMap and rml:template" + +**Description**: "Test that results of the mapping can be directed to a target graph by using rml:graphMap and rml:template" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus Williams", + "Sport": "Tennis" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rdf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:object foaf:Person; + rml:predicate rdf:type + ], [ + rml:objectMap [ + rml:reference "$.ID" + ]; + rml:predicate ex:id + ], [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ], [ + rml:objectMap [ + rml:reference "$.Sport" + ]; + rml:predicate ex:Sport + ]; + rml:subjectMap [ + rml:graphMap [ + rml:template "http://example.com/graph/Student/{$.ID}/{$.Name}" + ]; + rml:template "http://example.com/Student/{$.ID}/{$.Name}" + ] . + +``` + +**Output** +``` + . + "Venus Williams" . + "10" . + "Tennis" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008a-JSON/mapping.ttl index 235fc633..c12600ca 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0008a-JSON/mapping.ttl @@ -17,23 +17,23 @@ rml:predicate rdf:type ], [ rml:objectMap [ - rml:reference "ID" + rml:reference "$.ID" ]; rml:predicate ex:id ], [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ], [ rml:objectMap [ - rml:reference "Sport" + rml:reference "$.Sport" ]; rml:predicate ex:Sport ]; rml:subjectMap [ rml:graphMap [ - rml:template "http://example.com/graph/Student/{ID}/{Name}" + rml:template "http://example.com/graph/Student/{$.ID}/{$.Name}" ]; - rml:template "http://example.com/Student/{ID}/{Name}" + rml:template "http://example.com/Student/{$.ID}/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/mapping.ttl deleted file mode 100644 index dbe815e6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/mapping.ttl +++ /dev/null @@ -1,43 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "Sport" - ]; - rml:predicate ex:Sport - ]; - rml:subjectMap [ - rml:graphMap [ - rml:template "http://example.com/graph/Student/{ID}/{Name}" - ]; - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/output.nq deleted file mode 100644 index 8c3c01f8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - . - "Venus Williams" . - "10"^^ . - "Tennis" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/resource.sql deleted file mode 100644 index 31e00260..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50), - Sport VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/mapping.ttl deleted file mode 100644 index f84e0538..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,43 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "Sport" - ]; - rml:predicate ex:Sport - ]; - rml:subjectMap [ - rml:graphMap [ - rml:template "http://example.com/graph/Student/{ID}/{Name}" - ]; - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/output.nq deleted file mode 100644 index 8c3c01f8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - . - "Venus Williams" . - "10"^^ . - "Tennis" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/resource.sql deleted file mode 100644 index 3ad893a6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50), - "Sport" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/mapping.ttl deleted file mode 100644 index 97d3504b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/mapping.ttl +++ /dev/null @@ -1,51 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rdf: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Name ?Sport ?ID - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID ; - ?sportObject . - ?sportObject foaf:name ?Sport . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID.value" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name.value" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "Sport.value" - ]; - rml:predicate ex:Sport - ]; - rml:subjectMap [ - rml:graphMap [ - rml:template "http://example.com/graph/Student/{ID.value}/{Name.value}" - ]; - rml:template "http://example.com/Student/{ID.value}/{Name.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/output.nq deleted file mode 100644 index 2856ef24..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - "Venus Williams" . - "10" . - "Tennis" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/resource.ttl deleted file mode 100644 index e7007e36..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-SPARQL/resource.ttl +++ /dev/null @@ -1,9 +0,0 @@ -@prefix foaf: . -@prefix ns1: . -@prefix rdf: . - -[] ns1:plays [ a ns1:Sport ; - foaf:name "Tennis" ] ; - rdf:ID "10" ; - foaf:name "Venus Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/mapping.ttl deleted file mode 100644 index e0220849..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/mapping.ttl +++ /dev/null @@ -1,43 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "Sport" - ]; - rml:predicate ex:Sport - ]; - rml:subjectMap [ - rml:graphMap [ - rml:template "http://example.com/graph/Student/{ID}/{Name}" - ]; - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/output.nq deleted file mode 100644 index 8c3c01f8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - . - "Venus Williams" . - "10"^^ . - "Tennis" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/resource.sql deleted file mode 100644 index e9b41d95..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50), - "Sport" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008a-XML/mapping.ttl deleted file mode 100644 index e9f3ac3f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-XML/mapping.ttl +++ /dev/null @@ -1,39 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "Sport" - ]; - rml:predicate ex:Sport - ]; - rml:subjectMap [ - rml:graphMap [ - rml:template "http://example.com/graph/Student/{ID}/{Name}" - ]; - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008a-XML/output.nq deleted file mode 100644 index 2856ef24..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-XML/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - "Venus Williams" . - "10" . - "Tennis" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008a-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0008a-XML/student.xml deleted file mode 100644 index 9ae75cc8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008a-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus Williams - Tennis - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008b-CSV/mapping.ttl deleted file mode 100644 index f6dc834f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-CSV/mapping.ttl +++ /dev/null @@ -1,53 +0,0 @@ -@prefix activity: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap ; - rml:predicate ex:Sport - ], [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a rml:RefObjectMap; - rml:parentTriplesMap . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:object activity:Sport; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "http://example.com/{Sport}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008b-CSV/output.nq deleted file mode 100644 index 7742ae45..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-CSV/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - "Venus Williams" . - "10" . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0008b-CSV/student.csv deleted file mode 100644 index fb130b76..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,Name,Sport -10,Venus Williams,Tennis diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0008b-JSON/README.md new file mode 100644 index 00000000..eb07d5cc --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0008b-JSON/README.md @@ -0,0 +1,92 @@ +## RMLTC0008b-JSON + +**Title**: "Generation of triples referencing object map" + +**Description**: "Tests the mapping specification referencing object map without join" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus Williams", + "Sport": "Tennis" + }] +} + +``` + +**Mapping** +``` +@prefix activity: . +@prefix ex: . +@prefix foaf: . +@prefix rdf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap ; + rml:predicate ex:Sport + ], [ + rml:object foaf:Person; + rml:predicate rdf:type + ], [ + rml:objectMap [ + rml:reference "$.ID" + ]; + rml:predicate ex:id + ], [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:template "http://example.com/Student/{$.ID}/{$.Name}" + ] . + + a rml:RefObjectMap; + rml:parentTriplesMap . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:object activity:Sport; + rml:predicate rdf:type + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.Sport}" + ] . + +``` + +**Output** +``` + . + "Venus Williams" . + "10" . + . + . + + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008b-JSON/mapping.ttl index 81ebfe7d..9aba67e8 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0008b-JSON/mapping.ttl @@ -21,17 +21,17 @@ rml:predicate rdf:type ], [ rml:objectMap [ - rml:reference "ID" + rml:reference "$.ID" ]; rml:predicate ex:id ], [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ]; rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" + rml:template "http://example.com/Student/{$.ID}/{$.Name}" ] . a rml:RefObjectMap; @@ -51,5 +51,5 @@ rml:predicate rdf:type ]; rml:subjectMap [ - rml:template "http://example.com/{Sport}" + rml:template "http://example.com/{$.Sport}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/mapping.ttl deleted file mode 100644 index 0b2c01af..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/mapping.ttl +++ /dev/null @@ -1,56 +0,0 @@ -@prefix activity: . -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap ; - rml:predicate ex:Sport - ], [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a rml:RefObjectMap; - rml:parentTriplesMap . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object activity:Sport; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "http://example.com/{Sport}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/output.nq deleted file mode 100644 index 9271c2c5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - "Venus Williams" . - "10"^^ . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/resource.sql deleted file mode 100644 index 31e00260..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50), - Sport VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/mapping.ttl deleted file mode 100644 index 0a068c2e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,56 +0,0 @@ -@prefix activity: . -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap ; - rml:predicate ex:Sport - ], [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a rml:RefObjectMap; - rml:parentTriplesMap . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object activity:Sport; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "http://example.com/{Sport}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/output.nq deleted file mode 100644 index 9271c2c5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - "Venus Williams" . - "10"^^ . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/resource.sql deleted file mode 100644 index 3ad893a6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50), - "Sport" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/mapping.ttl deleted file mode 100644 index 35ffb33c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/mapping.ttl +++ /dev/null @@ -1,77 +0,0 @@ -@prefix activity: . -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rdf: . -@prefix rml: . -@prefix sd: . - -ex:TriplesMap1 a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Name ?ID - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID ; - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap ex:RefObjectMap1; - rml:predicate ex:Sport - ], [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID.value" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name.value" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID.value}/{Name.value}" - ] . - -ex:RefObjectMap1 a rml:RefObjectMap; - rml:parentTriplesMap ex:TriplesMap2 . - -ex:TriplesMap2 a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Sport - WHERE { - ?x a . - ?x foaf:name ?Sport . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:object activity:Sport; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "http://example.com/{Sport.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/output.nq deleted file mode 100644 index 7742ae45..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - "Venus Williams" . - "10" . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/resource.ttl deleted file mode 100644 index e7007e36..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-SPARQL/resource.ttl +++ /dev/null @@ -1,9 +0,0 @@ -@prefix foaf: . -@prefix ns1: . -@prefix rdf: . - -[] ns1:plays [ a ns1:Sport ; - foaf:name "Tennis" ] ; - rdf:ID "10" ; - foaf:name "Venus Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/mapping.ttl deleted file mode 100644 index 08c9aab6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/mapping.ttl +++ /dev/null @@ -1,56 +0,0 @@ -@prefix activity: . -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap ; - rml:predicate ex:Sport - ], [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a rml:RefObjectMap; - rml:parentTriplesMap . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:object activity:Sport; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "http://example.com/{Sport}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/output.nq deleted file mode 100644 index 9271c2c5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - "Venus Williams" . - "10"^^ . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/resource.sql deleted file mode 100644 index e9b41d95..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50), - "Sport" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008b-XML/mapping.ttl deleted file mode 100644 index ae1f2f5f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-XML/mapping.ttl +++ /dev/null @@ -1,55 +0,0 @@ -@prefix activity: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap ; - rml:predicate ex:Sport - ], [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a rml:RefObjectMap; - rml:parentTriplesMap . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:object activity:Sport; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "http://example.com/{Sport}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008b-XML/output.nq deleted file mode 100644 index 7742ae45..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-XML/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - "Venus Williams" . - "10" . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008b-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0008b-XML/student.xml deleted file mode 100644 index 9ae75cc8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008b-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus Williams - Tennis - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008c-CSV/mapping.ttl deleted file mode 100644 index 1dd7e877..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-CSV/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name, foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008c-CSV/output.nq deleted file mode 100644 index d36f700c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-CSV/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus Williams" . - "Venus Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0008c-CSV/student.csv deleted file mode 100644 index fb130b76..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,Name,Sport -10,Venus Williams,Tennis diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0008c-JSON/README.md new file mode 100644 index 00000000..cb8103a7 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0008c-JSON/README.md @@ -0,0 +1,55 @@ +## RMLTC0008c-JSON + +**Title**: "Generation of triples by using multiple predicateMaps within a rml:predicateObjectMap" + +**Description**: "Tests the generation of triples by using multiple predicateMaps within a rml:predicateObjectMap" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus Williams", + "Sport": "Tennis" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate ex:name, foaf:name + ]; + rml:subjectMap [ + rml:template "http://example.com/Student/{$.ID}/{$.Name}" + ] . + +``` + +**Output** +``` + "Venus Williams" . + "Venus Williams" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008c-JSON/mapping.ttl index 3fa6f387..a610a24c 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0008c-JSON/mapping.ttl @@ -13,10 +13,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate ex:name, foaf:name ]; rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" + rml:template "http://example.com/Student/{$.ID}/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/mapping.ttl deleted file mode 100644 index e4467dba..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name, foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/output.nq deleted file mode 100644 index d36f700c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus Williams" . - "Venus Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/resource.sql deleted file mode 100644 index 31e00260..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-MySQL/resource.sql +++ /dev/null @@ -1,9 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50), - Sport VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/mapping.ttl deleted file mode 100644 index 21bc9fbd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name, foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/output.nq deleted file mode 100644 index d36f700c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus Williams" . - "Venus Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/resource.sql deleted file mode 100644 index 3ad893a6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-PostgreSQL/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50), - "Sport" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/mapping.ttl deleted file mode 100644 index 54f6196f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/mapping.ttl +++ /dev/null @@ -1,36 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Name ?ID - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID ; - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name.value" - ]; - rml:predicate ex:name, foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID.value}/{Name.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/output.nq deleted file mode 100644 index d36f700c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus Williams" . - "Venus Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/resource.ttl deleted file mode 100644 index e7007e36..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-SPARQL/resource.ttl +++ /dev/null @@ -1,9 +0,0 @@ -@prefix foaf: . -@prefix ns1: . -@prefix rdf: . - -[] ns1:plays [ a ns1:Sport ; - foaf:name "Tennis" ] ; - rdf:ID "10" ; - foaf:name "Venus Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/mapping.ttl deleted file mode 100644 index add0e4ae..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name, foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/output.nq deleted file mode 100644 index d36f700c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus Williams" . - "Venus Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/resource.sql deleted file mode 100644 index e9b41d95..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-SQLServer/resource.sql +++ /dev/null @@ -1,8 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50), - "Sport" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0008c-XML/mapping.ttl deleted file mode 100644 index 188d69e8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-XML/mapping.ttl +++ /dev/null @@ -1,22 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name, foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0008c-XML/output.nq deleted file mode 100644 index d36f700c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-XML/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "Venus Williams" . - "Venus Williams" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0008c-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0008c-XML/student.xml deleted file mode 100644 index 9ae75cc8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0008c-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 10 - Venus Williams - Tennis - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/mapping.ttl deleted file mode 100644 index 560934a1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/mapping.ttl +++ /dev/null @@ -1,48 +0,0 @@ -@prefix foaf: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "sport.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/sport_{ID}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/output.nq deleted file mode 100644 index b0b89f8b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus Williams" . - "Demi Moore" . - "Tennis" . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/sport.csv b/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/sport.csv deleted file mode 100644 index 800f4446..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/sport.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,Name -100,Tennis diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/student.csv deleted file mode 100644 index 1ed4c175..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-CSV/student.csv +++ /dev/null @@ -1,3 +0,0 @@ -ID,Sport,Name -10,100,Venus Williams -20,,Demi Moore diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/README.md new file mode 100644 index 00000000..b0397e49 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/README.md @@ -0,0 +1,103 @@ +## RMLTC0009a-JSON + +**Title**: "Generation of triples from foreign key relations" + +**Description**: "Test foreign key relationships among logical tables" + +**Error expected?** No + +**Input** +``` +{ + "students" : [ + { + "ID": 10, + "Sport": 100, + "Name": "Venus Williams" + }, + { + "ID": 20, + "Name": "Demi Moore" + } + ] +} + +``` + +**Input 1** +``` +{ + "sports": [ + { + "ID": 100, + "Name": "Tennis" + } + ] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rdfs: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ], [ + rml:objectMap [ a rml:RefObjectMap; + rml:joinCondition [ + rml:child "$.Sport"; + rml:parent "$.ID" + ]; + rml:parentTriplesMap + ]; + rml:predicate + ]; + rml:subjectMap [ + rml:template "http://example.com/resource/student_{$.ID}" + ] . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.sports[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "sport.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate rdfs:label + ]; + rml:subjectMap [ + rml:template "http://example.com/resource/sport_{$.ID}" + ] . + +``` + +**Output** +``` + "Venus Williams" . + "Demi Moore" . + "Tennis" . + . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/mapping.ttl index 906ab93e..596bd136 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/mapping.ttl @@ -13,21 +13,21 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ], [ rml:objectMap [ a rml:RefObjectMap; rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" + rml:child "$.Sport"; + rml:parent "$.ID" ]; rml:parentTriplesMap ]; rml:predicate ]; rml:subjectMap [ - rml:template "http://example.com/resource/student_{ID}" + rml:template "http://example.com/resource/student_{$.ID}" ] . a rml:TriplesMap; @@ -41,10 +41,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate rdfs:label ]; rml:subjectMap [ - rml:template "http://example.com/resource/sport_{ID}" + rml:template "http://example.com/resource/sport_{$.ID}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/student.json index 697be3cc..a99528c1 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/student.json +++ b/src/test/resources/new-test-cases/core/RMLTC0009a-JSON/student.json @@ -7,7 +7,6 @@ }, { "ID": 20, - "Sport": null, "Name": "Demi Moore" } ] diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/mapping.ttl deleted file mode 100644 index 6de77ad5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/mapping.ttl +++ /dev/null @@ -1,51 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/sport_{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/output.nq deleted file mode 100644 index b0b89f8b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus Williams" . - "Demi Moore" . - "Tennis" . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/resource.sql deleted file mode 100644 index 6775e444..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-MySQL/resource.sql +++ /dev/null @@ -1,18 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - Sport VARCHAR(50), - Name VARCHAR(50) -); -INSERT INTO student values ('10', '100', 'Venus Williams'); -INSERT INTO student values ('20', NULL , 'Demi Moore'); - -DROP TABLE IF EXISTS test.sport; - -CREATE TABLE sport ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO sport values ('100', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/mapping.ttl deleted file mode 100644 index b2be3662..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,51 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/sport_{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/note.md b/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/note.md deleted file mode 100644 index 7c87bd86..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/note.md +++ /dev/null @@ -1,4 +0,0 @@ -## Change note - -Changes `Sport.ID` column from `INTEGER` to `VARCHAR` since postgres does not support joining on -columns of different types. diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/output.nq deleted file mode 100644 index b0b89f8b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus Williams" . - "Demi Moore" . - "Tennis" . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/resource.sql deleted file mode 100644 index 0f674565..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-PostgreSQL/resource.sql +++ /dev/null @@ -1,17 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "Sport" VARCHAR(50), - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', '100', 'Venus Williams'); -INSERT INTO student values ('20', NULL , 'Demi Moore'); - -DROP TABLE IF EXISTS sport; - -CREATE TABLE sport ( - "ID" VARCHAR(50), - "Name" VARCHAR(50) -); -INSERT INTO sport values ('100', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/mapping.ttl deleted file mode 100644 index 907d5e2a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/mapping.ttl +++ /dev/null @@ -1,79 +0,0 @@ -@prefix foaf: . -@prefix formats: . -@prefix rdfs: . -@prefix rml: . -@prefix sd: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Name ?ID ?Sport - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID ; - ?sportObject . - OPTIONAL { ?sportObject a ; - rdf:ID ?Sport . } - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name.value" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{ID.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?ID ?Name - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID ; - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name.value" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/sport_{ID.value}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/output.nq deleted file mode 100644 index b0b89f8b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus Williams" . - "Demi Moore" . - "Tennis" . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/resource1.ttl b/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/resource1.ttl deleted file mode 100644 index 676bdb38..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/resource1.ttl +++ /dev/null @@ -1,13 +0,0 @@ -@prefix foaf: . -@prefix ns1: . -@prefix rdf: . - -[] ns1:plays [ a ns1:Sport ; - rdf:ID "100" ] ; - rdf:ID "10" ; - foaf:name "Venus Williams" . - -[] ns1:plays [ a ns1:Sport ] ; - rdf:ID "20" ; - foaf:name "Demi Moore" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/resource2.ttl b/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/resource2.ttl deleted file mode 100644 index d69ef52e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-SPARQL/resource2.ttl +++ /dev/null @@ -1,6 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "100" ; - foaf:name "Tennis" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/mapping.ttl deleted file mode 100644 index bb76cc7b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/mapping.ttl +++ /dev/null @@ -1,51 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/sport_{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/output.nq deleted file mode 100644 index b0b89f8b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus Williams" . - "Demi Moore" . - "Tennis" . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/resource.sql deleted file mode 100644 index 2b79a5d4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-SQLServer/resource.sql +++ /dev/null @@ -1,17 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "Sport" VARCHAR(50), - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', '100', 'Venus Williams'); -INSERT INTO student values ('20', NULL , 'Demi Moore'); - -DROP TABLE IF EXISTS sport; - -CREATE TABLE sport ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO sport values ('100', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009a-XML/mapping.ttl deleted file mode 100644 index 675df8ee..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-XML/mapping.ttl +++ /dev/null @@ -1,50 +0,0 @@ -@prefix foaf: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/sports/sport"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "sport.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/sport_{ID}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009a-XML/output.nq deleted file mode 100644 index b0b89f8b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-XML/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus Williams" . - "Demi Moore" . - "Tennis" . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-XML/sport.xml b/src/test/resources/new-test-cases/core/RMLTC0009a-XML/sport.xml deleted file mode 100644 index 1c02bdb8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-XML/sport.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - 100 - Tennis - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009a-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0009a-XML/student.xml deleted file mode 100644 index a66c01aa..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009a-XML/student.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - 10 - Venus Williams - 100 - - - 20 - Demi Moore - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/mapping.ttl deleted file mode 100644 index 10635ed6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/mapping.ttl +++ /dev/null @@ -1,54 +0,0 @@ -@prefix foaf: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:graph ; - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:graph ; - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/student_{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "sport.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/sport_{ID}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/output.nq deleted file mode 100644 index aef6b08c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/output.nq +++ /dev/null @@ -1,8 +0,0 @@ - . - "Venus Williams" . - . - "Demi Moore" . - . - "Tennis" . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/sport.csv b/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/sport.csv deleted file mode 100644 index 800f4446..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/sport.csv +++ /dev/null @@ -1,2 +0,0 @@ -ID,Name -100,Tennis diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/student.csv deleted file mode 100644 index 1ed4c175..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-CSV/student.csv +++ /dev/null @@ -1,3 +0,0 @@ -ID,Sport,Name -10,100,Venus Williams -20,,Demi Moore diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/README.md new file mode 100644 index 00000000..c02e44ff --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/README.md @@ -0,0 +1,113 @@ +## RMLTC0009b-JSON + +**Title**: "Generation of triples to multiple graphs" + +**Description**: "Test that results from distinct parts of the mapping can be directed to different target graphs." + +**Error expected?** No + +**Input** +``` +{ + "students" : [ + { + "ID": 10, + "Sport": 100, + "Name": "Venus Williams" + }, + { + "ID": 20, + "Name": "Demi Moore" + } + ] +} + +``` + +**Input 1** +``` +{ + "sports": [ + { + "ID": 100, + "Name": "Tennis" + } + ] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rdfs: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:graph ; + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ], [ + rml:graph ; + rml:objectMap [ a rml:RefObjectMap; + rml:joinCondition [ + rml:child "$.Sport"; + rml:parent "$.ID" + ]; + rml:parentTriplesMap + ]; + rml:predicate + ]; + rml:subjectMap [ + rml:class ; + rml:graph ; + rml:template "http://example.com/resource/student_{$.ID}" + ] . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.sports[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "sport.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate rdfs:label + ]; + rml:subjectMap [ + rml:class ; + rml:graph ; + rml:template "http://example.com/resource/sport_{$.ID}" + ] . + +``` + +**Output** +``` + . + "Venus Williams" . + . + "Demi Moore" . + . + "Tennis" . + . + . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/mapping.ttl index 026676d6..4a12b17f 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/mapping.ttl @@ -14,15 +14,15 @@ rml:predicateObjectMap [ rml:graph ; rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ], [ rml:graph ; rml:objectMap [ a rml:RefObjectMap; rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" + rml:child "$.Sport"; + rml:parent "$.ID" ]; rml:parentTriplesMap ]; @@ -31,7 +31,7 @@ rml:subjectMap [ rml:class ; rml:graph ; - rml:template "http://example.com/resource/student_{ID}" + rml:template "http://example.com/resource/student_{$.ID}" ] . a rml:TriplesMap; @@ -45,12 +45,12 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate rdfs:label ]; rml:subjectMap [ rml:class ; rml:graph ; - rml:template "http://example.com/resource/sport_{ID}" + rml:template "http://example.com/resource/sport_{$.ID}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/student.json index 697be3cc..a99528c1 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/student.json +++ b/src/test/resources/new-test-cases/core/RMLTC0009b-JSON/student.json @@ -7,7 +7,6 @@ }, { "ID": 20, - "Sport": null, "Name": "Demi Moore" } ] diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/mapping.ttl deleted file mode 100644 index 26e61b51..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/mapping.ttl +++ /dev/null @@ -1,57 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:graph ; - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:graph ; - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/student_{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/sport_{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/output.nq deleted file mode 100644 index aef6b08c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/output.nq +++ /dev/null @@ -1,8 +0,0 @@ - . - "Venus Williams" . - . - "Demi Moore" . - . - "Tennis" . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/resource.sql deleted file mode 100644 index 18cb6cd9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-MySQL/resource.sql +++ /dev/null @@ -1,18 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - Sport VARCHAR(50), - Name VARCHAR(50) -); -INSERT INTO student values ('10', '100', 'Venus Williams'); -INSERT INTO student values ('20', NULL, 'Demi Moore'); - -DROP TABLE IF EXISTS test.sport; - -CREATE TABLE sport ( - ID INTEGER, - Name VARCHAR(50) -); -INSERT INTO sport values ('100', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/mapping.ttl deleted file mode 100644 index b04272f3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,57 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:graph ; - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:graph ; - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/student_{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/sport_{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/note.md b/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/note.md deleted file mode 100644 index 7c87bd86..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/note.md +++ /dev/null @@ -1,4 +0,0 @@ -## Change note - -Changes `Sport.ID` column from `INTEGER` to `VARCHAR` since postgres does not support joining on -columns of different types. diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/output.nq deleted file mode 100644 index aef6b08c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/output.nq +++ /dev/null @@ -1,8 +0,0 @@ - . - "Venus Williams" . - . - "Demi Moore" . - . - "Tennis" . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/resource.sql deleted file mode 100644 index be021479..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-PostgreSQL/resource.sql +++ /dev/null @@ -1,17 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "Sport" VARCHAR(50), - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', '100', 'Venus Williams'); -INSERT INTO student values ('20', NULL, 'Demi Moore'); - -DROP TABLE IF EXISTS sport; - -CREATE TABLE sport ( - "ID" VARCHAR(50), - "Name" VARCHAR(50) -); -INSERT INTO sport values ('100', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/mapping.ttl deleted file mode 100644 index 18ce4dc3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/mapping.ttl +++ /dev/null @@ -1,85 +0,0 @@ -@prefix foaf: . -@prefix formats: . -@prefix rdfs: . -@prefix rml: . -@prefix sd: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Name ?ID ?Sport - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID ; - ?sportObject . - OPTIONAL { ?sportObject a ; - rdf:ID ?Sport . } - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:graph ; - rml:objectMap [ - rml:reference "Name.value" - ]; - rml:predicate foaf:name - ], [ - rml:graph ; - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport.value"; - rml:parent "ID.value" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/student_{ID.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?ID ?Name - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID ; - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name.value" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/sport_{ID.value}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/output.nq deleted file mode 100644 index aef6b08c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/output.nq +++ /dev/null @@ -1,8 +0,0 @@ - . - "Venus Williams" . - . - "Demi Moore" . - . - "Tennis" . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/resource1.ttl b/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/resource1.ttl deleted file mode 100644 index 676bdb38..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/resource1.ttl +++ /dev/null @@ -1,13 +0,0 @@ -@prefix foaf: . -@prefix ns1: . -@prefix rdf: . - -[] ns1:plays [ a ns1:Sport ; - rdf:ID "100" ] ; - rdf:ID "10" ; - foaf:name "Venus Williams" . - -[] ns1:plays [ a ns1:Sport ] ; - rdf:ID "20" ; - foaf:name "Demi Moore" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/resource2.ttl b/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/resource2.ttl deleted file mode 100644 index d69ef52e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-SPARQL/resource2.ttl +++ /dev/null @@ -1,6 +0,0 @@ -@prefix foaf: . -@prefix rdf: . - -[] rdf:ID "100" ; - foaf:name "Tennis" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/mapping.ttl deleted file mode 100644 index fb79327e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/mapping.ttl +++ /dev/null @@ -1,57 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:graph ; - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:graph ; - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/student_{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/sport_{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/output.nq deleted file mode 100644 index aef6b08c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/output.nq +++ /dev/null @@ -1,8 +0,0 @@ - . - "Venus Williams" . - . - "Demi Moore" . - . - "Tennis" . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/resource.sql deleted file mode 100644 index ac6eca67..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-SQLServer/resource.sql +++ /dev/null @@ -1,18 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "Sport" VARCHAR(50), - "Name" VARCHAR(50) -); -INSERT INTO student values ('10', '100', 'Venus Williams'); -INSERT INTO student values ('20', NULL, 'Demi Moore'); - -DROP TABLE IF EXISTS sport; - -CREATE TABLE sport ( - "ID" INTEGER, - "Name" VARCHAR(50) -); -INSERT INTO sport values ('100', 'Tennis'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009b-XML/mapping.ttl deleted file mode 100644 index 010b4c72..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-XML/mapping.ttl +++ /dev/null @@ -1,56 +0,0 @@ -@prefix foaf: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:graph ; - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:graph ; - rml:objectMap [ a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "ID" - ]; - rml:parentTriplesMap - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/student_{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/sports/sport"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "sport.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:class ; - rml:graph ; - rml:template "http://example.com/resource/sport_{ID}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009b-XML/output.nq deleted file mode 100644 index aef6b08c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-XML/output.nq +++ /dev/null @@ -1,8 +0,0 @@ - . - "Venus Williams" . - . - "Demi Moore" . - . - "Tennis" . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-XML/sport.xml b/src/test/resources/new-test-cases/core/RMLTC0009b-XML/sport.xml deleted file mode 100644 index 1c02bdb8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-XML/sport.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - 100 - Tennis - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009b-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0009b-XML/student.xml deleted file mode 100644 index a66c01aa..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009b-XML/student.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - 10 - Venus Williams - 100 - - - 20 - Demi Moore - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/mapping.ttl deleted file mode 100644 index d91b6e5a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Name, COUNT(Sport) - FROM Student - GROUP BY Name - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/output.nq deleted file mode 100644 index f789cbf8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus Williams" . - "Demi Moore" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/resource.sql deleted file mode 100644 index 4076cd0f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009c-MySQL/resource.sql +++ /dev/null @@ -1,21 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Sport; -DROP TABLE IF EXISTS test.Student; - -CREATE TABLE Sport ( -ID integer, -Name varchar (50), -PRIMARY KEY (ID) -); - -CREATE TABLE Student ( -ID integer, -Name varchar(50), -Sport integer, -PRIMARY KEY (ID), -FOREIGN KEY(Sport) REFERENCES Sport(ID) -); - -INSERT INTO Sport (ID, Name) VALUES (100,'Tennis'); -INSERT INTO Student (ID, Name, Sport) VALUES (10,'Venus Williams', 100); -INSERT INTO Student (ID, Name, Sport) VALUES (20,'Demi Moore', NULL); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/mapping.ttl deleted file mode 100644 index ac18f544..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Name, COUNT(Sport) - FROM Student - GROUP BY Name - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/output.nq deleted file mode 100644 index f789cbf8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus Williams" . - "Demi Moore" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/resource.sql deleted file mode 100644 index 068f4d87..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009c-PostgreSQL/resource.sql +++ /dev/null @@ -1,20 +0,0 @@ -DROP TABLE IF EXISTS Sport; -DROP TABLE IF EXISTS Student; - -CREATE TABLE Sport ( -ID integer, -Name varchar (50), -PRIMARY KEY (ID) -); - -CREATE TABLE Student ( -ID integer, -Name varchar(50), -Sport integer, -PRIMARY KEY (ID), -FOREIGN KEY(Sport) REFERENCES Sport(ID) -); - -INSERT INTO Sport (ID, Name) VALUES (100,'Tennis'); -INSERT INTO Student (ID, Name, Sport) VALUES (10,'Venus Williams', 100); -INSERT INTO Student (ID, Name, Sport) VALUES (20,'Demi Moore', NULL); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/mapping.ttl deleted file mode 100644 index 23c4f1dd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Name, COUNT(Sport) - FROM Student - GROUP BY Name - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/output.nq deleted file mode 100644 index f789cbf8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Venus Williams" . - "Demi Moore" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/resource.sql deleted file mode 100644 index e23c539d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009c-SQLServer/resource.sql +++ /dev/null @@ -1,21 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Sport; -DROP TABLE IF EXISTS Student; - -CREATE TABLE Sport ( -ID integer, -Name varchar (50), -PRIMARY KEY (ID) -); - -CREATE TABLE Student ( -ID integer, -Name varchar(50), -Sport integer, -PRIMARY KEY (ID), -FOREIGN KEY(Sport) REFERENCES Sport(ID) -); - -INSERT INTO Sport (ID, Name) VALUES (100,'Tennis'); -INSERT INTO Student (ID, Name, Sport) VALUES (10,'Venus Williams', 100); -INSERT INTO Student (ID, Name, Sport) VALUES (20,'Demi Moore', NULL); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/mapping.ttl deleted file mode 100644 index ce5b8cd7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/mapping.ttl +++ /dev/null @@ -1,35 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Name, COUNT(Sport) as SPORTCOUNT - FROM Student - GROUP BY Name - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "SPORTCOUNT" - ]; - rml:predicate ex:numSport - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/output.nq deleted file mode 100644 index 9ecd9fc2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - "Venus Williams" . - "1"^^ . - "Demi Moore" . - "0"^^ . - - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/resource.sql deleted file mode 100644 index a5947eb9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009d-MySQL/resource.sql +++ /dev/null @@ -1,21 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Student; -DROP TABLE IF EXISTS test.Sport; - -CREATE TABLE Sport ( -ID integer, -Name varchar (50), -PRIMARY KEY (ID) -); - -CREATE TABLE Student ( -ID integer, -Name varchar(50), -Sport integer, -PRIMARY KEY (ID), -FOREIGN KEY(Sport) REFERENCES Sport(ID) -); - -INSERT INTO Sport (ID, Name) VALUES (100,'Tennis'); -INSERT INTO Student (ID, Name, Sport) VALUES (10,'Venus Williams', 100); -INSERT INTO Student (ID, Name, Sport) VALUES (20,'Demi Moore', NULL); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/mapping.ttl deleted file mode 100644 index a701020d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,35 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Name, COUNT(Sport) as SPORTCOUNT - FROM Student - GROUP BY Name - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "sportcount" - ]; - rml:predicate ex:numSport - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/output.nq deleted file mode 100644 index 9ecd9fc2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - "Venus Williams" . - "1"^^ . - "Demi Moore" . - "0"^^ . - - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/resource.sql deleted file mode 100644 index d8ba9270..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009d-PostgreSQL/resource.sql +++ /dev/null @@ -1,20 +0,0 @@ -DROP TABLE IF EXISTS Student; -DROP TABLE IF EXISTS Sport; - -CREATE TABLE Sport ( -ID integer, -Name varchar (50), -PRIMARY KEY (ID) -); - -CREATE TABLE Student ( -ID integer, -Name varchar(50), -Sport integer, -PRIMARY KEY (ID), -FOREIGN KEY(Sport) REFERENCES Sport(ID) -); - -INSERT INTO Sport (ID, Name) VALUES (100,'Tennis'); -INSERT INTO Student (ID, Name, Sport) VALUES (10,'Venus Williams', 100); -INSERT INTO Student (ID, Name, Sport) VALUES (20,'Demi Moore', NULL); diff --git a/src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/mapping.ttl deleted file mode 100644 index e50b0333..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/mapping.ttl +++ /dev/null @@ -1,35 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Name, COUNT(Sport) as SPORTCOUNT - FROM Student - GROUP BY Name - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "SPORTCOUNT" - ]; - rml:predicate ex:numSport - ]; - rml:subjectMap [ - rml:template "http://example.com/resource/student_{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/output.nq deleted file mode 100644 index 9ecd9fc2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - "Venus Williams" . - "1"^^ . - "Demi Moore" . - "0"^^ . - - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/resource.sql deleted file mode 100644 index ad1775c0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0009d-SQLServer/resource.sql +++ /dev/null @@ -1,21 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Student; -DROP TABLE IF EXISTS Sport; - -CREATE TABLE Sport ( -ID integer, -Name varchar (50), -PRIMARY KEY (ID) -); - -CREATE TABLE Student ( -ID integer, -Name varchar(50), -Sport integer, -PRIMARY KEY (ID), -FOREIGN KEY(Sport) REFERENCES Sport(ID) -); - -INSERT INTO Sport (ID, Name) VALUES (100,'Tennis'); -INSERT INTO Student (ID, Name, Sport) VALUES (10,'Venus Williams', 100); -INSERT INTO Student (ID, Name, Sport) VALUES (20,'Demi Moore', NULL); diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-CSV/country_info.csv b/src/test/resources/new-test-cases/core/RMLTC0010a-CSV/country_info.csv deleted file mode 100644 index 67082bbd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-CSV/country_info.csv +++ /dev/null @@ -1,4 +0,0 @@ -Country Code,Name,ISO 3166 -1,"Bolivia, Plurinational State of",BO -2,"Ireland",IE -3,"Saint Martin (French part)",MF diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010a-CSV/mapping.ttl deleted file mode 100644 index c1b0e5ce..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-CSV/mapping.ttl +++ /dev/null @@ -1,20 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_info.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010a-CSV/output.nq deleted file mode 100644 index 29911d6f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-CSV/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Bolivia, Plurinational State of" . - "Ireland" . - "Saint Martin (French part)" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0010a-JSON/README.md new file mode 100644 index 00000000..37bc7686 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0010a-JSON/README.md @@ -0,0 +1,63 @@ +## RMLTC0010a-JSON + +**Title**: "Template with table column with blank space" + +**Description**: "Tests a template with blank space in column value" + +**Error expected?** No + +**Input** +``` +{ + "countries": [{ + "Country Code": 1, + "Name":"Bolivia, Plurinational State of", + "ISO 3166": "BO" + }, { + "Country Code": 2, + "Name":"Ireland", + "ISO 3166": "IE" + }, { + "Country Code": 3, + "Name":"Saint Martin (French part)", + "ISO 3166": "MF" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.countries[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "country_info.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate ex:name + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.['Country Code']}" + ] . + +``` + +**Output** +``` + "Bolivia, Plurinational State of" . + "Ireland" . + "Saint Martin (French part)" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010a-JSON/mapping.ttl index 68e3dd35..370edb7c 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0010a-JSON/mapping.ttl @@ -12,7 +12,7 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate ex:name ]; diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/mapping.ttl deleted file mode 100644 index 27735605..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "country_info" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/output.nq deleted file mode 100644 index 29911d6f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Bolivia, Plurinational State of" . - "Ireland" . - "Saint Martin (French part)" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/resource.sql deleted file mode 100644 index 7a7aa74f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-MySQL/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.country_info; - -CREATE TABLE country_info ( - `Country Code` INTEGER, - Name VARCHAR(100), - `ISO 3166` VARCHAR(10) -); -INSERT INTO country_info values ('1', 'Bolivia, Plurinational State of', 'BO'); -INSERT INTO country_info values ('2', 'Ireland', 'IE'); -INSERT INTO country_info values ('3', 'Saint Martin (French part)', 'MF'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/mapping.ttl deleted file mode 100644 index 2c3734eb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "country_info" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/output.nq deleted file mode 100644 index 29911d6f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Bolivia, Plurinational State of" . - "Ireland" . - "Saint Martin (French part)" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/resource.sql deleted file mode 100644 index 12f1652d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-PostgreSQL/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -DROP TABLE IF EXISTS country_info; - -CREATE TABLE country_info ( - "Country Code" INTEGER, - "Name" VARCHAR(100), - "ISO 3166" VARCHAR(10) -); -INSERT INTO country_info values ('1', 'Bolivia, Plurinational State of', 'BO'); -INSERT INTO country_info values ('2', 'Ireland', 'IE'); -INSERT INTO country_info values ('3', 'Saint Martin (French part)', 'MF'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/mapping.ttl deleted file mode 100644 index fdca61f9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "country_info" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/output.nq deleted file mode 100644 index 29911d6f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Bolivia, Plurinational State of" . - "Ireland" . - "Saint Martin (French part)" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/resource.sql deleted file mode 100644 index 8c20c7bc..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010a-SQLServer/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS country_info; - -CREATE TABLE country_info ( - "Country Code" INTEGER, - "Name" VARCHAR(100), - "ISO 3166" VARCHAR(10) -); -INSERT INTO country_info values ('1', 'Bolivia, Plurinational State of', 'BO'); -INSERT INTO country_info values ('2', 'Ireland', 'IE'); -INSERT INTO country_info values ('3', 'Saint Martin (French part)', 'MF'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-CSV/country_info.csv b/src/test/resources/new-test-cases/core/RMLTC0010b-CSV/country_info.csv deleted file mode 100644 index c550dbf5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-CSV/country_info.csv +++ /dev/null @@ -1,4 +0,0 @@ -Country Code,Name,ISO 3166 -1,"Bolivia, Plurinational State of",BO -2,Ireland,IE -3,"Saint Martin (French part)",MF diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010b-CSV/mapping.ttl deleted file mode 100644 index c425b43e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-CSV/mapping.ttl +++ /dev/null @@ -1,20 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_info.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010b-CSV/output.nq deleted file mode 100644 index c92a08b0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-CSV/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Bolivia, Plurinational State of" . - "Ireland" . - "Saint Martin (French part)" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0010b-JSON/README.md new file mode 100644 index 00000000..f2d50d64 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0010b-JSON/README.md @@ -0,0 +1,63 @@ +## RMLTC0010b-JSON + +**Title**: "Template with table columns with special chars" + +**Description**: "Tests a template with special chars in column value" + +**Error expected?** No + +**Input** +``` +{ + "countries": [{ + "Country Code": 1, + "Name":"Bolivia, Plurinational State of", + "ISO 3166": "BO" + }, { + "Country Code": 2, + "Name":"Ireland", + "ISO 3166": "IE" + }, { + "Country Code": 3, + "Name":"Saint Martin (French part)", + "ISO 3166": "MF" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.countries[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "country_info.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate ex:name + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.['Country Code']}/{$.Name}" + ] . + +``` + +**Output** +``` + "Bolivia, Plurinational State of" . + "Ireland" . + "Saint Martin (French part)" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010b-JSON/mapping.ttl index 60f6394e..1f9f4db6 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0010b-JSON/mapping.ttl @@ -12,10 +12,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate ex:name ]; rml:subjectMap [ - rml:template "http://example.com/{$.['Country Code']}/{Name}" + rml:template "http://example.com/{$.['Country Code']}/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/mapping.ttl deleted file mode 100644 index 4f3f48c8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "country_info" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/output.nq deleted file mode 100644 index c92a08b0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Bolivia, Plurinational State of" . - "Ireland" . - "Saint Martin (French part)" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/resource.sql deleted file mode 100644 index 7a7aa74f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-MySQL/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.country_info; - -CREATE TABLE country_info ( - `Country Code` INTEGER, - Name VARCHAR(100), - `ISO 3166` VARCHAR(10) -); -INSERT INTO country_info values ('1', 'Bolivia, Plurinational State of', 'BO'); -INSERT INTO country_info values ('2', 'Ireland', 'IE'); -INSERT INTO country_info values ('3', 'Saint Martin (French part)', 'MF'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/mapping.ttl deleted file mode 100644 index 195c6fb6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "country_info" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/output.nq deleted file mode 100644 index c92a08b0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Bolivia, Plurinational State of" . - "Ireland" . - "Saint Martin (French part)" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/resource.sql deleted file mode 100644 index 12f1652d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-PostgreSQL/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -DROP TABLE IF EXISTS country_info; - -CREATE TABLE country_info ( - "Country Code" INTEGER, - "Name" VARCHAR(100), - "ISO 3166" VARCHAR(10) -); -INSERT INTO country_info values ('1', 'Bolivia, Plurinational State of', 'BO'); -INSERT INTO country_info values ('2', 'Ireland', 'IE'); -INSERT INTO country_info values ('3', 'Saint Martin (French part)', 'MF'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/mapping.ttl deleted file mode 100644 index f925e352..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "country_info" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/output.nq deleted file mode 100644 index c92a08b0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Bolivia, Plurinational State of" . - "Ireland" . - "Saint Martin (French part)" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/resource.sql deleted file mode 100644 index 8c20c7bc..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-SQLServer/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS country_info; - -CREATE TABLE country_info ( - "Country Code" INTEGER, - "Name" VARCHAR(100), - "ISO 3166" VARCHAR(10) -); -INSERT INTO country_info values ('1', 'Bolivia, Plurinational State of', 'BO'); -INSERT INTO country_info values ('2', 'Ireland', 'IE'); -INSERT INTO country_info values ('3', 'Saint Martin (French part)', 'MF'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-XML/country_info.xml b/src/test/resources/new-test-cases/core/RMLTC0010b-XML/country_info.xml deleted file mode 100644 index c47aa6ab..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-XML/country_info.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - 1 - Bolivia, Plurinational State of - BO - - - 2 - Ireland - IE - - - 3 - Saint Martin (French part) - MF - - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010b-XML/mapping.ttl deleted file mode 100644 index 44a0ce2d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-XML/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/countries/country"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_info.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate ex:name - ]; - rml:subjectMap [ - rml:template "http://example.com/{CountryCode}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010b-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010b-XML/output.nq deleted file mode 100644 index c92a08b0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010b-XML/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "Bolivia, Plurinational State of" . - "Ireland" . - "Saint Martin (French part)" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-CSV/country_info.csv b/src/test/resources/new-test-cases/core/RMLTC0010c-CSV/country_info.csv deleted file mode 100644 index 2d42678e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-CSV/country_info.csv +++ /dev/null @@ -1,4 +0,0 @@ -Country Code,Name,ISO 3166 -1,"Bolivia, Plurinational State of",BO -2,Ireland,IE -3,Saint Martin (French part),MF diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010c-CSV/mapping.ttl deleted file mode 100644 index 715bbf2a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-CSV/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_info.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "\\{\\{\\{ {ISO 3166} \\}\\}\\}"; - rml:termType rml:Literal - ]; - rml:predicate ex:code - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010c-CSV/output.nq deleted file mode 100644 index 5c7e1080..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-CSV/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "{{{ BO }}}" . - "{{{ IE }}}" . - "{{{ MF }}}" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0010c-JSON/README.md new file mode 100644 index 00000000..67b87e59 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0010c-JSON/README.md @@ -0,0 +1,64 @@ +## RMLTC0010c-JSON + +**Title**: "Template with table columns with special chars and backslashes" + +**Description**: "Tests a template with special chars in reference value and backslash escapes in string templates" + +**Error expected?** No + +**Input** +``` +{ + "countries": [{ + "Country Code": 1, + "Name":"Bolivia, Plurinational State of", + "ISO 3166": "BO" + }, { + "Country Code": 2, + "Name":"Ireland", + "ISO 3166": "IE" + }, { + "Country Code": 3, + "Name":"Saint Martin (French part)", + "ISO 3166": "MF" + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.countries[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "country_info.json" + ] + ]; + rml:predicateObjectMap [ + rml:predicate ex:code; + rml:objectMap [ + rml:template "\\{\\{\\{ {$.['ISO 3166']} \\}\\}\\}"; + rml:termType rml:Literal + ] + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.['Country Code']}/{$.Name}" + ] . + +``` + +**Output** +``` + "{{{ BO }}}" . + "{{{ IE }}}" . + "{{{ MF }}}" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010c-JSON/mapping.ttl index 67e61d6e..fb1afc8d 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0010c-JSON/mapping.ttl @@ -18,5 +18,5 @@ ] ]; rml:subjectMap [ - rml:template "http://example.com/{$.['Country Code']}/{Name}" + rml:template "http://example.com/{$.['Country Code']}/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/mapping.ttl deleted file mode 100644 index 76afab7e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "country_info" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "\\{\\{\\{ {ISO 3166} \\}\\}\\}"; - rml:termType rml:Literal - ]; - rml:predicate ex:code - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/output.nq deleted file mode 100644 index 5c7e1080..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "{{{ BO }}}" . - "{{{ IE }}}" . - "{{{ MF }}}" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/resource.sql deleted file mode 100644 index 7a7aa74f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-MySQL/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.country_info; - -CREATE TABLE country_info ( - `Country Code` INTEGER, - Name VARCHAR(100), - `ISO 3166` VARCHAR(10) -); -INSERT INTO country_info values ('1', 'Bolivia, Plurinational State of', 'BO'); -INSERT INTO country_info values ('2', 'Ireland', 'IE'); -INSERT INTO country_info values ('3', 'Saint Martin (French part)', 'MF'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/mapping.ttl deleted file mode 100644 index 932ed73c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "country_info" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "\\{\\{\\{ {ISO 3166} \\}\\}\\}"; - rml:termType rml:Literal - ]; - rml:predicate ex:code - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/output.nq deleted file mode 100644 index 5c7e1080..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "{{{ BO }}}" . - "{{{ IE }}}" . - "{{{ MF }}}" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/resource.sql deleted file mode 100644 index 12f1652d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-PostgreSQL/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -DROP TABLE IF EXISTS country_info; - -CREATE TABLE country_info ( - "Country Code" INTEGER, - "Name" VARCHAR(100), - "ISO 3166" VARCHAR(10) -); -INSERT INTO country_info values ('1', 'Bolivia, Plurinational State of', 'BO'); -INSERT INTO country_info values ('2', 'Ireland', 'IE'); -INSERT INTO country_info values ('3', 'Saint Martin (French part)', 'MF'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/mapping.ttl deleted file mode 100644 index 8a72f22a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "country_info" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "\\{\\{\\{ {ISO 3166} \\}\\}\\}"; - rml:termType rml:Literal - ]; - rml:predicate ex:code - ]; - rml:subjectMap [ - rml:template "http://example.com/{Country Code}/{Name}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/output.nq deleted file mode 100644 index 5c7e1080..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "{{{ BO }}}" . - "{{{ IE }}}" . - "{{{ MF }}}" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/resource.sql deleted file mode 100644 index 8c20c7bc..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-SQLServer/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS country_info; - -CREATE TABLE country_info ( - "Country Code" INTEGER, - "Name" VARCHAR(100), - "ISO 3166" VARCHAR(10) -); -INSERT INTO country_info values ('1', 'Bolivia, Plurinational State of', 'BO'); -INSERT INTO country_info values ('2', 'Ireland', 'IE'); -INSERT INTO country_info values ('3', 'Saint Martin (French part)', 'MF'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-XML/country_info.xml b/src/test/resources/new-test-cases/core/RMLTC0010c-XML/country_info.xml deleted file mode 100644 index c47aa6ab..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-XML/country_info.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - 1 - Bolivia, Plurinational State of - BO - - - 2 - Ireland - IE - - - 3 - Saint Martin (French part) - MF - - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0010c-XML/mapping.ttl deleted file mode 100644 index 4ecb5718..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-XML/mapping.ttl +++ /dev/null @@ -1,22 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/countries/country"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_info.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "\\{\\{\\{ {ISO3166} \\}\\}\\}"; - rml:termType rml:Literal - ]; - rml:predicate ex:code - ]; - rml:subjectMap [ - rml:template "http://example.com/{CountryCode}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0010c-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0010c-XML/output.nq deleted file mode 100644 index 5c7e1080..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0010c-XML/output.nq +++ /dev/null @@ -1,4 +0,0 @@ - "{{{ BO }}}" . - "{{{ IE }}}" . - "{{{ MF }}}" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/mapping.ttl deleted file mode 100644 index b99f63b0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/mapping.ttl +++ /dev/null @@ -1,72 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Student.ID as ID, - Student.FirstName as FirstName, - Student.LastName as LastName, - Sport.Description as Description, - Sport.ID as Sport_ID - FROM Student,Sport,Student_Sport - WHERE Student.ID = Student_Sport.ID_Student - AND Sport.ID = Student_Sport.ID_Sport; - """; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate ex:lastName - ], [ - rml:objectMap [ - rml:template "http://example.com/{Sport_ID}/{Description}" - ]; - rml:predicate ex:plays - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{FirstName};{LastName}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT * FROM Sport; - """; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Description" - ]; - rml:predicate ex:description - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Description}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/output.nq deleted file mode 100644 index 8d0bda97..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/output.nq +++ /dev/null @@ -1,20 +0,0 @@ - "Tennis" . - "110"^^ . - . - "Williams" . - "Venus" . - "10"^^ . - "Football" . - "111"^^ . - . - "Villa" . - "David" . - "12"^^ . - "Formula1" . - "112"^^ . - "Alonso" . - "Fernando" . - "11"^^ . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/resource.sql deleted file mode 100644 index d5806a68..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011a-MySQL/resource.sql +++ /dev/null @@ -1,36 +0,0 @@ -USE test; -SET FOREIGN_KEY_CHECKS = 0; -DROP TABLE IF EXISTS test.Student_Sport; -DROP TABLE IF EXISTS test.Sport; -DROP TABLE IF EXISTS test.Student; -SET FOREIGN_KEY_CHECKS = 1; - -CREATE TABLE Student ( -ID integer PRIMARY KEY, -FirstName varchar(50), -LastName varchar(50) -); -CREATE TABLE Sport ( -ID integer PRIMARY KEY, -Description varchar(50) -); -CREATE TABLE Student_Sport ( -ID_Student integer, -ID_Sport integer, -PRIMARY KEY (ID_Student,ID_Sport), -FOREIGN KEY (ID_Student) REFERENCES Student(ID), -FOREIGN KEY (ID_Sport) REFERENCES Sport(ID) -); - -INSERT INTO Student (ID,FirstName,LastName) VALUES (10,'Venus', 'Williams'); -INSERT INTO Student (ID,FirstName,LastName) VALUES (11,'Fernando', 'Alonso'); -INSERT INTO Student (ID,FirstName,LastName) VALUES (12,'David', 'Villa'); - -INSERT INTO Sport (ID, Description) VALUES (110,'Tennis'); -INSERT INTO Sport (ID, Description) VALUES (111,'Football'); -INSERT INTO Sport (ID, Description) VALUES (112,'Formula1'); - -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (10,110); -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (11,111); -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (11,112); -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (12,111); diff --git a/src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/mapping.ttl deleted file mode 100644 index 00faefd1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,72 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Student.ID as ID, - Student.FirstName as FirstName, - Student.LastName as LastName, - Sport.Description as Description, - Sport.ID as Sport_ID - FROM Student,Sport,Student_Sport - WHERE Student.ID = Student_Sport.ID_Student - AND Sport.ID = Student_Sport.ID_Sport; - """; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "id" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "firstname" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "lastname" - ]; - rml:predicate ex:lastName - ], [ - rml:objectMap [ - rml:template "http://example.com/{sport_id}/{description}" - ]; - rml:predicate ex:plays - ]; - rml:subjectMap [ - rml:template "http://example.com/{id}/{firstname};{lastname}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT * FROM Sport ; - """; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "id" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "description" - ]; - rml:predicate ex:description - ]; - rml:subjectMap [ - rml:template "http://example.com/{id}/{description}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/output.nq deleted file mode 100644 index 8d0bda97..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/output.nq +++ /dev/null @@ -1,20 +0,0 @@ - "Tennis" . - "110"^^ . - . - "Williams" . - "Venus" . - "10"^^ . - "Football" . - "111"^^ . - . - "Villa" . - "David" . - "12"^^ . - "Formula1" . - "112"^^ . - "Alonso" . - "Fernando" . - "11"^^ . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/resource.sql deleted file mode 100644 index a256aa31..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011a-PostgreSQL/resource.sql +++ /dev/null @@ -1,33 +0,0 @@ -DROP TABLE IF EXISTS Student_Sport; -DROP TABLE IF EXISTS Sport CASCADE; -DROP TABLE IF EXISTS Student; - -CREATE TABLE Student ( -ID integer PRIMARY KEY, -FirstName varchar(50), -LastName varchar(50) -); -CREATE TABLE Sport ( -ID integer PRIMARY KEY, -Description varchar(50) -); -CREATE TABLE Student_Sport ( -ID_Student integer, -ID_Sport integer, -PRIMARY KEY (ID_Student,ID_Sport), -FOREIGN KEY (ID_Student) REFERENCES Student(ID), -FOREIGN KEY (ID_Sport) REFERENCES Sport(ID) -); - -INSERT INTO Student (ID,FirstName,LastName) VALUES (10,'Venus', 'Williams'); -INSERT INTO Student (ID,FirstName,LastName) VALUES (11,'Fernando', 'Alonso'); -INSERT INTO Student (ID,FirstName,LastName) VALUES (12,'David', 'Villa'); - -INSERT INTO Sport (ID, Description) VALUES (110,'Tennis'); -INSERT INTO Sport (ID, Description) VALUES (111,'Football'); -INSERT INTO Sport (ID, Description) VALUES (112,'Formula1'); - -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (10,110); -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (11,111); -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (11,112); -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (12,111); diff --git a/src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/mapping.ttl deleted file mode 100644 index 1f3daafb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/mapping.ttl +++ /dev/null @@ -1,72 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Student.ID as ID, - Student.FirstName as FirstName, - Student.LastName as LastName, - Sport.Description as Description, - Sport.ID as Sport_ID - FROM Student,Sport,Student_Sport - WHERE Student.ID = Student_Sport.ID_Student - AND Sport.ID = Student_Sport.ID_Sport; - """; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate ex:lastName - ], [ - rml:objectMap [ - rml:template "http://example.com/{Sport_ID}/{Description}" - ]; - rml:predicate ex:plays - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{FirstName};{LastName}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT * FROM Sport ; - """; - rml:referenceFormulation rml:SQL2008Query; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "Description" - ]; - rml:predicate ex:description - ]; - rml:subjectMap [ - rml:template "http://example.com/{ID}/{Description}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/output.nq deleted file mode 100644 index 8d0bda97..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/output.nq +++ /dev/null @@ -1,20 +0,0 @@ - "Tennis" . - "110"^^ . - . - "Williams" . - "Venus" . - "10"^^ . - "Football" . - "111"^^ . - . - "Villa" . - "David" . - "12"^^ . - "Formula1" . - "112"^^ . - "Alonso" . - "Fernando" . - "11"^^ . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/resource.sql deleted file mode 100644 index 0002c8ec..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011a-SQLServer/resource.sql +++ /dev/null @@ -1,33 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE Student ( -ID integer PRIMARY KEY, -FirstName varchar(50), -LastName varchar(50) -); -CREATE TABLE Sport ( -ID integer PRIMARY KEY, -Description varchar(50) -); -CREATE TABLE Student_Sport ( -ID_Student integer, -ID_Sport integer, -PRIMARY KEY (ID_Student,ID_Sport), -FOREIGN KEY (ID_Student) REFERENCES Student(ID), -FOREIGN KEY (ID_Sport) REFERENCES Sport(ID) -); - -INSERT INTO Student (ID,FirstName,LastName) VALUES (10,'Venus', 'Williams'); -INSERT INTO Student (ID,FirstName,LastName) VALUES (11,'Fernando', 'Alonso'); -INSERT INTO Student (ID,FirstName,LastName) VALUES (12,'David', 'Villa'); - -INSERT INTO Sport (ID, Description) VALUES (110,'Tennis'); -INSERT INTO Sport (ID, Description) VALUES (111,'Football'); -INSERT INTO Sport (ID, Description) VALUES (112,'Formula1'); - -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (10,110); -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (11,111); -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (11,112); -INSERT INTO Student_Sport (ID_Student, ID_Sport) VALUES (12,111); diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/mapping.ttl deleted file mode 100644 index c2f079c6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/mapping.ttl +++ /dev/null @@ -1,66 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student_sport.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "http://example.com/sport/{ID_Sport}" - ]; - rml:predicate ex:plays - ]; - rml:subjectMap [ - rml:template "http://example.com/student/{ID_Student}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate ex:lastName - ]; - rml:subjectMap [ - rml:template "http://example.com/student/{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "sport.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Description" - ]; - rml:predicate ex:description - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/sport/{ID}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/output.nq deleted file mode 100644 index d2759cec..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/output.nq +++ /dev/null @@ -1,17 +0,0 @@ - "Williams" . - "Venus" . - "Villa" . - "David" . - "Alonso" . - "Fernando" . - "Tennis" . - "110" . - "Football" . - "111" . - "Formula1" . - "112" . - . - . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/sport.csv b/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/sport.csv deleted file mode 100644 index 98446d06..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/sport.csv +++ /dev/null @@ -1,4 +0,0 @@ -ID,Description -110,Tennis -111,Football -112,Formula1 diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/student.csv deleted file mode 100644 index acf08c28..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/student.csv +++ /dev/null @@ -1,4 +0,0 @@ -ID,FirstName,LastName -10,Venus,Williams -11,Fernando,Alonso -12,David,Villa diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/student_sport.csv b/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/student_sport.csv deleted file mode 100644 index 381e9213..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-CSV/student_sport.csv +++ /dev/null @@ -1,5 +0,0 @@ -ID_Student,ID_Sport -10,110 -11,111 -11,112 -12,111 diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0011b-JSON/README.md new file mode 100644 index 00000000..10db450a --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0011b-JSON/README.md @@ -0,0 +1,141 @@ +## RMLTC0011b-JSON + +**Title**: "M to M relation, by using an additional Triples Map" + +**Description**: "Tests, M to M relations, by using an additional Triples Map" + +**Error expected?** No + +**Input** +``` +{ + "students": [ + {"ID":10, "FirstName":"Venus", "LastName":"Williams"}, + {"ID":11, "FirstName":"Fernando", "LastName":"Alonso"}, + {"ID":12, "FirstName":"David", "LastName":"Villa"} + ] +} + +``` + +**Input 1** +``` +{ + "sports": [ + {"ID":110, "Description":"Tennis"}, + {"ID":111, "Description":"Football"}, + {"ID":112, "Description":"Formula1"} + ] +} + +``` + +**Input 2** +``` +{ + "links": [ + {"ID_Student":10, "ID_Sport":110}, + {"ID_Student":11, "ID_Sport":111}, + {"ID_Student":11, "ID_Sport":112}, + {"ID_Student":12, "ID_Sport":111} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.links[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student_sport.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:template "http://example.com/sport/{$.ID_Sport}" + ]; + rml:predicate ex:plays + ]; + rml:subjectMap [ + rml:template "http://example.com/student/{$.ID_Student}" + ] . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.FirstName" + ]; + rml:predicate ex:firstName + ], [ + rml:objectMap [ + rml:reference "$.LastName" + ]; + rml:predicate ex:lastName + ]; + rml:subjectMap [ + rml:template "http://example.com/student/{$.ID}" + ] . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.sports[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "sport.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Description" + ]; + rml:predicate ex:description + ], [ + rml:objectMap [ + rml:reference "$.ID" + ]; + rml:predicate ex:id + ]; + rml:subjectMap [ + rml:template "http://example.com/sport/{$.ID}" + ] . + +``` + +**Output** +``` + "Williams" . + "Venus" . + "Villa" . + "David" . + "Alonso" . + "Fernando" . + "Tennis" . + "110" . + "Football" . + "111" . + "Formula1" . + "112" . + . + . + . + . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0011b-JSON/mapping.ttl index 17da3046..29ba8387 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0011b-JSON/mapping.ttl @@ -12,12 +12,12 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:template "http://example.com/sport/{ID_Sport}" + rml:template "http://example.com/sport/{$.ID_Sport}" ]; rml:predicate ex:plays ]; rml:subjectMap [ - rml:template "http://example.com/student/{ID_Student}" + rml:template "http://example.com/student/{$.ID_Student}" ] . a rml:TriplesMap; @@ -31,17 +31,17 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "FirstName" + rml:reference "$.FirstName" ]; rml:predicate ex:firstName ], [ rml:objectMap [ - rml:reference "LastName" + rml:reference "$.LastName" ]; rml:predicate ex:lastName ]; rml:subjectMap [ - rml:template "http://example.com/student/{ID}" + rml:template "http://example.com/student/{$.ID}" ] . a rml:TriplesMap; @@ -55,15 +55,15 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Description" + rml:reference "$.Description" ]; rml:predicate ex:description ], [ rml:objectMap [ - rml:reference "ID" + rml:reference "$.ID" ]; rml:predicate ex:id ]; rml:subjectMap [ - rml:template "http://example.com/sport/{ID}" + rml:template "http://example.com/sport/{$.ID}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/mapping.ttl deleted file mode 100644 index c2c696bc..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/mapping.ttl +++ /dev/null @@ -1,67 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student_sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "http://example.com/sport/{ID_Sport}" - ]; - rml:predicate ex:plays - ]; - rml:subjectMap [ - rml:template "http://example.com/student/{ID_Student}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate ex:lastName - ]; - rml:subjectMap [ - rml:template "http://example.com/student/{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Description" - ]; - rml:predicate ex:description - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/sport/{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/output.nq deleted file mode 100644 index 6a82565e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/output.nq +++ /dev/null @@ -1,17 +0,0 @@ - "Williams" . - "Venus" . - "Villa" . - "David" . - "Alonso" . - "Fernando" . - "Tennis" . - "110"^^ . - "Football" . - "111"^^ . - "Formula1" . - "112"^^ . - . - . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/resource.sql deleted file mode 100644 index 5e3ce10b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-MySQL/resource.sql +++ /dev/null @@ -1,34 +0,0 @@ -USE test; -SET FOREIGN_KEY_CHECKS = 0; -DROP TABLE IF EXISTS test.student_sport; -DROP TABLE IF EXISTS test.student; -DROP TABLE IF EXISTS test.sport; -SET FOREIGN_KEY_CHECKS = 1; - -CREATE TABLE sport ( - ID INTEGER, - Description VARCHAR(200) -); -INSERT INTO sport values ('110','Tennis'); -INSERT INTO sport values ('111','Football'); -INSERT INTO sport values ('112','Formula1'); - - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(200), - LastName VARCHAR(200) -); -INSERT INTO student values ('10','Venus','Williams'); -INSERT INTO student values ('11','Fernando','Alonso'); -INSERT INTO student values ('12','David','Villa'); - - -CREATE TABLE student_sport ( - ID_Student INTEGER, - ID_Sport INTEGER -); -INSERT INTO student_sport values ('10', '110'); -INSERT INTO student_sport values ('11','111'); -INSERT INTO student_sport values ('11','112'); -INSERT INTO student_sport values ('12','111'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/mapping.ttl deleted file mode 100644 index 6accd44c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,67 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student_sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "http://example.com/sport/{id_sport}" - ]; - rml:predicate ex:plays - ]; - rml:subjectMap [ - rml:template "http://example.com/student/{id_student}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "firstname" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "lastname" - ]; - rml:predicate ex:lastName - ]; - rml:subjectMap [ - rml:template "http://example.com/student/{id}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "description" - ]; - rml:predicate ex:description - ], [ - rml:objectMap [ - rml:reference "id" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/sport/{id}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/output.nq deleted file mode 100644 index 6a82565e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/output.nq +++ /dev/null @@ -1,17 +0,0 @@ - "Williams" . - "Venus" . - "Villa" . - "David" . - "Alonso" . - "Fernando" . - "Tennis" . - "110"^^ . - "Football" . - "111"^^ . - "Formula1" . - "112"^^ . - . - . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/resource.sql deleted file mode 100644 index acdc4aa1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-PostgreSQL/resource.sql +++ /dev/null @@ -1,31 +0,0 @@ -DROP TABLE IF EXISTS student_sport; -DROP TABLE IF EXISTS student; -DROP TABLE IF EXISTS sport; - -CREATE TABLE sport ( - ID INTEGER, - Description VARCHAR(200) -); -INSERT INTO sport values ('110','Tennis'); -INSERT INTO sport values ('111','Football'); -INSERT INTO sport values ('112','Formula1'); - - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(200), - LastName VARCHAR(200) -); -INSERT INTO student values ('10','Venus','Williams'); -INSERT INTO student values ('11','Fernando','Alonso'); -INSERT INTO student values ('12','David','Villa'); - - -CREATE TABLE student_sport ( - ID_Student INTEGER, - ID_Sport INTEGER -); -INSERT INTO student_sport values ('10', '110'); -INSERT INTO student_sport values ('11','111'); -INSERT INTO student_sport values ('11','112'); -INSERT INTO student_sport values ('12','111'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/mapping.ttl deleted file mode 100644 index 192a0032..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/mapping.ttl +++ /dev/null @@ -1,67 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student_sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "http://example.com/sport/{ID_Sport}" - ]; - rml:predicate ex:plays - ]; - rml:subjectMap [ - rml:template "http://example.com/student/{ID_Student}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate ex:lastName - ]; - rml:subjectMap [ - rml:template "http://example.com/student/{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "sport" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Description" - ]; - rml:predicate ex:description - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/sport/{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/output.nq deleted file mode 100644 index 6a82565e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/output.nq +++ /dev/null @@ -1,17 +0,0 @@ - "Williams" . - "Venus" . - "Villa" . - "David" . - "Alonso" . - "Fernando" . - "Tennis" . - "110"^^ . - "Football" . - "111"^^ . - "Formula1" . - "112"^^ . - . - . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/resource.sql deleted file mode 100644 index d7644c70..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-SQLServer/resource.sql +++ /dev/null @@ -1,32 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student_sport; -DROP TABLE IF EXISTS student; -DROP TABLE IF EXISTS sport; - -CREATE TABLE sport ( - ID INTEGER, - Description VARCHAR(200) -); -INSERT INTO sport values ('110','Tennis'); -INSERT INTO sport values ('111','Football'); -INSERT INTO sport values ('112','Formula1'); - - -CREATE TABLE student ( - ID INTEGER, - FirstName VARCHAR(200), - LastName VARCHAR(200) -); -INSERT INTO student values ('10','Venus','Williams'); -INSERT INTO student values ('11','Fernando','Alonso'); -INSERT INTO student values ('12','David','Villa'); - - -CREATE TABLE student_sport ( - ID_Student INTEGER, - ID_Sport INTEGER -); -INSERT INTO student_sport values ('10', '110'); -INSERT INTO student_sport values ('11','111'); -INSERT INTO student_sport values ('11','112'); -INSERT INTO student_sport values ('12','111'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0011b-XML/mapping.ttl deleted file mode 100644 index decc7ad2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-XML/mapping.ttl +++ /dev/null @@ -1,69 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/links/link"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student_sport.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "http://example.com/sport/{ID_Sport}" - ]; - rml:predicate ex:plays - ]; - rml:subjectMap [ - rml:template "http://example.com/student/{ID_Student}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/Students/Student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate ex:lastName - ]; - rml:subjectMap [ - rml:template "http://example.com/student/{ID}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/Sports/Sport"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "sport.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Description" - ]; - rml:predicate ex:description - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ]; - rml:subjectMap [ - rml:template "http://example.com/sport/{ID}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0011b-XML/output.nq deleted file mode 100644 index d2759cec..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-XML/output.nq +++ /dev/null @@ -1,17 +0,0 @@ - "Williams" . - "Venus" . - "Villa" . - "David" . - "Alonso" . - "Fernando" . - "Tennis" . - "110" . - "Football" . - "111" . - "Formula1" . - "112" . - . - . - . - . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-XML/sport.xml b/src/test/resources/new-test-cases/core/RMLTC0011b-XML/sport.xml deleted file mode 100644 index a44806ba..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-XML/sport.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - 110 - Tennis - - - 111 - Football - - - 112 - Formula1 - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0011b-XML/student.xml deleted file mode 100644 index 8d0a2ccd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-XML/student.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - 10 - Venus - Williams - - - 11 - Fernando - Alonso - - - 12 - David - Villa - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0011b-XML/student_sport.xml b/src/test/resources/new-test-cases/core/RMLTC0011b-XML/student_sport.xml deleted file mode 100644 index 3eeb2e92..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0011b-XML/student_sport.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - 10 - 110 - - - 11 - 111 - - - 11 - 112 - - - 12 - 111 - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012a-CSV/mapping.ttl deleted file mode 100644 index 6500c2d7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-CSV/mapping.ttl +++ /dev/null @@ -1,28 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "persons.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname}{lname}{amount}"; - rml:termType rml:BlankNode - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012a-CSV/output.nq deleted file mode 100644 index 7f9ce194..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-CSV/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:BobSmith30 "30" . -_:BobSmith30 "Bob Smith" . -_:SueJones20 "20" . -_:SueJones20 "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-CSV/persons.csv b/src/test/resources/new-test-cases/core/RMLTC0012a-CSV/persons.csv deleted file mode 100644 index 6d1909d9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-CSV/persons.csv +++ /dev/null @@ -1,4 +0,0 @@ -fname,lname,amount -Bob,Smith,30 -Sue,Jones,20 -Bob,Smith,30 diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0012a-JSON/README.md new file mode 100644 index 00000000..94dbd97c --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0012a-JSON/README.md @@ -0,0 +1,64 @@ +## RMLTC0012a-JSON + +**Title**: "Blank node referencing multiple columns" + +**Description**: "Tests that blank nodes can be generated by referencing multiple columns" + +**Error expected?** No + +**Input** +``` +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20}, + {"fname":"Bob","lname":"Smith","amount":30} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:template "{$.fname} {$.lname}"; + rml:termType rml:Literal + ]; + rml:predicate foaf:name + ], [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "{$.fname}{$.lname}{$.amount}"; + rml:termType rml:BlankNode + ] . + +``` + +**Output** +``` +_:BobSmith30 "30" . +_:BobSmith30 "Bob Smith" . +_:SueJones20 "20" . +_:SueJones20 "Sue Jones" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012a-JSON/mapping.ttl index 3db1ba6f..7caeb4cf 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0012a-JSON/mapping.ttl @@ -13,17 +13,17 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:template "{fname} {lname}"; + rml:template "{$.fname} {$.lname}"; rml:termType rml:Literal ]; rml:predicate foaf:name ], [ rml:objectMap [ - rml:reference "amount" + rml:reference "$.amount" ]; rml:predicate ex:amount ]; rml:subjectMap [ - rml:template "{fname}{lname}{amount}"; + rml:template "{$.fname}{$.lname}{$.amount}"; rml:termType rml:BlankNode ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/mapping.ttl deleted file mode 100644 index c038ff8d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/mapping.ttl +++ /dev/null @@ -1,33 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/output.nq deleted file mode 100644 index 10e4040a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:Bob_Smith_30 "30"^^ . -_:Bob_Smith_30 "Bob Smith" . -_:Sue_Jones_20 "20"^^ . -_:Sue_Jones_20 "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/resource.sql deleted file mode 100644 index 34ace06d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-MySQL/resource.sql +++ /dev/null @@ -1,19 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.IOUs; -DROP TABLE IF EXISTS test.Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount INT); -/* We replaced DOUBLE with INT, because the datatype conversion is different across databases, and this test case is not relevant to that aspect */ -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/mapping.ttl deleted file mode 100644 index e126236d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,33 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/output.nq deleted file mode 100644 index 10e4040a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:Bob_Smith_30 "30"^^ . -_:Bob_Smith_30 "Bob Smith" . -_:Sue_Jones_20 "20"^^ . -_:Sue_Jones_20 "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/resource.sql deleted file mode 100644 index af98da75..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-PostgreSQL/resource.sql +++ /dev/null @@ -1,17 +0,0 @@ -DROP TABLE IF EXISTS IOUs; -DROP TABLE IF EXISTS Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount INT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/mapping.ttl deleted file mode 100644 index 65c6092f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/mapping.ttl +++ /dev/null @@ -1,40 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - rml:logicalSource [ - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?fname ?lname ?amount - WHERE { - ?x foaf:firstName ?fname ; - foaf:lastName ?lname ; - ?amount . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname.value} {lname.value}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount.value" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname.value}{lname.value}{amount.value}"; - rml:termType rml:BlankNode - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/output.nq deleted file mode 100644 index 7f9ce194..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:BobSmith30 "30" . -_:BobSmith30 "Bob Smith" . -_:SueJones20 "20" . -_:SueJones20 "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/resource.ttl deleted file mode 100644 index 142bb85c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-SPARQL/resource.ttl +++ /dev/null @@ -1,15 +0,0 @@ -@prefix foaf: . -@prefix ns1: . - -[] ns1:amount "30" ; - foaf:firstName "Bob" ; - foaf:lastName "Smith" . - -[] ns1:amount "20" ; - foaf:firstName "Sue" ; - foaf:lastName "Jones" . - -[] ns1:amount "30" ; - foaf:firstName "Bob" ; - foaf:lastName "Smith" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/mapping.ttl deleted file mode 100644 index be494b3a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/mapping.ttl +++ /dev/null @@ -1,33 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/output.nq deleted file mode 100644 index 10e4040a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:Bob_Smith_30 "30"^^ . -_:Bob_Smith_30 "Bob Smith" . -_:Sue_Jones_20 "20"^^ . -_:Sue_Jones_20 "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/resource.sql deleted file mode 100644 index fecf09a9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-SQLServer/resource.sql +++ /dev/null @@ -1,19 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS IOUs; -DROP TABLE IF EXISTS Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount INT); -/* We replaced DOUBLE with INT, because the datatype conversion is different across databases, and this test case is not relevant to that aspect */ -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012a-XML/mapping.ttl deleted file mode 100644 index cedf2559..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-XML/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/Persons/Person"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "persons.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname}{lname}{amount}"; - rml:termType rml:BlankNode - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012a-XML/output.nq deleted file mode 100644 index 7f9ce194..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-XML/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:BobSmith30 "30" . -_:BobSmith30 "Bob Smith" . -_:SueJones20 "20" . -_:SueJones20 "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012a-XML/persons.xml b/src/test/resources/new-test-cases/core/RMLTC0012a-XML/persons.xml deleted file mode 100644 index 775d21eb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012a-XML/persons.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Bob - Smith - 30 - - - Sue - Jones - 20 - - - Bob - Smith - 30 - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/lives.csv b/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/lives.csv deleted file mode 100644 index d82b0a3a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/lives.csv +++ /dev/null @@ -1,4 +0,0 @@ -fname,lname,city -Bob,Smith,London -Sue,Jones,Madrid -Bob,Smith,London diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/output.nq deleted file mode 100644 index 0d556bbd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:BobSmith "London" . -_:BobSmith "Bob Smith" . -_:SueJones "Madrid" . -_:SueJones "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/persons.csv b/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/persons.csv deleted file mode 100644 index 6d1909d9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/persons.csv +++ /dev/null @@ -1,4 +0,0 @@ -fname,lname,amount -Bob,Smith,30 -Sue,Jones,20 -Bob,Smith,30 diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0012b-JSON/README.md new file mode 100644 index 00000000..2872ead4 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0012b-JSON/README.md @@ -0,0 +1,91 @@ +## RMLTC0012b-JSON + +**Title**: "Duplicate tuples generate same blank node" + +**Description**: "Tests that blank nodes with same identifier and in the same graph but generated by different logical rows are considered equivalent." + +**Error expected?** No + +**Input** +``` +{ + "lives": [ + {"fname":"Bob","lname":"Smith","city":"London"}, + {"fname":"Sue","lname":"Jones","city":"Madrid"}, + {"fname":"Bob","lname":"Smith","city":"London"} + ] +} + +``` + +**Input 1** +``` +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20}, + {"fname":"Bob","lname":"Smith","amount":30} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:template "{$.fname} {$.lname}"; + rml:termType rml:Literal + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:template "{$.fname}{$.lname}"; + rml:termType rml:BlankNode + ] . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.lives[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "lives.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.city" + ]; + rml:predicate ex:city + ]; + rml:subjectMap [ + rml:template "{$.fname}{$.lname}"; + rml:termType rml:BlankNode + ] . + +``` + +**Output** +``` +_:BobSmith "London" . +_:BobSmith "Bob Smith" . +_:SueJones "Madrid" . +_:SueJones "Sue Jones" . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012b-JSON/mapping.ttl index c0cf0407..82aa3b30 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0012b-JSON/mapping.ttl @@ -13,13 +13,13 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:template "{fname} {lname}"; + rml:template "{$.fname} {$.lname}"; rml:termType rml:Literal ]; rml:predicate foaf:name ]; rml:subjectMap [ - rml:template "{fname}{lname}"; + rml:template "{$.fname}{$.lname}"; rml:termType rml:BlankNode ] . @@ -34,11 +34,11 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "city" + rml:reference "$.city" ]; rml:predicate ex:city ]; rml:subjectMap [ - rml:template "{fname}{lname}"; + rml:template "{$.fname}{$.lname}"; rml:termType rml:BlankNode ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/mapping.ttl deleted file mode 100644 index 985da040..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/mapping.ttl +++ /dev/null @@ -1,45 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "persons" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "{fname}{lname}"; - rml:termType rml:BlankNode - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "lives" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "city" - ]; - rml:predicate ex:city - ]; - rml:subjectMap [ - rml:template "{fname}{lname}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/output.nq deleted file mode 100644 index 0d556bbd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:BobSmith "London" . -_:BobSmith "Bob Smith" . -_:SueJones "Madrid" . -_:SueJones "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/resource.sql deleted file mode 100644 index 29ad8c68..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-MySQL/resource.sql +++ /dev/null @@ -1,22 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.persons; - -CREATE TABLE persons ( - fname VARCHAR(200), - lname VARCHAR(200), - amount INTEGER -); -INSERT INTO persons values ('Bob','Smith','30'); -INSERT INTO persons values ('Sue','Jones','20'); -INSERT INTO persons values ('Bob','Smith','30'); - -DROP TABLE IF EXISTS test.lives; - -CREATE TABLE lives ( - fname VARCHAR(200), - lname VARCHAR(200), - city VARCHAR(200) -); -INSERT INTO lives values ('Bob','Smith','London'); -INSERT INTO lives values ('Sue','Jones','Madrid'); -INSERT INTO lives values ('Bob','Smith','London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/mapping.ttl deleted file mode 100644 index 4b2bc1b4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,45 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "persons" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "{fname}{lname}"; - rml:termType rml:BlankNode - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "lives" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "city" - ]; - rml:predicate ex:city - ]; - rml:subjectMap [ - rml:template "{fname}{lname}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password "password"; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/output.nq deleted file mode 100644 index 0d556bbd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:BobSmith "London" . -_:BobSmith "Bob Smith" . -_:SueJones "Madrid" . -_:SueJones "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/resource.sql deleted file mode 100644 index 2761bf68..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-PostgreSQL/resource.sql +++ /dev/null @@ -1,21 +0,0 @@ -DROP TABLE IF EXISTS persons; - -CREATE TABLE persons ( - "fname" VARCHAR(200), - "lname" VARCHAR(200), - "amount" INTEGER -); -INSERT INTO persons values ('Bob','Smith','30'); -INSERT INTO persons values ('Sue','Jones','20'); -INSERT INTO persons values ('Bob','Smith','30'); - -DROP TABLE IF EXISTS lives; - -CREATE TABLE lives ( - "fname" VARCHAR(200), - "lname" VARCHAR(200), - "city" VARCHAR(200) -); -INSERT INTO lives values ('Bob','Smith','London'); -INSERT INTO lives values ('Sue','Jones','Madrid'); -INSERT INTO lives values ('Bob','Smith','London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/mapping.ttl deleted file mode 100644 index f36eec4d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/mapping.ttl +++ /dev/null @@ -1,71 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?fname ?lname - WHERE { - ?x foaf:firstName ?fname ; - foaf:lastName ?lname ; - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname.value} {lname.value}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "{fname.value}{lname.value}"; - rml:termType rml:BlankNode - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?city ?fname ?lname - WHERE { - ?x foaf:firstName ?fname ; - foaf:lastName ?lname ; - ?city . - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "city.value" - ]; - rml:predicate ex:city - ]; - rml:subjectMap [ - rml:template "{fname.value}{lname.value}"; - rml:termType rml:BlankNode - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/output.nq deleted file mode 100644 index 0d556bbd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:BobSmith "London" . -_:BobSmith "Bob Smith" . -_:SueJones "Madrid" . -_:SueJones "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/resource1.ttl b/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/resource1.ttl deleted file mode 100644 index 142bb85c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/resource1.ttl +++ /dev/null @@ -1,15 +0,0 @@ -@prefix foaf: . -@prefix ns1: . - -[] ns1:amount "30" ; - foaf:firstName "Bob" ; - foaf:lastName "Smith" . - -[] ns1:amount "20" ; - foaf:firstName "Sue" ; - foaf:lastName "Jones" . - -[] ns1:amount "30" ; - foaf:firstName "Bob" ; - foaf:lastName "Smith" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/resource2.ttl b/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/resource2.ttl deleted file mode 100644 index 5991d1f7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-SPARQL/resource2.ttl +++ /dev/null @@ -1,15 +0,0 @@ -@prefix foaf: . -@prefix ns1: . - -[] ns1:city "London" ; - foaf:firstName "Bob" ; - foaf:lastName "Smith" . - -[] ns1:city "Madrid" ; - foaf:firstName "Sue" ; - foaf:lastName "Jones" . - -[] ns1:city "London" ; - foaf:firstName "Bob" ; - foaf:lastName "Smith" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/mapping.ttl deleted file mode 100644 index dea61d54..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/mapping.ttl +++ /dev/null @@ -1,45 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "persons" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:template "{fname}{lname}"; - rml:termType rml:BlankNode - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "lives" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "city" - ]; - rml:predicate ex:city - ]; - rml:subjectMap [ - rml:template "{fname}{lname}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/output.nq deleted file mode 100644 index 0d556bbd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:BobSmith "London" . -_:BobSmith "Bob Smith" . -_:SueJones "Madrid" . -_:SueJones "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/resource.sql deleted file mode 100644 index 03379770..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-SQLServer/resource.sql +++ /dev/null @@ -1,22 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS persons; - -CREATE TABLE persons ( - "fname" VARCHAR(200), - "lname" VARCHAR(200), - "amount" INTEGER -); -INSERT INTO persons values ('Bob','Smith','30'); -INSERT INTO persons values ('Sue','Jones','20'); -INSERT INTO persons values ('Bob','Smith','30'); - -DROP TABLE IF EXISTS lives; - -CREATE TABLE lives ( - "fname" VARCHAR(200), - "lname" VARCHAR(200), - "city" VARCHAR(200) -); -INSERT INTO lives values ('Bob','Smith','London'); -INSERT INTO lives values ('Sue','Jones','Madrid'); -INSERT INTO lives values ('Bob','Smith','London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-XML/lives.xml b/src/test/resources/new-test-cases/core/RMLTC0012b-XML/lives.xml deleted file mode 100644 index f72fc8be..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-XML/lives.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Bob - Smith - London - - - Sue - Jones - Madrid - - - Bob - Smith - London - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012b-XML/output.nq deleted file mode 100644 index 0d556bbd..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-XML/output.nq +++ /dev/null @@ -1,5 +0,0 @@ -_:BobSmith "London" . -_:BobSmith "Bob Smith" . -_:SueJones "Madrid" . -_:SueJones "Sue Jones" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-XML/persons.xml b/src/test/resources/new-test-cases/core/RMLTC0012b-XML/persons.xml deleted file mode 100644 index 775d21eb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-XML/persons.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Bob - Smith - 30 - - - Sue - Jones - 20 - - - Bob - Smith - 30 - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012c-CSV/mapping.ttl deleted file mode 100644 index 4bf23e7e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-CSV/mapping.ttl +++ /dev/null @@ -1,24 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "persons.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-CSV/persons.csv b/src/test/resources/new-test-cases/core/RMLTC0012c-CSV/persons.csv deleted file mode 100644 index 6d1909d9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-CSV/persons.csv +++ /dev/null @@ -1,4 +0,0 @@ -fname,lname,amount -Bob,Smith,30 -Sue,Jones,20 -Bob,Smith,30 diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0012c-JSON/README.md new file mode 100644 index 00000000..47befcf4 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0012c-JSON/README.md @@ -0,0 +1,50 @@ +## RMLTC0012c-JSON + +**Title**: "TriplesMap without subjectMap" + +**Description**: "Tests a RML with missing information, TriplesMap without subjectMap." + +**Error expected?** Yes + +**Input** +``` +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20}, + {"fname":"Bob","lname":"Smith","amount":30} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:template "{$.fname} {$.lname}"; + rml:termType rml:Literal + ]; + rml:predicate foaf:name + ], [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012c-JSON/mapping.ttl index 56cd3473..c458a4aa 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0012c-JSON/mapping.ttl @@ -13,13 +13,13 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:template "{fname} {lname}"; + rml:template "{$.fname} {$.lname}"; rml:termType rml:Literal ]; rml:predicate foaf:name ], [ rml:objectMap [ - rml:reference "amount" + rml:reference "$.amount" ]; rml:predicate ex:amount ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012c-MySQL/mapping.ttl deleted file mode 100644 index be18c725..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-MySQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012c-MySQL/resource.sql deleted file mode 100644 index 718792c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-MySQL/resource.sql +++ /dev/null @@ -1,19 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.IOUs; -DROP TABLE IF EXISTS test.Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); - -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012c-PostgreSQL/mapping.ttl deleted file mode 100644 index c09a8c04..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password "password"; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012c-PostgreSQL/resource.sql deleted file mode 100644 index 46e386f7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-PostgreSQL/resource.sql +++ /dev/null @@ -1,18 +0,0 @@ -DROP TABLE IF EXISTS IOUs; -DROP TABLE IF EXISTS Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); - -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012c-SQLServer/mapping.ttl deleted file mode 100644 index e6ae399d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-SQLServer/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012c-SQLServer/resource.sql deleted file mode 100644 index 8fab5e6f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-SQLServer/resource.sql +++ /dev/null @@ -1,19 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS IOUs; -DROP TABLE IF EXISTS Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); - -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-XML/persons.xml b/src/test/resources/new-test-cases/core/RMLTC0012c-XML/persons.xml deleted file mode 100644 index 411760a1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-XML/persons.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Bob - Smith> - 30 - - - Sue - Jones> - 20 - - - Bob - Smith> - 30 - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012d-CSV/mapping.ttl deleted file mode 100644 index ba324ed2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-CSV/mapping.ttl +++ /dev/null @@ -1,31 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "persons.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}"; - rml:termType rml:BlankNode - ], [ - rml:template "{amount}_{fname}_{lname}"; - rml:termType rml:BlankNode - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-CSV/persons.csv b/src/test/resources/new-test-cases/core/RMLTC0012d-CSV/persons.csv deleted file mode 100644 index 6d1909d9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-CSV/persons.csv +++ /dev/null @@ -1,4 +0,0 @@ -fname,lname,amount -Bob,Smith,30 -Sue,Jones,20 -Bob,Smith,30 diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0012d-JSON/README.md new file mode 100644 index 00000000..54555564 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0012d-JSON/README.md @@ -0,0 +1,57 @@ +## RMLTC0012d-JSON + +**Title**: "TriplesMap with two subjectMap" + +**Description**: "Tests a RML with wrong information, TriplesMap with two subjectMap." + +**Error expected?** Yes + +**Input** +``` +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20}, + {"fname":"Bob","lname":"Smith","amount":30} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:template "{$.fname} {$.lname}"; + rml:termType rml:Literal + ]; + rml:predicate foaf:name + ], [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "{$.fname}_{$.lname}_{$.amount}"; + rml:termType rml:BlankNode + ], [ + rml:template "{$.amount}_{$.fname}_{$.lname}"; + rml:termType rml:BlankNode + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012d-JSON/mapping.ttl index 442cb705..a8baa088 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0012d-JSON/mapping.ttl @@ -13,20 +13,20 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:template "{fname} {lname}"; + rml:template "{$.fname} {$.lname}"; rml:termType rml:Literal ]; rml:predicate foaf:name ], [ rml:objectMap [ - rml:reference "amount" + rml:reference "$.amount" ]; rml:predicate ex:amount ]; rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}"; + rml:template "{$.fname}_{$.lname}_{$.amount}"; rml:termType rml:BlankNode ], [ - rml:template "{amount}_{fname}_{lname}"; + rml:template "{$.amount}_{$.fname}_{$.lname}"; rml:termType rml:BlankNode ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012d-MySQL/mapping.ttl deleted file mode 100644 index cc24cc7d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-MySQL/mapping.ttl +++ /dev/null @@ -1,27 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}" - ], [ - rml:template "{amount}_{fname}_{lname}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012d-MySQL/resource.sql deleted file mode 100644 index 718792c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-MySQL/resource.sql +++ /dev/null @@ -1,19 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.IOUs; -DROP TABLE IF EXISTS test.Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); - -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012d-PostgreSQL/mapping.ttl deleted file mode 100644 index c8aa2a07..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,27 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}" - ], [ - rml:template "{amount}_{fname}_{lname}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password "password"; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012d-PostgreSQL/resource.sql deleted file mode 100644 index 46e386f7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-PostgreSQL/resource.sql +++ /dev/null @@ -1,18 +0,0 @@ -DROP TABLE IF EXISTS IOUs; -DROP TABLE IF EXISTS Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); - -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012d-SQLServer/mapping.ttl deleted file mode 100644 index 3d923cad..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-SQLServer/mapping.ttl +++ /dev/null @@ -1,27 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}" - ], [ - rml:template "{amount}_{fname}_{lname}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012d-SQLServer/resource.sql deleted file mode 100644 index 8fab5e6f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-SQLServer/resource.sql +++ /dev/null @@ -1,19 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS IOUs; -DROP TABLE IF EXISTS Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); - -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012d-XML/mapping.ttl deleted file mode 100644 index 9af658b5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-XML/mapping.ttl +++ /dev/null @@ -1,32 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/Persons/Person"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "persons.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate ex:amount - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}"; - rml:termType rml:BlankNode - ], [ - rml:template "{amount}_{fname}_{lname}"; - rml:termType rml:BlankNode - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012d-XML/persons.xml b/src/test/resources/new-test-cases/core/RMLTC0012d-XML/persons.xml deleted file mode 100644 index 775d21eb..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012d-XML/persons.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Bob - Smith - 30 - - - Sue - Jones - 20 - - - Bob - Smith - 30 - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/mapping.ttl deleted file mode 100644 index 9f3c7ca4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/mapping.ttl +++ /dev/null @@ -1,69 +0,0 @@ -@prefix d2rq: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:object ; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "fname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "lname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}"; - rml:termType rml:BlankNode - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Lives" - ]; - rml:predicateObjectMap [ - rml:object ; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "fname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "lname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "city" - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{city}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/output.nq deleted file mode 100644 index a09639da..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/output.nq +++ /dev/null @@ -1,18 +0,0 @@ -_:Bob_Smith_30 . -_:Bob_Smith_30 "Bob" . -_:Bob_Smith_30 "Smith" . -_:Bob_Smith_30 "3.0E1"^^ . -_:Sue_Jones_20 . -_:Sue_Jones_20 "Sue" . -_:Sue_Jones_20 "Jones" . -_:Sue_Jones_20 "2.0E1"^^ . -_:Bob_Smith_London . -_:Bob_Smith_London "Bob" . -_:Bob_Smith_London "Smith" . -_:Bob_Smith_London "London" . -_:Sue_Jones_Madrid . -_:Sue_Jones_Madrid "Sue" . -_:Sue_Jones_Madrid "Jones" . -_:Sue_Jones_Madrid "Madrid" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/resource.sql deleted file mode 100644 index 718792c7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012e-MySQL/resource.sql +++ /dev/null @@ -1,19 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.IOUs; -DROP TABLE IF EXISTS test.Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); - -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/mapping.ttl deleted file mode 100644 index b143e99e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,69 +0,0 @@ -@prefix d2rq: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:object ; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "fname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "lname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}"; - rml:termType rml:BlankNode - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Lives" - ]; - rml:predicateObjectMap [ - rml:object ; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "fname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "lname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "city" - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{city}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/output.nq deleted file mode 100644 index a09639da..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/output.nq +++ /dev/null @@ -1,18 +0,0 @@ -_:Bob_Smith_30 . -_:Bob_Smith_30 "Bob" . -_:Bob_Smith_30 "Smith" . -_:Bob_Smith_30 "3.0E1"^^ . -_:Sue_Jones_20 . -_:Sue_Jones_20 "Sue" . -_:Sue_Jones_20 "Jones" . -_:Sue_Jones_20 "2.0E1"^^ . -_:Bob_Smith_London . -_:Bob_Smith_London "Bob" . -_:Bob_Smith_London "Smith" . -_:Bob_Smith_London "London" . -_:Sue_Jones_Madrid . -_:Sue_Jones_Madrid "Sue" . -_:Sue_Jones_Madrid "Jones" . -_:Sue_Jones_Madrid "Madrid" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/resource.sql deleted file mode 100644 index 46e386f7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012e-PostgreSQL/resource.sql +++ /dev/null @@ -1,18 +0,0 @@ -DROP TABLE IF EXISTS IOUs; -DROP TABLE IF EXISTS Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); - -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/mapping.ttl deleted file mode 100644 index 3c5aa10a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/mapping.ttl +++ /dev/null @@ -1,69 +0,0 @@ -@prefix d2rq: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "IOUs" - ]; - rml:predicateObjectMap [ - rml:object ; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "fname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "lname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "amount" - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{amount}"; - rml:termType rml:BlankNode - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Lives" - ]; - rml:predicateObjectMap [ - rml:object ; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "fname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "lname" - ]; - rml:predicate - ], [ - rml:objectMap [ - rml:reference "city" - ]; - rml:predicate - ]; - rml:subjectMap [ - rml:template "{fname}_{lname}_{city}"; - rml:termType rml:BlankNode - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/output.nq deleted file mode 100644 index a09639da..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/output.nq +++ /dev/null @@ -1,18 +0,0 @@ -_:Bob_Smith_30 . -_:Bob_Smith_30 "Bob" . -_:Bob_Smith_30 "Smith" . -_:Bob_Smith_30 "3.0E1"^^ . -_:Sue_Jones_20 . -_:Sue_Jones_20 "Sue" . -_:Sue_Jones_20 "Jones" . -_:Sue_Jones_20 "2.0E1"^^ . -_:Bob_Smith_London . -_:Bob_Smith_London "Bob" . -_:Bob_Smith_London "Smith" . -_:Bob_Smith_London "London" . -_:Sue_Jones_Madrid . -_:Sue_Jones_Madrid "Sue" . -_:Sue_Jones_Madrid "Jones" . -_:Sue_Jones_Madrid "Madrid" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/resource.sql deleted file mode 100644 index 8fab5e6f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0012e-SQLServer/resource.sql +++ /dev/null @@ -1,19 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS IOUs; -DROP TABLE IF EXISTS Lives; - -CREATE TABLE IOUs ( - fname VARCHAR(20), - lname VARCHAR(20), - amount FLOAT); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Sue', 'Jones', 20); -INSERT INTO IOUs (fname, lname, amount) VALUES ('Bob', 'Smith', 30); - -CREATE TABLE Lives ( - fname VARCHAR(20), - lname VARCHAR(20), - city VARCHAR(20)); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); -INSERT INTO Lives (fname, lname, city) VALUES ('Sue', 'Jones', 'Madrid'); -INSERT INTO Lives (fname, lname, city) VALUES ('Bob', 'Smith', 'London'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0013a-JSON/README.md new file mode 100644 index 00000000..e8a3ee14 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0013a-JSON/README.md @@ -0,0 +1,51 @@ +## RMLTC0013a-JSON + +**Title**: "Null value in JSON file" + +**Description**: "Tests if null values in JSON files are handled correctly." + +**Error expected?** No + +**Input** +``` +{ + "persons": [ + {"ID":"1","Name":"Alice","DateOfBirth":null}, + {"ID":"2","Name":"Bob","DateOfBirth":"September, 2010"} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.DateOfBirth" + ]; + rml:predicate ex:BirthDay + ]; + rml:subjectMap [ + rml:template "http://example.com/Person/{$.ID}/{$.Name}/{$.DateOfBirth}" + ] . + +``` + +**Output** +``` + "September, 2010" . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0013a-JSON/mapping.ttl index 92a69509..c1bd8ddc 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0013a-JSON/mapping.ttl @@ -12,10 +12,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "DateOfBirth" + rml:reference "$.DateOfBirth" ]; rml:predicate ex:BirthDay ]; rml:subjectMap [ - rml:template "http://example.com/Person/{ID}/{Name}/{DateOfBirth}" + rml:template "http://example.com/Person/{$.ID}/{$.Name}/{$.DateOfBirth}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/mapping.ttl deleted file mode 100644 index eadfe810..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Person" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "DateOfBirth" - ]; - rml:predicate ex:BirthDay - ]; - rml:subjectMap [ - rml:template "http://example.com/Person/{ID}/{Name}/{DateOfBirth}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/output.nq deleted file mode 100644 index 4b1bf1fa..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "September, 2010" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/resource.sql deleted file mode 100644 index 616495e9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-MySQL/resource.sql +++ /dev/null @@ -1,12 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Person; - -CREATE TABLE Person ( -ID integer, -Name varchar(50), -DateOfBirth varchar(50), -PRIMARY KEY (ID) -); -INSERT INTO Person (ID, Name, DateOfBirth) VALUES (1,'Alice', NULL); -INSERT INTO Person (ID, Name, DateOfBirth) VALUES (2,'Bob', 'September, 2010'); - diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/mapping.ttl deleted file mode 100644 index 9b0ca790..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Person" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "DateOfBirth" - ]; - rml:predicate ex:BirthDay - ]; - rml:subjectMap [ - rml:template "http://example.com/Person/{ID}/{Name}/{DateOfBirth}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password "password"; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/note.md b/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/note.md deleted file mode 100644 index 026df640..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/note.md +++ /dev/null @@ -1,3 +0,0 @@ -## Change note - -Changed resource.sql to use quotes for column identifiers to use case-sensitive references. diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/output.nq deleted file mode 100644 index 4b1bf1fa..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "September, 2010" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/resource.sql deleted file mode 100644 index 03a372d2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-PostgreSQL/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -DROP TABLE IF EXISTS Person; - -CREATE TABLE Person ( -"ID" integer, -"Name" varchar(50), -"DateOfBirth" varchar(50), -PRIMARY KEY ("ID") -); -INSERT INTO Person ("ID", "Name", "DateOfBirth") VALUES (1,'Alice', NULL); -INSERT INTO Person ("ID", "Name", "DateOfBirth") VALUES (2,'Bob', 'September, 2010'); - diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/mapping.ttl deleted file mode 100644 index f198ea56..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Person" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "DateOfBirth" - ]; - rml:predicate ex:BirthDay - ]; - rml:subjectMap [ - rml:template "http://example.com/Person/{ID}/{Name}/{DateOfBirth}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/output.nq deleted file mode 100644 index 4b1bf1fa..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/output.nq +++ /dev/null @@ -1,3 +0,0 @@ - "September, 2010" . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/resource.sql deleted file mode 100644 index dd278769..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0013a-SQLServer/resource.sql +++ /dev/null @@ -1,12 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Person; - -CREATE TABLE Person ( -ID integer, -Name varchar(50), -DateOfBirth varchar(50), -PRIMARY KEY (ID) -); -INSERT INTO Person (ID, Name, DateOfBirth) VALUES (1,'Alice', NULL); -INSERT INTO Person (ID, Name, DateOfBirth) VALUES (2,'Bob', 'September, 2010'); - diff --git a/src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/mapping.ttl deleted file mode 100644 index 7377f7b4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/mapping.ttl +++ /dev/null @@ -1,31 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT EMP.*, (CASE job - WHEN 'CLERK' THEN 'general-office' - WHEN 'NIGHTGUARD' THEN 'security' - WHEN 'ENGINEER' THEN 'engineering' - END) AS ROLE FROM EMP - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "http://data.example.com/roles/{ROLE}" - ]; - rml:predicate ex:role - ]; - rml:subjectMap [ - rml:template "http://data.example.com/employee/{empno}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/output.nq deleted file mode 100644 index a1025c8a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/resource.sql deleted file mode 100644 index bd5eb080..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0014d-MySQL/resource.sql +++ /dev/null @@ -1,25 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.DEPT; -DROP TABLE IF EXISTS test.EMP; -DROP TABLE IF EXISTS test.LIKES; - -CREATE TABLE DEPT ( - deptno INTEGER UNIQUE, - dname VARCHAR(30), - loc VARCHAR(100)); -INSERT INTO DEPT (deptno, dname, loc) VALUES (10, 'APPSERVER', 'NEW YORK'); - -CREATE TABLE EMP ( - empno INTEGER PRIMARY KEY, - ename VARCHAR(100), - job VARCHAR(30), - deptno INTEGER REFERENCES DEPT (deptno), - etype VARCHAR(30)); -INSERT INTO EMP (empno, ename, job, deptno, etype ) VALUES (7369, 'SMITH', 'CLERK', 10, 'PART_TIME'); - -CREATE TABLE LIKES ( - id INTEGER, - likeType VARCHAR(30), - likedObj VARCHAR(100)); -INSERT INTO LIKES (id, likeType, likedObj) VALUES (7369, 'Playing', 'Soccer'); -INSERT INTO LIKES (id, likeType, likedObj) VALUES (7369, 'Watching', 'Basketball'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/mapping.ttl deleted file mode 100644 index 27108093..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,31 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT EMP.*, (CASE job - WHEN 'CLERK' THEN 'general-office' - WHEN 'NIGHTGUARD' THEN 'security' - WHEN 'ENGINEER' THEN 'engineering' - END) AS ROLE FROM EMP - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "http://data.example.com/roles/{role}" - ]; - rml:predicate ex:role - ]; - rml:subjectMap [ - rml:template "http://data.example.com/employee/{empno}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/output.nq deleted file mode 100644 index a1025c8a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/output.nq +++ /dev/null @@ -1 +0,0 @@ - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/resource.sql deleted file mode 100644 index 84570225..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0014d-PostgreSQL/resource.sql +++ /dev/null @@ -1,24 +0,0 @@ -DROP TABLE IF EXISTS LIKES; -DROP TABLE IF EXISTS EMP; -DROP TABLE IF EXISTS DEPT; - -CREATE TABLE DEPT ( - deptno INTEGER UNIQUE, - dname VARCHAR(30), - loc VARCHAR(100)); -INSERT INTO DEPT (deptno, dname, loc) VALUES (10, 'APPSERVER', 'NEW YORK'); - -CREATE TABLE EMP ( - empno INTEGER PRIMARY KEY, - ename VARCHAR(100), - job VARCHAR(30), - deptno INTEGER REFERENCES DEPT (deptno), - etype VARCHAR(30)); -INSERT INTO EMP (empno, ename, job, deptno, etype ) VALUES (7369, 'SMITH', 'CLERK', 10, 'PART_TIME'); - -CREATE TABLE LIKES ( - id INTEGER, - likeType VARCHAR(30), - likedObj VARCHAR(100)); -INSERT INTO LIKES (id, likeType, likedObj) VALUES (7369, 'Playing', 'Soccer'); -INSERT INTO LIKES (id, likeType, likedObj) VALUES (7369, 'Watching', 'Basketball'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/mapping.ttl deleted file mode 100644 index 64f797ae..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/mapping.ttl +++ /dev/null @@ -1,31 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT EMP.*, (CASE job - WHEN 'CLERK' THEN 'general-office' - WHEN 'NIGHTGUARD' THEN 'security' - WHEN 'ENGINEER' THEN 'engineering' - END) AS ROLE FROM EMP - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:template "http://data.example.com/roles/{ROLE}" - ]; - rml:predicate ex:role - ]; - rml:subjectMap [ - rml:template "http://data.example.com/employee/{empno}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/output.nq deleted file mode 100644 index a1025c8a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/output.nq +++ /dev/null @@ -1 +0,0 @@ - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/resource.sql deleted file mode 100644 index d39327c0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0014d-SQLServer/resource.sql +++ /dev/null @@ -1,24 +0,0 @@ -USE TestDB; -EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -EXEC sp_msforeachtable 'DROP TABLE ?' - -CREATE TABLE DEPT ( - deptno INTEGER UNIQUE, - dname VARCHAR(30), - loc VARCHAR(100)); -INSERT INTO DEPT (deptno, dname, loc) VALUES (10, 'APPSERVER', 'NEW YORK'); - -CREATE TABLE EMP ( - empno INTEGER PRIMARY KEY, - ename VARCHAR(100), - job VARCHAR(30), - deptno INTEGER REFERENCES DEPT (deptno), - etype VARCHAR(30)); -INSERT INTO EMP (empno, ename, job, deptno, etype ) VALUES (7369, 'SMITH', 'CLERK', 10, 'PART_TIME'); - -CREATE TABLE LIKES ( - id INTEGER, - likeType VARCHAR(30), - likedObj VARCHAR(100)); -INSERT INTO LIKES (id, likeType, likedObj) VALUES (7369, 'Playing', 'Soccer'); -INSERT INTO LIKES (id, likeType, likedObj) VALUES (7369, 'Watching', 'Basketball'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/country_en.csv b/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/country_en.csv deleted file mode 100644 index 4dd0aa39..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/country_en.csv +++ /dev/null @@ -1,3 +0,0 @@ -Code,Name -BO,"Bolivia, Plurinational State of" -IE,Ireland diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/country_es.csv b/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/country_es.csv deleted file mode 100644 index 63d50851..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/country_es.csv +++ /dev/null @@ -1,3 +0,0 @@ -Code,Name -BO,"Estado Plurinacional de Bolivia" -IE,Irlanda diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/mapping.ttl deleted file mode 100644 index 61d558f6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/mapping.ttl +++ /dev/null @@ -1,40 +0,0 @@ -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_en.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "en"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_es.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "es"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/output.nq deleted file mode 100644 index a80dd6a3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-CSV/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - "Bolivia, Plurinational State of"@en . - "Estado Plurinacional de Bolivia"@es . - "Ireland"@en . - "Irlanda"@es . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0015a-JSON/README.md new file mode 100644 index 00000000..4fa5e58a --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0015a-JSON/README.md @@ -0,0 +1,77 @@ +## RMLTC0015a-JSON + +**Title**: "Generation of language tags from a table with language information" + +**Description**: "Generation of language tags from a table with language information" + +**Error expected?** No + +**Input** +``` +{ + "countries": [ + {"Code": "BO", "Name": "Estado Plurinacional de Bolivia"}, + {"Code": "IE", "Name": "Irlanda"} + ] +} + +``` + +**Mapping** +``` +@prefix rdfs: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.countries[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "country_en.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:language "en"; + rml:reference "$.Name" + ]; + rml:predicate rdfs:label + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.Code}" + ] . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.countries[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "country_es.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:language "es"; + rml:reference "$.Name" + ]; + rml:predicate rdfs:label + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.Code}" + ] . + +``` + +**Output** +``` + "Bolivia, Plurinational State of"@en . + "Estado Plurinacional de Bolivia"@es . + "Ireland"@en . + "Irlanda"@es . + + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015a-JSON/mapping.ttl index a9e90bfb..4c3a5035 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0015a-JSON/mapping.ttl @@ -13,12 +13,12 @@ rml:predicateObjectMap [ rml:objectMap [ rml:language "en"; - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate rdfs:label ]; rml:subjectMap [ - rml:template "http://example.com/{Code}" + rml:template "http://example.com/{$.Code}" ] . a rml:TriplesMap; @@ -33,10 +33,10 @@ rml:predicateObjectMap [ rml:objectMap [ rml:language "es"; - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate rdfs:label ]; rml:subjectMap [ - rml:template "http://example.com/{Code}" + rml:template "http://example.com/{$.Code}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/mapping.ttl deleted file mode 100644 index a09b514a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/mapping.ttl +++ /dev/null @@ -1,51 +0,0 @@ -@prefix d2rq: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'EN'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "en"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'ES'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "es"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/output.nq deleted file mode 100644 index a80dd6a3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - "Bolivia, Plurinational State of"@en . - "Estado Plurinacional de Bolivia"@es . - "Ireland"@en . - "Irlanda"@es . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/resource.sql deleted file mode 100644 index 52a4c88e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-MySQL/resource.sql +++ /dev/null @@ -1,13 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Country; - -CREATE TABLE Country ( - Code VARCHAR(2), - Name VARCHAR(100), - Lan VARCHAR(10), - PRIMARY KEY (Code,Lan) -); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Bolivia, Plurinational State of', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Estado Plurinacional de Bolivia', 'ES'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Ireland', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Irlanda', 'ES'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/mapping.ttl deleted file mode 100644 index a25b190b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,51 +0,0 @@ -@prefix d2rq: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'EN'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "en"; - rml:reference "name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{code}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'ES'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "es"; - rml:reference "name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{code}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/output.nq deleted file mode 100644 index a80dd6a3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - "Bolivia, Plurinational State of"@en . - "Estado Plurinacional de Bolivia"@es . - "Ireland"@en . - "Irlanda"@es . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/resource.sql deleted file mode 100644 index 5640c8f8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-PostgreSQL/resource.sql +++ /dev/null @@ -1,12 +0,0 @@ -DROP TABLE IF EXISTS Country; - -CREATE TABLE Country ( - Code VARCHAR(2), - Name VARCHAR(100), - Lan VARCHAR(10), - PRIMARY KEY (Code,Lan) -); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Bolivia, Plurinational State of', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Estado Plurinacional de Bolivia', 'ES'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Ireland', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Irlanda', 'ES'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/mapping.ttl deleted file mode 100644 index ceca9dad..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/mapping.ttl +++ /dev/null @@ -1,51 +0,0 @@ -@prefix d2rq: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'EN'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "en"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT \"Code\", \"Name\", \"Lan\" - FROM \"Country\" - WHERE \"Lan\" = 'ES'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "es"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/output.nq deleted file mode 100644 index a80dd6a3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - "Bolivia, Plurinational State of"@en . - "Estado Plurinacional de Bolivia"@es . - "Ireland"@en . - "Irlanda"@es . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/resource.sql deleted file mode 100644 index a0a684ef..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-SQLServer/resource.sql +++ /dev/null @@ -1,13 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Country; - -CREATE TABLE Country ( - Code VARCHAR(2), - Name VARCHAR(100), - Lan VARCHAR(10), - PRIMARY KEY (Code,Lan) -); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Bolivia, Plurinational State of', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Estado Plurinacional de Bolivia', 'ES'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Ireland', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Irlanda', 'ES'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-XML/country_en.xml b/src/test/resources/new-test-cases/core/RMLTC0015a-XML/country_en.xml deleted file mode 100644 index be754f17..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-XML/country_en.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - BOBolivia, Plurinational State of - IEIreland - diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-XML/country_es.xml b/src/test/resources/new-test-cases/core/RMLTC0015a-XML/country_es.xml deleted file mode 100644 index 62bb8e4a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-XML/country_es.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - BOEstado Plurinacional de Bolivia - IEIrlanda - diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015a-XML/mapping.ttl deleted file mode 100644 index 68f671ee..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-XML/mapping.ttl +++ /dev/null @@ -1,42 +0,0 @@ -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/countries/country"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_en.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "en"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/countries/country"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_es.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "es"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0015a-XML/output.nq deleted file mode 100644 index a80dd6a3..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015a-XML/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - "Bolivia, Plurinational State of"@en . - "Estado Plurinacional de Bolivia"@es . - "Ireland"@en . - "Irlanda"@es . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-CSV/country_en.csv b/src/test/resources/new-test-cases/core/RMLTC0015b-CSV/country_en.csv deleted file mode 100644 index 4dd0aa39..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-CSV/country_en.csv +++ /dev/null @@ -1,3 +0,0 @@ -Code,Name -BO,"Bolivia, Plurinational State of" -IE,Ireland diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-CSV/country_es.csv b/src/test/resources/new-test-cases/core/RMLTC0015b-CSV/country_es.csv deleted file mode 100644 index 63d50851..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-CSV/country_es.csv +++ /dev/null @@ -1,3 +0,0 @@ -Code,Name -BO,"Estado Plurinacional de Bolivia" -IE,Irlanda diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015b-CSV/mapping.ttl deleted file mode 100644 index 247e382b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-CSV/mapping.ttl +++ /dev/null @@ -1,40 +0,0 @@ -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_en.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "a-english"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_es.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "a-spanish"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0015b-JSON/README.md new file mode 100644 index 00000000..728ee730 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0015b-JSON/README.md @@ -0,0 +1,66 @@ +## RMLTC0015b-JSON + +**Title**: "Generation of language tags from a table with language information, and a term map with invalid rml:language value" + +**Description**: "Tests a term map with an invalid rml:language value, which is an error" + +**Error expected?** Yes + +**Input** +``` +{ + "countries": [ + {"Code": "BO", "Name": "Estado Plurinacional de Bolivia"}, + {"Code": "IE", "Name": "Irlanda"} + ] +} + +``` + +**Mapping** +``` +@prefix rdfs: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.countries[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "country_en.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:language "a-english"; + rml:reference "$.Name" + ]; + rml:predicate rdfs:label + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.Code}" + ] . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.countries[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "country_en.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:language "a-spanish"; + rml:reference "$.Name" + ]; + rml:predicate rdfs:label + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.Code}" + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015b-JSON/mapping.ttl index 168ef9d5..6f485f7d 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0015b-JSON/mapping.ttl @@ -13,12 +13,12 @@ rml:predicateObjectMap [ rml:objectMap [ rml:language "a-english"; - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate rdfs:label ]; rml:subjectMap [ - rml:template "http://example.com/{Code}" + rml:template "http://example.com/{$.Code}" ] . a rml:TriplesMap; @@ -33,10 +33,10 @@ rml:predicateObjectMap [ rml:objectMap [ rml:language "a-spanish"; - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate rdfs:label ]; rml:subjectMap [ - rml:template "http://example.com/{Code}" + rml:template "http://example.com/{$.Code}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015b-MySQL/mapping.ttl deleted file mode 100644 index ec8847cf..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-MySQL/mapping.ttl +++ /dev/null @@ -1,51 +0,0 @@ -@prefix d2rq: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'EN'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "a-english"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'EN'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "a-spanish"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0015b-MySQL/resource.sql deleted file mode 100644 index 52a4c88e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-MySQL/resource.sql +++ /dev/null @@ -1,13 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Country; - -CREATE TABLE Country ( - Code VARCHAR(2), - Name VARCHAR(100), - Lan VARCHAR(10), - PRIMARY KEY (Code,Lan) -); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Bolivia, Plurinational State of', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Estado Plurinacional de Bolivia', 'ES'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Ireland', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Irlanda', 'ES'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015b-PostgreSQL/mapping.ttl deleted file mode 100644 index f0def09e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,51 +0,0 @@ -@prefix d2rq: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'EN'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "a-english"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'EN'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "a-spanish"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0015b-PostgreSQL/resource.sql deleted file mode 100644 index 5640c8f8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-PostgreSQL/resource.sql +++ /dev/null @@ -1,12 +0,0 @@ -DROP TABLE IF EXISTS Country; - -CREATE TABLE Country ( - Code VARCHAR(2), - Name VARCHAR(100), - Lan VARCHAR(10), - PRIMARY KEY (Code,Lan) -); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Bolivia, Plurinational State of', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Estado Plurinacional de Bolivia', 'ES'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Ireland', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Irlanda', 'ES'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015b-SQLServer/mapping.ttl deleted file mode 100644 index b1a77f3b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-SQLServer/mapping.ttl +++ /dev/null @@ -1,51 +0,0 @@ -@prefix d2rq: . -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'EN'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "a-english"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ - rml:iterator """ - SELECT Code, Name, Lan - FROM Country - WHERE Lan = 'EN'; - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "a-spanish"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0015b-SQLServer/resource.sql deleted file mode 100644 index a0a684ef..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-SQLServer/resource.sql +++ /dev/null @@ -1,13 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Country; - -CREATE TABLE Country ( - Code VARCHAR(2), - Name VARCHAR(100), - Lan VARCHAR(10), - PRIMARY KEY (Code,Lan) -); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Bolivia, Plurinational State of', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('BO', 'Estado Plurinacional de Bolivia', 'ES'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Ireland', 'EN'); -INSERT INTO Country (Code, Name, Lan) VALUES ('IE', 'Irlanda', 'ES'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-XML/country_en.xml b/src/test/resources/new-test-cases/core/RMLTC0015b-XML/country_en.xml deleted file mode 100644 index be754f17..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-XML/country_en.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - BOBolivia, Plurinational State of - IEIreland - diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-XML/country_es.xml b/src/test/resources/new-test-cases/core/RMLTC0015b-XML/country_es.xml deleted file mode 100644 index 62bb8e4a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-XML/country_es.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - BOEstado Plurinacional de Bolivia - IEIrlanda - diff --git a/src/test/resources/new-test-cases/core/RMLTC0015b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0015b-XML/mapping.ttl deleted file mode 100644 index 41211467..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0015b-XML/mapping.ttl +++ /dev/null @@ -1,42 +0,0 @@ -@prefix rdfs: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/countries/country"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_en.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "a-english"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/countries/country"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "country_es.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:language "a-spanish"; - rml:reference "Name" - ]; - rml:predicate rdfs:label - ]; - rml:subjectMap [ - rml:template "http://example.com/{Code}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/mapping.ttl deleted file mode 100644 index 7d8ac19c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/mapping.ttl +++ /dev/null @@ -1,45 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Sex" - ]; - rml:predicate ex:gender - ], [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate ex:lastName - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient/{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/output.nq deleted file mode 100644 index c854ecf9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/output.nq +++ /dev/null @@ -1,16 +0,0 @@ - . - "10"^^ . - "Monica" . - "Geller" . - "female" . - . - "11"^^ . - "Rachel" . - "Green" . - "female" . - . - "12"^^ . - "Chandler" . - "Bing" . - "male" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/resource.sql deleted file mode 100644 index 1b0346e7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016a-MySQL/resource.sql +++ /dev/null @@ -1,28 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate TIMESTAMP, -PaidInAdvance BOOLEAN, -Photo VARBINARY(200), -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',FALSE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',TRUE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',TRUE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/mapping.ttl deleted file mode 100644 index 18ede22b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,45 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "sex" - ]; - rml:predicate ex:gender - ], [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "id" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "firstname" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "lastname" - ]; - rml:predicate ex:lastName - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient/{id}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/output.nq deleted file mode 100644 index c854ecf9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/output.nq +++ /dev/null @@ -1,16 +0,0 @@ - . - "10"^^ . - "Monica" . - "Geller" . - "female" . - . - "11"^^ . - "Rachel" . - "Green" . - "female" . - . - "12"^^ . - "Chandler" . - "Bing" . - "male" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/resource.sql deleted file mode 100644 index 3fa73e67..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016a-PostgreSQL/resource.sql +++ /dev/null @@ -1,27 +0,0 @@ -DROP TABLE IF EXISTS Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate TIMESTAMP, -PaidInAdvance BOOLEAN, -Photo BYTEA, -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',FALSE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',TRUE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',TRUE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/mapping.ttl deleted file mode 100644 index 29373f89..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/mapping.ttl +++ /dev/null @@ -1,45 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Sex" - ]; - rml:predicate ex:gender - ], [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "ID" - ]; - rml:predicate ex:id - ], [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate ex:firstName - ], [ - rml:objectMap [ - rml:reference "LastName" - ]; - rml:predicate ex:lastName - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient/{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/output.nq deleted file mode 100644 index c854ecf9..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/output.nq +++ /dev/null @@ -1,16 +0,0 @@ - . - "10"^^ . - "Monica" . - "Geller" . - "female" . - . - "11"^^ . - "Rachel" . - "Green" . - "female" . - . - "12"^^ . - "Chandler" . - "Bing" . - "male" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/resource.sql deleted file mode 100644 index e1607220..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016a-SQLServer/resource.sql +++ /dev/null @@ -1,28 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate DATETIME, -PaidInAdvance BIT, -Photo VARBINARY(200), -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',0, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',1, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',1, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/mapping.ttl deleted file mode 100644 index bafd2c79..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/mapping.ttl +++ /dev/null @@ -1,35 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "Weight" - ]; - rml:predicate ex:weight - ], [ - rml:objectMap [ - rml:reference "Height" - ]; - rml:predicate ex:height - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/output.nq deleted file mode 100644 index 0801105b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/output.nq +++ /dev/null @@ -1,9 +0,0 @@ - . - "8.025E1"^^ . - "1.65E0"^^ . - . - "7.022E1"^^ . - "1.7E0"^^ . - . - "9.031E1"^^ . - "1.76E0"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/resource.sql deleted file mode 100644 index 1b0346e7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016b-MySQL/resource.sql +++ /dev/null @@ -1,28 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate TIMESTAMP, -PaidInAdvance BOOLEAN, -Photo VARBINARY(200), -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',FALSE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',TRUE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',TRUE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/mapping.ttl deleted file mode 100644 index 14b93e75..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,35 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "weight" - ]; - rml:predicate ex:weight - ], [ - rml:objectMap [ - rml:reference "height" - ]; - rml:predicate ex:height - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{id}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/output.nq deleted file mode 100644 index 0801105b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/output.nq +++ /dev/null @@ -1,9 +0,0 @@ - . - "8.025E1"^^ . - "1.65E0"^^ . - . - "7.022E1"^^ . - "1.7E0"^^ . - . - "9.031E1"^^ . - "1.76E0"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/resource.sql deleted file mode 100644 index 3fa73e67..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016b-PostgreSQL/resource.sql +++ /dev/null @@ -1,27 +0,0 @@ -DROP TABLE IF EXISTS Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate TIMESTAMP, -PaidInAdvance BOOLEAN, -Photo BYTEA, -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',FALSE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',TRUE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',TRUE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/mapping.ttl deleted file mode 100644 index e0e8d53b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/mapping.ttl +++ /dev/null @@ -1,35 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "Weight" - ]; - rml:predicate ex:weight - ], [ - rml:objectMap [ - rml:reference "Height" - ]; - rml:predicate ex:height - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/output.nq deleted file mode 100644 index 0801105b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/output.nq +++ /dev/null @@ -1,9 +0,0 @@ - . - "8.025E1"^^ . - "1.65E0"^^ . - . - "7.022E1"^^ . - "1.7E0"^^ . - . - "9.031E1"^^ . - "1.76E0"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/resource.sql deleted file mode 100644 index e1607220..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016b-SQLServer/resource.sql +++ /dev/null @@ -1,28 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate DATETIME, -PaidInAdvance BIT, -Photo VARBINARY(200), -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',0, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',1, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',1, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/mapping.ttl deleted file mode 100644 index ea0d4e4e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/mapping.ttl +++ /dev/null @@ -1,35 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "BirthDate" - ]; - rml:predicate ex:birthdate - ], [ - rml:objectMap [ - rml:reference "EntranceDate" - ]; - rml:predicate ex:entrancedate - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/output.nq deleted file mode 100644 index 020b5b7c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/output.nq +++ /dev/null @@ -1,9 +0,0 @@ - . - "1981-10-10"^^ . - "2009-10-10T12:12:22"^^ . - . - "1982-11-12"^^ . - "2008-11-12T09:45:44"^^ . - . - "1978-04-06"^^ . - "2007-03-12T02:13:14"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/resource.sql deleted file mode 100644 index 1b0346e7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016c-MySQL/resource.sql +++ /dev/null @@ -1,28 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate TIMESTAMP, -PaidInAdvance BOOLEAN, -Photo VARBINARY(200), -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',FALSE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',TRUE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',TRUE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/mapping.ttl deleted file mode 100644 index b7eba2d1..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,35 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "birthdate" - ]; - rml:predicate ex:birthdate - ], [ - rml:objectMap [ - rml:reference "entrancedate" - ]; - rml:predicate ex:entrancedate - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{id}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/output.nq deleted file mode 100644 index 020b5b7c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/output.nq +++ /dev/null @@ -1,9 +0,0 @@ - . - "1981-10-10"^^ . - "2009-10-10T12:12:22"^^ . - . - "1982-11-12"^^ . - "2008-11-12T09:45:44"^^ . - . - "1978-04-06"^^ . - "2007-03-12T02:13:14"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/resource.sql deleted file mode 100644 index 3fa73e67..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016c-PostgreSQL/resource.sql +++ /dev/null @@ -1,27 +0,0 @@ -DROP TABLE IF EXISTS Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate TIMESTAMP, -PaidInAdvance BOOLEAN, -Photo BYTEA, -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',FALSE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',TRUE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',TRUE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/mapping.ttl deleted file mode 100644 index ead4ab31..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/mapping.ttl +++ /dev/null @@ -1,35 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "BirthDate" - ]; - rml:predicate ex:birthdate - ], [ - rml:objectMap [ - rml:reference "EntranceDate" - ]; - rml:predicate ex:entrancedate - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/output.nq deleted file mode 100644 index 020b5b7c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/output.nq +++ /dev/null @@ -1,9 +0,0 @@ - . - "1981-10-10"^^ . - "2009-10-10T12:12:22"^^ . - . - "1982-11-12"^^ . - "2008-11-12T09:45:44"^^ . - . - "1978-04-06"^^ . - "2007-03-12T02:13:14"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/resource.sql deleted file mode 100644 index e1607220..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016c-SQLServer/resource.sql +++ /dev/null @@ -1,28 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate DATETIME, -PaidInAdvance BIT, -Photo VARBINARY(200), -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',0, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',1, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',1, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/mapping.ttl deleted file mode 100644 index 4164f6f2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "PaidInAdvance" - ]; - rml:predicate ex:paid - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/output.nq deleted file mode 100644 index 578b074e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - . - "false"^^ . - . - "true"^^ . - . - "true"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/resource.sql deleted file mode 100644 index 1b0346e7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016d-MySQL/resource.sql +++ /dev/null @@ -1,28 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate TIMESTAMP, -PaidInAdvance BOOLEAN, -Photo VARBINARY(200), -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',FALSE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',TRUE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',TRUE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/mapping.ttl deleted file mode 100644 index 5105f9af..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "paidinadvance" - ]; - rml:predicate ex:paid - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{id}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/output.nq deleted file mode 100644 index 578b074e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - . - "false"^^ . - . - "true"^^ . - . - "true"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/resource.sql deleted file mode 100644 index 3fa73e67..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016d-PostgreSQL/resource.sql +++ /dev/null @@ -1,27 +0,0 @@ -DROP TABLE IF EXISTS Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate TIMESTAMP, -PaidInAdvance BOOLEAN, -Photo BYTEA, -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',FALSE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',TRUE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',TRUE, -'\\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/mapping.ttl deleted file mode 100644 index 691cefd5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:reference "PaidInAdvance" - ]; - rml:predicate ex:paid - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/output.nq deleted file mode 100644 index 578b074e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - . - "false"^^ . - . - "true"^^ . - . - "true"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/resource.sql deleted file mode 100644 index e1607220..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016d-SQLServer/resource.sql +++ /dev/null @@ -1,28 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate DATETIME, -PaidInAdvance BIT, -Photo VARBINARY(200), -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',0, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',1, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',1, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/mapping.ttl deleted file mode 100644 index 34086d5f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:template "data:image/png;hex,{Photo}" - ]; - rml:predicate ex:photo - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/output.nq deleted file mode 100644 index 789a3e30..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - . - . - . - . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/resource.sql deleted file mode 100644 index 1b0346e7..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016e-MySQL/resource.sql +++ /dev/null @@ -1,28 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate TIMESTAMP, -PaidInAdvance BOOLEAN, -Photo VARBINARY(200), -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',FALSE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',TRUE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',TRUE, -X'89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/mapping.ttl deleted file mode 100644 index f6d99e51..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:template "data:image/png;hex,{photo}" - ]; - rml:predicate ex:photo - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{id}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/output.nq deleted file mode 100644 index 789a3e30..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - . - . - . - . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/resource.sql deleted file mode 100644 index 51e63e7b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016e-PostgreSQL/resource.sql +++ /dev/null @@ -1,27 +0,0 @@ -DROP TABLE IF EXISTS Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate TIMESTAMP, -PaidInAdvance BOOLEAN, -Photo BYTEA, -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',FALSE, -'\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',TRUE, -'\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',TRUE, -'\x89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/mapping.ttl deleted file mode 100644 index 2fbf776c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Patient" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ], [ - rml:objectMap [ - rml:template "data:image/png;hex,{Photo}" - ]; - rml:predicate ex:photo - ]; - rml:subjectMap [ - rml:template "http://example.com/Patient{ID}" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/output.nq deleted file mode 100644 index 789a3e30..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/output.nq +++ /dev/null @@ -1,6 +0,0 @@ - . - . - . - . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/resource.sql deleted file mode 100644 index e1607220..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0016e-SQLServer/resource.sql +++ /dev/null @@ -1,28 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Patient; - -CREATE TABLE Patient ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50), -Sex VARCHAR(6), -Weight REAL, -Height FLOAT, -BirthDate DATE, -EntranceDate DATETIME, -PaidInAdvance BIT, -Photo VARBINARY(200), -PRIMARY KEY (ID) -); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (10,'Monica','Geller','female',80.25,1.65,'1981-10-10','2009-10-10 12:12:22',0, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (11,'Rachel','Green','female',70.22,1.70,'1982-11-12','2008-11-12 09:45:44',1, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFF3FC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); - -INSERT INTO Patient (ID, FirstName,LastName,Sex,Weight,Height,BirthDate,EntranceDate,PaidInAdvance,Photo) -VALUES (12,'Chandler','Bing','male',90.31,1.76,'1978-04-06','2007-03-12 02:13:14',1, -CAST('89504E470D0A1A0A0000000D49484452000000050000000508060000008D6F26E50000001C4944415408D763F9FFFEBFC37F062005C3201284D031F18258CD04000EF535CBD18E0E1F0000000049454E44AE426082' as VARBINARY)); diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0019a-CSV/output.nq deleted file mode 100644 index d07559d8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-CSV/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "http://example.com/ns#Jhon" . - "Carlos" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-CSV/persons.csv b/src/test/resources/new-test-cases/core/RMLTC0019a-CSV/persons.csv deleted file mode 100644 index d1b36144..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-CSV/persons.csv +++ /dev/null @@ -1,3 +0,0 @@ -ID,FirstName,LastName -10,http://example.com/ns#Jhon,Smith -20,Carlos,Mendoza diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0019a-JSON/README.md new file mode 100644 index 00000000..6c906c7d --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0019a-JSON/README.md @@ -0,0 +1,60 @@ +## RMLTC0019a-JSON + +**Title**: "Generation of triples by using IRI value in columns" + +**Description**: "Test the generation of triples by using IRI value in attributes" + +**Error expected?** No + +**Input** +``` +{ + "persons": [ + { + "ID": 10, + "FirstName": "http://example.com/ns#Jhon", + "LastName": "Smith" + }, + { + "ID": 20, + "FirstName": "Carlos", + "LastName": "Mendoza" + } + ] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.FirstName" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:reference "$.FirstName" + ] . + +``` + +**Output** +``` + "http://example.com/ns#Jhon" . + "Carlos" . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0019a-JSON/mapping.ttl index 63a7b5f9..2870ff6e 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0019a-JSON/mapping.ttl @@ -12,10 +12,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "FirstName" + rml:reference "$.FirstName" ]; rml:predicate foaf:name ]; rml:subjectMap [ - rml:reference "FirstName" + rml:reference "$.FirstName" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/mapping.ttl deleted file mode 100644 index 514e6594..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT ID, FirstName, LastName - FROM Employee - WHERE ID < 30 - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "FirstName" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/output.nq deleted file mode 100644 index d07559d8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "http://example.com/ns#Jhon" . - "Carlos" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/resource.sql deleted file mode 100644 index 24988be6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-MySQL/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Employee; - -CREATE TABLE Employee ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50) -); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (10,'http://example.com/ns#Jhon','Smith'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (20,'Carlos','Mendoza'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (30,'Juan Daniel','Crespo'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/mapping.ttl deleted file mode 100644 index 0a57c29f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT ID, FirstName, LastName - FROM Employee - WHERE ID < 30 - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "firstname" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "firstname" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/output.nq deleted file mode 100644 index d07559d8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "http://example.com/ns#Jhon" . - "Carlos" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/resource.sql deleted file mode 100644 index ae78dc8a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-PostgreSQL/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -DROP TABLE IF EXISTS Employee; - -CREATE TABLE Employee ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50) -); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (10,'http://example.com/ns#Jhon','Smith'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (20,'Carlos','Mendoza'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (30,'Juan Daniel','Crespo'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/mapping.ttl deleted file mode 100644 index 808b17d2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/mapping.ttl +++ /dev/null @@ -1,29 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - SELECT ID, FirstName, LastName - FROM Employee - WHERE ID < 30 - """; - rml:source ; - rml:referenceFormulation rml:SQL2008Query - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "FirstName" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/output.nq deleted file mode 100644 index d07559d8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "http://example.com/ns#Jhon" . - "Carlos" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/resource.sql deleted file mode 100644 index 2ff708ef..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-SQLServer/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Employee; - -CREATE TABLE Employee ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50) -); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (10,'http://example.com/ns#Jhon','Smith'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (20,'Carlos','Mendoza'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (30,'Juan Daniel','Crespo'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0019a-XML/mapping.ttl deleted file mode 100644 index 75e60005..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-XML/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/persons/person"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "persons.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "FirstName" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0019a-XML/output.nq deleted file mode 100644 index d07559d8..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-XML/output.nq +++ /dev/null @@ -1,2 +0,0 @@ - "http://example.com/ns#Jhon" . - "Carlos" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-XML/persons.xml b/src/test/resources/new-test-cases/core/RMLTC0019a-XML/persons.xml deleted file mode 100644 index 7579d58b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-XML/persons.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - 10 - http://example.com/ns#Jhon - Smith - - - 20 - Carlos - Mendoza - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-CSV/persons.csv b/src/test/resources/new-test-cases/core/RMLTC0019b-CSV/persons.csv deleted file mode 100644 index a89aea2e..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-CSV/persons.csv +++ /dev/null @@ -1,4 +0,0 @@ -ID,FirstName,LastName -10,http://example.com/ns#Jhon,Smith -20,Carlos,Mendoza -30,Juan Daniel,Crespo diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0019b-JSON/README.md new file mode 100644 index 00000000..73dcd7b4 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0019b-JSON/README.md @@ -0,0 +1,63 @@ +## RMLTC0019b-JSON + +**Title**: "Generation of triples by using IRI value in columns, with data error" + +**Description**: "Test the generation of triples by using IRI value in attributes, conforming RML mapping with data error (and limited results)" + +**Error expected?** No + +**Input** +``` +{ + "persons": [ + { + "ID": 10, + "FirstName": "http://example.com/ns#Jhon", + "LastName": "Smith" + }, + { + "ID": 20, + "FirstName": "Carlos", + "LastName": "Mendoza" + }, + { + "ID": 30, + "FirstName": "Juan Daniel", + "LastName": "Crespo" + } + ] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.FirstName" + ]; + rml:predicate foaf:name + ]; + rml:subjectMap [ + rml:reference "$.FirstName" + ] . + +``` + +**Output** +``` + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0019b-JSON/mapping.ttl index 63a7b5f9..2870ff6e 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0019b-JSON/mapping.ttl @@ -12,10 +12,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "FirstName" + rml:reference "$.FirstName" ]; rml:predicate foaf:name ]; rml:subjectMap [ - rml:reference "FirstName" + rml:reference "$.FirstName" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0019b-JSON/output.nq similarity index 100% rename from src/test/resources/new-test-cases/core/RMLTC0000-SPARQL/output.nq rename to src/test/resources/new-test-cases/core/RMLTC0019b-JSON/output.nq diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0019b-MySQL/mapping.ttl deleted file mode 100644 index 788d1cce..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Employee" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "FirstName" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0019b-MySQL/resource.sql deleted file mode 100644 index 24988be6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-MySQL/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Employee; - -CREATE TABLE Employee ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50) -); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (10,'http://example.com/ns#Jhon','Smith'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (20,'Carlos','Mendoza'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (30,'Juan Daniel','Crespo'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0019b-PostgreSQL/mapping.ttl deleted file mode 100644 index e7f00f33..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Employee" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "firstname" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "firstname" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0019b-PostgreSQL/resource.sql deleted file mode 100644 index ae78dc8a..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-PostgreSQL/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -DROP TABLE IF EXISTS Employee; - -CREATE TABLE Employee ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50) -); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (10,'http://example.com/ns#Jhon','Smith'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (20,'Carlos','Mendoza'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (30,'Juan Daniel','Crespo'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0019b-SQLServer/mapping.ttl deleted file mode 100644 index 9172f6ce..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Employee" - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "FirstName" - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0019b-SQLServer/resource.sql deleted file mode 100644 index 2ff708ef..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-SQLServer/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Employee; - -CREATE TABLE Employee ( -ID INTEGER, -FirstName VARCHAR(50), -LastName VARCHAR(50) -); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (10,'http://example.com/ns#Jhon','Smith'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (20,'Carlos','Mendoza'); -INSERT INTO Employee (ID,FirstName,LastName) VALUES (30,'Juan Daniel','Crespo'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0019b-XML/mapping.ttl deleted file mode 100644 index 75e60005..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-XML/mapping.ttl +++ /dev/null @@ -1,21 +0,0 @@ -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/persons/person"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "persons.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; - rml:subjectMap [ - rml:reference "FirstName" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-XML/persons.xml b/src/test/resources/new-test-cases/core/RMLTC0019b-XML/persons.xml deleted file mode 100644 index 4f01b2e5..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-XML/persons.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - 10 - http://example.com/ns#Jhon - Smith - - - 20 - Carlos - Mendoza - - - 30 - Juan Daniel - Crespo - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0020a-CSV/mapping.ttl deleted file mode 100644 index fb9c8f5d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-CSV/mapping.ttl +++ /dev/null @@ -1,20 +0,0 @@ -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "{Name}"; - rml:termType rml:IRI - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0020a-CSV/output.nq deleted file mode 100644 index 65071a55..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-CSV/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - . - . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0020a-CSV/student.csv deleted file mode 100644 index 289cde5c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-CSV/student.csv +++ /dev/null @@ -1,6 +0,0 @@ -Name -http://example.com/company/Alice -Bob -Bob/Charles -path/../Danny -Emily Smith diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0020a-JSON/README.md new file mode 100644 index 00000000..1458831b --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0020a-JSON/README.md @@ -0,0 +1,58 @@ +## RMLTC0020a-JSON + +**Title**: "Generation of triples by using IRI value in columns" + +**Description**: "Test the generation of triples by using IRI value in attributes" + +**Error expected?** No + +**Input** +``` +{ + "students": [ + {"Name": "http://example.com/company/Alice"}, + {"Name": "Bob"}, + {"Name": "Bob/Charles"}, + {"Name": "path/../Danny"}, + {"Name": "Emily Smith"} + ] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rdf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:object foaf:Person; + rml:predicate rdf:type + ]; + rml:subjectMap [ + rml:template "{$.Name}"; + rml:termType rml:IRI + ] . + +``` + +**Output** +``` + . + . + . + . + . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0020a-JSON/mapping.ttl index e3268b17..0d2892f8 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0020a-JSON/mapping.ttl @@ -16,6 +16,6 @@ rml:predicate rdf:type ]; rml:subjectMap [ - rml:template "{Name}"; + rml:template "{$.Name}"; rml:termType rml:IRI ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/mapping.ttl deleted file mode 100644 index f60f5907..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "{Name}"; - rml:termType rml:IRI - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/output.nq deleted file mode 100644 index 65071a55..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - . - . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/resource.sql deleted file mode 100644 index f9b025b2..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-MySQL/resource.sql +++ /dev/null @@ -1,13 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.Student_Sport; -DROP TABLE IF EXISTS test.Student; - -CREATE TABLE Student ( -Name VARCHAR(50) -); - -INSERT INTO Student (Name) VALUES ('http://example.com/company/Alice'); -INSERT INTO Student (Name) VALUES ('Bob'); -INSERT INTO Student (Name) VALUES ('Bob/Charles'); -INSERT INTO Student (Name) VALUES ('path/../Danny'); -INSERT INTO Student (Name) VALUES ('Emily Smith'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/mapping.ttl deleted file mode 100644 index 5b5e1d9b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "{name}"; - rml:termType rml:IRI - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password "password"; - d2rq:username "postgres" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/output.nq deleted file mode 100644 index 65071a55..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - . - . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/resource.sql deleted file mode 100644 index 0bee3169..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-PostgreSQL/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -DROP TABLE IF EXISTS Student; - -CREATE TABLE Student ( -Name VARCHAR(50) -); - -INSERT INTO Student (Name) VALUES ('http://example.com/company/Alice'); -INSERT INTO Student (Name) VALUES ('Bob'); -INSERT INTO Student (Name) VALUES ('Bob/Charles'); -INSERT INTO Student (Name) VALUES ('path/../Danny'); -INSERT INTO Student (Name) VALUES ('Emily Smith'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/mapping.ttl deleted file mode 100644 index f6e5b4f0..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix d2rq: . -@prefix foaf: . -@prefix rdf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Student" - ]; - rml:predicateObjectMap [ - rml:object foaf:Person; - rml:predicate rdf:type - ]; - rml:subjectMap [ - rml:template "{Name}"; - rml:termType rml:IRI - ] . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/output.nq deleted file mode 100644 index 65071a55..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - . - . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/resource.sql deleted file mode 100644 index 959a905b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-SQLServer/resource.sql +++ /dev/null @@ -1,12 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS Student; - -CREATE TABLE Student ( -Name VARCHAR(50) -); - -INSERT INTO Student (Name) VALUES ('http://example.com/company/Alice'); -INSERT INTO Student (Name) VALUES ('Bob'); -INSERT INTO Student (Name) VALUES ('Bob/Charles'); -INSERT INTO Student (Name) VALUES ('path/../Danny'); -INSERT INTO Student (Name) VALUES ('Emily Smith'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0020a-XML/output.nq deleted file mode 100644 index 65071a55..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-XML/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - . - . - . - . diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0020a-XML/student.xml deleted file mode 100644 index 467bf17d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-XML/student.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - http://example.com/company/Alice - Bob - Bob/Charles - path/../Danny - Emily Smith - diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0021a-CSV/mapping.ttl deleted file mode 100644 index 79799413..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-CSV/mapping.ttl +++ /dev/null @@ -1,25 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "Sport" - ]; - rml:parentTriplesMap . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.csv" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap ; - rml:predicate ex:sameSportAs - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0021a-CSV/output.nq deleted file mode 100644 index 4488c582..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-CSV/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - . - . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0021a-CSV/student.csv deleted file mode 100644 index 8a96794b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-CSV/student.csv +++ /dev/null @@ -1,4 +0,0 @@ -ID,Name,Sport -10,Venus Williams,Tennis -20,Serena Williams,Tennis -30,Loena Hendrickx,Figure skating diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0021a-JSON/README.md new file mode 100644 index 00000000..b5511f29 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0021a-JSON/README.md @@ -0,0 +1,73 @@ +## RMLTC0021a-JSON + +**Title**: "Generation of triples referencing object map" + +**Description**: "Tests the mapping specification referencing object map with same logical source and join condition" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus Williams", + "Sport": "Tennis" + }, { + "ID": 20, + "Name":"Serena Williams", + "Sport": "Tennis" + }, { + "ID": 30, + "Name":"Loena Hendrickx", + "Sport": "Figure skating" + }] +} + +``` + +**Mapping** +``` +@prefix activity: . +@prefix ex: . +@prefix rdf: . +@prefix rml: . + + a rml:RefObjectMap; + rml:joinCondition [ + rml:child "$.Sport"; + rml:parent "$.Sport" + ]; + rml:parentTriplesMap . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap ; + rml:predicate ex:sameSportAs + ]; + rml:subjectMap [ + rml:template "http://example.com/Student/{$.ID}/{$.Name}" + ] . + +``` + +**Output** +``` + . + . + . + . + . + + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0021a-JSON/mapping.ttl index 0603e541..f7a7d85a 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-JSON/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0021a-JSON/mapping.ttl @@ -5,8 +5,8 @@ a rml:RefObjectMap; rml:joinCondition [ - rml:child "Sport"; - rml:parent "Sport" + rml:child "$.Sport"; + rml:parent "$.Sport" ]; rml:parentTriplesMap . @@ -24,5 +24,5 @@ rml:predicate ex:sameSportAs ]; rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" + rml:template "http://example.com/Student/{$.ID}/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/mapping.ttl deleted file mode 100644 index 079d449f..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver"; - d2rq:password ""; - d2rq:username "root" . - - a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "Sport" - ]; - rml:parentTriplesMap . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap ; - rml:predicate ex:sameSportAs - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/output.nq deleted file mode 100644 index 4488c582..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - . - . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/resource.sql deleted file mode 100644 index d7f421d4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-MySQL/resource.sql +++ /dev/null @@ -1,11 +0,0 @@ -USE test; -DROP TABLE IF EXISTS test.student; - -CREATE TABLE student ( - ID INTEGER, - Name VARCHAR(50), - Sport VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); -INSERT INTO student values ('20', 'Serena Williams', 'Tennis'); -INSERT INTO student values ('30', 'Loena Hendrickx', 'Figure skating'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/mapping.ttl deleted file mode 100644 index 7d2dff27..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "org.postgresql.Driver"; - d2rq:password ""; - d2rq:username "postgres" . - - a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "Sport" - ]; - rml:parentTriplesMap . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap ; - rml:predicate ex:sameSportAs - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/output.nq deleted file mode 100644 index 4488c582..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - . - . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/resource.sql deleted file mode 100644 index 9e31d74b..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-PostgreSQL/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -DROP TABLE IF EXISTS student; - -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50), - "Sport" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); -INSERT INTO student values ('20', 'Serena Williams', 'Tennis'); -INSERT INTO student values ('30', 'Loena Hendrickx', 'Figure skating'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/mapping.ttl deleted file mode 100644 index 5e44b45c..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/mapping.ttl +++ /dev/null @@ -1,40 +0,0 @@ -@prefix ex: . -@prefix formats: . -@prefix rml: . -@prefix sd: . - -ex:RefObjectMap1 a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport.value"; - rml:parent "Sport.value" - ]; - rml:parentTriplesMap ex:TriplesMap1 . - -ex:TriplesMap1 a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator """ - PREFIX rdfs: - PREFIX foaf: - PREFIX rdf: - SELECT ?Name ?ID - WHERE { - ?x foaf:name ?Name ; - rdf:ID ?ID ; - } """; - rml:referenceFormulation formats:SPARQL_Results_JSON; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path - ] - ]; - rml:predicateObjectMap [ - rml:objectMap ex:RefObjectMap1; - rml:predicate ex:sameSportAs - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID.value}/{Name.value}" - ] . - - a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query . diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/output.nq b/src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/output.nq deleted file mode 100644 index 4488c582..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - . - . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/resource.ttl b/src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/resource.ttl deleted file mode 100644 index fd943016..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-SPARQL/resource.ttl +++ /dev/null @@ -1,19 +0,0 @@ -@prefix foaf: . -@prefix ns1: . -@prefix rdf: . - -[] ns1:plays [ a ns1:Sport ; - foaf:name "Tennis" ] ; - rdf:ID "10" ; - foaf:name "Venus Williams" . - -[] ns1:plays [ a ns1:Sport ; - foaf:name "Tennis" ] ; - rdf:ID "20" ; - foaf:name "Serena Williams" . - -[] ns1:plays [ a ns1:Sport ; - foaf:name "Figure skating" ] ; - rdf:ID "30" ; - foaf:name "Loena Hendrickx" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/mapping.ttl deleted file mode 100644 index a3be9075..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/mapping.ttl +++ /dev/null @@ -1,30 +0,0 @@ -@prefix d2rq: . -@prefix ex: . -@prefix rml: . - - a d2rq:Database; - d2rq:jdbcDSN "CONNECTIONDSN"; - d2rq:jdbcDriver "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - d2rq:password "YourSTRONG!Passw0rd;"; - d2rq:username "sa" . - - a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "Sport" - ]; - rml:parentTriplesMap . - - a rml:TriplesMap; - rml:logicalSource [ - rml:source ; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "student" - ]; - rml:predicateObjectMap [ - rml:objectMap ; - rml:predicate ex:sameSportAs - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/output.nq b/src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/output.nq deleted file mode 100644 index 4488c582..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - . - . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/resource.sql b/src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/resource.sql deleted file mode 100644 index 76d1c3e6..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-SQLServer/resource.sql +++ /dev/null @@ -1,10 +0,0 @@ -USE TestDB; -DROP TABLE IF EXISTS student; -CREATE TABLE student ( - "ID" INTEGER, - "Name" VARCHAR(50), - "Sport" VARCHAR(50) -); -INSERT INTO student values ('10', 'Venus Williams', 'Tennis'); -INSERT INTO student values ('20', 'Serena Williams', 'Tennis'); -INSERT INTO student values ('30', 'Loena Hendrickx', 'Figure skating'); diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0021a-XML/mapping.ttl deleted file mode 100644 index 60bf4a18..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-XML/mapping.ttl +++ /dev/null @@ -1,26 +0,0 @@ -@prefix ex: . -@prefix rml: . - - a rml:RefObjectMap; - rml:joinCondition [ - rml:child "Sport"; - rml:parent "Sport" - ]; - rml:parentTriplesMap . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "student.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap ; - rml:predicate ex:sameSportAs - ]; - rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{Name}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0021a-XML/output.nq deleted file mode 100644 index 4488c582..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-XML/output.nq +++ /dev/null @@ -1,7 +0,0 @@ - . - . - . - . - . - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0021a-XML/student.xml b/src/test/resources/new-test-cases/core/RMLTC0021a-XML/student.xml deleted file mode 100644 index 2b184f7d..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0021a-XML/student.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - 10 - Venus Williams - Tennis - - - 20 - Serena Williams - Tennis - - - 30 - Loena Hendrickx - Figure skating - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0022a-CSV/student.csv b/src/test/resources/new-test-cases/core/RMLTC0022a-CSV/student.csv deleted file mode 100644 index 7af01247..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0022a-CSV/student.csv +++ /dev/null @@ -1,2 +0,0 @@ -Name,Age -Venus,21 diff --git a/src/test/resources/new-test-cases/core/RMLTC0022a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0022a-JSON/README.md new file mode 100644 index 00000000..d3d9f9e2 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0022a-JSON/README.md @@ -0,0 +1,62 @@ +## RMLTC0022a-JSON + +**Title**: "Generating of triples with constant datatype" + +**Description**: "Test triples with a fixed constant datatype" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus", + "Age": 21 + }] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . +@prefix xsd: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:datatype xsd:string; + rml:reference "$.Name" + ]; + rml:predicate foaf:name + ], [ + rml:objectMap [ + rml:datatype xsd:int; + rml:reference "$.Age" + ]; + rml:predicate ex:age + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.Name}" + ] . + +``` + +**Output** +``` + "Venus"^^ . + "21"^^ . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0022a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0022a-JSON/mapping.ttl similarity index 73% rename from src/test/resources/new-test-cases/core/RMLTC0022a-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0022a-JSON/mapping.ttl index af948398..761e5507 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0022a-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0022a-JSON/mapping.ttl @@ -5,25 +5,26 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student.csv" + rml:path "student.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ rml:datatype xsd:string; - rml:reference "Name" + rml:reference "$.Name" ]; rml:predicate foaf:name ], [ rml:objectMap [ rml:datatype xsd:int; - rml:reference "Age" + rml:reference "$.Age" ]; rml:predicate ex:age ]; rml:subjectMap [ - rml:template "http://example.com/{Name}" + rml:template "http://example.com/{$.Name}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0022a-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0022a-JSON/output.nq similarity index 83% rename from src/test/resources/new-test-cases/core/RMLTC0022a-CSV/output.nq rename to src/test/resources/new-test-cases/core/RMLTC0022a-JSON/output.nq index a25ee88a..f18b6f47 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0022a-CSV/output.nq +++ b/src/test/resources/new-test-cases/core/RMLTC0022a-JSON/output.nq @@ -1,2 +1,2 @@ "Venus"^^ . - "21"^^ . \ No newline at end of file + "21"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0022a-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0022a-JSON/student.json new file mode 100644 index 00000000..b51a0d81 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0022a-JSON/student.json @@ -0,0 +1,7 @@ +{ + "students": [{ + "ID": 10, + "Name":"Venus", + "Age": 21 + }] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0022b-CSV/data.csv b/src/test/resources/new-test-cases/core/RMLTC0022b-CSV/data.csv deleted file mode 100644 index 00a92ee4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0022b-CSV/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -FOO,BAR -1,string -2,int diff --git a/src/test/resources/new-test-cases/core/RMLTC0022b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0022b-JSON/README.md new file mode 100644 index 00000000..0c904842 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0022b-JSON/README.md @@ -0,0 +1,54 @@ +## RMLTC0022b-JSON + +**Title**: "Generating of triples with datatypeMap" + +**Description**: "Test triples with a XSD datatype generated from the data" + +**Error expected?** No + +**Input** +``` +[ + { "FOO": 1, "BAR": "string"}, + { "FOO": 2, "BAR": "int"} +] + +``` + +**Mapping** +``` +@prefix ex: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "data.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:datatypeMap [ + rml:template "http://www.w3.org/2001/XMLSchema#{$.BAR}" + ]; + rml:reference "$.FOO" + ]; + rml:predicate ex:x + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.FOO}" + ] . + + +``` + +**Output** +``` + "1"^^ . + "2"^^ . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0022b-JSON/data.json b/src/test/resources/new-test-cases/core/RMLTC0022b-JSON/data.json new file mode 100644 index 00000000..6b0dcef9 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0022b-JSON/data.json @@ -0,0 +1,4 @@ +[ + { "FOO": 1, "BAR": "string"}, + { "FOO": 2, "BAR": "int"} +] diff --git a/src/test/resources/new-test-cases/core/RMLTC0022c-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0022b-JSON/mapping.ttl similarity index 63% rename from src/test/resources/new-test-cases/core/RMLTC0022c-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0022b-JSON/mapping.ttl index 3aa1c86c..0f519282 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0022c-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0022b-JSON/mapping.ttl @@ -3,21 +3,23 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "data.csv" + rml:path "data.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ rml:datatypeMap [ - rml:template "datatype#{BAR}" + rml:template "http://www.w3.org/2001/XMLSchema#{$.BAR}" ]; - rml:reference "FOO" + rml:reference "$.FOO" ]; rml:predicate ex:x ]; rml:subjectMap [ - rml:template "http://example.com/{FOO}" + rml:template "http://example.com/{$.FOO}" ] . + diff --git a/src/test/resources/new-test-cases/core/RMLTC0022b-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0022b-JSON/output.nq similarity index 85% rename from src/test/resources/new-test-cases/core/RMLTC0022b-CSV/output.nq rename to src/test/resources/new-test-cases/core/RMLTC0022b-JSON/output.nq index c81c7378..0e3c60c4 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0022b-CSV/output.nq +++ b/src/test/resources/new-test-cases/core/RMLTC0022b-JSON/output.nq @@ -1,2 +1,2 @@ "1"^^ . - "2"^^ . \ No newline at end of file + "2"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0022c-CSV/data.csv b/src/test/resources/new-test-cases/core/RMLTC0022c-CSV/data.csv deleted file mode 100644 index 00a92ee4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0022c-CSV/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -FOO,BAR -1,string -2,int diff --git a/src/test/resources/new-test-cases/core/RMLTC0022c-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0022c-JSON/README.md new file mode 100644 index 00000000..e5af7d70 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0022c-JSON/README.md @@ -0,0 +1,53 @@ +## RMLTC0022c-JSON + +**Title**: "Generating of triples with datatypeMap with custom datatype" + +**Description**: "Test triples with a custom datype from the data" + +**Error expected?** No + +**Input** +``` +[ + { "FOO": 1, "BAR": "string"}, + { "FOO": 2, "BAR": "int"} +] + +``` + +**Mapping** +``` +@prefix ex: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "data.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:datatypeMap [ + rml:template "datatype#{$.BAR}" + ]; + rml:reference "$.FOO" + ]; + rml:predicate ex:x + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.FOO}" + ] . + +``` + +**Output** +``` + "1"^^ . + "2"^^ . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0022c-JSON/data.json b/src/test/resources/new-test-cases/core/RMLTC0022c-JSON/data.json new file mode 100644 index 00000000..6b0dcef9 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0022c-JSON/data.json @@ -0,0 +1,4 @@ +[ + { "FOO": 1, "BAR": "string"}, + { "FOO": 2, "BAR": "int"} +] diff --git a/src/test/resources/new-test-cases/core/RMLTC0022b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0022c-JSON/mapping.ttl similarity index 65% rename from src/test/resources/new-test-cases/core/RMLTC0022b-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0022c-JSON/mapping.ttl index 40a4c33a..3bc1cd72 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0022b-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0022c-JSON/mapping.ttl @@ -3,21 +3,22 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "data.csv" + rml:path "data.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ rml:datatypeMap [ - rml:template "http://www.w3.org/2001/XMLSchema#{BAR}" + rml:template "datatype#{$.BAR}" ]; - rml:reference "FOO" + rml:reference "$.FOO" ]; rml:predicate ex:x ]; rml:subjectMap [ - rml:template "http://example.com/{FOO}" + rml:template "http://example.com/{$.FOO}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0022c-CSV/output.nq b/src/test/resources/new-test-cases/core/RMLTC0022c-JSON/output.nq similarity index 85% rename from src/test/resources/new-test-cases/core/RMLTC0022c-CSV/output.nq rename to src/test/resources/new-test-cases/core/RMLTC0022c-JSON/output.nq index 593f6c51..f08f0a1b 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0022c-CSV/output.nq +++ b/src/test/resources/new-test-cases/core/RMLTC0022c-JSON/output.nq @@ -1,2 +1,2 @@ "1"^^ . - "2"^^ . \ No newline at end of file + "2"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0023a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0023a-JSON/README.md new file mode 100644 index 00000000..d117d362 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023a-JSON/README.md @@ -0,0 +1,40 @@ +## RMLTC0023a-JSON + +**Title**: "Invalid IRI template 1" + +**Description**: "Test handling of invalid IRI template" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:subjectMap [ + rml:template "http://example.com/{NON_EXISTING_COLUMN}"; + rml:class foaf:Person; + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0019b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0023a-JSON/mapping.ttl similarity index 56% rename from src/test/resources/new-test-cases/core/RMLTC0019b-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0023a-JSON/mapping.ttl index 5618ce88..0e890d83 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0019b-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0023a-JSON/mapping.ttl @@ -3,18 +3,14 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "persons.csv" + rml:path "student.json" ] ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; rml:subjectMap [ - rml:reference "FirstName" + rml:template "http://example.com/{NON_EXISTING_COLUMN}"; + rml:class foaf:Person; ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0023a-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0023a-JSON/student.json new file mode 100644 index 00000000..0f6f797f --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023a-JSON/student.json @@ -0,0 +1,6 @@ +{ + "students": [{ + "ID": 10, + "Name":"Venus" + }] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0023a-XML/ious.xml b/src/test/resources/new-test-cases/core/RMLTC0023a-XML/ious.xml deleted file mode 100644 index aad50963..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0023a-XML/ious.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/test/resources/new-test-cases/core/RMLTC0023a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0023a-XML/mapping.ttl deleted file mode 100644 index 16ac0cce..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0023a-XML/mapping.ttl +++ /dev/null @@ -1,23 +0,0 @@ -@prefix ex: . -@prefix foaf: . -@prefix rml: . - - a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/persons/person"; - rml:referenceFormulation rml:XPath; - rml:source [ a rml:RelativePathSource; - rml:root rml:MappingDirectory; - rml:path "ious.xml" - ] - ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "@amount" - ]; - rml:predicate ex:owes - ]; - rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{@fname};{@lname}" - ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0023a-XML/output.nq b/src/test/resources/new-test-cases/core/RMLTC0023a-XML/output.nq deleted file mode 100644 index 64e91da4..00000000 --- a/src/test/resources/new-test-cases/core/RMLTC0023a-XML/output.nq +++ /dev/null @@ -1,5 +0,0 @@ - . - "30.0E0" . - . - "20.0E0" . - diff --git a/src/test/resources/new-test-cases/core/RMLTC0023b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0023b-JSON/README.md new file mode 100644 index 00000000..ac69aec3 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023b-JSON/README.md @@ -0,0 +1,40 @@ +## RMLTC0023b-JSON + +**Title**: "Invalid IRI template 2" + +**Description**: "Test handling of invalid IRI template" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "ID": 10, + "{Name}":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:subjectMap [ + rml:template "http://example.com/{{Name}}"; + rml:class foaf:Person; + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0019a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0023b-JSON/mapping.ttl similarity index 56% rename from src/test/resources/new-test-cases/core/RMLTC0019a-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0023b-JSON/mapping.ttl index 5618ce88..4c4e6923 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0019a-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0023b-JSON/mapping.ttl @@ -3,18 +3,14 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "persons.csv" + rml:path "student.json" ] ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "FirstName" - ]; - rml:predicate foaf:name - ]; rml:subjectMap [ - rml:reference "FirstName" + rml:template "http://example.com/{{Name}}"; + rml:class foaf:Person; ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0023b-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0023b-JSON/student.json new file mode 100644 index 00000000..2aa21689 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023b-JSON/student.json @@ -0,0 +1,6 @@ +{ + "students": [{ + "ID": 10, + "{Name}":"Venus" + }] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0023c-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0023c-JSON/README.md new file mode 100644 index 00000000..2b7b103d --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023c-JSON/README.md @@ -0,0 +1,41 @@ +## RMLTC0023c-JSON + +**Title**: "Invalid IRI template 3" + +**Description**: "Test handling of invalid IRI template" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "ID": 10, + "N\ame":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:subjectMap [ + rml:template "http://example.com/{N\ame}"; + rml:class foaf:Person; + ] . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0000-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0023c-JSON/mapping.ttl similarity index 55% rename from src/test/resources/new-test-cases/core/RMLTC0000-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0023c-JSON/mapping.ttl index 6e17117b..e23f6935 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0000-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0023c-JSON/mapping.ttl @@ -3,18 +3,15 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student.csv" + rml:path "student.json" ] ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; rml:subjectMap [ - rml:template "http://example.com/{Name}" + rml:template "http://example.com/{N\ame}"; + rml:class foaf:Person; ] . + diff --git a/src/test/resources/new-test-cases/core/RMLTC0023c-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0023c-JSON/student.json new file mode 100644 index 00000000..a905e537 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023c-JSON/student.json @@ -0,0 +1,6 @@ +{ + "students": [{ + "ID": 10, + "N\ame":"Venus" + }] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0023d-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0023d-JSON/README.md new file mode 100644 index 00000000..c3073f9c --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023d-JSON/README.md @@ -0,0 +1,41 @@ +## RMLTC0023d-JSON + +**Title**: "Invalid IRI template 4" + +**Description**: "Test handling of invalid IRI template" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "ID": 10, + "Name":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:subjectMap [ + rml:template "http://example.com/{Name\}"; + rml:class foaf:Person; + ] . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0001a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0023d-JSON/mapping.ttl similarity index 55% rename from src/test/resources/new-test-cases/core/RMLTC0001a-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0023d-JSON/mapping.ttl index 6e17117b..0b46f351 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0001a-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0023d-JSON/mapping.ttl @@ -3,18 +3,15 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student.csv" + rml:path "student.json" ] ]; - rml:predicateObjectMap [ - rml:objectMap [ - rml:reference "Name" - ]; - rml:predicate foaf:name - ]; rml:subjectMap [ - rml:template "http://example.com/{Name}" + rml:template "http://example.com/{Name\}"; + rml:class foaf:Person; ] . + diff --git a/src/test/resources/new-test-cases/core/RMLTC0023d-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0023d-JSON/student.json new file mode 100644 index 00000000..0f6f797f --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023d-JSON/student.json @@ -0,0 +1,6 @@ +{ + "students": [{ + "ID": 10, + "Name":"Venus" + }] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0023e-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0023e-JSON/README.md new file mode 100644 index 00000000..f53f3caf --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023e-JSON/README.md @@ -0,0 +1,41 @@ +## RMLTC0023e-JSON + +**Title**: "Invalid IRI template 5" + +**Description**: "Test handling of invalid IRI template" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "ID": 10, + "{Name}":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:subjectMap [ + rml:template "http://example.com/{\\{Name\\}}"; + rml:class foaf:Person; + ] . + + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0023e-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0023e-JSON/mapping.ttl new file mode 100644 index 00000000..6a619068 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023e-JSON/mapping.ttl @@ -0,0 +1,17 @@ +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:subjectMap [ + rml:template "http://example.com/{\\{Name\\}}"; + rml:class foaf:Person; + ] . + diff --git a/src/test/resources/new-test-cases/core/RMLTC0023e-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0023e-JSON/student.json new file mode 100644 index 00000000..2aa21689 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023e-JSON/student.json @@ -0,0 +1,6 @@ +{ + "students": [{ + "ID": 10, + "{Name}":"Venus" + }] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0023f-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0023f-JSON/README.md new file mode 100644 index 00000000..ab1bb28b --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023f-JSON/README.md @@ -0,0 +1,40 @@ +## RMLTC0023f-JSON + +**Title**: "Invalid IRI template 6" + +**Description**: "Test handling of invalid IRI template" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "ID": 10, + "N\ame":"Venus" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:subjectMap [ + rml:template "http://example.com/{N\\\ame}"; + rml:class foaf:Person; + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0023f-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0023f-JSON/mapping.ttl new file mode 100644 index 00000000..98c1d29e --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023f-JSON/mapping.ttl @@ -0,0 +1,16 @@ +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.students[*]"; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:subjectMap [ + rml:template "http://example.com/{N\\\ame}"; + rml:class foaf:Person; + ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0023f-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0023f-JSON/student.json new file mode 100644 index 00000000..a905e537 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0023f-JSON/student.json @@ -0,0 +1,6 @@ +{ + "students": [{ + "ID": 10, + "N\ame":"Venus" + }] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0025b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0025b-JSON/README.md new file mode 100644 index 00000000..d2bb61be --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0025b-JSON/README.md @@ -0,0 +1,49 @@ +## RMLTC0025b-JSON + +**Title**: "Usage of constant term maps in combination with explicitly defined term types" + +**Description**: "Tests the usage of constant term maps in combination with explicitly defined term types" + +**Error expected?** Yes + +**Input** +``` +{ + "students": [{ + "Name":"Venus" + }, + { + "Name":"Julio" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . +@prefix ex: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate ex:student + ]; + rml:subjectMap [ + rml:constant "School"; + rml:termType rml:BlankNode + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0001b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0025b-JSON/mapping.ttl similarity index 61% rename from src/test/resources/new-test-cases/core/RMLTC0001b-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0025b-JSON/mapping.ttl index 7457432a..387a3943 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0001b-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0025b-JSON/mapping.ttl @@ -1,21 +1,23 @@ @prefix foaf: . @prefix rml: . +@prefix ex: . a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student.csv" + rml:path "student.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Name" + rml:reference "$.Name" ]; - rml:predicate foaf:name + rml:predicate ex:student ]; rml:subjectMap [ - rml:template "{Name}"; + rml:constant "School"; rml:termType rml:BlankNode - ] . + ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0025b-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0025b-JSON/student.json new file mode 100644 index 00000000..10ebb2e1 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0025b-JSON/student.json @@ -0,0 +1,8 @@ +{ + "students": [{ + "Name":"Venus" + }, + { + "Name":"Julio" + }] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/README.md new file mode 100644 index 00000000..def1aa02 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/README.md @@ -0,0 +1,53 @@ +## RMLTC0026a-JSON + +**Title**: "Generation of triples from arrays" + +**Description**: "Tests the generation of triples from array input data structures" + +**Error expected?** No + +**Input** +``` +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amounts":[30, 40, 50]} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amounts[*]" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "http://example.com/Student/{$.fname}/{$.lname}" + ] . + +``` + +**Output** +``` + "30" . + "40" . + "50" . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0012c-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/mapping.ttl similarity index 63% rename from src/test/resources/new-test-cases/core/RMLTC0012c-XML/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0026a-JSON/mapping.ttl index 70f35312..ea839cde 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0012c-XML/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/mapping.ttl @@ -4,8 +4,8 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/Persons/Person"; - rml:referenceFormulation rml:XPath; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; rml:path "persons.json" @@ -13,13 +13,10 @@ ]; rml:predicateObjectMap [ rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal - ]; - rml:predicate foaf:name - ], [ - rml:objectMap [ - rml:reference "amount" + rml:reference "$.amounts[*]" ]; rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "http://example.com/Student/{$.fname}/{$.lname}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/output.nq new file mode 100644 index 00000000..3b8e09fb --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/output.nq @@ -0,0 +1,3 @@ + "30" . + "40" . + "50" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/persons.json b/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/persons.json new file mode 100644 index 00000000..705406a9 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0026a-JSON/persons.json @@ -0,0 +1,5 @@ +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amounts":[30, 40, 50]} + ] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0026b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0026b-JSON/README.md new file mode 100644 index 00000000..61e74f5c --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0026b-JSON/README.md @@ -0,0 +1,45 @@ +## RMLTC0026b-JSON + +**Title**: "Generation of triples from arrays with wrong reference" + +**Description**: "Tests the generation of triples from array input data structures. Test should fail as reference points to the array and not the values of the array" + +**Error expected?** Yes + +**Input** +``` +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amounts":[30, 40, 50]} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amounts" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "http://example.com/Student/{$.fname}/{$.lname}" + ] . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0005a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0026b-JSON/mapping.ttl similarity index 62% rename from src/test/resources/new-test-cases/core/RMLTC0005a-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0026b-JSON/mapping.ttl index 4b90b2ea..780bd99a 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0005a-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0026b-JSON/mapping.ttl @@ -4,19 +4,19 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "ious.csv" + rml:path "persons.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "amount" + rml:reference "$.amounts" ]; - rml:predicate ex:owes + rml:predicate ex:amount ]; rml:subjectMap [ - rml:class foaf:Person; - rml:template "http://example.com/{fname};{lname}" + rml:template "http://example.com/Student/{$.fname}/{$.lname}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0026b-JSON/persons.json b/src/test/resources/new-test-cases/core/RMLTC0026b-JSON/persons.json new file mode 100644 index 00000000..705406a9 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0026b-JSON/persons.json @@ -0,0 +1,5 @@ +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amounts":[30, 40, 50]} + ] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/README.md new file mode 100644 index 00000000..f1710ce8 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/README.md @@ -0,0 +1,75 @@ +## RMLTC0027a-JSON + +**Title**: "Two triples maps, one with rml:baseIRI and one without and generating absolute IRIs" + +**Description**: "Tests the generation of triples from relative IRIs using base IRI" + +**Error expected?** No + +**Input** +``` +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:baseIRI ; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "{$.fname}" + ] . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "http://example.com/{$.lname}" + ] . + +``` + +**Output** +``` + "30" . + "20" . + "30" . + "20" . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/mapping.ttl similarity index 59% rename from src/test/resources/new-test-cases/core/RMLTC0012b-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0027a-JSON/mapping.ttl index 1b55acb8..41ed54da 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/mapping.ttl @@ -3,40 +3,40 @@ @prefix rml: . a rml:TriplesMap; + rml:baseIRI ; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "persons.csv" + rml:path "persons.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal + rml:reference "$.amount" ]; - rml:predicate foaf:name + rml:predicate ex:amount ]; rml:subjectMap [ - rml:template "{fname}{lname}"; - rml:termType rml:BlankNode + rml:template "{$.fname}" ] . a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "lives.csv" + rml:path "persons.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "city" + rml:reference "$.amount" ]; - rml:predicate ex:city + rml:predicate ex:amount ]; rml:subjectMap [ - rml:template "{fname}{lname}"; - rml:termType rml:BlankNode + rml:template "http://example.com/{$.lname}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/output.nq new file mode 100644 index 00000000..0fbfa129 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/output.nq @@ -0,0 +1,4 @@ + "30" . + "20" . + "30" . + "20" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/persons.json b/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/persons.json new file mode 100644 index 00000000..b7f1a04f --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027a-JSON/persons.json @@ -0,0 +1,6 @@ +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20} + ] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/README.md new file mode 100644 index 00000000..0caf95be --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/README.md @@ -0,0 +1,76 @@ +## RMLTC0027b-JSON + +**Title**: "Two triples maps, one with rml:baseIRI one one without and generating relative IRIs using baseIRI parameter" + +**Description**: "Tests the generation of triples from relative IRI using base IRI parameter" + +**Error expected?** No + +**Input** +``` +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . +@base . + + a rml:TriplesMap; + rml:baseIRI ; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "{$.fname}" + ] . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "{$.lname}" + ] . + +``` + +**Output** +``` + "30" . + "20" . + "30" . + "20" . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/mapping.ttl similarity index 59% rename from src/test/resources/new-test-cases/core/RMLTC0004a-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0027b-JSON/mapping.ttl index e2fd7725..bf2b788c 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/mapping.ttl @@ -1,41 +1,43 @@ @prefix ex: . @prefix foaf: . @prefix rml: . +@base . a rml:TriplesMap; + rml:baseIRI ; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student_sport.csv" + rml:path "persons.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Student" + rml:reference "$.amount" ]; - rml:predicate foaf:name + rml:predicate ex:amount ]; rml:subjectMap [ - rml:class ex:Student; - rml:template "http://example.com/{Student}" + rml:template "{$.fname}" ] . a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student_sport.csv" + rml:path "persons.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Sport" + rml:reference "$.amount" ]; - rml:predicate foaf:name + rml:predicate ex:amount ]; rml:subjectMap [ - rml:class ex:Sport; - rml:template "http://example.com/{Sport}" + rml:template "{$.lname}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/output.nq new file mode 100644 index 00000000..59137781 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/output.nq @@ -0,0 +1,4 @@ + "30" . + "20" . + "30" . + "20" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/persons.json b/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/persons.json new file mode 100644 index 00000000..b7f1a04f --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027b-JSON/persons.json @@ -0,0 +1,6 @@ +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20} + ] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/README.md new file mode 100644 index 00000000..b93968e1 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/README.md @@ -0,0 +1,76 @@ +## RMLTC0027c-JSON + +**Title**: "Two triples maps, both with rml:baseIRI defined" + +**Description**: "Tests the generation of triples using relative IRIs with base IRIs defined only in triples maps, without base IRI parameter" + +**Error expected?** No + +**Input** +``` +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . + + a rml:TriplesMap; + rml:baseIRI ; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "{$.fname}" + ] . + + a rml:TriplesMap; + rml:baseIRI ; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "{$.lname}" + ] . + +``` + +**Output** +``` + "30" . + "20" . + "30" . + "20" . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0004a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/mapping.ttl similarity index 57% rename from src/test/resources/new-test-cases/core/RMLTC0004a-XML/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0027c-JSON/mapping.ttl index 9ccb70fa..d2825418 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0004a-XML/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/mapping.ttl @@ -3,41 +3,41 @@ @prefix rml: . a rml:TriplesMap; + rml:baseIRI ; rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student_sport.xml" + rml:path "persons.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Student" + rml:reference "$.amount" ]; - rml:predicate foaf:name + rml:predicate ex:amount ]; rml:subjectMap [ - rml:class ex:Student; - rml:template "http://example.com/{Student}" + rml:template "{$.fname}" ] . a rml:TriplesMap; + rml:baseIRI ; rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student_sport.xml" + rml:path "persons.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "Sport" + rml:reference "$.amount" ]; - rml:predicate foaf:name + rml:predicate ex:amount ]; rml:subjectMap [ - rml:class ex:Sport; - rml:template "http://example.com/{Sport}" + rml:template "{$.lname}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/output.nq new file mode 100644 index 00000000..0fbfa129 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/output.nq @@ -0,0 +1,4 @@ + "30" . + "20" . + "30" . + "20" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/persons.json b/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/persons.json new file mode 100644 index 00000000..b7f1a04f --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027c-JSON/persons.json @@ -0,0 +1,6 @@ +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20} + ] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/README.md new file mode 100644 index 00000000..1b730883 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/README.md @@ -0,0 +1,77 @@ +## RMLTC0027d-JSON + +**Title**: "Two triples maps,both with rml:bseIRI defined and baseIRI parameter defined" + +**Description**: "Tests the generation of triples by with base IRIs different than the base IRI parameter" + +**Error expected?** No + +**Input** +``` +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20} + ] +} + +``` + +**Mapping** +``` +@prefix ex: . +@prefix foaf: . +@prefix rml: . +@base . + + a rml:TriplesMap; + rml:baseIRI ; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "{$.fname}" + ] . + + a rml:TriplesMap; + rml:baseIRI ; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "persons.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.amount" + ]; + rml:predicate ex:amount + ]; + rml:subjectMap [ + rml:template "{$.lname}" + ] . + +``` + +**Output** +``` + "30" . + "20" . + "30" . + "20" . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0012b-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/mapping.ttl similarity index 57% rename from src/test/resources/new-test-cases/core/RMLTC0012b-XML/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0027d-JSON/mapping.ttl index 4b614e06..09c495ce 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0012b-XML/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/mapping.ttl @@ -1,44 +1,44 @@ @prefix ex: . @prefix foaf: . @prefix rml: . +@base . a rml:TriplesMap; + rml:baseIRI ; rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/Persons/Person"; - rml:referenceFormulation rml:XPath; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "persons.xml" + rml:path "persons.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ - rml:template "{fname} {lname}"; - rml:termType rml:Literal + rml:reference "$.amount" ]; - rml:predicate foaf:name + rml:predicate ex:amount ]; rml:subjectMap [ - rml:template "{fname}{lname}"; - rml:termType rml:BlankNode + rml:template "{$.fname}" ] . a rml:TriplesMap; + rml:baseIRI ; rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/Lives/Live"; - rml:referenceFormulation rml:XPath; + rml:iterator "$.persons[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "lives.xml" + rml:path "persons.json" ] ]; rml:predicateObjectMap [ rml:objectMap [ - rml:reference "city" + rml:reference "$.amount" ]; - rml:predicate ex:city + rml:predicate ex:amount ]; rml:subjectMap [ - rml:template "{fname}{lname}"; - rml:termType rml:BlankNode + rml:template "{$.lname}" ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/output.nq new file mode 100644 index 00000000..d39b1093 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/output.nq @@ -0,0 +1,4 @@ + "30" . + "20" . + "30" . + "20" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/persons.json b/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/persons.json new file mode 100644 index 00000000..b7f1a04f --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0027d-JSON/persons.json @@ -0,0 +1,6 @@ +{ + "persons": [ + {"fname":"Bob","lname":"Smith","amount":30}, + {"fname":"Sue","lname":"Jones","amount":20} + ] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/README.md new file mode 100644 index 00000000..533278be --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/README.md @@ -0,0 +1,58 @@ +## RMLTC0028a-JSON + +**Title**: "Generation of triples using the URI term type" + +**Description**: "Tests the generation of triples with a URI term type in the subject or object" + +**Error expected?** No + +**Input** +``` +{ + "students": [ + {"Name": "Alice"}, + {"Name": "Bob"}, + {"Name": "Bob/Charles"}, + {"Name": "Danny"}, + {"Name": "Emily Smith"} + ] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rdf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:object foaf:Person; + rml:predicate rdf:type + ]; + rml:subjectMap [ + rml:template "http://example.com/Person/{$.Name}"; + rml:termType rml:URI + ] . + +``` + +**Output** +``` + . + . + . + . + . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-CSV/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/mapping.ttl similarity index 70% rename from src/test/resources/new-test-cases/core/RMLTC0007a-CSV/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0028a-JSON/mapping.ttl index 0c4bf5c7..2d873b5a 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-CSV/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/mapping.ttl @@ -4,10 +4,11 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:referenceFormulation rml:CSV; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student.csv" + rml:path "student.json" ] ]; rml:predicateObjectMap [ @@ -15,5 +16,6 @@ rml:predicate rdf:type ]; rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" + rml:template "http://example.com/Person/{$.Name}"; + rml:termType rml:URI ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/output.nq new file mode 100644 index 00000000..0d4f5564 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/output.nq @@ -0,0 +1,5 @@ + . + . + . + . + . diff --git a/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/student.json new file mode 100644 index 00000000..c1c6e961 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0028a-JSON/student.json @@ -0,0 +1,9 @@ +{ + "students": [ + {"Name": "Alice"}, + {"Name": "Bob"}, + {"Name": "Bob/Charles"}, + {"Name": "Danny"}, + {"Name": "Emily Smith"} + ] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/README.md new file mode 100644 index 00000000..8622292f --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/README.md @@ -0,0 +1,58 @@ +## RMLTC0028b-JSON + +**Title**: "Generation of triples using the UnsafeURI term type" + +**Description**: "Tests the generation of triples with a UnsafeURI term type in the subject or object" + +**Error expected?** No + +**Input** +``` +{ + "students": [ + {"Name": "Alice"}, + {"Name": "Bob"}, + {"Name": "Bob/Charles"}, + {"Name": "Danny"}, + {"Name": "Emily Smith"} + ] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rdf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:object foaf:Person; + rml:predicate rdf:type + ]; + rml:subjectMap [ + rml:template "http://example.com/Person/{$.Name}"; + rml:termType rml:UnsafeURI + ] . + +``` + +**Output** +``` + . + . + . + . + . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0007a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/mapping.ttl similarity index 69% rename from src/test/resources/new-test-cases/core/RMLTC0007a-XML/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0028b-JSON/mapping.ttl index 90686dfc..803c17e1 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0007a-XML/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/mapping.ttl @@ -4,11 +4,11 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student.xml" + rml:path "student.json" ] ]; rml:predicateObjectMap [ @@ -16,5 +16,6 @@ rml:predicate rdf:type ]; rml:subjectMap [ - rml:template "http://example.com/Student/{ID}/{FirstName}" + rml:template "http://example.com/Person/{$.Name}"; + rml:termType rml:UnsafeURI ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/output.nq new file mode 100644 index 00000000..0d4f5564 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/output.nq @@ -0,0 +1,5 @@ + . + . + . + . + . diff --git a/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/student.json new file mode 100644 index 00000000..c1c6e961 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0028b-JSON/student.json @@ -0,0 +1,9 @@ +{ + "students": [ + {"Name": "Alice"}, + {"Name": "Bob"}, + {"Name": "Bob/Charles"}, + {"Name": "Danny"}, + {"Name": "Emily Smith"} + ] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/README.md new file mode 100644 index 00000000..45998be4 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/README.md @@ -0,0 +1,58 @@ +## RMLTC0028c-JSON + +**Title**: "Generation of triples using the UnsafeIRI term type" + +**Description**: "Tests the generation of triples with a UnsafeIRI term type in the subject or object" + +**Error expected?** No + +**Input** +``` +{ + "students": [ + {"Name": "Alice"}, + {"Name": "Bob"}, + {"Name": "Bob/Charles"}, + {"Name": "Danny"}, + {"Name": "Emily Smith"} + ] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rdf: . +@prefix rml: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:object foaf:Person; + rml:predicate rdf:type + ]; + rml:subjectMap [ + rml:template "http://example.com/Person/{$.Name}"; + rml:termType rml:UnsafeIRI + ] . + +``` + +**Output** +``` + . + . + . + . + . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0020a-XML/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/mapping.ttl similarity index 69% rename from src/test/resources/new-test-cases/core/RMLTC0020a-XML/mapping.ttl rename to src/test/resources/new-test-cases/core/RMLTC0028c-JSON/mapping.ttl index 8a179cce..4a03ab54 100644 --- a/src/test/resources/new-test-cases/core/RMLTC0020a-XML/mapping.ttl +++ b/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/mapping.ttl @@ -4,11 +4,11 @@ a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:iterator "/students/student"; - rml:referenceFormulation rml:XPath; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; rml:source [ a rml:RelativePathSource; rml:root rml:MappingDirectory; - rml:path "student.xml" + rml:path "student.json" ] ]; rml:predicateObjectMap [ @@ -16,6 +16,6 @@ rml:predicate rdf:type ]; rml:subjectMap [ - rml:template "{Name}"; - rml:termType rml:IRI + rml:template "http://example.com/Person/{$.Name}"; + rml:termType rml:UnsafeIRI ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/output.nq new file mode 100644 index 00000000..0d4f5564 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/output.nq @@ -0,0 +1,5 @@ + . + . + . + . + . diff --git a/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/student.json new file mode 100644 index 00000000..c1c6e961 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0028c-JSON/student.json @@ -0,0 +1,9 @@ +{ + "students": [ + {"Name": "Alice"}, + {"Name": "Bob"}, + {"Name": "Bob/Charles"}, + {"Name": "Danny"}, + {"Name": "Emily Smith"} + ] +} diff --git a/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/README.md new file mode 100644 index 00000000..47f6bdc6 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/README.md @@ -0,0 +1,44 @@ +## RMLTC0029a-JSON + +**Title**: "Generation of the right datatype for a constant in the mapping" + +**Description**: "Test the honoring of the datatype specified by the constant term in the mapping" + +**Error expected?** No + +**Input** +``` +[ { "id": "0", "foo": "bar" } ] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix rr: . +@prefix ql: . + + [ + a rr:TriplesMap; + rml:logicalSource [ + rml:source "data.json" ; + rml:referenceFormulation ql:JSONPath ; + rml:iterator "$[*]"; + ]; + rr:subjectMap [ + rr:template "https://example.org/instances/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicate ; + rr:object true ; # datatype is boolean + ]; + ] . + +``` + +**Output** +``` + "true"^^ . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/data.json b/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/data.json new file mode 100644 index 00000000..64a11ae8 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/data.json @@ -0,0 +1 @@ +[ { "id": "0", "foo": "bar" } ] diff --git a/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/mapping.ttl new file mode 100644 index 00000000..336afb27 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/mapping.ttl @@ -0,0 +1,19 @@ +@prefix rml: . +@prefix rr: . +@prefix ql: . + + [ + a rr:TriplesMap; + rml:logicalSource [ + rml:source "data.json" ; + rml:referenceFormulation ql:JSONPath ; + rml:iterator "$[*]"; + ]; + rr:subjectMap [ + rr:template "https://example.org/instances/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicate ; + rr:object true ; # datatype is boolean + ]; + ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/output.nq new file mode 100644 index 00000000..ed7a2cd1 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029a-JSON/output.nq @@ -0,0 +1 @@ + "true"^^ . diff --git a/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/README.md new file mode 100644 index 00000000..840a7b00 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/README.md @@ -0,0 +1,50 @@ +## RMLTC0029b-JSON + +**Title**: "Generation of all named graphs when rml:defaultGraph is involved" + +**Description**: "Test if the default graph is also generated correctly." + +**Error expected?** No + +**Input** +``` +[ { "id": "0", "name": "Alice" } ] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix rr: . +@prefix ql: . +@prefix s: . + + [ + a rr:TriplesMap; + rml:logicalSource [ + rml:source "data.json" ; + rml:referenceFormulation ql:JSONPath ; + rml:iterator "$[*]"; + ]; + rr:subjectMap [ + rr:template "https://example.org/instances/{id}"; + rr:class s:Person ; + rr:graph ; + ]; + rr:predicateObjectMap [ + rr:predicate s:givenName ; + rr:objectMap [ rml:reference "name" ] ; + rr:graph rr:defaultGraph ; + ]; + ] . + +``` + +**Output** +``` + "Alice". + "Alice" . + . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/data.json b/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/data.json new file mode 100644 index 00000000..4087270d --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/data.json @@ -0,0 +1 @@ +[ { "id": "0", "name": "Alice" } ] diff --git a/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/mapping.ttl new file mode 100644 index 00000000..6f1a8f8f --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/mapping.ttl @@ -0,0 +1,23 @@ +@prefix rml: . +@prefix rr: . +@prefix ql: . +@prefix s: . + + [ + a rr:TriplesMap; + rml:logicalSource [ + rml:source "data.json" ; + rml:referenceFormulation ql:JSONPath ; + rml:iterator "$[*]"; + ]; + rr:subjectMap [ + rr:template "https://example.org/instances/{id}"; + rr:class s:Person ; + rr:graph ; + ]; + rr:predicateObjectMap [ + rr:predicate s:givenName ; + rr:objectMap [ rml:reference "name" ] ; + rr:graph rr:defaultGraph ; + ]; + ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/output.nq new file mode 100644 index 00000000..8e306356 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029b-JSON/output.nq @@ -0,0 +1,3 @@ + "Alice". + "Alice" . + . diff --git a/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/README.md new file mode 100644 index 00000000..8050f926 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/README.md @@ -0,0 +1,44 @@ +## RMLTC0029c-JSON + +**Title**: "Generation of the right language tag for a constant in the mapping" + +**Description**: "Test the honoring of the language tag specified by the constant term in the mapping" + +**Error expected?** No + +**Input** +``` +[ { "id": "0", "foo": "bar" } ] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix rr: . +@prefix ql: . + + [ + a rr:TriplesMap; + rml:logicalSource [ + rml:source "data.json" ; + rml:referenceFormulation ql:JSONPath ; + rml:iterator "$[*]"; + ]; + rr:subjectMap [ + rr:template "https://example.org/instances/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicate ; + rr:object "train"@en ; + ]; + ] . + +``` + +**Output** +``` + "train"@en . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/data.json b/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/data.json new file mode 100644 index 00000000..64a11ae8 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/data.json @@ -0,0 +1 @@ +[ { "id": "0", "foo": "bar" } ] diff --git a/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/mapping.ttl new file mode 100644 index 00000000..e6cf554f --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/mapping.ttl @@ -0,0 +1,19 @@ +@prefix rml: . +@prefix rr: . +@prefix ql: . + + [ + a rr:TriplesMap; + rml:logicalSource [ + rml:source "data.json" ; + rml:referenceFormulation ql:JSONPath ; + rml:iterator "$[*]"; + ]; + rr:subjectMap [ + rr:template "https://example.org/instances/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicate ; + rr:object "train"@en ; + ]; + ] . diff --git a/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/output.nq new file mode 100644 index 00000000..55246cc3 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0029c-JSON/output.nq @@ -0,0 +1 @@ + "train"@en . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0001a/README.md b/src/test/resources/new-test-cases/io/RMLSTC0001a/README.md new file mode 100644 index 00000000..21e82669 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0001a/README.md @@ -0,0 +1,94 @@ +## RMLSTC0001a + +**Title**: Source with UTF-8 encoding + +**Description**: Test source with UTF-8 encoding + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json" + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0001a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0001a/mapping.ttl index f7534527..6ebc43f3 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0001a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0001a/mapping.ttl @@ -1,16 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; - rml:encoding rml:UTF-8; -. <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json" + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0001b/README.md b/src/test/resources/new-test-cases/io/RMLSTC0001b/README.md new file mode 100644 index 00000000..32997daa --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0001b/README.md @@ -0,0 +1,94 @@ +## RMLSTC0001b + +**Title**: Source with UTF-16 encoding + +**Description**: Test source with UTF-16 encoding + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends-UTF16.json" + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0001b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0001b/mapping.ttl index 46c9b385..f669f6b3 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0001b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0001b/mapping.ttl @@ -1,16 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; - rml:encoding rml:UTF-16; -. <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends-UTF16.json" + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0002a/README.md b/src/test/resources/new-test-cases/io/RMLSTC0002a/README.md new file mode 100644 index 00000000..d7f3ae9a --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0002a/README.md @@ -0,0 +1,94 @@ +## RMLSTC0002a + +**Title**: Source no compression + +**Description**: Test source without compression + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json" + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0002a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0002a/mapping.ttl index 5275717a..6ebc43f3 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0002a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0002a/mapping.ttl @@ -1,15 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json" + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0002b/README.md b/src/test/resources/new-test-cases/io/RMLSTC0002b/README.md new file mode 100644 index 00000000..2919e46e --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0002b/README.md @@ -0,0 +1,66 @@ +## RMLSTC0002b + +**Title**: Source GZip compression + +**Description**: Test source with GZip compression + +**Error expected?** No + +**Input** + `Friends.json.gz` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json.gz"; + rml:compression rml:gzip; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0002b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0002b/mapping.ttl index 3420a299..c76bb87d 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0002b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0002b/mapping.ttl @@ -1,16 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; - rml:compression rml:gzip; -. <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json.gz"; + rml:compression rml:gzip; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0002c/README.md b/src/test/resources/new-test-cases/io/RMLSTC0002c/README.md new file mode 100644 index 00000000..13324fcc --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0002c/README.md @@ -0,0 +1,65 @@ +## RMLSTC0002c + +**Title**: Source Zip compression + +**Description**: Test source with ZIP compression + +**Error expected?** No + +**Input** + `Friends.json.zip` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json.zip"; + rml:compression rml:zip; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0002c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0002c/mapping.ttl index c06e93be..18a50cf2 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0002c/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0002c/mapping.ttl @@ -1,16 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; - rml:compression rml:zip; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json.zip"; + rml:compression rml:zip; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0002d/README.md b/src/test/resources/new-test-cases/io/RMLSTC0002d/README.md new file mode 100644 index 00000000..74d1a384 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0002d/README.md @@ -0,0 +1,65 @@ +## RMLSTC0002d + +**Title**: Source TarXz compression + +**Description**: Test source with TarXZ compression + +**Error expected?** No + +**Input** + `Friends.json.tar.xz` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json.tar.xz"; + rml:compression rml:tarxz; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0002d/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0002d/mapping.ttl index 43c5922e..175631be 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0002d/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0002d/mapping.ttl @@ -1,16 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; - rml:compression rml:tarxz; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json.tar.xz"; + rml:compression rml:tarxz; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0002e/README.md b/src/test/resources/new-test-cases/io/RMLSTC0002e/README.md new file mode 100644 index 00000000..b7144ef3 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0002e/README.md @@ -0,0 +1,65 @@ +## RMLSTC0002e + +**Title**: Source TarGzip compression + +**Description**: Test source with TarGZip compression + +**Error expected?** No + +**Input** + `Friends.json.tar.gz` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json.tar.gz"; + rml:compression rml:targz; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0002e/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0002e/mapping.ttl index 9fc116f6..d08b82bd 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0002e/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0002e/mapping.ttl @@ -1,16 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; - rml:compression rml:targz; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json.tar.gz"; + rml:compression rml:targz; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0003/README.md b/src/test/resources/new-test-cases/io/RMLSTC0003/README.md new file mode 100644 index 00000000..0376f5dd --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0003/README.md @@ -0,0 +1,83 @@ +## RMLSTC0003 + +**Title**: Source with query + +**Description**: Test source which requires a query + +**Error expected?** No + +**Input** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:path "./Friends.nt"; + ]; + rml:iterator """ + PREFIX foaf: + + SELECT ?person ?name ?age WHERE { + ?person foaf:name ?name . + ?person foaf:age ?age . + } + """; + rml:referenceFormulation formats:SPARQL_Results_CSV; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:reference "person"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0003/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0003/mapping.ttl index f4a8bc06..78cbc569 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0003/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0003/mapping.ttl @@ -1,12 +1,11 @@ @prefix rml: . @prefix foaf: . -@prefix void: . @prefix formats: . @base . <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source [ a rml:RelativePathSource; + rml:source [ a rml:FilePath; rml:path "./Friends.nt"; ]; rml:iterator """ diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004a/Friends-NULL.csv b/src/test/resources/new-test-cases/io/RMLSTC0004a/Friends-NULL.csv index ab5f1924..6a82739b 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0004a/Friends-NULL.csv +++ b/src/test/resources/new-test-cases/io/RMLSTC0004a/Friends-NULL.csv @@ -1,7 +1,7 @@ -id;name;age -0;Monica Geller;33 -1;Rachel Green;34 -2;Joey Tribbiani;35 -3;Chandler Bing;36 -4;Ross Geller;37 -5;; +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 +5,, diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004a/README.md b/src/test/resources/new-test-cases/io/RMLSTC0004a/README.md new file mode 100644 index 00000000..21f0a61b --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0004a/README.md @@ -0,0 +1,73 @@ +## RMLSTC0004a + +**Title**: Source with default NULL values + +**Description**: Test source with default NULL values + +**Error expected?** No + +**Input** +``` +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 +5,, + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends-NULL.csv"; + ]; + rml:referenceFormulation rml:CSV; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004a/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0004a/default.nq index 93cbe17d..d9456768 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0004a/default.nq +++ b/src/test/resources/new-test-cases/io/RMLSTC0004a/default.nq @@ -8,5 +8,3 @@ "Chandler Bing" . "37" . "Ross Geller" . - "" . - "" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0004a/mapping.ttl index ff1b01ad..aa44cf16 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0004a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0004a/mapping.ttl @@ -1,21 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix csvw: . @prefix xsd: . @base . -<#CSVWSourceAccess> a rml:Source, csvw:Table; - csvw:url "https://kg-construct.github.io/rml-resources/resources/rml-io/RMLSTC0004a/Friends-NULL.csv"^^xsd:anyURI ; - csvw:dialect [ a csvw:Dialect; - csvw:delimiter ";"; - csvw:encoding "UTF-8"; - csvw:header "1"^^xsd:boolean; - ]; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#CSVWSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends-NULL.csv"; + ]; rml:referenceFormulation rml:CSV; ]; rml:subjectMap [ a rml:SubjectMap; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004b/Friends-NULL.csv b/src/test/resources/new-test-cases/io/RMLSTC0004b/Friends-NULL.csv index ab5f1924..6a82739b 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0004b/Friends-NULL.csv +++ b/src/test/resources/new-test-cases/io/RMLSTC0004b/Friends-NULL.csv @@ -1,7 +1,7 @@ -id;name;age -0;Monica Geller;33 -1;Rachel Green;34 -2;Joey Tribbiani;35 -3;Chandler Bing;36 -4;Ross Geller;37 -5;; +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 +5,, diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004b/README.md b/src/test/resources/new-test-cases/io/RMLSTC0004b/README.md new file mode 100644 index 00000000..52cbcb47 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0004b/README.md @@ -0,0 +1,74 @@ +## RMLSTC0004b + +**Title**: Source with one NULL value + +**Description**: Test source with one NULL value defined + +**Error expected?** No + +**Input** +``` +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 +5,, + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends-NULL.csv"; + rml:null ""; + ]; + rml:referenceFormulation rml:CSV; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0004b/mapping.ttl index 69dcc3c9..bb39b80c 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0004b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0004b/mapping.ttl @@ -1,23 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix csvw: . @prefix xsd: . @base . -<#CSVWSourceAccess> a rml:Source, csvw:Table; - csvw:url "https://kg-construct.github.io/rml-resources/resources/rml-io/RMLSTC0004b/Friends-NULL.csv"^^xsd:anyURI ; - csvw:dialect [ a csvw:Dialect; - csvw:delimiter ";"; - csvw:encoding "UTF-8"; - csvw:header "1"^^xsd:boolean; - ]; - # Empty value is considered NULL - rml:null ""; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#CSVWSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends-NULL.csv"; + rml:null ""; + ]; rml:referenceFormulation rml:CSV; ]; rml:subjectMap [ a rml:SubjectMap; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004c/Friends-NULL.csv b/src/test/resources/new-test-cases/io/RMLSTC0004c/Friends-NULL.csv new file mode 100644 index 00000000..9fe19573 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0004c/Friends-NULL.csv @@ -0,0 +1,8 @@ +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 +5,, +6,NULL,NULL diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004c/Friends-NULL2.csv b/src/test/resources/new-test-cases/io/RMLSTC0004c/Friends-NULL2.csv deleted file mode 100644 index 2bbf9a5d..00000000 --- a/src/test/resources/new-test-cases/io/RMLSTC0004c/Friends-NULL2.csv +++ /dev/null @@ -1,8 +0,0 @@ -id;name;age -0;Monica Geller;33 -1;Rachel Green;34 -2;Joey Tribbiani;35 -3;Chandler Bing;36 -4;Ross Geller;37 -5;; -6;NULL;NULL diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004c/README.md b/src/test/resources/new-test-cases/io/RMLSTC0004c/README.md new file mode 100644 index 00000000..936b9430 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0004c/README.md @@ -0,0 +1,76 @@ +## RMLSTC0004c + +**Title**: Source with multiple NULL values + +**Description**: Test source with multiple NULL values defined + +**Error expected?** No + +**Input** +``` +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 +5,, +6,NULL,NULL + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends-NULL.csv"; + rml:null ""; + rml:null "NULL"; + ]; + rml:referenceFormulation rml:CSV; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0004c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0004c/mapping.ttl index 5adc9201..e864a958 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0004c/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0004c/mapping.ttl @@ -1,24 +1,16 @@ @prefix rml: . @prefix foaf: . -@prefix csvw: . @prefix xsd: . @base . -<#CSVWSourceAccess> a rml:Source, csvw:Table; - csvw:url "https://kg-construct.github.io/rml-resources/resources/rml-io/RMLSTC0004c/Friends-NULL2.csv"^^xsd:anyURI ; - csvw:dialect [ a csvw:Dialect; - csvw:delimiter ";"; - csvw:encoding "UTF-8"; - csvw:header "1"^^xsd:boolean; - ]; - # Empty value and 'NULL' are both considered NULL - rml:null ""; - rml:null "NULL"; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#CSVWSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends-NULL.csv"; + rml:null ""; + rml:null "NULL"; + ]; rml:referenceFormulation rml:CSV; ]; rml:subjectMap [ a rml:SubjectMap; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0005a/Friends-NULL.csv b/src/test/resources/new-test-cases/io/RMLSTC0005a/Friends-NULL.csv deleted file mode 100644 index ab5f1924..00000000 --- a/src/test/resources/new-test-cases/io/RMLSTC0005a/Friends-NULL.csv +++ /dev/null @@ -1,7 +0,0 @@ -id;name;age -0;Monica Geller;33 -1;Rachel Green;34 -2;Joey Tribbiani;35 -3;Chandler Bing;36 -4;Ross Geller;37 -5;; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0005b/Friends.csv b/src/test/resources/new-test-cases/io/RMLSTC0005b/Friends.csv deleted file mode 100644 index 0d40425fac25756f94dba61b1d882e623dc39b33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmZXOu?oUK5JX>{ugE8;iCWlcAp~rKKM<2c4>Uro{CV}Q*vS+(?7W@Z_bW57VWi_m z(si7D3ugKQcau!-v}Eu6suGh~r3&V{*0ksHO@o?r$-Q7|nT4*gDe<)BXr4K#>|V47 gx0I`NJ9}a}{QfD~N{rqV)Jm$>wYELf|4nO&50cp;`v3p{ diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006f/Friends.csv b/src/test/resources/new-test-cases/io/RMLSTC0006a/Friends.csv similarity index 100% rename from src/test/resources/new-test-cases/io/RMLSTC0006f/Friends.csv rename to src/test/resources/new-test-cases/io/RMLSTC0006a/Friends.csv diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006a/README.md b/src/test/resources/new-test-cases/io/RMLSTC0006a/README.md new file mode 100644 index 00000000..d01aa168 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0006a/README.md @@ -0,0 +1,77 @@ +## RMLSTC0006a + +**Title**: Source with D2RQ access description + +**Description**: Test source with D2RQ access description for SQL databases + +**Error expected?** No + +**Input** +``` +id, name, age +0, Monica Geller, 33 +1, Rachel Green, 34 +2, Joey Tribbiani, 35 +3, Chandler Bing, 36 +4, Ross Geller, 37 + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix d2rq: . +@prefix xsd: . +@base . + +<#D2RQSourceAccess> a rml:Source, d2rq:Database; + d2rq:jdbcDSN "$CONNECTIONDSN"; + d2rq:username "$USERNAME"; + d2rq:password "$PASSWORD" +. + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source <#D2RQSourceAccess>; + rml:referenceFormulation rml:SQL2008Table; + rml:iterator "Friends"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0006a/mapping.ttl index a5ff74ce..f8011e89 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0006a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0006a/mapping.ttl @@ -1,27 +1,30 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . +@prefix d2rq: . +@prefix xsd: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; +<#D2RQSourceAccess> a rml:Source, d2rq:Database; + d2rq:jdbcDSN "$CONNECTIONDSN"; + d2rq:username "$USERNAME"; + d2rq:password "$PASSWORD" . <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; - rml:referenceFormulation rml:JSONPath; - rml:iterator "$[*]"; + rml:source <#D2RQSourceAccess>; + rml:referenceFormulation rml:SQL2008Table; + rml:iterator "Friends"; ]; rml:subjectMap [ a rml:SubjectMap; - rml:template "http://example.org/{$.id}"; + rml:template "http://example.org/{id}"; ]; rml:predicateObjectMap [ a rml:PredicateObjectMap; rml:predicateMap [ a rml:PredicateMap; rml:constant foaf:name; ]; rml:objectMap [ a rml:ObjectMap; - rml:reference "$.name"; + rml:reference "name"; ]; ]; rml:predicateObjectMap [ a rml:PredicateObjectMap; @@ -29,7 +32,7 @@ rml:constant foaf:age; ]; rml:objectMap [ a rml:ObjectMap; - rml:reference "$.age"; + rml:reference "age"; ]; ]; . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.csv b/src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.csv new file mode 100644 index 00000000..928f08c1 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.csv @@ -0,0 +1,6 @@ +id, name, age +0, Monica Geller, 33 +1, Rachel Green, 34 +2, Joey Tribbiani, 35 +3, Chandler Bing, 36 +4, Ross Geller, 37 diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.nt b/src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.nt deleted file mode 100644 index d9456768..00000000 --- a/src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.nt +++ /dev/null @@ -1,10 +0,0 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006b/README.md b/src/test/resources/new-test-cases/io/RMLSTC0006b/README.md new file mode 100644 index 00000000..32b07359 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0006b/README.md @@ -0,0 +1,72 @@ +## RMLSTC0006b + +**Title**: Source with a Relative Path Source + +**Description**: Test access to a file + +**Error expected?** No + +**Input** +``` +id, name, age +0, Monica Geller, 33 +1, Rachel Green, 34 +2, Joey Tribbiani, 35 +3, Chandler Bing, 36 +4, Ross Geller, 37 + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath, rml:Source; + rml:root rml:CurrentWorkingDirectory; + rml:path "./Friends.csv" + ]; + rml:referenceFormulation rml:CSV; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0006b/mapping.ttl index a8277c66..f0d0f98e 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0006b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0006b/mapping.ttl @@ -1,26 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix void: . -@prefix formats: . +@prefix xsd: . @base . -<#VoIDSourceAccess> a rml:Source, void:Dataset; - void:dataDump ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#VoIDSourceAccess>; - rml:iterator """ - PREFIX foaf: - - SELECT ?id ?name ?age WHERE { - ?person foaf:name ?name . - ?person foaf:age ?age . - BIND(REPLACE(STR(?person),"http://example.org/", "") AS ?id) . - } - """; - rml:referenceFormulation formats:SPARQL_Results_CSV; + rml:source [ a rml:FilePath, rml:Source; + rml:root rml:CurrentWorkingDirectory; + rml:path "./Friends.csv" + ]; + rml:referenceFormulation rml:CSV; ]; rml:subjectMap [ a rml:SubjectMap; rml:template "http://example.org/{id}"; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006c/Friends.nt b/src/test/resources/new-test-cases/io/RMLSTC0006c/Friends.nt deleted file mode 100644 index d9456768..00000000 --- a/src/test/resources/new-test-cases/io/RMLSTC0006c/Friends.nt +++ /dev/null @@ -1,10 +0,0 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006c/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0006c/default.nq deleted file mode 100644 index d9456768..00000000 --- a/src/test/resources/new-test-cases/io/RMLSTC0006c/default.nq +++ /dev/null @@ -1,10 +0,0 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0006c/mapping.ttl deleted file mode 100644 index 30bbffa5..00000000 --- a/src/test/resources/new-test-cases/io/RMLSTC0006c/mapping.ttl +++ /dev/null @@ -1,45 +0,0 @@ -@prefix rml: . -@prefix foaf: . -@prefix sd: . -@prefix formats: . -@base . - -<#SDSourceAccess> a rml:Source, sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query; -. - -<#TriplesMap> a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:source <#SDSourceAccess>; - rml:iterator """ - PREFIX foaf: - - SELECT ?id ?name ?age WHERE { - ?person foaf:name ?name . - ?person foaf:age ?age . - BIND(REPLACE(STR(?person),"http://example.org/", "") AS ?id) . - } - """; - rml:referenceFormulation formats:SPARQL_Results_CSV; - ]; - rml:subjectMap [ a rml:SubjectMap; - rml:template "http://example.org/{id}"; - ]; - rml:predicateObjectMap [ a rml:PredicateObjectMap; - rml:predicateMap [ a rml:PredicateMap; - rml:constant foaf:name; - ]; - rml:objectMap [ a rml:ObjectMap; - rml:reference "name"; - ]; - ]; - rml:predicateObjectMap [ a rml:PredicateObjectMap; - rml:predicateMap [ a rml:PredicateMap; - rml:constant foaf:age; - ]; - rml:objectMap [ a rml:ObjectMap; - rml:reference "age"; - ]; - ]; -. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006d/Friends.csv b/src/test/resources/new-test-cases/io/RMLSTC0006d/Friends.csv deleted file mode 100644 index 04680d7c..00000000 --- a/src/test/resources/new-test-cases/io/RMLSTC0006d/Friends.csv +++ /dev/null @@ -1,6 +0,0 @@ -id;name;age -0;Monica Geller;33 -1;Rachel Green;34 -2;Joey Tribbiani;35 -3;Chandler Bing;36 -4;Ross Geller;37 diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006e/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0006e/default.nq deleted file mode 100644 index d9456768..00000000 --- a/src/test/resources/new-test-cases/io/RMLSTC0006e/default.nq +++ /dev/null @@ -1,10 +0,0 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006e/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0006e/mapping.ttl deleted file mode 100644 index bc4ef572..00000000 --- a/src/test/resources/new-test-cases/io/RMLSTC0006e/mapping.ttl +++ /dev/null @@ -1,43 +0,0 @@ -@prefix rml: . -@prefix foaf: . -@prefix td: . -@prefix htv: . -@prefix hctl: . -@base . - -<#WoTSourceAccess> a rml:Source, td:Thing; - td:hasPropertyAffordance [ - td:hasForm [ - # URL and content type - hctl:hasTarget "https://kg-construct.github.io/rml-resources/resources/rml-io/RMLSTC0006e/Friends.json"; - hctl:forContentType "application/json"; - ]; - ]; -. - -<#TriplesMap> a rml:TriplesMap; - rml:logicalSource [ a rml:LogicalSource; - rml:source <#WoTSourceAccess>; - rml:referenceFormulation rml:JSONPath; - rml:iterator "$[*]"; - ]; - rml:subjectMap [ a rml:SubjectMap; - rml:template "http://example.org/{$.id}"; - ]; - rml:predicateObjectMap [ a rml:PredicateObjectMap; - rml:predicateMap [ a rml:PredicateMap; - rml:constant foaf:name; - ]; - rml:objectMap [ a rml:ObjectMap; - rml:reference "$.name"; - ]; - ]; - rml:predicateObjectMap [ a rml:PredicateObjectMap; - rml:predicateMap [ a rml:PredicateMap; - rml:constant foaf:age; - ]; - rml:objectMap [ a rml:ObjectMap; - rml:reference "$.age"; - ]; - ]; -. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006f/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0006f/default.nq deleted file mode 100644 index d9456768..00000000 --- a/src/test/resources/new-test-cases/io/RMLSTC0006f/default.nq +++ /dev/null @@ -1,10 +0,0 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0007a/README.md b/src/test/resources/new-test-cases/io/RMLSTC0007a/README.md new file mode 100644 index 00000000..94abd46c --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0007a/README.md @@ -0,0 +1,94 @@ +## RMLSTC0007a + +**Title**: Source with JSONPath reference formulation + +**Description**: Test source with JSONPath reference formulation + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + rml:encoding rml:UTF-8 + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0007a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0007a/mapping.ttl index e1389226..00a2f99e 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0007a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0007a/mapping.ttl @@ -1,16 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; - rml:encoding rml:UTF-8; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + rml:encoding rml:UTF-8 + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0007b/README.md b/src/test/resources/new-test-cases/io/RMLSTC0007b/README.md new file mode 100644 index 00000000..90d9e4b9 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0007b/README.md @@ -0,0 +1,72 @@ +## RMLSTC0007b + +**Title**: Source with CSV reference formulation + +**Description**: Test source with Tabular reference formulation + +**Error expected?** No + +**Input** +``` +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.csv"; + ]; + rml:referenceFormulation rml:CSV; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0007b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0007b/mapping.ttl index 408e6e46..a1771888 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0007b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0007b/mapping.ttl @@ -1,21 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix csvw: . @prefix xsd: . @base . -<#CSVWSourceAccess> a rml:Source, csvw:Table; - csvw:url "https://kg-construct.github.io/rml-resources/resources/rml-io/RMLSTC0007b/Friends.csv"^^xsd:anyURI ; - csvw:dialect [ a csvw:Dialect; - csvw:delimiter ";"; - csvw:encoding "UTF-8"; - csvw:header "1"^^xsd:boolean; - ]; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#CSVWSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.csv"; + ]; rml:referenceFormulation rml:CSV; ]; rml:subjectMap [ a rml:SubjectMap; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0007c/README.md b/src/test/resources/new-test-cases/io/RMLSTC0007c/README.md new file mode 100644 index 00000000..234696f6 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0007c/README.md @@ -0,0 +1,88 @@ +## RMLSTC0007c + +**Title**: Source with XPath reference formulation + +**Description**: Test source with XPath reference formulation + +**Error expected?** No + +**Input** +``` + + + Monica Geller + 33 + + + Rachel Green + 34 + + + Joey Tribbiani + 35 + + + Chandler Bing + 36 + + + Ross Geller + 37 + + + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.xml" + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "//Friends/Character"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{@id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name/text()"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "age/text()"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0007c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0007c/mapping.ttl index 4dabf96a..a4373532 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0007c/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0007c/mapping.ttl @@ -1,20 +1,18 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.xml" + ]; rml:referenceFormulation rml:XPath; - rml:iterator "//Friends/Character/"; + rml:iterator "//Friends/Character"; ]; rml:subjectMap [ a rml:SubjectMap; - rml:template "http://example.org/{id}"; + rml:template "http://example.org/{@id}"; ]; rml:predicateObjectMap [ a rml:PredicateObjectMap; rml:predicateMap [ a rml:PredicateMap; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0007d/README.md b/src/test/resources/new-test-cases/io/RMLSTC0007d/README.md new file mode 100644 index 00000000..ce969228 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0007d/README.md @@ -0,0 +1,93 @@ +## RMLSTC0007d + +**Title**: Source with XPath reference formulation with namespaces + +**Description**: Test source with XPath reference formulation with namespaces + +**Error expected?** No + +**Input** +``` + + + Monica Geller + 33 + + + Rachel Green + 34 + + + Joey Tribbiani + 35 + + + Chandler Bing + 36 + + + Ross Geller + 37 + + + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.xml" + ]; + rml:referenceFormulation [ a rml:XPathReferenceFormulation; + rml:namespace [ a rml:Namespace; + rml:namespacePrefix "ex"; + rml:namespaceURL "http://example.org"; + ]; + ]; + rml:iterator "//Friends/ex:Character"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{@id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "ex:name/text()"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "ex:age/text()"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0007d/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0007d/mapping.ttl index 3d1f1d18..14f45ed2 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0007d/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0007d/mapping.ttl @@ -1,25 +1,23 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.xml" + ]; rml:referenceFormulation [ a rml:XPathReferenceFormulation; rml:namespace [ a rml:Namespace; rml:namespacePrefix "ex"; rml:namespaceURL "http://example.org"; ]; ]; - rml:iterator "//Friends/ex:Character/"; + rml:iterator "//Friends/ex:Character"; ]; rml:subjectMap [ a rml:SubjectMap; - rml:template "http://example.org/{id}"; + rml:template "http://example.org/{@id}"; ]; rml:predicateObjectMap [ a rml:PredicateObjectMap; rml:predicateMap [ a rml:PredicateMap; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006a/Friends.json b/src/test/resources/new-test-cases/io/RMLSTC0008a/Friends.json similarity index 100% rename from src/test/resources/new-test-cases/io/RMLSTC0006a/Friends.json rename to src/test/resources/new-test-cases/io/RMLSTC0008a/Friends.json diff --git a/src/test/resources/new-test-cases/io/RMLSTC0008a/Friends2.json b/src/test/resources/new-test-cases/io/RMLSTC0008a/Friends2.json new file mode 100644 index 00000000..415235fa --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0008a/Friends2.json @@ -0,0 +1,7 @@ +[ + { + "id": 6, + "name": "Phoebe Buffay", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLSTC0008a/README.md b/src/test/resources/new-test-cases/io/RMLSTC0008a/README.md new file mode 100644 index 00000000..20e36b20 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0008a/README.md @@ -0,0 +1,127 @@ +## RMLSTC0008a + +**Title**: Multiple sources of same type + +**Description**: Tests the generation of all triples from multiple homogeneous sources + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + rml:encoding rml:UTF-8 + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "Friends2.json"; + rml:encoding rml:UTF-8 + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + "37" . + "Phoebe Buffay" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0005b/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0008a/default.nq similarity index 83% rename from src/test/resources/new-test-cases/io/RMLSTC0005b/default.nq rename to src/test/resources/new-test-cases/io/RMLSTC0008a/default.nq index d9456768..3250fcc8 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0005b/default.nq +++ b/src/test/resources/new-test-cases/io/RMLSTC0008a/default.nq @@ -8,3 +8,5 @@ "Chandler Bing" . "37" . "Ross Geller" . + "37" . + "Phoebe Buffay" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0008a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0008a/mapping.ttl new file mode 100644 index 00000000..1b53bd1d --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0008a/mapping.ttl @@ -0,0 +1,65 @@ +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + rml:encoding rml:UTF-8 + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "Friends2.json"; + rml:encoding rml:UTF-8 + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0008b/Friends.csv b/src/test/resources/new-test-cases/io/RMLSTC0008b/Friends.csv new file mode 100644 index 00000000..69665237 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0008b/Friends.csv @@ -0,0 +1,2 @@ +id,name,age +6,Phoebe Buffay,37 \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006e/Friends.json b/src/test/resources/new-test-cases/io/RMLSTC0008b/Friends.json similarity index 100% rename from src/test/resources/new-test-cases/io/RMLSTC0006e/Friends.json rename to src/test/resources/new-test-cases/io/RMLSTC0008b/Friends.json diff --git a/src/test/resources/new-test-cases/io/RMLSTC0008b/README.md b/src/test/resources/new-test-cases/io/RMLSTC0008b/README.md new file mode 100644 index 00000000..18fea470 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0008b/README.md @@ -0,0 +1,126 @@ +## RMLSTC0008b + +**Title**: Multiple sources of different type + +**Description**: Tests the generation of all triples from multiple heterogeneous sources + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + rml:encoding rml:UTF-8 + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "Friends.csv"; + rml:encoding rml:UTF-8 + ]; + rml:referenceFormulation rml:CSV; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + "37" . + "Phoebe Buffay" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006d/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0008b/default.nq similarity index 83% rename from src/test/resources/new-test-cases/io/RMLSTC0006d/default.nq rename to src/test/resources/new-test-cases/io/RMLSTC0008b/default.nq index d9456768..3250fcc8 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0006d/default.nq +++ b/src/test/resources/new-test-cases/io/RMLSTC0008b/default.nq @@ -8,3 +8,5 @@ "Chandler Bing" . "37" . "Ross Geller" . + "37" . + "Phoebe Buffay" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0008b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0008b/mapping.ttl new file mode 100644 index 00000000..8fd68c4d --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0008b/mapping.ttl @@ -0,0 +1,64 @@ +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + rml:encoding rml:UTF-8 + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "Friends.csv"; + rml:encoding rml:UTF-8 + ]; + rml:referenceFormulation rml:CSV; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "age"; + ]; + ]; +. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0009a/Friends.csv b/src/test/resources/new-test-cases/io/RMLSTC0009a/Friends.csv new file mode 100644 index 00000000..66cc9dcc --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0009a/Friends.csv @@ -0,0 +1,6 @@ +"id","name","age" +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 diff --git a/src/test/resources/new-test-cases/io/RMLSTC0005b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0009a/README.md similarity index 64% rename from src/test/resources/new-test-cases/io/RMLSTC0005b/mapping.ttl rename to src/test/resources/new-test-cases/io/RMLSTC0009a/README.md index 37280258..e8d8a64e 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0005b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0009a/README.md @@ -1,23 +1,35 @@ +## RMLSTC0009a + +**Title**: Source with quoted columns + +**Description**: Tests the generation of triples where columns are quoted + +**Error expected?** Yes + +**Input** +``` +"id","name","age" +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 + +``` + +**Mapping** +``` @prefix rml: . @prefix foaf: . -@prefix csvw: . @prefix xsd: . @base . -<#CSVWSourceAccess> a rml:Source, csvw:Table; - csvw:url "https://kg-construct.github.io/rml-resources/resources/rml-io/RMLSTC0005b/Friends.csv"^^xsd:anyURI ; - csvw:dialect [ a csvw:Dialect; - csvw:delimiter ";"; - csvw:encoding "UTF-8"; - csvw:header "1"^^xsd:boolean; - ]; - # Encoding is UTF-16 and overrides CSVW - rml:encoding rml:UTF-16; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#CSVWSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.csv"; + ]; rml:referenceFormulation rml:CSV; ]; rml:subjectMap [ a rml:SubjectMap; @@ -40,3 +52,6 @@ ]; ]; . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006d/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0009a/mapping.ttl similarity index 68% rename from src/test/resources/new-test-cases/io/RMLSTC0006d/mapping.ttl rename to src/test/resources/new-test-cases/io/RMLSTC0009a/mapping.ttl index a00c9107..a1771888 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0006d/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0009a/mapping.ttl @@ -1,21 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix csvw: . @prefix xsd: . @base . -<#CSVWSourceAccess> a rml:Source, csvw:Table; - csvw:url "https://kg-construct.github.io/rml-resources/resources/rml-io/RMLSTC0006d/Friends.csv"^^xsd:anyURI ; - csvw:dialect [ a csvw:Dialect; - csvw:delimiter ";"; - csvw:encoding "UTF-8"; - csvw:header "1"^^xsd:boolean; - ]; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#CSVWSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.csv"; + ]; rml:referenceFormulation rml:CSV; ]; rml:subjectMap [ a rml:SubjectMap; diff --git a/src/test/resources/new-test-cases/io/RMLSTC0005a/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0009a/output.nq similarity index 100% rename from src/test/resources/new-test-cases/io/RMLSTC0005a/default.nq rename to src/test/resources/new-test-cases/io/RMLSTC0009a/output.nq diff --git a/src/test/resources/new-test-cases/io/RMLSTC0010a/Friends.csv b/src/test/resources/new-test-cases/io/RMLSTC0010a/Friends.csv new file mode 100644 index 00000000..1b386cf0 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0010a/Friends.csv @@ -0,0 +1,2 @@ +id,name,age +6,Phoebe Buffay 37 diff --git a/src/test/resources/new-test-cases/io/RMLSTC0005a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0010a/README.md similarity index 60% rename from src/test/resources/new-test-cases/io/RMLSTC0005a/mapping.ttl rename to src/test/resources/new-test-cases/io/RMLSTC0010a/README.md index 454e551f..d960a59b 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0005a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0010a/README.md @@ -1,24 +1,31 @@ +## RMLSTC0010a + +**Title**: Invalid CSV source, reference to invalid column + +**Description**: Tests the identification of invalid CSV sources + +**Error expected?** Yes + +**Input** +``` +id,name,age +6,Phoebe Buffay 37 + +``` + +**Mapping** +``` @prefix rml: . @prefix foaf: . -@prefix csvw: . @prefix xsd: . @base . -<#CSVWSourceAccess> a rml:Source, csvw:Table; - csvw:url "https://kg-construct.github.io/rml-resources/resources/rml-io/RMLSTC0005a/Friends-NULL.csv"^^xsd:anyURI ; - csvw:dialect [ a csvw:Dialect; - csvw:delimiter ";"; - csvw:encoding "UTF-8"; - csvw:header "1"^^xsd:boolean; - csvw:null "NULL"; - ]; - # Empty value is considered NULL and overrides CSVW - rml:null ""; -. - -<#TriplesMap> a rml:TriplesMap; +<#TriplesMap2> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#CSVWSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.csv"; + ]; rml:referenceFormulation rml:CSV; ]; rml:subjectMap [ a rml:SubjectMap; @@ -39,5 +46,7 @@ rml:objectMap [ a rml:ObjectMap; rml:reference "age"; ]; - ]; -. + ]. + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006f/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0010a/mapping.ttl similarity index 64% rename from src/test/resources/new-test-cases/io/RMLSTC0006f/mapping.ttl rename to src/test/resources/new-test-cases/io/RMLSTC0010a/mapping.ttl index 2c3edd1c..84392963 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0006f/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLSTC0010a/mapping.ttl @@ -1,21 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix d2rq: . @prefix xsd: . @base . -<#D2RQSourceAccess> a rml:Source, d2rq:Database; - d2rq:jdbcDSN "jdbc://host:port/database"; - d2rq:Driver "" - d2rq:username "username"; - d2rq:password "password" -. - -<#TriplesMap> a rml:TriplesMap; +<#TriplesMap2> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#D2RQSourceAccess>; - rml:referenceFormulation rml:SQL2008Table; - rml:iterator "Friends"; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.csv"; + ]; + rml:referenceFormulation rml:CSV; ]; rml:subjectMap [ a rml:SubjectMap; rml:template "http://example.org/{id}"; @@ -35,5 +29,4 @@ rml:objectMap [ a rml:ObjectMap; rml:reference "age"; ]; - ]; -. + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0010b/Friends.csv b/src/test/resources/new-test-cases/io/RMLSTC0010b/Friends.csv new file mode 100644 index 00000000..1b386cf0 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0010b/Friends.csv @@ -0,0 +1,2 @@ +id,name,age +6,Phoebe Buffay 37 diff --git a/src/test/resources/new-test-cases/io/RMLSTC0010b/README.md b/src/test/resources/new-test-cases/io/RMLSTC0010b/README.md new file mode 100644 index 00000000..83bee15a --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0010b/README.md @@ -0,0 +1,44 @@ +## RMLSTC0010b + +**Title**: Invalid CSV source, no reference to invalid column + +**Description**: Tests the identification of invalid CSV sources, even when all columns referenced are valid + +**Error expected?** Yes + +**Input** +``` +id,name,age +6,Phoebe Buffay 37 + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.csv"; + ]; + rml:referenceFormulation rml:CSV; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]. + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0010b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0010b/mapping.ttl new file mode 100644 index 00000000..d4e5fe58 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0010b/mapping.ttl @@ -0,0 +1,24 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.csv"; + ]; + rml:referenceFormulation rml:CSV; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011a/README.md b/src/test/resources/new-test-cases/io/RMLSTC0011a/README.md new file mode 100644 index 00000000..bf4cdbed --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011a/README.md @@ -0,0 +1,48 @@ +## RMLSTC0011a + +**Title**: Complex JSON source + +**Description**: Tests the generation of triples from complex JSON sources + +**Error expected?** No + +**Input** + [http://w3id.org/rml/resources/rml-io/RMLSTC0011a/Friends.json](http://w3id.org/rml/resources/rml-io/RMLSTC0011a/Friends.json) + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.companies[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]. + +``` + +**Output** +``` + "InnovateX" . + "TechCorp" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011a/companies.json b/src/test/resources/new-test-cases/io/RMLSTC0011a/companies.json new file mode 100644 index 00000000..28355038 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011a/companies.json @@ -0,0 +1,91 @@ +{ + "companies": [ + { + "name": "TechCorp", + "location": { + "country": "USA", + "state": "California", + "city": "San Francisco" + }, + "departments": [ + { + "name": "Engineering", + "manager": { + "name": "Alice Johnson", + "age": 42 + }, + "employees": [ + { + "name": "Bob Smith", + "role": "Software Engineer", + "skills": ["Python", "JavaScript", "AWS"] + }, + { + "name": "Eve Davis", + "role": "DevOps Engineer", + "skills": ["Docker", "Kubernetes", "Terraform"] + } + ] + }, + { + "name": "Marketing", + "manager": { + "name": "John Doe", + "age": 39 + }, + "employees": [ + { + "name": "Sarah Lee", + "role": "Marketing Specialist", + "skills": ["SEO", "Google Ads", "Copywriting"] + } + ] + } + ] + }, + { + "name": "InnovateX", + "location": { + "country": "Canada", + "state": "Ontario", + "city": "Toronto" + }, + "departments": [ + { + "name": "Research & Development", + "manager": { + "name": "Emma Wilson", + "age": 45 + }, + "employees": [ + { + "name": "Liam Brown", + "role": "AI Researcher", + "skills": ["Machine Learning", "Deep Learning", "Python"] + }, + { + "name": "Sophia White", + "role": "Data Scientist", + "skills": ["Data Analysis", "R", "SQL"] + } + ] + }, + { + "name": "Sales", + "manager": { + "name": "Michael Green", + "age": 38 + }, + "employees": [ + { + "name": "Olivia Martinez", + "role": "Sales Executive", + "skills": ["Negotiation", "CRM", "Lead Generation"] + } + ] + } + ] + } + ] + } + \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011a/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0011a/default.nq new file mode 100644 index 00000000..77a21531 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011a/default.nq @@ -0,0 +1,2 @@ + "InnovateX" . + "TechCorp" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0011a/mapping.ttl new file mode 100644 index 00000000..ac102a3b --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011a/mapping.ttl @@ -0,0 +1,25 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.companies[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011b/README.md b/src/test/resources/new-test-cases/io/RMLSTC0011b/README.md new file mode 100644 index 00000000..6a0f0bfc --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011b/README.md @@ -0,0 +1,51 @@ +## RMLSTC0011b + +**Title**: Complex JSON source + +**Description**: Tests the generation of triples from complex JSON sources + +**Error expected?** No + +**Input** + [http://w3id.org/rml/resources/rml-io/RMLSTC0011b/Friends.json](http://w3id.org/rml/resources/rml-io/RMLSTC0011b/Friends.json) + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.companies[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:department; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.departments[*].name"; + ]; + ]. + +``` + +**Output** +``` + "Research & Development" . + "Sales" . + "Engineering" . + "Marketing" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011b/companies.json b/src/test/resources/new-test-cases/io/RMLSTC0011b/companies.json new file mode 100644 index 00000000..28355038 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011b/companies.json @@ -0,0 +1,91 @@ +{ + "companies": [ + { + "name": "TechCorp", + "location": { + "country": "USA", + "state": "California", + "city": "San Francisco" + }, + "departments": [ + { + "name": "Engineering", + "manager": { + "name": "Alice Johnson", + "age": 42 + }, + "employees": [ + { + "name": "Bob Smith", + "role": "Software Engineer", + "skills": ["Python", "JavaScript", "AWS"] + }, + { + "name": "Eve Davis", + "role": "DevOps Engineer", + "skills": ["Docker", "Kubernetes", "Terraform"] + } + ] + }, + { + "name": "Marketing", + "manager": { + "name": "John Doe", + "age": 39 + }, + "employees": [ + { + "name": "Sarah Lee", + "role": "Marketing Specialist", + "skills": ["SEO", "Google Ads", "Copywriting"] + } + ] + } + ] + }, + { + "name": "InnovateX", + "location": { + "country": "Canada", + "state": "Ontario", + "city": "Toronto" + }, + "departments": [ + { + "name": "Research & Development", + "manager": { + "name": "Emma Wilson", + "age": 45 + }, + "employees": [ + { + "name": "Liam Brown", + "role": "AI Researcher", + "skills": ["Machine Learning", "Deep Learning", "Python"] + }, + { + "name": "Sophia White", + "role": "Data Scientist", + "skills": ["Data Analysis", "R", "SQL"] + } + ] + }, + { + "name": "Sales", + "manager": { + "name": "Michael Green", + "age": 38 + }, + "employees": [ + { + "name": "Olivia Martinez", + "role": "Sales Executive", + "skills": ["Negotiation", "CRM", "Lead Generation"] + } + ] + } + ] + } + ] + } + \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011b/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0011b/default.nq new file mode 100644 index 00000000..600758be --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011b/default.nq @@ -0,0 +1,4 @@ + "Research & Development" . + "Sales" . + "Engineering" . + "Marketing" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0011b/mapping.ttl new file mode 100644 index 00000000..91a597ea --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011b/mapping.ttl @@ -0,0 +1,26 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.companies[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:department; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.departments[*].name"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011c/README.md b/src/test/resources/new-test-cases/io/RMLSTC0011c/README.md new file mode 100644 index 00000000..aed00dd3 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011c/README.md @@ -0,0 +1,53 @@ +## RMLSTC0011c + +**Title**: Complex JSON source + +**Description**: Tests the generation of triples from complex JSON sources + +**Error expected?** No + +**Input** + [http://w3id.org/rml/resources/rml-io/RMLSTC0011c/Friends.json](http://w3id.org/rml/resources/rml-io/RMLSTC0011c/Friends.json) + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.companies[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:employee; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.departments[*].employees[*].name"; + ]; + ]. + +``` + +**Output** +``` + "Liam Brown" . + "Olivia Martinez" . + "Sophia White" . + "Bob Smith" . + "Eve Davis" . + "Sarah Lee" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011c/companies.json b/src/test/resources/new-test-cases/io/RMLSTC0011c/companies.json new file mode 100644 index 00000000..28355038 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011c/companies.json @@ -0,0 +1,91 @@ +{ + "companies": [ + { + "name": "TechCorp", + "location": { + "country": "USA", + "state": "California", + "city": "San Francisco" + }, + "departments": [ + { + "name": "Engineering", + "manager": { + "name": "Alice Johnson", + "age": 42 + }, + "employees": [ + { + "name": "Bob Smith", + "role": "Software Engineer", + "skills": ["Python", "JavaScript", "AWS"] + }, + { + "name": "Eve Davis", + "role": "DevOps Engineer", + "skills": ["Docker", "Kubernetes", "Terraform"] + } + ] + }, + { + "name": "Marketing", + "manager": { + "name": "John Doe", + "age": 39 + }, + "employees": [ + { + "name": "Sarah Lee", + "role": "Marketing Specialist", + "skills": ["SEO", "Google Ads", "Copywriting"] + } + ] + } + ] + }, + { + "name": "InnovateX", + "location": { + "country": "Canada", + "state": "Ontario", + "city": "Toronto" + }, + "departments": [ + { + "name": "Research & Development", + "manager": { + "name": "Emma Wilson", + "age": 45 + }, + "employees": [ + { + "name": "Liam Brown", + "role": "AI Researcher", + "skills": ["Machine Learning", "Deep Learning", "Python"] + }, + { + "name": "Sophia White", + "role": "Data Scientist", + "skills": ["Data Analysis", "R", "SQL"] + } + ] + }, + { + "name": "Sales", + "manager": { + "name": "Michael Green", + "age": 38 + }, + "employees": [ + { + "name": "Olivia Martinez", + "role": "Sales Executive", + "skills": ["Negotiation", "CRM", "Lead Generation"] + } + ] + } + ] + } + ] + } + \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011c/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0011c/default.nq new file mode 100644 index 00000000..c83222b8 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011c/default.nq @@ -0,0 +1,6 @@ + "Liam Brown" . + "Olivia Martinez" . + "Sophia White" . + "Bob Smith" . + "Eve Davis" . + "Sarah Lee" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0011c/mapping.ttl new file mode 100644 index 00000000..8c92295f --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011c/mapping.ttl @@ -0,0 +1,26 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.companies[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:employee; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.departments[*].employees[*].name"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011d/README.md b/src/test/resources/new-test-cases/io/RMLSTC0011d/README.md new file mode 100644 index 00000000..cb2caaf1 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011d/README.md @@ -0,0 +1,51 @@ +## RMLSTC0011d + +**Title**: Complex JSON source + +**Description**: Tests the generation of triples from complex JSON sources + +**Error expected?** No + +**Input** + [http://w3id.org/rml/resources/rml-io/RMLSTC0011d/Friends.json](http://w3id.org/rml/resources/rml-io/RMLSTC0011d/Friends.json) + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.companies[*].departments[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.manager.name"; + ]; + ]. + +``` + +**Output** +``` + "Alice Johnson" . + "John Doe" . + "Emma Wilson" . + "Michael Green" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011d/companies.json b/src/test/resources/new-test-cases/io/RMLSTC0011d/companies.json new file mode 100644 index 00000000..28355038 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011d/companies.json @@ -0,0 +1,91 @@ +{ + "companies": [ + { + "name": "TechCorp", + "location": { + "country": "USA", + "state": "California", + "city": "San Francisco" + }, + "departments": [ + { + "name": "Engineering", + "manager": { + "name": "Alice Johnson", + "age": 42 + }, + "employees": [ + { + "name": "Bob Smith", + "role": "Software Engineer", + "skills": ["Python", "JavaScript", "AWS"] + }, + { + "name": "Eve Davis", + "role": "DevOps Engineer", + "skills": ["Docker", "Kubernetes", "Terraform"] + } + ] + }, + { + "name": "Marketing", + "manager": { + "name": "John Doe", + "age": 39 + }, + "employees": [ + { + "name": "Sarah Lee", + "role": "Marketing Specialist", + "skills": ["SEO", "Google Ads", "Copywriting"] + } + ] + } + ] + }, + { + "name": "InnovateX", + "location": { + "country": "Canada", + "state": "Ontario", + "city": "Toronto" + }, + "departments": [ + { + "name": "Research & Development", + "manager": { + "name": "Emma Wilson", + "age": 45 + }, + "employees": [ + { + "name": "Liam Brown", + "role": "AI Researcher", + "skills": ["Machine Learning", "Deep Learning", "Python"] + }, + { + "name": "Sophia White", + "role": "Data Scientist", + "skills": ["Data Analysis", "R", "SQL"] + } + ] + }, + { + "name": "Sales", + "manager": { + "name": "Michael Green", + "age": 38 + }, + "employees": [ + { + "name": "Olivia Martinez", + "role": "Sales Executive", + "skills": ["Negotiation", "CRM", "Lead Generation"] + } + ] + } + ] + } + ] + } + \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011d/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0011d/default.nq new file mode 100644 index 00000000..bf945c75 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011d/default.nq @@ -0,0 +1,4 @@ + "Alice Johnson" . + "John Doe" . + "Emma Wilson" . + "Michael Green" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011d/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0011d/mapping.ttl new file mode 100644 index 00000000..84360e1d --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011d/mapping.ttl @@ -0,0 +1,26 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.companies[*].departments[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.manager.name"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011e/README.md b/src/test/resources/new-test-cases/io/RMLSTC0011e/README.md new file mode 100644 index 00000000..8ba3187e --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011e/README.md @@ -0,0 +1,65 @@ +## RMLSTC0011e + +**Title**: Complex JSON source + +**Description**: Tests the generation of triples from complex JSON sources + +**Error expected?** No + +**Input** + [http://w3id.org/rml/resources/rml-io/RMLSTC0011e/Friends.json](http://w3id.org/rml/resources/rml-io/RMLSTC0011e/Friends.json) + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.companies[*].departments[*].employees[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:skill; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.skills"; + ]; + ]. + +``` + +**Output** +``` + "AWS" . + "JavaScript" . + "Python" . + "Docker" . + "Kubernetes" . + "Terraform" . + "Deep Learning" . + "Machine Learning" . + "Python" . + "CRM" . + "Lead Generation" . + "Negotiation" . + "Copywriting" . + "Google Ads" . + "SEO" . + "Data Analysis" . + "R" . + "SQL" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011e/companies.json b/src/test/resources/new-test-cases/io/RMLSTC0011e/companies.json new file mode 100644 index 00000000..28355038 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011e/companies.json @@ -0,0 +1,91 @@ +{ + "companies": [ + { + "name": "TechCorp", + "location": { + "country": "USA", + "state": "California", + "city": "San Francisco" + }, + "departments": [ + { + "name": "Engineering", + "manager": { + "name": "Alice Johnson", + "age": 42 + }, + "employees": [ + { + "name": "Bob Smith", + "role": "Software Engineer", + "skills": ["Python", "JavaScript", "AWS"] + }, + { + "name": "Eve Davis", + "role": "DevOps Engineer", + "skills": ["Docker", "Kubernetes", "Terraform"] + } + ] + }, + { + "name": "Marketing", + "manager": { + "name": "John Doe", + "age": 39 + }, + "employees": [ + { + "name": "Sarah Lee", + "role": "Marketing Specialist", + "skills": ["SEO", "Google Ads", "Copywriting"] + } + ] + } + ] + }, + { + "name": "InnovateX", + "location": { + "country": "Canada", + "state": "Ontario", + "city": "Toronto" + }, + "departments": [ + { + "name": "Research & Development", + "manager": { + "name": "Emma Wilson", + "age": 45 + }, + "employees": [ + { + "name": "Liam Brown", + "role": "AI Researcher", + "skills": ["Machine Learning", "Deep Learning", "Python"] + }, + { + "name": "Sophia White", + "role": "Data Scientist", + "skills": ["Data Analysis", "R", "SQL"] + } + ] + }, + { + "name": "Sales", + "manager": { + "name": "Michael Green", + "age": 38 + }, + "employees": [ + { + "name": "Olivia Martinez", + "role": "Sales Executive", + "skills": ["Negotiation", "CRM", "Lead Generation"] + } + ] + } + ] + } + ] + } + \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011e/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0011e/default.nq new file mode 100644 index 00000000..9403b1fb --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011e/default.nq @@ -0,0 +1,18 @@ + "AWS" . + "JavaScript" . + "Python" . + "Docker" . + "Kubernetes" . + "Terraform" . + "Deep Learning" . + "Machine Learning" . + "Python" . + "CRM" . + "Lead Generation" . + "Negotiation" . + "Copywriting" . + "Google Ads" . + "SEO" . + "Data Analysis" . + "R" . + "SQL" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011e/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0011e/mapping.ttl new file mode 100644 index 00000000..871a4e81 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0011e/mapping.ttl @@ -0,0 +1,26 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$.companies[*].departments[*].employees[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:skill; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.skills[*]"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012a/README.md b/src/test/resources/new-test-cases/io/RMLSTC0012a/README.md new file mode 100644 index 00000000..35634247 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012a/README.md @@ -0,0 +1,49 @@ +## RMLSTC0012a + +**Title**: Complex XML source + +**Description**: Tests the generation of triples from complex XML sources + +**Error expected?** No + +**Input** + [http://w3id.org/rml/resources/rml-io/RMLSTC0012a/Friends.json](http://w3id.org/rml/resources/rml-io/RMLSTC0012a/Friends.json) + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.xml"; + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "/companies/company"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{@id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]. + +``` + +**Output** +``` + "TechCorp" . + "InnovateX" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012a/companies.xml b/src/test/resources/new-test-cases/io/RMLSTC0012a/companies.xml new file mode 100644 index 00000000..6cf391ea --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012a/companies.xml @@ -0,0 +1,112 @@ + + + TechCorp + + USA + California + San Francisco + + + + Engineering + + Alice Johnson + 42 + + + + Bob Smith + Software Engineer + + Python + JavaScript + AWS + + + + Eve Davis + DevOps Engineer + + Docker + Kubernetes + Terraform + + + + + + Marketing + + John Doe + 39 + + + + Sarah Lee + Marketing Specialist + + SEO + Google Ads + Copywriting + + + + + + + + InnovateX + + Canada + Ontario + Toronto + + + + Research & Development + + Emma Wilson + 45 + + + + Liam Brown + AI Researcher + + Machine Learning + Deep Learning + Python + + + + Sophia White + Data Scientist + + Data Analysis + R + SQL + + + + + + Sales + + Michael Green + 38 + + + + Olivia Martinez + Sales Executive + + Negotiation + CRM + Lead Generation + + + + + + + \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012a/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0012a/default.nq new file mode 100644 index 00000000..2d195a8a --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012a/default.nq @@ -0,0 +1,2 @@ + "TechCorp" . + "InnovateX" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0012a/mapping.ttl new file mode 100644 index 00000000..e506815c --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012a/mapping.ttl @@ -0,0 +1,26 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.xml"; + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "/companies/company"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{@id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "name"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012b/README.md b/src/test/resources/new-test-cases/io/RMLSTC0012b/README.md new file mode 100644 index 00000000..33121fd8 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012b/README.md @@ -0,0 +1,51 @@ +## RMLSTC0012b + +**Title**: Complex XML source + +**Description**: Tests the generation of triples from complex XML sources + +**Error expected?** No + +**Input** + [http://w3id.org/rml/resources/rml-io/RMLSTC0012b/Friends.json](http://w3id.org/rml/resources/rml-io/RMLSTC0012b/Friends.json) + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.xml"; + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "/companies/company/departments"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{../@id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:department; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "department/name"; + ]; + ]. + +``` + +**Output** +``` + "Engineering" . + "Marketing" . + "Research & Development" . + "Sales" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012b/companies.xml b/src/test/resources/new-test-cases/io/RMLSTC0012b/companies.xml new file mode 100644 index 00000000..6cf391ea --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012b/companies.xml @@ -0,0 +1,112 @@ + + + TechCorp + + USA + California + San Francisco + + + + Engineering + + Alice Johnson + 42 + + + + Bob Smith + Software Engineer + + Python + JavaScript + AWS + + + + Eve Davis + DevOps Engineer + + Docker + Kubernetes + Terraform + + + + + + Marketing + + John Doe + 39 + + + + Sarah Lee + Marketing Specialist + + SEO + Google Ads + Copywriting + + + + + + + + InnovateX + + Canada + Ontario + Toronto + + + + Research & Development + + Emma Wilson + 45 + + + + Liam Brown + AI Researcher + + Machine Learning + Deep Learning + Python + + + + Sophia White + Data Scientist + + Data Analysis + R + SQL + + + + + + Sales + + Michael Green + 38 + + + + Olivia Martinez + Sales Executive + + Negotiation + CRM + Lead Generation + + + + + + + \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012b/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0012b/default.nq new file mode 100644 index 00000000..a6ddb028 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012b/default.nq @@ -0,0 +1,4 @@ + "Engineering" . + "Marketing" . + "Research & Development" . + "Sales" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0012b/mapping.ttl new file mode 100644 index 00000000..bc6e289a --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012b/mapping.ttl @@ -0,0 +1,26 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.xml"; + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "/companies/company/departments"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{../@id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:department; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "department/name"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012c/README.md b/src/test/resources/new-test-cases/io/RMLSTC0012c/README.md new file mode 100644 index 00000000..b89b6478 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012c/README.md @@ -0,0 +1,53 @@ +## RMLSTC0012c + +**Title**: Complex XML source + +**Description**: Tests the generation of triples from complex XML sources + +**Error expected?** No + +**Input** + [http://w3id.org/rml/resources/rml-io/RMLSTC0012c/Friends.json](http://w3id.org/rml/resources/rml-io/RMLSTC0012c/Friends.json) + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.xml"; + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "/companies/company/departments/department/employees"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{../../../@id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:employee; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "employee/name"; + ]; + ]. + +``` + +**Output** +``` + "Bob Smith" . + "Eve Davis" . + "Sarah Lee" . + "Liam Brown" . + "Olivia Martinez" . + "Sophia White" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012c/companies.xml b/src/test/resources/new-test-cases/io/RMLSTC0012c/companies.xml new file mode 100644 index 00000000..6cf391ea --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012c/companies.xml @@ -0,0 +1,112 @@ + + + TechCorp + + USA + California + San Francisco + + + + Engineering + + Alice Johnson + 42 + + + + Bob Smith + Software Engineer + + Python + JavaScript + AWS + + + + Eve Davis + DevOps Engineer + + Docker + Kubernetes + Terraform + + + + + + Marketing + + John Doe + 39 + + + + Sarah Lee + Marketing Specialist + + SEO + Google Ads + Copywriting + + + + + + + + InnovateX + + Canada + Ontario + Toronto + + + + Research & Development + + Emma Wilson + 45 + + + + Liam Brown + AI Researcher + + Machine Learning + Deep Learning + Python + + + + Sophia White + Data Scientist + + Data Analysis + R + SQL + + + + + + Sales + + Michael Green + 38 + + + + Olivia Martinez + Sales Executive + + Negotiation + CRM + Lead Generation + + + + + + + \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012c/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0012c/default.nq new file mode 100644 index 00000000..e7dab8b6 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012c/default.nq @@ -0,0 +1,6 @@ + "Bob Smith" . + "Eve Davis" . + "Sarah Lee" . + "Liam Brown" . + "Olivia Martinez" . + "Sophia White" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0012c/mapping.ttl new file mode 100644 index 00000000..5388d754 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012c/mapping.ttl @@ -0,0 +1,26 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.xml"; + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "/companies/company/departments/department/employees"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{../../../@id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:employee; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "employee/name"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012d/README.md b/src/test/resources/new-test-cases/io/RMLSTC0012d/README.md new file mode 100644 index 00000000..a322b1af --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012d/README.md @@ -0,0 +1,51 @@ +## RMLSTC0012d + +**Title**: Complex XML source + +**Description**: Tests the generation of triples from complex XML sources + +**Error expected?** No + +**Input** + [http://w3id.org/rml/resources/rml-io/RMLSTC0012d/Friends.json](http://w3id.org/rml/resources/rml-io/RMLSTC0012d/Friends.json) + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.xml"; + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "/companies/company/departments/department"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{../../@id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:manager; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "manager/name"; + ]; + ]. + +``` + +**Output** +``` + "Alice Johnson" . + "John Doe" . + "Emma Wilson" . + "Michael Green" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012d/companies.xml b/src/test/resources/new-test-cases/io/RMLSTC0012d/companies.xml new file mode 100644 index 00000000..6cf391ea --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012d/companies.xml @@ -0,0 +1,112 @@ + + + TechCorp + + USA + California + San Francisco + + + + Engineering + + Alice Johnson + 42 + + + + Bob Smith + Software Engineer + + Python + JavaScript + AWS + + + + Eve Davis + DevOps Engineer + + Docker + Kubernetes + Terraform + + + + + + Marketing + + John Doe + 39 + + + + Sarah Lee + Marketing Specialist + + SEO + Google Ads + Copywriting + + + + + + + + InnovateX + + Canada + Ontario + Toronto + + + + Research & Development + + Emma Wilson + 45 + + + + Liam Brown + AI Researcher + + Machine Learning + Deep Learning + Python + + + + Sophia White + Data Scientist + + Data Analysis + R + SQL + + + + + + Sales + + Michael Green + 38 + + + + Olivia Martinez + Sales Executive + + Negotiation + CRM + Lead Generation + + + + + + + \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012d/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0012d/default.nq new file mode 100644 index 00000000..13a0c585 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012d/default.nq @@ -0,0 +1,4 @@ + "Alice Johnson" . + "John Doe" . + "Emma Wilson" . + "Michael Green" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012d/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0012d/mapping.ttl new file mode 100644 index 00000000..a97be77d --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012d/mapping.ttl @@ -0,0 +1,26 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.xml"; + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "/companies/company/departments/department"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{../../@id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:manager; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "manager/name"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012e/README.md b/src/test/resources/new-test-cases/io/RMLSTC0012e/README.md new file mode 100644 index 00000000..436b7cc1 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012e/README.md @@ -0,0 +1,65 @@ +## RMLSTC0012e + +**Title**: Complex XML source + +**Description**: Tests the generation of triples from complex XML sources + +**Error expected?** No + +**Input** + [http://w3id.org/rml/resources/rml-io/RMLSTC0012e/Friends.json](http://w3id.org/rml/resources/rml-io/RMLSTC0012e/Friends.json) + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.xml"; + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "/companies/company/departments/department/employees/employee"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:skill; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "skills/skill"; + ]; + ]. + +``` + +**Output** +``` + "AWS" . + "JavaScript" . + "Python" . + "Docker" . + "Kubernetes" . + "Terraform" . + "Deep Learning" . + "Machine Learning" . + "Python" . + "CRM" . + "Lead Generation" . + "Negotiation" . + "Copywriting" . + "Google Ads" . + "SEO" . + "Data Analysis" . + "R" . + "SQL" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012e/companies.xml b/src/test/resources/new-test-cases/io/RMLSTC0012e/companies.xml new file mode 100644 index 00000000..6cf391ea --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012e/companies.xml @@ -0,0 +1,112 @@ + + + TechCorp + + USA + California + San Francisco + + + + Engineering + + Alice Johnson + 42 + + + + Bob Smith + Software Engineer + + Python + JavaScript + AWS + + + + Eve Davis + DevOps Engineer + + Docker + Kubernetes + Terraform + + + + + + Marketing + + John Doe + 39 + + + + Sarah Lee + Marketing Specialist + + SEO + Google Ads + Copywriting + + + + + + + + InnovateX + + Canada + Ontario + Toronto + + + + Research & Development + + Emma Wilson + 45 + + + + Liam Brown + AI Researcher + + Machine Learning + Deep Learning + Python + + + + Sophia White + Data Scientist + + Data Analysis + R + SQL + + + + + + Sales + + Michael Green + 38 + + + + Olivia Martinez + Sales Executive + + Negotiation + CRM + Lead Generation + + + + + + + \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012e/default.nq b/src/test/resources/new-test-cases/io/RMLSTC0012e/default.nq new file mode 100644 index 00000000..9403b1fb --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012e/default.nq @@ -0,0 +1,18 @@ + "AWS" . + "JavaScript" . + "Python" . + "Docker" . + "Kubernetes" . + "Terraform" . + "Deep Learning" . + "Machine Learning" . + "Python" . + "CRM" . + "Lead Generation" . + "Negotiation" . + "Copywriting" . + "Google Ads" . + "SEO" . + "Data Analysis" . + "R" . + "SQL" . diff --git a/src/test/resources/new-test-cases/io/RMLSTC0012e/mapping.ttl b/src/test/resources/new-test-cases/io/RMLSTC0012e/mapping.ttl new file mode 100644 index 00000000..91af0f2b --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLSTC0012e/mapping.ttl @@ -0,0 +1,26 @@ +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "companies.xml"; + ]; + rml:referenceFormulation rml:XPath; + rml:iterator "/companies/company/departments/department/employees/employee"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{name}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant ex:skill; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "skills/skill"; + ]; + ]. diff --git a/src/test/resources/new-test-cases/io/RMLTTC0000/README.md b/src/test/resources/new-test-cases/io/RMLTTC0000/README.md new file mode 100644 index 00000000..f7669dbb --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0000/README.md @@ -0,0 +1,94 @@ +## RMLTTC0000 + +**Title**: Default target + +**Description**: Test exporting all triples to the default Target when not Targets are specified. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + rml:encoding rml:UTF-8 + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +``` + +**Output** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0000/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0000/mapping.ttl index b8f99122..00a2f99e 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0000/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0000/mapping.ttl @@ -1,15 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + rml:encoding rml:UTF-8 + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001a/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0001a/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001a/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001a/README.md b/src/test/resources/new-test-cases/io/RMLTTC0001a/README.md new file mode 100644 index 00000000..34fa66db --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001a/README.md @@ -0,0 +1,108 @@ +## RMLTTC0001a + +**Title**: Single Target: Subject Map + +**Description**: Test exporting all triples to a single Target with a given subject. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0001a/mapping.ttl index a8567d38..a6215d4c 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0001a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0001a/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001b/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0001b/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001b/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001b/README.md b/src/test/resources/new-test-cases/io/RMLTTC0001b/README.md new file mode 100644 index 00000000..009ff1dd --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001b/README.md @@ -0,0 +1,108 @@ +## RMLTTC0001b + +**Title**: Single Target: Predicate Map + +**Description**: Test exporting all triples to a single Target with a given predicate. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + rml:logicalTarget <#TargetDump1>; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + "33". + "34". + "35". + "36". + "37". + +``` + +**Output 2** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0001b/mapping.ttl index 1a3dd5ff..ac7eea7c 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0001b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0001b/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001c/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0001c/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001c/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001c/README.md b/src/test/resources/new-test-cases/io/RMLTTC0001c/README.md new file mode 100644 index 00000000..eb3ac753 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001c/README.md @@ -0,0 +1,108 @@ +## RMLTTC0001c + +**Title**: Single Target: Object Map + +**Description**: Test exporting all triples to a single Target with a given object reference. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + rml:logicalTarget <#TargetDump1>; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + "33". + "34". + "35". + "36". + "37". + +``` + +**Output 2** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0001c/mapping.ttl index 7cadaabb..3b58386e 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0001c/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0001c/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001d/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0001d/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001d/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001d/README.md b/src/test/resources/new-test-cases/io/RMLTTC0001d/README.md new file mode 100644 index 00000000..86577052 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001d/README.md @@ -0,0 +1,113 @@ +## RMLTTC0001d + +**Title**: Single Target: Graph Map + +**Description**: Test exporting all triples within a named graph to a single Target. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix dcat: . +@prefix formats: . +@prefix ex: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:graphMap [ a rml:GraphMap; + rml:constant ex:PeopleGraph; + rml:logicalTarget <#TargetDump1>; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001d/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0001d/dump1.nq index e69de29b..adcefd04 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0001d/dump1.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0001d/dump1.nq @@ -0,0 +1,10 @@ + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001d/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0001d/mapping.ttl index 7c71c03f..40b34da4 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0001d/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0001d/mapping.ttl @@ -1,18 +1,16 @@ @prefix rml: . @prefix foaf: . @prefix dcat: . -@prefix void: . @prefix formats: . @prefix ex: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -42,8 +40,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001e/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0001e/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001e/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001e/README.md b/src/test/resources/new-test-cases/io/RMLTTC0001e/README.md new file mode 100644 index 00000000..ae87dfe1 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001e/README.md @@ -0,0 +1,111 @@ +## RMLTTC0001e + +**Title**: Single Target: Language Map + +**Description**: Test exporting all triples with a given language tag to a single Target. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + rml:languageMap [ a rml:LanguageMap; + rml:constant "en"; + rml:logicalTarget <#TargetDump1>; + ]; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + "33". + "34". + "35". + "36". + "37". + +``` + +**Output 2** +``` + "Monica Geller"@en . + "Rachel Green"@en . + "Joey Tribbiani"@en . + "Chandler Bing"@en . + "Ross Geller"@en . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001e/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0001e/mapping.ttl index d6455b8c..51a5bbf2 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0001e/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0001e/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -41,8 +38,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001f/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0001f/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001f/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001f/README.md b/src/test/resources/new-test-cases/io/RMLTTC0001f/README.md new file mode 100644 index 00000000..1fb6a2b5 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0001f/README.md @@ -0,0 +1,112 @@ +## RMLTTC0001f + +**Title**: Single Target: Datatype Map + +**Description**: Test exporting all triples with a given datatype to a single Target. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:datatypeMap [ a rml:DatatypeMap; + rml:constant xsd:integer; + rml:logicalTarget <#TargetDump1>; + ]; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + +**Output 2** +``` + "33"^^. + "34"^^. + "35"^^. + "36"^^. + "37"^^. + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0001f/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0001f/mapping.ttl index ce8f4a78..e8f8fac1 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0001f/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0001f/mapping.ttl @@ -1,18 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix xsd: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -42,8 +39,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002a/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002a/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002a/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002a/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002a/README.md new file mode 100644 index 00000000..299577a2 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002a/README.md @@ -0,0 +1,132 @@ +## RMLTTC0002a + +**Title**: Multiple Targets: Same Term Map + +**Description**: Test exporting all triples to multiple Targets in the same Term Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + rml:logicalTarget <#TargetDump2>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + +**Output 3** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002a/mapping.ttl index 8a6e98d9..a6647f3c 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002a/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -39,15 +36,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002b/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002b/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002b/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002b/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002b/README.md new file mode 100644 index 00000000..f24589b1 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002b/README.md @@ -0,0 +1,127 @@ +## RMLTTC0002b + +**Title**: Multiple Targets: Subject Map and Predicate Map + +**Description**: Test exporting all triples to a Target in a Subject Map and a Target in a Predicate Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + rml:logicalTarget <#TargetDump2>; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + +**Output 3** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002b/mapping.ttl index f496e960..d218116d 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002b/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -39,15 +36,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002c/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002c/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002c/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002c/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002c/README.md new file mode 100644 index 00000000..e1c45b0d --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002c/README.md @@ -0,0 +1,127 @@ +## RMLTTC0002c + +**Title**: Multiple Targets: Subject Map and Object Map + +**Description**: Test exporting all triples to a Target in a Subject Map and a Target in a Object Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:logicalTarget <#TargetDump2>; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + +**Output 3** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002c/mapping.ttl index 33dd7748..d5466bdc 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002c/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002c/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -39,15 +36,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002d/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002d/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002d/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002d/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002d/README.md new file mode 100644 index 00000000..76f1adfc --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002d/README.md @@ -0,0 +1,122 @@ +## RMLTTC0002d + +**Title**: Multiple Targets: Predicate Map and Object Map + +**Description**: Test exporting all triples to a Target in a Predicate Map and a Target in a Object Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + rml:logicalTarget <#TargetDump1>; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:logicalTarget <#TargetDump2>; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + +**Output 3** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002d/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002d/mapping.ttl index 1ef82efd..c3833569 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002d/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002d/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -39,15 +36,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002e/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002e/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002e/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002e/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002e/README.md new file mode 100644 index 00000000..73346493 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002e/README.md @@ -0,0 +1,131 @@ +## RMLTTC0002e + +**Title**: Multiple Targets: Subject Map, Predicate Map, and Object Map + +**Description**: Test exporting all triples to a Target in a Subject Map, a Target in a Predicate Map, and a Target in a Object Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump3>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + rml:logicalTarget <#TargetDump1>; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:logicalTarget <#TargetDump2>; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump3> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump3.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + +**Output 3** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002e/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002e/mapping.ttl index ce463ca6..9b7a9672 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002e/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002e/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -40,22 +37,25 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump3> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump3.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002f/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002f/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002f/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002f/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002f/README.md new file mode 100644 index 00000000..d40e2dd1 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002f/README.md @@ -0,0 +1,131 @@ +## RMLTTC0002f + +**Title**: Multiple Targets: Subject Map and Graph Map + +**Description**: Test exporting all triples to a Target in a Subject Map and a Target in a Graph Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@prefix ex: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:graphMap [ a rml:GraphMap; + rml:constant ex:PeopleGraph; + rml:logicalTarget <#TargetDump2>; + ]; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + +**Output 3** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002f/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0002f/dump1.nq index 72529d4a..adcefd04 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002f/dump1.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002f/dump1.nq @@ -1,10 +1,10 @@ - "33" . + "33" . "Monica Geller" . - "34" . + "34" . "Rachel Green" . - "35" . + "35" . "Joey Tribbiani" . - "36" . + "36" . "Chandler Bing" . - "37" . + "37" . "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002f/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002f/mapping.ttl index 5d95abdb..4aaefbfc 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002f/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002f/mapping.ttl @@ -1,18 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . -@prefix ex: . +@prefix ex: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -43,15 +40,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002g/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002g/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002g/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002g/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002g/README.md new file mode 100644 index 00000000..e867def4 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002g/README.md @@ -0,0 +1,126 @@ +## RMLTTC0002g + +**Title**: Multiple Targets: Predicate Map and Graph Map + +**Description**: Test exporting all triples to a Target in a Predicate Map and a Target in a Graph Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@prefix ex: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:graphMap [ a rml:GraphMap; + rml:constant ex:PeopleGraph; + rml:logicalTarget <#TargetDump2>; + ]; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + rml:logicalTarget <#TargetDump1>; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + +**Output 3** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002g/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002g/mapping.ttl index 91e77b2f..7a9b5530 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002g/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002g/mapping.ttl @@ -1,18 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @prefix ex: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -43,15 +40,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002h/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002h/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002h/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002h/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002h/README.md new file mode 100644 index 00000000..2b4dfcfa --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002h/README.md @@ -0,0 +1,126 @@ +## RMLTTC0002h + +**Title**: Multiple Targets: Object Map and Graph Map + +**Description**: Test exporting all triples to a Target in a Object Map and a Target in a Graph Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@prefix ex: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:graphMap [ a rml:GraphMap; + rml:constant ex:PeopleGraph; + rml:logicalTarget <#TargetDump2>; + ]; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:logicalTarget <#TargetDump1>; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + +**Output 3** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002h/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002h/mapping.ttl index 1732c03b..0c279aec 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002h/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002h/mapping.ttl @@ -1,18 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @prefix ex: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -43,15 +40,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002i/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002i/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002i/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002i/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002i/README.md new file mode 100644 index 00000000..83e1a735 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002i/README.md @@ -0,0 +1,129 @@ +## RMLTTC0002i + +**Title**: Multiple Targets: Language Map and Graph Map + +**Description**: Test exporting all triples to a Target in a Language Map and a Target in a Graph Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@prefix ex: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + rml:languageMap [ a rml:LanguageMap; + rml:constant "en"; + rml:logicalTarget <#TargetDump2>; + ]; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:graphMap [ a rml:GraphMap; + rml:constant ex:PeopleGraph; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + +**Output 3** +``` + "Monica Geller"@en . + "Rachel Green"@en . + "Joey Tribbiani"@en . + "Chandler Bing"@en . + "Ross Geller"@en . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002i/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002i/mapping.ttl index 7da4ece8..ac2b8bac 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002i/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002i/mapping.ttl @@ -1,18 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @prefix ex: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -46,15 +43,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002j/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002j/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002j/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002j/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002j/README.md new file mode 100644 index 00000000..0838260f --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002j/README.md @@ -0,0 +1,126 @@ +## RMLTTC0002j + +**Title**: Multiple Targets: Language Map and Object Map + +**Description**: Test exporting all triples to a Target in a Language Map and a Target in a Object Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@prefix ex: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + rml:languageMap [ a rml:LanguageMap; + rml:constant "en"; + rml:logicalTarget <#TargetDump2>; + ]; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:logicalTarget <#TargetDump1>; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + +**Output 3** +``` + "Monica Geller"@en . + "Rachel Green"@en . + "Joey Tribbiani"@en . + "Chandler Bing"@en . + "Ross Geller"@en . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002j/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002j/mapping.ttl index ed828143..fd7f1424 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002j/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002j/mapping.ttl @@ -1,18 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @prefix ex: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -43,15 +40,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002k/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002k/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002k/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002k/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002k/README.md new file mode 100644 index 00000000..23709c80 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002k/README.md @@ -0,0 +1,130 @@ +## RMLTTC0002k + +**Title**: Multiple Targets: Datatype Map and Graph Map + +**Description**: Test exporting all triples to a Target in a Datatype Map and a Target in a Graph Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:graphMap [ a rml:GraphMap; + rml:constant ex:PeopleGraph; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:datatypeMap [ a rml:DatatypeMap; + rml:constant xsd:integer; + rml:logicalTarget <#TargetDump2>; + ]; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33"^^ . + "34"^^ . + "35"^^ . + "36"^^ . + "37"^^ . + +``` + +**Output 3** +``` + "33"^^ . + "34"^^ . + "35"^^ . + "36"^^ . + "37"^^ . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002k/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002k/mapping.ttl index b993bb6a..85151bf9 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002k/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002k/mapping.ttl @@ -1,19 +1,16 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @prefix xsd: . @prefix ex: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -47,15 +44,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002l/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002l/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002l/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002l/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002l/README.md new file mode 100644 index 00000000..906e8ad4 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002l/README.md @@ -0,0 +1,127 @@ +## RMLTTC0002l + +**Title**: Multiple Targets: Datatype Map and Object Map + +**Description**: Test exporting all triples to a Target in a Datatype Map and a Target in a Object Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@prefix xsd: . +@prefix ex: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + rml:logicalTarget <#TargetDump1>; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:datatypeMap [ a rml:DatatypeMap; + rml:constant xsd:integer; + rml:logicalTarget <#TargetDump2>; + ]; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + +**Output 3** +``` + "33"^^ . + "34"^^ . + "35"^^ . + "36"^^ . + "37"^^ . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002l/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002l/mapping.ttl index 204c2203..2565df27 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002l/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002l/mapping.ttl @@ -1,19 +1,16 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @prefix xsd: . @prefix ex: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -44,15 +41,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002m/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002m/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002m/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002m/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002m/README.md new file mode 100644 index 00000000..c00d2821 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002m/README.md @@ -0,0 +1,127 @@ +## RMLTTC0002m + +**Title**: Multiple Targets: Multiple Predicate Maps + +**Description**: Test exporting all triples to Targets in multiple Predicate Maps. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + rml:logicalTarget <#TargetDump1>; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + rml:logicalTarget <#TargetDump2>; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + "33". + "34". + "35". + "36". + "37". + +``` + +**Output 2** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + +**Output 3** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002m/default.nq b/src/test/resources/new-test-cases/io/RMLTTC0002m/default.nq index e69de29b..ad87bcca 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002m/default.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002m/default.nq @@ -0,0 +1,5 @@ + "33". + "34". + "35". + "36". + "37". diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002m/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002m/mapping.ttl index 49d4b0f2..d3fd84f1 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002m/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002m/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -39,15 +36,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002n/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002n/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002n/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002n/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002n/README.md new file mode 100644 index 00000000..1b68ae38 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002n/README.md @@ -0,0 +1,127 @@ +## RMLTTC0002n + +**Title**: Multiple Targets: Multiple Object Maps + +**Description**: Test exporting all triples to Targets in multiple Object Maps. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + rml:logicalTarget <#TargetDump1>; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:logicalTarget <#TargetDump2>; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + "33". + "34". + "35". + "36". + "37". + +``` + +**Output 2** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + +**Output 3** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002n/default.nq b/src/test/resources/new-test-cases/io/RMLTTC0002n/default.nq index e69de29b..ad87bcca 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002n/default.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002n/default.nq @@ -0,0 +1,5 @@ + "33". + "34". + "35". + "36". + "37". diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002n/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002n/mapping.ttl index aaca8cbe..6371637d 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002n/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002n/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -39,15 +36,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002o/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002o/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002o/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002o/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002o/README.md new file mode 100644 index 00000000..4a9f102d --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002o/README.md @@ -0,0 +1,127 @@ +## RMLTTC0002o + +**Title**: Multiple Targets: Multiple Graph Maps + +**Description**: Test exporting all triples to Targets in multiple Graph Maps. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix dcat: . +@prefix formats: . +@prefix ex: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:graphMap [ a rml:GraphMap; + rml:constant ex:PeopleGraph1; + rml:logicalTarget <#TargetDump1>; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + rml:graphMap [ a rml:GraphMap; + rml:constant ex:PeopleGraph1; + rml:logicalTarget <#TargetDump1>; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + +**Output 3** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002o/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002o/mapping.ttl index b128425f..7ffad944 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002o/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002o/mapping.ttl @@ -1,18 +1,16 @@ @prefix rml: . @prefix foaf: . @prefix dcat: . -@prefix void: . @prefix formats: . @prefix ex: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -31,8 +29,8 @@ rml:reference "$.name"; ]; rml:graphMap [ a rml:GraphMap; - rml:constant ex:PeopleGraph1; - rml:logicalTarget <#TargetDump1>; + rml:constant ex:PeopleGraph2; + rml:logicalTarget <#TargetDump2>; ]; ]; rml:predicateObjectMap [ a rml:PredicateObjectMap; @@ -46,8 +44,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. \ No newline at end of file diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002p/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002p/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002p/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002p/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002p/README.md new file mode 100644 index 00000000..8975f25b --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002p/README.md @@ -0,0 +1,141 @@ +## RMLTTC0002p + +**Title**: Multiple Targets: Multiple Language Maps + +**Description**: Test exporting all triples to Targets in multiple Language Maps. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + rml:languageMap [ a rml:LanguageMap; + rml:constant "en"; + rml:logicalTarget <#TargetDump1>; + ]; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + rml:languageMap [ a rml:LanguageMap; + rml:constant "nl"; + rml:logicalTarget <#TargetDump2>; + ]; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + "33". + "34". + "35". + "36". + "37". + +``` + +**Output 2** +``` + "Monica Geller"@en . + "Rachel Green"@en . + "Joey Tribbiani"@en . + "Chandler Bing"@en . + "Ross Geller"@en . + +``` + +**Output 3** +``` + "Monica Geller"@nl . + "Rachel Green"@nl . + "Joey Tribbiani"@nl . + "Chandler Bing"@nl . + "Ross Geller"@nl . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002p/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002p/mapping.ttl index c5634078..b7d772ea 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002p/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002p/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -53,15 +50,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002q/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002q/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002q/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002q/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002q/README.md new file mode 100644 index 00000000..e173efb3 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002q/README.md @@ -0,0 +1,142 @@ +## RMLTTC0002q + +**Title**: Multiple Targets: Multiple Datatype Maps + +**Description**: Test exporting all triples to Targets in multiple Datatype Maps. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix xsd: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:datatypeMap [ a rml:DatatypeMap; + rml:constant xsd:integer; + rml:logicalTarget <#TargetDump1>; + ]; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + rml:datatypeMap [ a rml:DatatypeMap; + rml:constant xsd:double; + rml:logicalTarget <#TargetDump2>; + ]; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + +**Output 2** +``` + "33"^^. + "34"^^. + "35"^^. + "36"^^. + "37"^^. + +``` + +**Output 3** +``` + "33"^^. + "34"^^. + "35"^^. + "36"^^. + "37"^^. + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002q/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002q/mapping.ttl index b537d43b..a049f6db 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002q/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002q/mapping.ttl @@ -1,18 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix xsd: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -54,15 +51,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002r/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0002r/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002r/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002r/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002r/README.md new file mode 100644 index 00000000..39e68577 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0002r/README.md @@ -0,0 +1,114 @@ +## RMLTTC0002r + +**Title**: Multiple Targets: Multiple Term Maps with same Target + +**Description**: Test exporting all triples to same Target in multiple Term Maps. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + rml:logicalTarget <#TargetDump1>; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + rml:logicalTarget <#TargetDump1>; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + "33". + "34". + "35". + "36". + "37". + +``` + +**Output 2** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002r/default.nq b/src/test/resources/new-test-cases/io/RMLTTC0002r/default.nq index e69de29b..ad87bcca 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002r/default.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002r/default.nq @@ -0,0 +1,5 @@ + "33". + "34". + "35". + "36". + "37". diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002r/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002r/mapping.ttl index e439ad20..97dfc619 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002r/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002r/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -39,8 +36,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0003a/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0003a/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0003a/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0003a/README.md b/src/test/resources/new-test-cases/io/RMLTTC0003a/README.md new file mode 100644 index 00000000..61447677 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0003a/README.md @@ -0,0 +1,136 @@ +## RMLTTC0003a + +**Title**: Overriding Targets: Seperate Triples Map + +**Description**: Test exporting some triples to a different Target with a separate Triples Map. + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump2>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TriplesMap2> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + +``` + +**Output 3** +``` + "33" . + "34" . + "35" . + "36" . + "37" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0003a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0003a/mapping.ttl index 9f3239ac..615f15e6 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0003a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0003a/mapping.ttl @@ -1,23 +1,20 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; rml:subjectMap [ a rml:SubjectMap; rml:template "http://example.org/{$.id}"; - rml:logicalTarget <#TargetDump1>; + rml:logicalTarget <#TargetDump2>; ]; rml:predicateObjectMap [ a rml:PredicateObjectMap; rml:predicateMap [ a rml:PredicateMap; @@ -31,7 +28,10 @@ <#TriplesMap2> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -50,15 +50,17 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . <#TargetDump2> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004a/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0004a/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004a/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004a/README.md b/src/test/resources/new-test-cases/io/RMLTTC0004a/README.md new file mode 100644 index 00000000..1233d592 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004a/README.md @@ -0,0 +1,131 @@ +## RMLTTC0004a + +**Title**: Target JSON-LD + +**Description**: Test export all triples as JSON-LD + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.jsonld"; + ]; + rml:serialization formats:JSON-LD; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` +{ + "@context": { + "foaf": "http://xmlns.com/foaf/0.1/" + }, + "@graph": [ + { + + "@id": "http://example.org/0", + "foaf:name": "Monica Geller", + "foaf:age": "33" + }, + { + "@id": "http://example.org/1", + "foaf:name": "Rachel Green", + "foaf:age": "34" + }, + { + "@id": "http://example.org/2", + "foaf:name": "Joey Tribbiani", + "foaf:age": "35" + }, + { + "@id": "http://example.org/3", + "foaf:name": "Chandler Bing", + "foaf:age": "36" + }, + { + "@id": "http://example.org/4", + "foaf:name": "Ross Geller", + "foaf:age": "37" + } + ] +} + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004a/mapping.ttl index 6cabce4a..7ed7673a 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004a/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.jsonld"; ]; rml:serialization formats:JSON-LD; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004b/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0004b/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004b/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004b/README.md b/src/test/resources/new-test-cases/io/RMLTTC0004b/README.md new file mode 100644 index 00000000..86e5e6d2 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004b/README.md @@ -0,0 +1,110 @@ +## RMLTTC0004b + +**Title**: Target N3 + +**Description**: Test export all triples as N3 + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.n3"; + ]; + rml:serialization formats:N3; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` +@prefix foaf: . +@prefix ex: . +ex:0 "33" ; + "Monica Geller" . +ex:1 "34" ; + "Rachel Green" . +ex:2 "35" ; + "Joey Tribbiani" . +ex:3 "36" ; + "Chandler Bing" . +ex:4 "37" ; + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004b/mapping.ttl index 2a2a6125..255349f2 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004b/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.n3"; ]; rml:serialization formats:N3; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004c/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0004c/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004c/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004c/README.md b/src/test/resources/new-test-cases/io/RMLTTC0004c/README.md new file mode 100644 index 00000000..72e1b327 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004c/README.md @@ -0,0 +1,108 @@ +## RMLTTC0004c + +**Title**: Target N-Triples + +**Description**: Test export all triples as N-Triples + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nt"; + ]; + rml:serialization formats:N-Triples; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004c/mapping.ttl index 3c9d4425..30977d24 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004c/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004c/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nt"; ]; rml:serialization formats:N-Triples; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004d/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0004d/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004d/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004d/README.md b/src/test/resources/new-test-cases/io/RMLTTC0004d/README.md new file mode 100644 index 00000000..68b41dbc --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004d/README.md @@ -0,0 +1,108 @@ +## RMLTTC0004d + +**Title**: Target N-Quads + +**Description**: Test export all triples as N-Quads + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004d/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004d/mapping.ttl index 25beafd0..e2b46141 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004d/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004d/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004e/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0004e/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004e/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004e/README.md b/src/test/resources/new-test-cases/io/RMLTTC0004e/README.md new file mode 100644 index 00000000..84c3c4c1 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004e/README.md @@ -0,0 +1,120 @@ +## RMLTTC0004e + +**Title**: Target RDF/JSON + +**Description**: Test export all triples as RDF/JSON + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.rdfjson"; + ]; + rml:serialization formats:RDF_JSON; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` +{ + "http://example.org/0" : { + "http://xmlns.com/foaf/0.1/age" : [ { "value" : "33" } ], + "http://xmlns.com/foaf/0.1/name" : [ { "value" : "Monica Geller" } ] + }, + "http://example.org/1" : { + "http://xmlns.com/foaf/0.1/age" : [ { "value" : "34" } ], + "http://xmlns.com/foaf/0.1/name" : [ { "value" : "Rachel Green" } ] + }, + "http://example.org/2" : { + "http://xmlns.com/foaf/0.1/age" : [ { "value" : "35" } ], + "http://xmlns.com/foaf/0.1/name" : [ { "value" : "Joey Tribbiani" } ] + }, + "http://example.org/3" : { + "http://xmlns.com/foaf/0.1/age" : [ { "value" : "36" } ], + "http://xmlns.com/foaf/0.1/name" : [ { "value" : "Chandler Bing" } ] + }, + "http://example.org/4" : { + "http://xmlns.com/foaf/0.1/age" : [ { "value" : "37" } ], + "http://xmlns.com/foaf/0.1/name" : [ { "value" : "Ross Geller" } ] + } +} + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004e/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004e/mapping.ttl index b03a280f..c27fded8 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004e/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004e/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.rdfjson"; ]; rml:serialization formats:RDF_JSON; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004f/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0004f/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004f/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004f/README.md b/src/test/resources/new-test-cases/io/RMLTTC0004f/README.md new file mode 100644 index 00000000..5c561276 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004f/README.md @@ -0,0 +1,121 @@ +## RMLTTC0004f + +**Title**: Target RDF/XML + +**Description**: Test export all triples as RDF/XML + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:RDF_XML; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + + + 33 + Monica Geller + + + 34 + Rachel Green + + + 35 + Joey Tribbiani + + + 36 + Chandler Bing + + + 37 + Ross Geller + + + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004f/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004f/mapping.ttl index f8408af1..64b10459 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004f/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004f/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:RDF_XML; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004g/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0004g/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004g/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004g/README.md b/src/test/resources/new-test-cases/io/RMLTTC0004g/README.md new file mode 100644 index 00000000..b812e5b6 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0004g/README.md @@ -0,0 +1,111 @@ +## RMLTTC0004g + +**Title**: Target Turtle + +**Description**: Test export all triples as Turtle + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:Turtle; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` +@prefix foaf: . +@prefix ex: . + + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004g/dump1.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004g/dump1.ttl index d9456768..f5c1e6e1 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004g/dump1.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004g/dump1.ttl @@ -1,10 +1,10 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . +http://example.org/0 http://xmlns.com/foaf/0.1/age "33" +http://example.org/0 http://xmlns.com/foaf/0.1/name "Monica Geller" +http://example.org/1 http://xmlns.com/foaf/0.1/age "34" +http://example.org/1 http://xmlns.com/foaf/0.1/name "Rachel Green" +http://example.org/2 http://xmlns.com/foaf/0.1/age "35" +http://example.org/2 http://xmlns.com/foaf/0.1/name "Joey Tribbiani" +http://example.org/3 http://xmlns.com/foaf/0.1/age "36" +http://example.org/3 http://xmlns.com/foaf/0.1/name "Chandler Bing" +http://example.org/4 http://xmlns.com/foaf/0.1/age "37" +http://example.org/4 http://xmlns.com/foaf/0.1/name "Ross Geller" diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004g/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004g/mapping.ttl index 328d8414..009fc001 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004g/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004g/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:Turtle; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0005a/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0005a/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0005a/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0005a/README.md b/src/test/resources/new-test-cases/io/RMLTTC0005a/README.md new file mode 100644 index 00000000..3e87f9b3 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0005a/README.md @@ -0,0 +1,109 @@ +## RMLTTC0005a + +**Title**: Target UTF-8 + +**Description**: Test export all triples with UTF-8 encoding + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; + rml:encoding rml:UTF-8; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0005a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0005a/mapping.ttl index 7c046dfa..8ec724a5 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0005a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0005a/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; rml:encoding rml:UTF-8; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0005b/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0005b/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0005b/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0005b/README.md b/src/test/resources/new-test-cases/io/RMLTTC0005b/README.md new file mode 100644 index 00000000..6f8b8933 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0005b/README.md @@ -0,0 +1,109 @@ +## RMLTTC0005b + +**Title**: Target UTF-16 + +**Description**: Test export all triples with UTF-16 encoding + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; + rml:encoding rml:UTF-16; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0005b/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0005b/dump1.nq index d94567681228f1bab1ff238ab64bb80a5232ebbc..0cb7fa2236e4ed9efd04a8c9581c55f7752470c0 100644 GIT binary patch literal 1358 zcmchX%L>9U5Jm6WuaJH~wLU?_g)RiajrapqqZZmKtqc8m^`z(`>ZVZ3Kptf>cjk1G z$9=4$F4$QkwJ@WrLM7~D*1k^4bl`hi6E*eeeZ@0YsvOTPz6qXt=8(~z@f9$KL@>p9 zPhHF-lCQ>Bw0~%)MKy2rCAp=F$TcK~Ia$R;omuIeg35UGYSngmtl+Sv11ty2BV%PC zRQ3;bDx=Y_RokVppgW9ikXS<^(guqlWILuTk#1!~2DNItL}v7ct$+8rB~49Xk#e8Q V^5|8@V_2)U%VR}{C^= literal 678 zcmbV~K?=e!5CHGKBJ=@CYpQ~j9`sNUyoevz)@>U|HYM$${$7O?yaYn7%g!*cTaC*y zorS;^%%qW9H;BAul^?H0)66?-L~o%NIWGhZShGyZjPc#J7EcqHAAYx_I$#ZIjV@#= zVmit++IKvl8&R{yAyP=RkI6Ws(LUp5@y(u2wXFhDA(e~?Ii}G*9U5Jm6WuaJH~wLU?_g)RiajrapqqZZmKtqc8m^`z(`>ZVZ3Kptf>cjk1G z$9=4$F4$QkwJ@WrLM7~D*1k^4bl`hi6E*eeeZ@0YsvOTPz6qXt=8(~z@f9$KL@>p9 zPhHF-lCQ>Bw0~%)MKy2rCAp=F$TcK~Ia$R;omuIeg35UGYSngmtl+Sv11ty2BV%PC zRQ3;bDx=Y_RokVppgW9ikXS<^(guqlWILuTk#1!~2DNItL}v7ct$+8rB~49Xk#e8Q V^5|8@V_2)U%VR}{C^= diff --git a/src/test/resources/new-test-cases/io/RMLTTC0005b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0005b/mapping.ttl index 46c74a60..69dc45bc 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0005b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0005b/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; rml:encoding rml:UTF-16; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006a/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0006a/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0006a/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006a/README.md b/src/test/resources/new-test-cases/io/RMLTTC0006a/README.md new file mode 100644 index 00000000..96554c9e --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0006a/README.md @@ -0,0 +1,108 @@ +## RMLTTC0006a + +**Title**: Target no compression + +**Description**: Test export all triples with no compression + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0006a/mapping.ttl index 7b49510a..e2b46141 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0006a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0006a/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006b/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0006b/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0006b/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0006b/README.md similarity index 53% rename from src/test/resources/new-test-cases/io/RMLTTC0007c/mapping.ttl rename to src/test/resources/new-test-cases/io/RMLTTC0006b/README.md index 80389082..52bb0398 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0007c/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0006b/README.md @@ -1,17 +1,56 @@ +## RMLTTC0006b + +**Title**: Target GZip compression + +**Description**: Test export all triples with GZip compression + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix sd: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,9 +77,21 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Update; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq.gz"; ]; rml:serialization formats:N-Quads; + rml:compression rml:gzip; . + +``` + +**Output 1** +``` + +``` + +**Output 2** + `dump1.nq.gz` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006b/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0006b/dump1.nq deleted file mode 100644 index d9456768..00000000 --- a/src/test/resources/new-test-cases/io/RMLTTC0006b/dump1.nq +++ /dev/null @@ -1,10 +0,0 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0006b/mapping.ttl index f1ea89f7..ad46411f 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0006b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0006b/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq.gz"; ]; rml:serialization formats:N-Quads; rml:compression rml:gzip; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006c/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0006c/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0006c/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007d/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0006c/README.md similarity index 54% rename from src/test/resources/new-test-cases/io/RMLTTC0007d/mapping.ttl rename to src/test/resources/new-test-cases/io/RMLTTC0006c/README.md index a6ca9a3a..15435e90 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0007d/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0006c/README.md @@ -1,19 +1,56 @@ +## RMLTTC0006c + +**Title**: Target Zip compression + +**Description**: Test export all triples with ZIP compression + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix td: . -@prefix htv: . -@prefix hctl: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -40,13 +77,21 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, td:Thing; - td:hasPropertyAffordance [ - td:hasForm [ - hctl:hasTarget "http://localhost/data"; - hctl:forContentType "application/n-quads"; - ]; - ]; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq.zip"; ]; rml:serialization formats:N-Quads; + rml:compression rml:zip; . + +``` + +**Output 1** +``` + +``` + +**Output 2** + `dump1.nq.zip` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006c/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0006c/dump1.nq deleted file mode 100644 index d9456768..00000000 --- a/src/test/resources/new-test-cases/io/RMLTTC0006c/dump1.nq +++ /dev/null @@ -1,10 +0,0 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006c/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0006c/mapping.ttl index 377a978c..e4395a84 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0006c/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0006c/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq.zip"; ]; rml:serialization formats:N-Quads; rml:compression rml:zip; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006d/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0006d/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0006d/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006d/README.md b/src/test/resources/new-test-cases/io/RMLTTC0006d/README.md new file mode 100644 index 00000000..d60b367d --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0006d/README.md @@ -0,0 +1,98 @@ +## RMLTTC0006d + +**Title**: Target TarXz compression + +**Description**: Test export all triples with TarXZ compression + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@prefix ex: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq.tar.xz"; + ]; + rml:serialization formats:N-Quads; + rml:compression rml:tarxz; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** + `dump1.nq.tar.xz` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006d/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0006d/mapping.ttl index dafac6b0..6c914e77 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0006d/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0006d/mapping.ttl @@ -1,18 +1,15 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @prefix ex: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -39,8 +36,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq.tar.xz"; ]; rml:serialization formats:N-Quads; rml:compression rml:tarxz; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006e/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0006e/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0006e/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007b/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0006e/README.md similarity index 53% rename from src/test/resources/new-test-cases/io/RMLTTC0007b/mapping.ttl rename to src/test/resources/new-test-cases/io/RMLTTC0006e/README.md index 9cba1bcb..42e7ca17 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0007b/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0006e/README.md @@ -1,17 +1,56 @@ +## RMLTTC0006e + +**Title**: Target TarGzip compression + +**Description**: Test export all triples with TarGZip compression + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +77,21 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq.tar.gz"; ]; rml:serialization formats:N-Quads; + rml:compression rml:targz; . + +``` + +**Output 1** +``` + +``` + +**Output 2** + `dump1.nq.tar.gz` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0006e/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0006e/mapping.ttl index a56110fb..c71d369d 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0006e/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0006e/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, void:Dataset; - void:dataDump ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq.tar.gz"; ]; rml:serialization formats:N-Quads; rml:compression rml:targz; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007a/Friends.json b/src/test/resources/new-test-cases/io/RMLTTC0007a/Friends.json new file mode 100644 index 00000000..8e554498 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0007a/Friends.json @@ -0,0 +1,27 @@ +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007a/README.md b/src/test/resources/new-test-cases/io/RMLTTC0007a/README.md new file mode 100644 index 00000000..4e2f4339 --- /dev/null +++ b/src/test/resources/new-test-cases/io/RMLTTC0007a/README.md @@ -0,0 +1,108 @@ +## RMLTTC0007a + +**Title**: Target with FilePath description + +**Description**: Test export all triples to a target with File path access description + +**Error expected?** No + +**Input** +``` +[ + { + "id": 0, + "name": "Monica Geller", + "age": 33 + }, + { + "id": 1, + "name": "Rachel Green", + "age": 34 + }, + { + "id": 2, + "name": "Joey Tribbiani", + "age": 35 + }, + { + "id": 3, + "name": "Chandler Bing", + "age": 36 + }, + { + "id": 4, + "name": "Ross Geller", + "age": 37 + } +] + +``` + +**Mapping** +``` +@prefix rml: . +@prefix foaf: . +@prefix formats: . +@base . + +<#TriplesMap> a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; + rml:referenceFormulation rml:JSONPath; + rml:iterator "$[*]"; + ]; + rml:subjectMap [ a rml:SubjectMap; + rml:template "http://example.org/{$.id}"; + rml:logicalTarget <#TargetDump1>; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:name; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.name"; + ]; + ]; + rml:predicateObjectMap [ a rml:PredicateObjectMap; + rml:predicateMap [ a rml:PredicateMap; + rml:constant foaf:age; + ]; + rml:objectMap [ a rml:ObjectMap; + rml:reference "$.age"; + ]; + ]; +. + +<#TargetDump1> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; + ]; + rml:serialization formats:N-Quads; +. + +``` + +**Output 1** +``` + +``` + +**Output 2** +``` + "33" . + "Monica Geller" . + "34" . + "Rachel Green" . + "35" . + "Joey Tribbiani" . + "36" . + "Chandler Bing" . + "37" . + "Ross Geller" . + +``` + diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007a/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0007a/mapping.ttl index 05ab849c..e2b46141 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0007a/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0007a/mapping.ttl @@ -1,17 +1,14 @@ @prefix rml: . @prefix foaf: . -@prefix dcat: . -@prefix void: . @prefix formats: . @base . -<#DCATSourceAccess> a rml:Source, dcat:Distribution; - dcat:downloadURL ; -. - <#TriplesMap> a rml:TriplesMap; rml:logicalSource [ a rml:LogicalSource; - rml:source <#DCATSourceAccess>; + rml:source [ a rml:FilePath; + rml:root rml:MappingDirectory; + rml:path "Friends.json"; + ]; rml:referenceFormulation rml:JSONPath; rml:iterator "$[*]"; ]; @@ -38,8 +35,9 @@ . <#TargetDump1> a rml:LogicalTarget; - rml:target [ a rml:Target, dcat:Distribution; - dcat:accessUrl ; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump1.nq"; ]; rml:serialization formats:N-Quads; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007b/default.nq b/src/test/resources/new-test-cases/io/RMLTTC0007b/default.nq deleted file mode 100644 index e69de29b..00000000 diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007b/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0007b/dump1.nq deleted file mode 100644 index d9456768..00000000 --- a/src/test/resources/new-test-cases/io/RMLTTC0007b/dump1.nq +++ /dev/null @@ -1,10 +0,0 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007c/default.nq b/src/test/resources/new-test-cases/io/RMLTTC0007c/default.nq deleted file mode 100644 index e69de29b..00000000 diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007c/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0007c/dump1.nq deleted file mode 100644 index d9456768..00000000 --- a/src/test/resources/new-test-cases/io/RMLTTC0007c/dump1.nq +++ /dev/null @@ -1,10 +0,0 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007d/default.nq b/src/test/resources/new-test-cases/io/RMLTTC0007d/default.nq deleted file mode 100644 index e69de29b..00000000 diff --git a/src/test/resources/new-test-cases/io/RMLTTC0007d/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0007d/dump1.nq deleted file mode 100644 index d9456768..00000000 --- a/src/test/resources/new-test-cases/io/RMLTTC0007d/dump1.nq +++ /dev/null @@ -1,10 +0,0 @@ - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . From 8c84e6f1156675223c6100d7b19e97544b2e0a25 Mon Sep 17 00:00:00 2001 From: Els de Vleeschauwer Date: Fri, 25 Apr 2025 13:21:09 +0200 Subject: [PATCH 098/127] completed new RML test cases for Core --- .../ugent/rml/MapperNewRMLCoreJSONTest.java | 11 ++++ .../core/RMLTC0025a-JSON/README.md | 53 +++++++++++++++++++ .../core/RMLTC0025a-JSON/mapping.ttl | 20 +++++++ .../core/RMLTC0025a-JSON/output.nq | 2 + .../core/RMLTC0025a-JSON/student.json | 8 +++ 5 files changed, 94 insertions(+) create mode 100644 src/test/resources/new-test-cases/core/RMLTC0025a-JSON/README.md create mode 100644 src/test/resources/new-test-cases/core/RMLTC0025a-JSON/mapping.ttl create mode 100644 src/test/resources/new-test-cases/core/RMLTC0025a-JSON/output.nq create mode 100644 src/test/resources/new-test-cases/core/RMLTC0025a-JSON/student.json diff --git a/src/test/java/be/ugent/rml/MapperNewRMLCoreJSONTest.java b/src/test/java/be/ugent/rml/MapperNewRMLCoreJSONTest.java index a5d0c025..4ca8b909 100644 --- a/src/test/java/be/ugent/rml/MapperNewRMLCoreJSONTest.java +++ b/src/test/java/be/ugent/rml/MapperNewRMLCoreJSONTest.java @@ -39,6 +39,11 @@ public void evaluate_new_0002e_JSON() { doMappingExpectError("./new-test-cases/core/RMLTC0002e-JSON/mapping.ttl"); } + @Test + public void evaluate_new_0002g_JSON() { + doMappingExpectError("./new-test-cases/core/RMLTC0002g-JSON/mapping.ttl"); + } + @Test public void evaluate_new_0003c_JSON() { doMapping("./new-test-cases/core/RMLTC0003c-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0003c-JSON/output.nq"); @@ -253,6 +258,12 @@ public void evaluate_new_0023f_JSON() { doMappingExpectError("./new-test-cases/core/RMLTC0023f-JSON/mapping.ttl", StrictMode.STRICT); } + @Test + @Disabled("RMLMapper cannot parse rml:subject correctly.") + public void evaluate_new_0025a_JSON() { + doMapping("./new-test-cases/core/RMLTC0025a-JSON/mapping.ttl", "./new-test-cases/core/RMLTC0025a-JSON/output.nq"); + } + @Test @Disabled("Should fail but doesn't.") public void evaluate_new_0025b_JSON() { diff --git a/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/README.md b/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/README.md new file mode 100644 index 00000000..5bf2ee67 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/README.md @@ -0,0 +1,53 @@ +## RMLTC0025a-JSON + +**Title**: "Generation of triples with constant blank node " + +**Description**: "Tests the generation of triples with a constant blank node" + +**Error expected?** No + +**Input** +``` +{ + "students": [{ + "Name":"Venus" + }, + { + "Name":"Julio" + }] +} + +``` + +**Mapping** +``` +@prefix foaf: . +@prefix rml: . +@prefix ex: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate ex:student + ]; + rml:subject _:School . + +``` + +**Output** +``` +_:School "Julio" . +_:School "Venus" . + +``` + diff --git a/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/mapping.ttl b/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/mapping.ttl new file mode 100644 index 00000000..fb1a85a8 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/mapping.ttl @@ -0,0 +1,20 @@ +@prefix foaf: . +@prefix rml: . +@prefix ex: . + + a rml:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:iterator "$.students[*]"; + rml:referenceFormulation rml:JSONPath; + rml:source [ a rml:RelativePathSource; + rml:root rml:MappingDirectory; + rml:path "student.json" + ] + ]; + rml:predicateObjectMap [ + rml:objectMap [ + rml:reference "$.Name" + ]; + rml:predicate ex:student + ]; + rml:subject _:School . diff --git a/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/output.nq b/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/output.nq new file mode 100644 index 00000000..0c848cda --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/output.nq @@ -0,0 +1,2 @@ +_:School "Julio" . +_:School "Venus" . diff --git a/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/student.json b/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/student.json new file mode 100644 index 00000000..10ebb2e1 --- /dev/null +++ b/src/test/resources/new-test-cases/core/RMLTC0025a-JSON/student.json @@ -0,0 +1,8 @@ +{ + "students": [{ + "Name":"Venus" + }, + { + "Name":"Julio" + }] +} From b3a4d087f1b5905d79f53ee7762812bcbc65320d Mon Sep 17 00:00:00 2001 From: Ostrzyciel Date: Sun, 8 Jun 2025 18:26:14 +0200 Subject: [PATCH 099/127] Add Jelly output format; simplify writer code --- README.md | 59 ++++++++++--------- buildNumber.properties | 5 +- pom.xml | 11 ++++ src/main/java/be/ugent/rml/cli/Main.java | 15 ++--- .../java/be/ugent/rml/store/QuadStore.java | 28 +-------- .../java/be/ugent/rml/store/RDF4JStore.java | 12 +++- .../be/ugent/rml/store/SimpleQuadStore.java | 4 +- src/test/java/be/ugent/rml/ArgumentsTest.java | 22 +++++++ src/test/java/be/ugent/rml/TestCore.java | 3 + .../ugent/rml/readme/ReadmeFunctionTest.java | 3 +- .../java/be/ugent/rml/readme/ReadmeTest.java | 3 +- .../argument/output-jelly/target_output.jelly | 21 +++++++ 12 files changed, 113 insertions(+), 73 deletions(-) create mode 100644 src/test/resources/argument/output-jelly/target_output.jelly diff --git a/README.md b/README.md index 9857a8b4..d75b8c80 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ and see [Usage](#cli) on how to use the commandline interface! - For examples on how to use functions within RML mapping documents, you can have a look at the [RML+FnO test cases](https://github.com/RMLio/rml-fno-test-cases) - configuration file - metadata generation -- output formats: nquads (default), turtle, trig, trix, jsonld, hdt +- output formats: nquads (default), turtle, trig, trix, jsonld, hdt, [jelly](https://w3id.org/jelly) - join conditions - targets: - local file @@ -104,7 +104,7 @@ The following options are most common. - `-m, --mapping `: one or more mapping file paths and/or strings (multiple values are concatenated). - `-o, --output `: path to output file -- `-s,--serialization `: serialization format (nquads (default), trig, trix, jsonld, hdt) +- `-s,--serialization `: serialization format (nquads (default), trig, trix, jsonld, hdt, [jelly](https://w3id.org/jelly)) All options can be found when executing `java -jar rmlmapper.jar --help`, that output is found below. @@ -148,7 +148,7 @@ options: passwords, certificates, etc. -s,--serialization serialization format (nquads (default), turtle, trig, trix, - jsonld, hdt) + jsonld, hdt, jelly) --strict Enable strict mode. In strict mode, the mapper will fail on invalid IRIs instead of skipping them. @@ -307,31 +307,34 @@ The tests will fail otherwise, as Testcontainers can't spin up the container. ## Dependencies -| Dependency | License | -|:----------------------------------------------:|--------------------------------------------------------------------| -| ch.qos.logback logback-classic | Eclipse Public License 1.0 & GNU Lesser General Public License 2.1 | -| com.github.fnoio function-agent-java | MIT | -| com.github.fnoio grel-functions-java | MIT | -| com.github.fnoio idlab-functions-java | MIT | -| com.github.rdfhdt hdt-java | GNU Lesser General Public License v3.0 | -| com.github.tomakehurst:wiremock-jre8 | Apache License 2.0 | -| com.microsoft.sqlserver mssql-jdbc | MIT | -| com.mysql mysql-connector-java | GNU General Public License v2.0 | -| com.oracle.database.jdbc:ojdbc11 | Oracle Free Use Terms and Conditions | -| net.minidev json-smart | Apache License 2.0 | -| org.apache.jena fuseki-main | Apache License 2.0 | -| org.eclipse.rdf4j rdf4j-client | Eclipse Distribution License v1.0 | -| org.junit.jupiter junit-jupiter-api | Eclipse Public License v2.0 | -| org.junit.jupiter junit-jupiter-engine | Eclipse Public License v2.0 | -| org.junit.jupiter junit-jupiter-params | Eclipse Public License v2.0 | -| org.junit.vintage junit-vintage-engine | Eclipse Public License v2.0 | -| org.postgresql postgresql | BSD | -| org.testcontainers jdbc | MIT | -| org.testcontainers junit-jupiter | MIT | -| org.testcontainers mssqlserver | MIT | -| org.testcontainers mysql | MIT | -| org.testcontainers oracle-xe | MIT | -| org.testcontainers postgresql | MIT | +| Dependency | License | +|:--------------------------------------:|--------------------------------------------------------------------| +| ch.qos.logback logback-classic | Eclipse Public License 1.0 & GNU Lesser General Public License 2.1 | +| com.github.fnoio function-agent-java | MIT | +| com.github.fnoio grel-functions-java | MIT | +| com.github.fnoio idlab-functions-java | MIT | +| com.github.rdfhdt hdt-java | GNU Lesser General Public License v3.0 | +| com.github.tomakehurst:wiremock-jre8 | Apache License 2.0 | +| com.google.protobuf protobuf-java | BSD 3-clause | +| com.microsoft.sqlserver mssql-jdbc | MIT | +| com.mysql mysql-connector-java | GNU General Public License v2.0 | +| com.oracle.database.jdbc:ojdbc11 | Oracle Free Use Terms and Conditions | +| eu.neverblink.jelly jelly-core | Apache License 2.0 | +| eu.neverblink.jelly jelly-rdf4j | Apache License 2.0 | +| net.minidev json-smart | Apache License 2.0 | +| org.apache.jena fuseki-main | Apache License 2.0 | +| org.eclipse.rdf4j rdf4j-client | Eclipse Distribution License v1.0 | +| org.junit.jupiter junit-jupiter-api | Eclipse Public License v2.0 | +| org.junit.jupiter junit-jupiter-engine | Eclipse Public License v2.0 | +| org.junit.jupiter junit-jupiter-params | Eclipse Public License v2.0 | +| org.junit.vintage junit-vintage-engine | Eclipse Public License v2.0 | +| org.postgresql postgresql | BSD | +| org.testcontainers jdbc | MIT | +| org.testcontainers junit-jupiter | MIT | +| org.testcontainers mssqlserver | MIT | +| org.testcontainers mysql | MIT | +| org.testcontainers oracle-xe | MIT | +| org.testcontainers postgresql | MIT | ## Commercial Support diff --git a/buildNumber.properties b/buildNumber.properties index 5dbf6ed6..0b2fbf9b 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,4 +1,3 @@ #maven.buildNumber.plugin properties file -#Tue Aug 13 08:29:04 GMT 2024 -buildNumber0=373 - +#Sun Jun 08 17:31:20 CEST 2025 +buildNumber0=375 diff --git a/pom.xml b/pom.xml index b0c9adea..a708dfd7 100644 --- a/pom.xml +++ b/pom.xml @@ -263,6 +263,17 @@ + + eu.neverblink.jelly + jelly-rdf4j + 3.1.2 + + + org.eclipse.rdf4j + * + + + be.ugent.idlab.knows function-agent-java diff --git a/src/main/java/be/ugent/rml/cli/Main.java b/src/main/java/be/ugent/rml/cli/Main.java index a6a89d6d..597fab9f 100644 --- a/src/main/java/be/ugent/rml/cli/Main.java +++ b/src/main/java/be/ugent/rml/cli/Main.java @@ -127,7 +127,7 @@ public static void run(String[] args, String basePath) throws Exception { .build(); Option serializationFormatOption = Option.builder("s") .longOpt("serialization") - .desc("serialization format (nquads (default), turtle, trig, trix, jsonld, hdt)") + .desc("serialization format (nquads (default), turtle, trig, trix, jsonld, hdt, jelly)") .hasArg() .build(); Option jdbcDSNOption = Option.builder("dsn") @@ -545,12 +545,7 @@ private static void writeOutputTargets(Map targets, QuadStore r String serializationFormat = target.getSerializationFormat(); OutputStream output = target.getOutputStream(); store.addQuads(target.getMetadata()); - - // Set character encoding - try (Writer out = new BufferedWriter(new OutputStreamWriter(output, Charset.defaultCharset()))) { - // Write store to target - store.write(out, serializationFormat); - } + store.write(output, serializationFormat); // Close OS resources target.close(); logger.debug("Exporting to Target: {}", target); @@ -637,7 +632,7 @@ private static File writeOutputUncompressed(QuadStore store, String outputFile, logger.info("{} quad was generated for default Target", store.size()); } - Writer out = null; + OutputStream out = null; try { String doneMessage = null; @@ -653,11 +648,11 @@ private static File writeOutputUncompressed(QuadStore store, String outputFile, doneMessage = "Writing to " + targetFile.getPath() + " is done."; - out = Files.newBufferedWriter(targetFile.toPath(), StandardCharsets.UTF_8); + out = Files.newOutputStream(targetFile.toPath()); } else { isSystemOut = true; - out = new BufferedWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8)); + out = System.out; } store.write(out, format); diff --git a/src/main/java/be/ugent/rml/store/QuadStore.java b/src/main/java/be/ugent/rml/store/QuadStore.java index 66187921..a8737b99 100644 --- a/src/main/java/be/ugent/rml/store/QuadStore.java +++ b/src/main/java/be/ugent/rml/store/QuadStore.java @@ -130,37 +130,15 @@ public abstract class QuadStore { * Write out the QuadStore in given format * TODO use class or enum for output format * - * @param out Writer output location + * @param out OutputStream to write to * @param format QuadStore format (.TTL) * @throws Exception */ - public abstract void write(Writer out, String format) throws Exception; + public abstract void write(OutputStream out, String format) throws Exception; // END OF ABSTRACT METHODS - // following final methods use the abstract methods to provide additional functionality or helper functions - /** - * Helper function - * - * @param out - * @param format - * @throws Exception - */ - public final void write(ByteArrayOutputStream out, String format) throws Exception { - write(new BufferedWriter(new OutputStreamWriter(out)), format); - } - - /** - * Helper function - * - * @param out - * @param format - * @throws Exception - */ - public final void write(PrintStream out, String format) throws Exception { - write(new PrintWriter(out), format); - } - + // following final methods use the abstract metho`ds to provide additional functionality or helper functions /** * Helper function * diff --git a/src/main/java/be/ugent/rml/store/RDF4JStore.java b/src/main/java/be/ugent/rml/store/RDF4JStore.java index 3b4987b4..15b900ca 100644 --- a/src/main/java/be/ugent/rml/store/RDF4JStore.java +++ b/src/main/java/be/ugent/rml/store/RDF4JStore.java @@ -4,6 +4,9 @@ import be.ugent.rml.term.Literal; import be.ugent.rml.term.NamedNode; import be.ugent.rml.term.Term; +import eu.neverblink.jelly.convert.rdf4j.rio.JellyFormat; +import eu.neverblink.jelly.convert.rdf4j.rio.JellyWriterSettings; +import eu.neverblink.jelly.core.JellyOptions; import org.eclipse.rdf4j.model.*; import org.eclipse.rdf4j.model.impl.*; import org.eclipse.rdf4j.model.util.Models; @@ -16,6 +19,7 @@ import org.slf4j.LoggerFactory; import java.io.InputStream; +import java.io.OutputStream; import java.io.Writer; import java.util.ArrayList; import java.util.List; @@ -149,7 +153,7 @@ public void read(InputStream is, String base, RDFFormat format) throws Exception } @Override - public void write(Writer out, String format) throws Exception { + public void write(OutputStream out, String format) throws Exception { switch (format) { case "turtle": Rio.write(model, out, RDFFormat.TURTLE); @@ -172,6 +176,12 @@ public void write(Writer out, String format) throws Exception { case "ntriples": Rio.write(model, out, RDFFormat.NTRIPLES); break; + case "jelly": + var settings = JellyWriterSettings.empty(); + // Mark RDF-star as not used + settings.setJellyOptions(JellyOptions.BIG_STRICT); + Rio.write(model, out, JellyFormat.JELLY, settings); + break; default: throw new Exception("Serialization " + format + " not supported"); } diff --git a/src/main/java/be/ugent/rml/store/SimpleQuadStore.java b/src/main/java/be/ugent/rml/store/SimpleQuadStore.java index ef651320..a5ebb67d 100644 --- a/src/main/java/be/ugent/rml/store/SimpleQuadStore.java +++ b/src/main/java/be/ugent/rml/store/SimpleQuadStore.java @@ -108,10 +108,10 @@ public void read(InputStream is, String base, RDFFormat format) { } @Override - public void write(Writer out, String format) throws IOException { + public void write(OutputStream out, String format) throws IOException { switch (format) { case "nquads": - toNQuads(out); + toNQuads(new BufferedWriter(new OutputStreamWriter(out))); break; default: throw new Error("Serialization " + format + " not supported"); diff --git a/src/test/java/be/ugent/rml/ArgumentsTest.java b/src/test/java/be/ugent/rml/ArgumentsTest.java index e31327d8..787f203b 100644 --- a/src/test/java/be/ugent/rml/ArgumentsTest.java +++ b/src/test/java/be/ugent/rml/ArgumentsTest.java @@ -378,6 +378,28 @@ public void outputHDT() throws Exception { } } + @Test + public void outputJelly() throws Exception { + String cwd = Utils.getFile("argument").getAbsolutePath(); + String mappingFilePath = (new File(cwd, "mapping.ttl")).getAbsolutePath(); + String actualJellyPath = (new File("./generated_output.jelly")).getAbsolutePath(); + String expectedJellyPath = Utils.getFile( "argument/output-jelly/target_output.jelly").getAbsolutePath(); + + Main.run(new String[]{"-m" , mappingFilePath , "-o" , actualJellyPath , "-s", "jelly"}, cwd); + compareFiles( + expectedJellyPath, + actualJellyPath, + false + ); + + try { + File outputFile = Utils.getFile(actualJellyPath); + assertTrue(outputFile.delete()); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Test public void quoteInLiteral() throws Exception { diff --git a/src/test/java/be/ugent/rml/TestCore.java b/src/test/java/be/ugent/rml/TestCore.java index 85999ed6..f51c5f5a 100644 --- a/src/test/java/be/ugent/rml/TestCore.java +++ b/src/test/java/be/ugent/rml/TestCore.java @@ -12,6 +12,7 @@ import be.ugent.rml.target.TargetFactory; import be.ugent.rml.term.NamedNode; import be.ugent.rml.term.Term; +import eu.neverblink.jelly.convert.rdf4j.rio.JellyFormat; import org.eclipse.rdf4j.rio.RDFFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -351,6 +352,8 @@ protected QuadStore filePathToStore(String path) throws Exception { store = QuadStoreFactory.read(outputFile, RDFFormat.JSONLD); } else if (path.endsWith(".trig")) { store = QuadStoreFactory.read(outputFile, RDFFormat.TRIG); + } else if (path.endsWith(".jelly")) { + store = QuadStoreFactory.read(outputFile, JellyFormat.JELLY); } else { store = QuadStoreFactory.read(outputFile); } diff --git a/src/test/java/be/ugent/rml/readme/ReadmeFunctionTest.java b/src/test/java/be/ugent/rml/readme/ReadmeFunctionTest.java index d96089bc..c9939650 100644 --- a/src/test/java/be/ugent/rml/readme/ReadmeFunctionTest.java +++ b/src/test/java/be/ugent/rml/readme/ReadmeFunctionTest.java @@ -49,8 +49,7 @@ public void function() { QuadStore result = executor.execute(null).get(new NamedNode("rmlmapper://default.store")); // Output the result - BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out)); - result.write(out, "turtle"); + result.write(System.out, "turtle"); } catch (Exception e) { fail("No exception was expected."); } diff --git a/src/test/java/be/ugent/rml/readme/ReadmeTest.java b/src/test/java/be/ugent/rml/readme/ReadmeTest.java index f87c2989..b215f494 100644 --- a/src/test/java/be/ugent/rml/readme/ReadmeTest.java +++ b/src/test/java/be/ugent/rml/readme/ReadmeTest.java @@ -44,8 +44,7 @@ public void standard() { QuadStore result = executor.execute(null).get(new NamedNode("rmlmapper://default.store")); // Output the result - BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out)); - result.write(out, "turtle"); + result.write(System.out, "turtle"); } catch (Exception e) { fail("No exception was expected."); } diff --git a/src/test/resources/argument/output-jelly/target_output.jelly b/src/test/resources/argument/output-jelly/target_output.jelly new file mode 100644 index 00000000..3d1f1aba --- /dev/null +++ b/src/test/resources/argument/output-jelly/target_output.jelly @@ -0,0 +1,21 @@ + + +HPX px +Rhttp://example.com/10/ + JVenus +Rhttp://xmlns.com/foaf/0.1/ +Jname + +*Z +Venusen +Rhttp://example.com/ +Jid +  +*Z +10 +/R-+http://www.w3.org/1999/02/22-rdf-syntax-ns# +Jtype + +JPerson + +*J \ No newline at end of file From 5582d5b448e002cce226123b92b056779990b9ae Mon Sep 17 00:00:00 2001 From: Ostrzyciel Date: Sun, 8 Jun 2025 18:51:44 +0200 Subject: [PATCH 100/127] Restore previous APIs for Writer --- buildNumber.properties | 4 +-- .../java/be/ugent/rml/store/QuadStore.java | 28 +++++++++++++++++-- .../java/be/ugent/rml/store/RDF4JStore.java | 28 +++++++++++++------ .../be/ugent/rml/store/SimpleQuadStore.java | 9 ++++-- 4 files changed, 54 insertions(+), 15 deletions(-) diff --git a/buildNumber.properties b/buildNumber.properties index 0b2fbf9b..d1da3bd9 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,3 @@ #maven.buildNumber.plugin properties file -#Sun Jun 08 17:31:20 CEST 2025 -buildNumber0=375 +#Sun Jun 08 18:28:21 CEST 2025 +buildNumber0=378 diff --git a/src/main/java/be/ugent/rml/store/QuadStore.java b/src/main/java/be/ugent/rml/store/QuadStore.java index a8737b99..688bf6e6 100644 --- a/src/main/java/be/ugent/rml/store/QuadStore.java +++ b/src/main/java/be/ugent/rml/store/QuadStore.java @@ -127,7 +127,20 @@ public abstract class QuadStore { public abstract void read(InputStream is, String base, RDFFormat format) throws Exception; /** - * Write out the QuadStore in given format + * Write out the QuadStore in given format. + * Deprecated, use write(OutputStream out, String format) instead. + * TODO remove this method in future versions, use write(OutputStream out, String format) instead. + * + * @param out Writer output location + * @param format QuadStore format (.TTL) + * @throws Exception + */ + @Deprecated + public abstract void write(Writer out, String format) throws Exception; + + /** + * Write out the QuadStore in given format, using a binary output stream. + * Override this method if you want to support binary formats like Jelly. * TODO use class or enum for output format * * @param out OutputStream to write to @@ -138,7 +151,18 @@ public abstract class QuadStore { // END OF ABSTRACT METHODS - // following final methods use the abstract metho`ds to provide additional functionality or helper functions + // following final methods use the abstract methods to provide additional functionality or helper functions + /** + * Helper function + * + * @param out + * @param format + * @throws Exception + */ + public final void write(PrintStream out, String format) throws Exception { + write(new PrintWriter(out), format); + } + /** * Helper function * diff --git a/src/main/java/be/ugent/rml/store/RDF4JStore.java b/src/main/java/be/ugent/rml/store/RDF4JStore.java index 15b900ca..9093c487 100644 --- a/src/main/java/be/ugent/rml/store/RDF4JStore.java +++ b/src/main/java/be/ugent/rml/store/RDF4JStore.java @@ -18,9 +18,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.Writer; +import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -153,7 +151,7 @@ public void read(InputStream is, String base, RDFFormat format) throws Exception } @Override - public void write(OutputStream out, String format) throws Exception { + public void write(Writer out, String format) throws Exception { switch (format) { case "turtle": Rio.write(model, out, RDFFormat.TURTLE); @@ -177,16 +175,28 @@ public void write(OutputStream out, String format) throws Exception { Rio.write(model, out, RDFFormat.NTRIPLES); break; case "jelly": - var settings = JellyWriterSettings.empty(); - // Mark RDF-star as not used - settings.setJellyOptions(JellyOptions.BIG_STRICT); - Rio.write(model, out, JellyFormat.JELLY, settings); - break; + throw new UnsupportedOperationException( + "Writing Jelly format to a Writer is not supported. Use OutputStream instead." + ); default: throw new Exception("Serialization " + format + " not supported"); } } + @Override + public void write(OutputStream out, String format) throws Exception { + // Jelly is the only format that requires a binary output stream + if (format.equals("jelly")) { + var settings = JellyWriterSettings.empty(); + // Mark RDF-star as not used + settings.setJellyOptions(JellyOptions.BIG_STRICT); + Rio.write(model, out, JellyFormat.JELLY, settings); + } else { + // For all other formats, fall back to using the Writer + write(new BufferedWriter(new OutputStreamWriter(out)), format); + } + } + public String getBase() { Optional base = model.getNamespace(""); if (base.isPresent()) { diff --git a/src/main/java/be/ugent/rml/store/SimpleQuadStore.java b/src/main/java/be/ugent/rml/store/SimpleQuadStore.java index a5ebb67d..dc543658 100644 --- a/src/main/java/be/ugent/rml/store/SimpleQuadStore.java +++ b/src/main/java/be/ugent/rml/store/SimpleQuadStore.java @@ -108,16 +108,21 @@ public void read(InputStream is, String base, RDFFormat format) { } @Override - public void write(OutputStream out, String format) throws IOException { + public void write(Writer out, String format) throws IOException { switch (format) { case "nquads": - toNQuads(new BufferedWriter(new OutputStreamWriter(out))); + toNQuads(out); break; default: throw new Error("Serialization " + format + " not supported"); } } + @Override + public void write(OutputStream out, String format) throws IOException { + write(new BufferedWriter(new OutputStreamWriter(out)), format); + } + @Override public boolean equals(Object o) { throw new UnsupportedOperationException("Method not implemented."); From 0511ac591f1838002bb626998a2b29b4fcdd9a0e Mon Sep 17 00:00:00 2001 From: Ostrzyciel Date: Tue, 10 Jun 2025 18:45:46 +0200 Subject: [PATCH 101/127] Fix small issues pointed out by Andy See: https://github.com/TopQuadrant/shacl/pull/194 --- .gitattributes | 3 +++ pom.xml | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index eea259e2..50d31d15 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,4 @@ docs/apidocs/* binary + +# Mark Jelly files as binary +*.jelly binary diff --git a/pom.xml b/pom.xml index a708dfd7..7cdccf65 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,7 @@ 17 17 5.0.0 + 3.1.2 1.18.3 @@ -266,7 +267,7 @@ eu.neverblink.jelly jelly-rdf4j - 3.1.2 + ${jelly.version} org.eclipse.rdf4j From a635bd1c1977ff115caaad98c921d263738e9fa1 Mon Sep 17 00:00:00 2001 From: Ostrzyciel Date: Thu, 26 Jun 2025 13:53:07 +0200 Subject: [PATCH 102/127] Update Jelly-JVM to 3.2.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7cdccf65..a4ecc41f 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ 17 17 5.0.0 - 3.1.2 + 3.2.0 1.18.3 From 5409db8b508babe9cf2d090a7f6be317614d1df6 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Fri, 27 Jun 2025 17:41:32 +0200 Subject: [PATCH 103/127] Refactored QuadStore and subclasses - Removed deprecated `write` methods from `QuadStore` - Added entry in CHANGELOG about the Jelly output serialization that was recently added --- CHANGELOG.md | 6 ++++ .../java/be/ugent/rml/store/QuadStore.java | 22 ------------ .../java/be/ugent/rml/store/RDF4JStore.java | 20 +++-------- .../be/ugent/rml/store/SimpleQuadStore.java | 35 +++++++------------ 4 files changed, 24 insertions(+), 59 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e8ab308..48733d12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,9 +10,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - A join between triples maps with different logical targets might result in quads ending up in wrong targets. +### Added +- Option to serialize output as Jelly. + ### Changed - Updated new RML test cases for IO and Core. +### Removed +- `QuadStore`: removed deprecated `write` methods. + ## [7.3.3] - 2025-04-07 ### Fixed diff --git a/src/main/java/be/ugent/rml/store/QuadStore.java b/src/main/java/be/ugent/rml/store/QuadStore.java index 688bf6e6..47ad391c 100644 --- a/src/main/java/be/ugent/rml/store/QuadStore.java +++ b/src/main/java/be/ugent/rml/store/QuadStore.java @@ -126,18 +126,6 @@ public abstract class QuadStore { */ public abstract void read(InputStream is, String base, RDFFormat format) throws Exception; - /** - * Write out the QuadStore in given format. - * Deprecated, use write(OutputStream out, String format) instead. - * TODO remove this method in future versions, use write(OutputStream out, String format) instead. - * - * @param out Writer output location - * @param format QuadStore format (.TTL) - * @throws Exception - */ - @Deprecated - public abstract void write(Writer out, String format) throws Exception; - /** * Write out the QuadStore in given format, using a binary output stream. * Override this method if you want to support binary formats like Jelly. @@ -152,16 +140,6 @@ public abstract class QuadStore { // END OF ABSTRACT METHODS // following final methods use the abstract methods to provide additional functionality or helper functions - /** - * Helper function - * - * @param out - * @param format - * @throws Exception - */ - public final void write(PrintStream out, String format) throws Exception { - write(new PrintWriter(out), format); - } /** * Helper function diff --git a/src/main/java/be/ugent/rml/store/RDF4JStore.java b/src/main/java/be/ugent/rml/store/RDF4JStore.java index 9093c487..6793fb1a 100644 --- a/src/main/java/be/ugent/rml/store/RDF4JStore.java +++ b/src/main/java/be/ugent/rml/store/RDF4JStore.java @@ -151,7 +151,7 @@ public void read(InputStream is, String base, RDFFormat format) throws Exception } @Override - public void write(Writer out, String format) throws Exception { + public void write(OutputStream out, String format) throws Exception { switch (format) { case "turtle": Rio.write(model, out, RDFFormat.TURTLE); @@ -175,6 +175,10 @@ public void write(Writer out, String format) throws Exception { Rio.write(model, out, RDFFormat.NTRIPLES); break; case "jelly": + var settings = JellyWriterSettings.empty(); + // Mark RDF-star as not used + settings.setJellyOptions(JellyOptions.BIG_STRICT); + Rio.write(model, out, JellyFormat.JELLY, settings); throw new UnsupportedOperationException( "Writing Jelly format to a Writer is not supported. Use OutputStream instead." ); @@ -183,20 +187,6 @@ public void write(Writer out, String format) throws Exception { } } - @Override - public void write(OutputStream out, String format) throws Exception { - // Jelly is the only format that requires a binary output stream - if (format.equals("jelly")) { - var settings = JellyWriterSettings.empty(); - // Mark RDF-star as not used - settings.setJellyOptions(JellyOptions.BIG_STRICT); - Rio.write(model, out, JellyFormat.JELLY, settings); - } else { - // For all other formats, fall back to using the Writer - write(new BufferedWriter(new OutputStreamWriter(out)), format); - } - } - public String getBase() { Optional base = model.getNamespace(""); if (base.isPresent()) { diff --git a/src/main/java/be/ugent/rml/store/SimpleQuadStore.java b/src/main/java/be/ugent/rml/store/SimpleQuadStore.java index dc543658..8bc6ddff 100644 --- a/src/main/java/be/ugent/rml/store/SimpleQuadStore.java +++ b/src/main/java/be/ugent/rml/store/SimpleQuadStore.java @@ -1,9 +1,11 @@ package be.ugent.rml.store; +import be.ugent.rml.Utils; import be.ugent.rml.term.Term; import org.eclipse.rdf4j.rio.RDFFormat; import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -46,13 +48,7 @@ public void removeDuplicates() { @Override public List getSubjects() { - List terms = new ArrayList<>(); - - for (Quad q : quads) { - terms.add(q.getSubject()); - } - - return terms; + return Utils.getSubjectsFromQuads(quads); } @Override @@ -107,20 +103,13 @@ public void read(InputStream is, String base, RDFFormat format) { throw new UnsupportedOperationException("Method not implemented."); } - @Override - public void write(Writer out, String format) throws IOException { - switch (format) { - case "nquads": - toNQuads(out); - break; - default: - throw new Error("Serialization " + format + " not supported"); - } - } - @Override public void write(OutputStream out, String format) throws IOException { - write(new BufferedWriter(new OutputStreamWriter(out)), format); + if (format.equals("nquads")) { + toNQuads(out); + } else { + throw new Error("Serialization " + format + " not supported"); + } } @Override @@ -149,9 +138,11 @@ public boolean isSubset(QuadStore store) { throw new UnsupportedOperationException("Method not implemented."); } - private void toNQuads(Writer out) throws IOException { - for (Quad q : quads) { - out.write(getNQuadOfQuad(q) + "\n"); + private void toNQuads(OutputStream out) throws IOException { + try (Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8)) { + for (Quad q : quads) { + writer.write(getNQuadOfQuad(q) + "\n"); + } } } From a4235ef03c455fb86bbccdb5dfe372cf78fb3558 Mon Sep 17 00:00:00 2001 From: elsdvlee Date: Wed, 23 Jul 2025 14:12:25 +0200 Subject: [PATCH 104/127] solves issue #286 --- CHANGELOG.md | 1 + .../rml/target/DirectHttpRequestTarget.java | 6 +-- .../ugent/rml/target/HttpRequestTarget.java | 13 ++++-- .../rml/target/HttpRequestTargetHelper.java | 26 +++++------ .../rml/target/LinkedHttpRequestTarget.java | 6 +-- .../be/ugent/rml/target/TargetFactory.java | 24 ++++++++-- .../be/ugent/rml/HttpRequestTargetTest.java | 15 +++++- .../solid-target/solid6/buildings.csv | 4 ++ .../resources/solid-target/solid6/mapping.ttl | 46 +++++++++++++++++++ .../resources/solid-target/solid6/output1.nq | 4 ++ 10 files changed, 115 insertions(+), 30 deletions(-) create mode 100644 src/test/resources/solid-target/solid6/buildings.csv create mode 100644 src/test/resources/solid-target/solid6/mapping.ttl create mode 100644 src/test/resources/solid-target/solid6/output1.nq diff --git a/CHANGELOG.md b/CHANGELOG.md index 48733d12..1a5ddc85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - A join between triples maps with different logical targets might result in quads ending up in wrong targets. +- rmle:contentTypeHeader and rmle:acceptHeader is replaced by generic htv:headers for Http Request Targets. ### Added - Option to serialize output as Jelly. diff --git a/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java b/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java index 45473648..e5855485 100644 --- a/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java +++ b/src/main/java/be/ugent/rml/target/DirectHttpRequestTarget.java @@ -9,8 +9,8 @@ public class DirectHttpRequestTarget extends HttpRequestTarget { - public DirectHttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata, HttpRequestTargetHelper httpRequestTargetHelper) throws IOException { - super(httpRequestInfo, serializationFormat, metadata, httpRequestTargetHelper); + public DirectHttpRequestTarget(Map httpRequestInfo, Map httpRequestHeaders, String serializationFormat, List metadata, HttpRequestTargetHelper httpRequestTargetHelper) throws IOException { + super(httpRequestInfo, httpRequestHeaders, serializationFormat, metadata, httpRequestTargetHelper); } @Override @@ -32,7 +32,7 @@ public String toString() { public void close() { super.close(); try { - this.httpRequestTargetHelper.executeHttpRequest(httpRequestInfo); + this.httpRequestTargetHelper.executeHttpRequest(httpRequestInfo, httpRequestHeaders); } catch (Exception e) { logger.error("Failed to close http request target for {}: {}", this.httpRequestInfo.get("absoluteURI"), e.getMessage()); diff --git a/src/main/java/be/ugent/rml/target/HttpRequestTarget.java b/src/main/java/be/ugent/rml/target/HttpRequestTarget.java index 4c6c2d27..b8e71f26 100644 --- a/src/main/java/be/ugent/rml/target/HttpRequestTarget.java +++ b/src/main/java/be/ugent/rml/target/HttpRequestTarget.java @@ -14,6 +14,7 @@ public abstract class HttpRequestTarget implements Target { protected final Map httpRequestInfo; + protected final Map httpRequestHeaders; private final List metadata; private final ByteArrayOutputStream byteArrayOutputStream; protected final Logger logger; @@ -30,14 +31,16 @@ public abstract class HttpRequestTarget implements Target { ); /** - * This constructor takes a JSON object with the http request info, the serialization format and the metadata as argument. - * @param httpRequestInfo JSON object with all the target info + * This constructor takes a map with the http request info, a map with the http request headers, the serialization format and the metadata as argument. + * @param httpRequestInfo Map with all the target info + * @param httpRequestHeaders Map with HTTP request headers * @param serializationFormat String with the serialization format * @param metadata a list of Quads containing metadata */ - public HttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata, + public HttpRequestTarget(Map httpRequestInfo, Map httpRequestHeaders, String serializationFormat, List metadata, HttpRequestTargetHelper httpRequestTargetHelper) { this.httpRequestInfo = httpRequestInfo; + this.httpRequestHeaders = httpRequestHeaders; this.metadata = metadata; this.serializationFormat = serializationFormat; byteArrayOutputStream = new ByteArrayOutputStream(); @@ -90,8 +93,8 @@ public void close() { if (!httpRequestInfo.containsKey("methodName")){ this.httpRequestInfo.put("methodName", HttpMethod.PUT.name()); } - if (!httpRequestInfo.containsKey("contentType")){ - this.httpRequestInfo.put("contentType", serializationFormats.get(this.serializationFormat)); + if (!httpRequestHeaders.containsKey("content-type")){ + this.httpRequestHeaders.put("content-type", serializationFormats.get(this.serializationFormat)); } } diff --git a/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java b/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java index 4df90a2a..14084dde 100644 --- a/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java +++ b/src/main/java/be/ugent/rml/target/HttpRequestTargetHelper.java @@ -225,14 +225,13 @@ private String generateJWT(final String url, final String method) throws JoseExc } /** Executes a HTTP request to a web resource, optionally using authentication with CSS client credentials. - * @param httpRequestInfo A map with all necessary data. The map should contain following keys: absoluteURI, methodName. - * The map may contain following keys: contentType, accept, data, - * authenticationType, email, password, oidcIssuer, webId - * absoluteURI, methodName, contentType, data + * @param httpRequestInfo A map with all necessary data except headers. The map should contain following keys: absoluteURI, methodName. + * The map may contain following keys: data, authenticationType, email, password, oidcIssuer, webId + * @param httpRequestHeaders A map with all headers * @return response body * @throws Exception Something goes wrong. */ - public String executeHttpRequest(Map httpRequestInfo) throws Exception{ + public String executeHttpRequest(Map httpRequestInfo, Map httpRequestHeaders) throws Exception{ try { String absoluteURI = httpRequestInfo.get("absoluteURI"); String methodName = httpRequestInfo.get("methodName"); @@ -245,12 +244,11 @@ public String executeHttpRequest(Map httpRequestInfo) throws Exc } else { RequestBuilder.method(methodName, HttpRequest.BodyPublishers.noBody()); } - if (httpRequestInfo.containsKey("contentType")){ - RequestBuilder.setHeader("Content-Type", httpRequestInfo.get("contentType")); - } - if (httpRequestInfo.containsKey("accept")){ - RequestBuilder.setHeader("Accept", httpRequestInfo.get("accept")); + + for (Map.Entry entry : httpRequestHeaders.entrySet()) { + RequestBuilder.setHeader(entry.getKey(), entry.getValue()); } + addAuthentication(RequestBuilder, httpRequestInfo); HttpRequest httpRequest = RequestBuilder.build(); @@ -268,12 +266,12 @@ public String executeHttpRequest(Map httpRequestInfo) throws Exc /** Executes a HTTP request to a linked web resource, optionally using authentication with CSS client credentials. * @param httpRequestInfo A map with all necessary data. The map should contain following keys: * linkingAbsoluteURI, linkRelation, methodName. - * The map may contain following keys: contentType, accept, data, - * authenticationType, email, password, oidcIssuer, webId + * The map may contain following keys: data, authenticationType, email, password, oidcIssuer, webId + * @param httpRequestHeaders A map with all headers * @return response body * @throws Exception Something goes wrong. */ - public String executeLinkedHttpRequest(Map httpRequestInfo) throws Exception{ + public String executeLinkedHttpRequest(Map httpRequestInfo, Map httpRequestHeaders) throws Exception{ try { String linkingAbsoluteURI = httpRequestInfo.get("linkingAbsoluteURI"); String linkRelation = httpRequestInfo.get("linkRelation"); @@ -296,7 +294,7 @@ public String executeLinkedHttpRequest(Map httpRequestInfo) thro if (link.contains("rel=\"" + linkRelation + "\"")) { absoluteURI = link.substring(link.indexOf("<") + 1, link.indexOf(">")); httpRequestInfo.put("absoluteURI", absoluteURI); - responseBody = executeHttpRequest(httpRequestInfo); + responseBody = executeHttpRequest(httpRequestInfo, httpRequestHeaders); foundLink = true; } index += 1; diff --git a/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java b/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java index e4cddd9e..77434dcf 100644 --- a/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java +++ b/src/main/java/be/ugent/rml/target/LinkedHttpRequestTarget.java @@ -9,8 +9,8 @@ public class LinkedHttpRequestTarget extends HttpRequestTarget { - public LinkedHttpRequestTarget(Map httpRequestInfo, String serializationFormat, List metadata, HttpRequestTargetHelper httpRequestTargetHelper) throws IOException { - super(httpRequestInfo, serializationFormat, metadata, httpRequestTargetHelper); + public LinkedHttpRequestTarget(Map httpRequestInfo, Map httpRequestHeaders, String serializationFormat, List metadata, HttpRequestTargetHelper httpRequestTargetHelper) throws IOException { + super(httpRequestInfo, httpRequestHeaders, serializationFormat, metadata, httpRequestTargetHelper); } @Override @@ -34,7 +34,7 @@ public String toString() { public void close() { super.close(); try { - this.httpRequestTargetHelper.executeLinkedHttpRequest(httpRequestInfo); + this.httpRequestTargetHelper.executeLinkedHttpRequest(httpRequestInfo, httpRequestHeaders); } catch (Exception e) { logger.error("Failed to close http request target linked to {} with link relation {}: {}", this.httpRequestInfo.get("linkingAbsoluteURI"), this.httpRequestInfo.get("linkRelation"), e.getMessage()); diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index e0231f30..4cfea689 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -377,7 +377,8 @@ else if (location.endsWith(".jsonld")) { Map httpRequestInfo = parseHttpRequest(rmlStore, t); String absoluteURI = getRequiredValue(t,new NamedNode(NAMESPACES.HTV + "absoluteURI"), rmlStore); httpRequestInfo.put("absoluteURI", absoluteURI); - target = new DirectHttpRequestTarget(httpRequestInfo, serializationFormat, metadata, httpRequestTargetHelper); + Map httpRequestHeaders = parseHttpRequestHeaders(rmlStore, t); + target = new DirectHttpRequestTarget(httpRequestInfo, httpRequestHeaders, serializationFormat, metadata, httpRequestTargetHelper); break; } case NAMESPACES.RMLE + "LinkedHttpRequest": { @@ -387,7 +388,8 @@ else if (location.endsWith(".jsonld")) { String linkRelation = getRequiredValue(t,new NamedNode(NAMESPACES.RMLE + "linkRelation"), rmlStore); httpRequestInfo.put("linkingAbsoluteURI", linkingAbsoluteURI); httpRequestInfo.put("linkRelation", linkRelation); - target = new LinkedHttpRequestTarget(httpRequestInfo, serializationFormat, metadata, httpRequestTargetHelper); + Map httpRequestHeaders = parseHttpRequestHeaders(rmlStore, t); + target = new LinkedHttpRequestTarget(httpRequestInfo, httpRequestHeaders, serializationFormat, metadata, httpRequestTargetHelper); break; } default: { @@ -405,7 +407,6 @@ else if (location.endsWith(".jsonld")) { private Map parseHttpRequest(QuadStore rmlStore, Term t){ HashMap httpRequestInfo= new HashMap<>(); putOptionalValue(t, new NamedNode(NAMESPACES.HTV + "methodName"), rmlStore, httpRequestInfo, "methodName"); - putOptionalValue(t, new NamedNode(NAMESPACES.RMLE + "contentTypeHeader"), rmlStore, httpRequestInfo, "contentType"); List authentications = Utils.getObjectsFromQuads(rmlStore.getQuads(t, new NamedNode(NAMESPACES.RMLE + "userAuthentication"), null)); if (!authentications.isEmpty()) { Term userAuthentication = authentications.get(0); @@ -431,6 +432,23 @@ private Map parseHttpRequest(QuadStore rmlStore, Term t){ return httpRequestInfo; } + private Map parseHttpRequestHeaders(QuadStore rmlStore, Term t){ + HashMap httpRequestHeaders = new HashMap<>(); + List headersList = Utils.getObjectsFromQuads(rmlStore.getQuads(t, new NamedNode(NAMESPACES.HTV + "headers"), null)); + if (!headersList.isEmpty()) { + Term rest = headersList.get(0); + while (rest.getValue() != NAMESPACES.RDF + "nil") { + Term first = Utils.getObjectsFromQuads(rmlStore.getQuads(rest, new NamedNode(NAMESPACES.RDF + "first"), null)).get(0); + String headerName = getRequiredValue(first, new NamedNode(NAMESPACES.HTV + "fieldName"), rmlStore); + String headerValue = getRequiredValue(first, new NamedNode(NAMESPACES.HTV + "fieldValue"), rmlStore); + //convert header name to lower case because HTTP headers are case-insensitive: easer to retrieve specific header + httpRequestHeaders.put(headerName.toLowerCase(), headerValue); + rest = Utils.getObjectsFromQuads(rmlStore.getQuads(rest, new NamedNode(NAMESPACES.RDF + "rest"), null)).get(0); + } + } + return httpRequestHeaders; + } + private String getRequiredValue(Term subject, Term predicate, QuadStore rmlStore) throws Error { List terms = Utils.getObjectsFromQuads(rmlStore.getQuads(subject, predicate, null)); if (terms.isEmpty()) { diff --git a/src/test/java/be/ugent/rml/HttpRequestTargetTest.java b/src/test/java/be/ugent/rml/HttpRequestTargetTest.java index 5e8d8487..69dd1e89 100644 --- a/src/test/java/be/ugent/rml/HttpRequestTargetTest.java +++ b/src/test/java/be/ugent/rml/HttpRequestTargetTest.java @@ -59,6 +59,17 @@ public void solid5() throws Exception { "user1"); } + //constant target with explicit method and headers + @Test + public void solid6() throws Exception { + doMappingSolid("./solid-target/solid6/mapping.ttl", + "https://pod.playground.solidlab.be/user1/rmlmapper/building", + "solid-target/solid6/output1.nq", + "user1"); + } + + // TODO text with 2 headers + //acl for user2, absolute URI with .ttl @Test public void acl1() throws Exception{ @@ -138,7 +149,7 @@ void doMappingSolid(String mapPath, String[] absoluteURIs, String[] outPaths, St while (i < absoluteURIs.length) { Map solidTargetInfo = getHttpRequestInfo(users[i], absoluteURIs[i], "GET"); compareResourceWithOutput(outPaths[i], solidTargetInfo, helper); - helper.executeHttpRequest(getHttpRequestInfo("user1", absoluteURIs[i], "DELETE")); + helper.executeHttpRequest(getHttpRequestInfo("user1", absoluteURIs[i], "DELETE"), Map.of()); i++; } } @@ -159,7 +170,7 @@ private Map getHttpRequestInfo(String user, String absoluteURI, private void compareResourceWithOutput(String outPath, Map httpRequestInfo, HttpRequestTargetHelper helper) throws Exception { // retrieve resource from solid pod httpRequestInfo.put("methodName", "GET"); - String response = helper.executeHttpRequest(httpRequestInfo); + String response = helper.executeHttpRequest(httpRequestInfo, Map.of()); InputStream responseStream = new ByteArrayInputStream(response.getBytes()); QuadStore result = QuadStoreFactory.read(responseStream, RDFFormat.NQUADS); // compare result to expected output diff --git a/src/test/resources/solid-target/solid6/buildings.csv b/src/test/resources/solid-target/solid6/buildings.csv new file mode 100644 index 00000000..92cd61c6 --- /dev/null +++ b/src/test/resources/solid-target/solid6/buildings.csv @@ -0,0 +1,4 @@ +BuildingID,OwnerID,FloorTileID +building1,user2,floortile1 +building2,user2,floortile2 +building3,user3,floortile1 diff --git a/src/test/resources/solid-target/solid6/mapping.ttl b/src/test/resources/solid-target/solid6/mapping.ttl new file mode 100644 index 00000000..7e60f3f3 --- /dev/null +++ b/src/test/resources/solid-target/solid6/mapping.ttl @@ -0,0 +1,46 @@ +@base . +@prefix rr: . +@prefix rdf: . +@prefix foaf: . +@prefix rml: . +@prefix ql: . +@prefix o: . +@prefix ex: . +@prefix rmlt: . +@prefix formats: . +@prefix rmle: . +@prefix htv: . + + a rr:TriplesMap; + rml:logicalSource [ + rml:source "src/test/resources/solid-target/solid1/buildings.csv"; + rml:referenceFormulation ql:CSV; + ]; + rr:subjectMap [ + rr:template "http://example.com/{BuildingID}"; + rml:logicalTarget ; + ]; + rr:predicateObjectMap [ + rr:predicate o:has-floor-tile; + rr:objectMap [ rr:template "http://example.com/product-{FloorTileID}" ]; + ]. + + rmlt:serialization formats:Turtle; + rmlt:target [ + a rmlt:Target, rmle:DirectHttpRequest; + htv:absoluteURI "https://pod.playground.solidlab.be/user1/rmlmapper/building"; + htv:methodName "PUT"; + htv:headers ([ + a htv:RequestHeader; + htv:fieldName "Content-Type"; + htv:fieldValue "text/turtle"; + ]); + rmle:userAuthentication [ + a rmle:CssClientCredentialsAuthentication; + rmle:authEmail "user1@pod.playground.solidlab.be"; + rmle:authPassword "user1"; + rmle:authOidcIssuer ; + rmle:authWebId + ]; + ]. + diff --git a/src/test/resources/solid-target/solid6/output1.nq b/src/test/resources/solid-target/solid6/output1.nq new file mode 100644 index 00000000..37c23859 --- /dev/null +++ b/src/test/resources/solid-target/solid6/output1.nq @@ -0,0 +1,4 @@ + . + . + . + From ef9677ed0e9feb39b3e5941ea2b84971d21d7fde Mon Sep 17 00:00:00 2001 From: Ben De Meester Date: Fri, 8 Aug 2025 16:58:13 +0200 Subject: [PATCH 105/127] updated IO test cases --- .../ugent/rml/MapperNewRMLIOSourceTest.java | 8 ++-- .../ugent/rml/MapperNewRMLIOTargetTest.java | 39 ++++++++----------- .../new-test-cases/io/RMLSTC0006a/Friends.csv | 12 +++--- .../new-test-cases/io/RMLSTC0006a/README.md | 12 +++--- .../new-test-cases/io/RMLSTC0006b/Friends.csv | 12 +++--- .../new-test-cases/io/RMLSTC0006b/README.md | 12 +++--- .../new-test-cases/io/RMLSTC0011e/README.md | 2 +- .../new-test-cases/io/RMLTTC0002f/README.md | 12 +++--- .../new-test-cases/io/RMLTTC0002f/dump1.nq | 10 ++--- .../new-test-cases/io/RMLTTC0002f/mapping.ttl | 2 +- .../new-test-cases/io/RMLTTC0002g/README.md | 12 +++--- .../new-test-cases/io/RMLTTC0002g/dump1.nq | 10 ++--- .../new-test-cases/io/RMLTTC0002g/mapping.ttl | 2 +- .../new-test-cases/io/RMLTTC0002h/README.md | 12 +++--- .../new-test-cases/io/RMLTTC0002h/dump1.nq | 10 ++--- .../new-test-cases/io/RMLTTC0002h/mapping.ttl | 2 +- .../new-test-cases/io/RMLTTC0002i/README.md | 2 +- .../new-test-cases/io/RMLTTC0002i/mapping.ttl | 2 +- .../new-test-cases/io/RMLTTC0002k/README.md | 7 +++- .../new-test-cases/io/RMLTTC0002k/default.nq | 5 +++ .../new-test-cases/io/RMLTTC0002k/mapping.ttl | 2 +- .../new-test-cases/io/RMLTTC0002l/README.md | 12 +++--- .../new-test-cases/io/RMLTTC0002l/dump2.nq | 10 ++--- .../new-test-cases/io/RMLTTC0002l/mapping.ttl | 2 +- .../new-test-cases/io/RMLTTC0002m/README.md | 5 --- .../new-test-cases/io/RMLTTC0002m/default.nq | 5 --- .../new-test-cases/io/RMLTTC0002n/README.md | 5 --- .../new-test-cases/io/RMLTTC0002n/default.nq | 5 --- .../new-test-cases/io/RMLTTC0002o/README.md | 11 +++++- .../new-test-cases/io/RMLTTC0002r/README.md | 5 --- .../new-test-cases/io/RMLTTC0002r/default.nq | 5 --- .../new-test-cases/io/RMLTTC0004f/README.md | 2 +- .../new-test-cases/io/RMLTTC0004f/mapping.ttl | 2 +- .../new-test-cases/io/RMLTTC0004g/README.md | 25 ++++++------ .../new-test-cases/io/RMLTTC0004g/dump1.ttl | 20 +++++----- .../new-test-cases/io/RMLTTC0004g/mapping.ttl | 2 +- 36 files changed, 139 insertions(+), 164 deletions(-) diff --git a/src/test/java/be/ugent/rml/MapperNewRMLIOSourceTest.java b/src/test/java/be/ugent/rml/MapperNewRMLIOSourceTest.java index f0c253e8..85db2596 100644 --- a/src/test/java/be/ugent/rml/MapperNewRMLIOSourceTest.java +++ b/src/test/java/be/ugent/rml/MapperNewRMLIOSourceTest.java @@ -6,8 +6,8 @@ public class MapperNewRMLIOSourceTest extends TestCore { /* - Total number of test cases: 32 - - Failures: 12 (37.5%) - - Passes: 20 (62.5%) + - Failures: 10 + - Passes: 22 */ @Test public void evaluate_RMLSTC0001a() { @@ -49,13 +49,12 @@ public void evaluate_RMLSTC0002e() { } @Test - @Disabled("Crashes") + @Disabled("RML Logical Source n-triples file not supported yet") public void evaluate_RMLSTC0003() { doMapping("./new-test-cases/io/RMLSTC0003/mapping.ttl", "./new-test-cases/io/RMLSTC0003/default.nq"); } @Test - @Disabled("RML Logical Source handles CSVW null values incorrect") public void evaluate_RMLSTC0004a() { doMapping("./new-test-cases/io/RMLSTC0004a/mapping.ttl", "./new-test-cases/io/RMLSTC0004a/default.nq"); } @@ -78,7 +77,6 @@ public void evaluate_RMLSTC0006a() { } @Test - @Disabled("Output wrong") public void evaluate_RMLSTC0006b() { doMapping("./new-test-cases/io/RMLSTC0006b/mapping.ttl", "./new-test-cases/io/RMLSTC0006b/default.nq"); } diff --git a/src/test/java/be/ugent/rml/MapperNewRMLIOTargetTest.java b/src/test/java/be/ugent/rml/MapperNewRMLIOTargetTest.java index 60468f5c..7e7cb1fa 100644 --- a/src/test/java/be/ugent/rml/MapperNewRMLIOTargetTest.java +++ b/src/test/java/be/ugent/rml/MapperNewRMLIOTargetTest.java @@ -1,18 +1,19 @@ package be.ugent.rml; -import be.ugent.rml.term.NamedNode; -import be.ugent.rml.term.Term; +import java.util.HashMap; +import java.util.Map; + import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import java.util.HashMap; -import java.util.Map; +import be.ugent.rml.term.NamedNode; +import be.ugent.rml.term.Term; public class MapperNewRMLIOTargetTest extends TestCore { /* - Total number of test cases: 41 - - Failures: 20 (48.8%) - - Passes: 21 (51.2%) + - Failures: 12 + - Passes: 29 */ @Test public void evaluate_RMLTTC0000() { @@ -60,7 +61,7 @@ public void evaluate_RMLTTC0001e() { } @Test - @Disabled("Crashes") + @Disabled("No support for datatypemap targets") public void evaluate_RMLTTC0001f() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0001f/dump1.nq"); @@ -114,7 +115,6 @@ public void evaluate_RMLTTC0002e() { } @Test - @Disabled("Named graphs wrong") public void evaluate_RMLTTC0002f() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002f/dump1.nq"); @@ -124,7 +124,6 @@ public void evaluate_RMLTTC0002f() { } @Test - @Disabled("Named graphs wrong") public void evaluate_RMLTTC0002g() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002g/dump1.nq"); @@ -134,7 +133,6 @@ public void evaluate_RMLTTC0002g() { } @Test - @Disabled("Named graphs wrong") public void evaluate_RMLTTC0002h() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002h/dump1.nq"); @@ -144,7 +142,6 @@ public void evaluate_RMLTTC0002h() { } @Test - @Disabled("Named graphs wrong") public void evaluate_RMLTTC0002i() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002i/dump1.nq"); @@ -163,7 +160,7 @@ public void evaluate_RMLTTC0002j() { } @Test - @Disabled("Named graphs wrong") + @Disabled("No support for datatypemap targets") public void evaluate_RMLTTC0002k() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002k/dump1.nq"); @@ -173,7 +170,7 @@ public void evaluate_RMLTTC0002k() { } @Test - @Disabled("Crashes") + @Disabled("No support for datatypemap targets") public void evaluate_RMLTTC0002l() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002l/dump1.nq"); @@ -183,7 +180,6 @@ public void evaluate_RMLTTC0002l() { } @Test - @Disabled("No output") public void evaluate_RMLTTC0002m() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002m/dump1.nq"); @@ -193,7 +189,6 @@ public void evaluate_RMLTTC0002m() { } @Test - @Disabled("No output") public void evaluate_RMLTTC0002n() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002n/dump1.nq"); @@ -221,7 +216,7 @@ public void evaluate_RMLTTC0002p() { } @Test - @Disabled("Crashes") + @Disabled("No support for datatypemap targets") public void evaluate_RMLTTC0002q() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002q/dump1.nq"); @@ -231,7 +226,6 @@ public void evaluate_RMLTTC0002q() { } @Test - @Disabled("No output") public void evaluate_RMLTTC0002r() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0002r/dump1.nq"); @@ -300,7 +294,6 @@ public void evaluate_RMLTTC0004f() { } @Test - @Disabled("parsing failure?") public void evaluate_RMLTTC0004g() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0004g/dump1.ttl"); @@ -317,7 +310,7 @@ public void evaluate_RMLTTC0005a() { } @Test - @Disabled("parsing failure due to compression?") + @Disabled("no support for UTF-16 encoding") public void evaluate_RMLTTC0005b() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0005b/dump1.nq"); @@ -334,7 +327,7 @@ public void evaluate_RMLTTC0006a() { } @Test - @Disabled("Compression support missing") + @Disabled("no support for gzip compression") public void evaluate_RMLTTC0006b() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0006b/dump1.nq"); @@ -343,7 +336,7 @@ public void evaluate_RMLTTC0006b() { } @Test - @Disabled("Compression support missing") + @Disabled("no support for zip compression") public void evaluate_RMLTTC0006c() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0006c/dump1.nq"); @@ -352,7 +345,7 @@ public void evaluate_RMLTTC0006c() { } @Test - @Disabled("tarxz not implemented") + @Disabled("no support for tarxz compression") public void evaluate_RMLTTC0006d() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0006d/dump1.nq"); @@ -361,7 +354,7 @@ public void evaluate_RMLTTC0006d() { } @Test - @Disabled("tarxz not implemented") + @Disabled("no support for targz compression") public void evaluate_RMLTTC0006e() { Map outPaths = new HashMap<>(); outPaths.put(new NamedNode("http://example.com/rules/#TargetDump1"), "./new-test-cases/io/RMLTTC0006e/dump1.nq"); diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006a/Friends.csv b/src/test/resources/new-test-cases/io/RMLSTC0006a/Friends.csv index 928f08c1..752cdfe4 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0006a/Friends.csv +++ b/src/test/resources/new-test-cases/io/RMLSTC0006a/Friends.csv @@ -1,6 +1,6 @@ -id, name, age -0, Monica Geller, 33 -1, Rachel Green, 34 -2, Joey Tribbiani, 35 -3, Chandler Bing, 36 -4, Ross Geller, 37 +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006a/README.md b/src/test/resources/new-test-cases/io/RMLSTC0006a/README.md index d01aa168..3e7b5c95 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0006a/README.md +++ b/src/test/resources/new-test-cases/io/RMLSTC0006a/README.md @@ -8,12 +8,12 @@ **Input** ``` -id, name, age -0, Monica Geller, 33 -1, Rachel Green, 34 -2, Joey Tribbiani, 35 -3, Chandler Bing, 36 -4, Ross Geller, 37 +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 ``` diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.csv b/src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.csv index 928f08c1..752cdfe4 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.csv +++ b/src/test/resources/new-test-cases/io/RMLSTC0006b/Friends.csv @@ -1,6 +1,6 @@ -id, name, age -0, Monica Geller, 33 -1, Rachel Green, 34 -2, Joey Tribbiani, 35 -3, Chandler Bing, 36 -4, Ross Geller, 37 +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 diff --git a/src/test/resources/new-test-cases/io/RMLSTC0006b/README.md b/src/test/resources/new-test-cases/io/RMLSTC0006b/README.md index 32b07359..73c9ad58 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0006b/README.md +++ b/src/test/resources/new-test-cases/io/RMLSTC0006b/README.md @@ -8,12 +8,12 @@ **Input** ``` -id, name, age -0, Monica Geller, 33 -1, Rachel Green, 34 -2, Joey Tribbiani, 35 -3, Chandler Bing, 36 -4, Ross Geller, 37 +id,name,age +0,Monica Geller,33 +1,Rachel Green,34 +2,Joey Tribbiani,35 +3,Chandler Bing,36 +4,Ross Geller,37 ``` diff --git a/src/test/resources/new-test-cases/io/RMLSTC0011e/README.md b/src/test/resources/new-test-cases/io/RMLSTC0011e/README.md index 8ba3187e..1685d967 100644 --- a/src/test/resources/new-test-cases/io/RMLSTC0011e/README.md +++ b/src/test/resources/new-test-cases/io/RMLSTC0011e/README.md @@ -34,7 +34,7 @@ rml:constant ex:skill; ]; rml:objectMap [ a rml:ObjectMap; - rml:reference "$.skills"; + rml:reference "$.skills[*]"; ]; ]. diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002f/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002f/README.md index d40e2dd1..3e480183 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002f/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0002f/README.md @@ -43,7 +43,7 @@ @prefix rml: . @prefix foaf: . @prefix formats: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; @@ -106,15 +106,15 @@ **Output 2** ``` - "33" . + "33" . "Monica Geller" . - "34" . + "34" . "Rachel Green" . - "35" . + "35" . "Joey Tribbiani" . - "36" . + "36" . "Chandler Bing" . - "37" . + "37" . "Ross Geller" . ``` diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002f/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0002f/dump1.nq index adcefd04..72529d4a 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002f/dump1.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002f/dump1.nq @@ -1,10 +1,10 @@ - "33" . + "33" . "Monica Geller" . - "34" . + "34" . "Rachel Green" . - "35" . + "35" . "Joey Tribbiani" . - "36" . + "36" . "Chandler Bing" . - "37" . + "37" . "Ross Geller" . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002f/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002f/mapping.ttl index 4aaefbfc..3263e08f 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002f/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002f/mapping.ttl @@ -1,7 +1,7 @@ @prefix rml: . @prefix foaf: . @prefix formats: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002g/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002g/README.md index e867def4..957cf963 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002g/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0002g/README.md @@ -43,7 +43,7 @@ @prefix rml: . @prefix foaf: . @prefix formats: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; @@ -106,11 +106,11 @@ **Output 2** ``` - "33" . - "34" . - "35" . - "36" . - "37" . + "33" . + "34" . + "35" . + "36" . + "37" . ``` diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002g/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0002g/dump1.nq index 95ee6e21..35a39502 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002g/dump1.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002g/dump1.nq @@ -1,5 +1,5 @@ - "33" . - "34" . - "35" . - "36" . - "37" . + "33" . + "34" . + "35" . + "36" . + "37" . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002g/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002g/mapping.ttl index 7a9b5530..1aa3b3a4 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002g/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002g/mapping.ttl @@ -1,7 +1,7 @@ @prefix rml: . @prefix foaf: . @prefix formats: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002h/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002h/README.md index 2b4dfcfa..878af28c 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002h/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0002h/README.md @@ -43,7 +43,7 @@ @prefix rml: . @prefix foaf: . @prefix formats: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; @@ -106,11 +106,11 @@ **Output 2** ``` - "33" . - "34" . - "35" . - "36" . - "37" . + "33" . + "34" . + "35" . + "36" . + "37" . ``` diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002h/dump1.nq b/src/test/resources/new-test-cases/io/RMLTTC0002h/dump1.nq index 95ee6e21..35a39502 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002h/dump1.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002h/dump1.nq @@ -1,5 +1,5 @@ - "33" . - "34" . - "35" . - "36" . - "37" . + "33" . + "34" . + "35" . + "36" . + "37" . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002h/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002h/mapping.ttl index 0c279aec..76ab7663 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002h/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002h/mapping.ttl @@ -1,7 +1,7 @@ @prefix rml: . @prefix foaf: . @prefix formats: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002i/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002i/README.md index 83e1a735..371a4cc3 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002i/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0002i/README.md @@ -43,7 +43,7 @@ @prefix rml: . @prefix foaf: . @prefix formats: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002i/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002i/mapping.ttl index ac2b8bac..5a87ba92 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002i/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002i/mapping.ttl @@ -1,7 +1,7 @@ @prefix rml: . @prefix foaf: . @prefix formats: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002k/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002k/README.md index 23709c80..656b5cbb 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002k/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0002k/README.md @@ -44,7 +44,7 @@ @prefix foaf: . @prefix formats: . @prefix xsd: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; @@ -105,6 +105,11 @@ **Output 1** ``` + "Monica Geller"@en . + "Rachel Green"@en . + "Joey Tribbiani"@en . + "Chandler Bing"@en . + "Ross Geller"@en . ``` diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002k/default.nq b/src/test/resources/new-test-cases/io/RMLTTC0002k/default.nq index e69de29b..8f081be1 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002k/default.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002k/default.nq @@ -0,0 +1,5 @@ + "Monica Geller"@en . + "Rachel Green"@en . + "Joey Tribbiani"@en . + "Chandler Bing"@en . + "Ross Geller"@en . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002k/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002k/mapping.ttl index 85151bf9..112adeae 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002k/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002k/mapping.ttl @@ -2,7 +2,7 @@ @prefix foaf: . @prefix formats: . @prefix xsd: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002l/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002l/README.md index 906e8ad4..c688f6dd 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002l/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0002l/README.md @@ -44,7 +44,7 @@ @prefix foaf: . @prefix formats: . @prefix xsd: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; @@ -117,11 +117,11 @@ **Output 3** ``` - "33"^^ . - "34"^^ . - "35"^^ . - "36"^^ . - "37"^^ . + "33"^^ . + "34"^^ . + "35"^^ . + "36"^^ . + "37"^^ . ``` diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002l/dump2.nq b/src/test/resources/new-test-cases/io/RMLTTC0002l/dump2.nq index b92731fc..81c3a87e 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002l/dump2.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002l/dump2.nq @@ -1,5 +1,5 @@ - "33"^^ . - "34"^^ . - "35"^^ . - "36"^^ . - "37"^^ . + "33"^^ . + "34"^^ . + "35"^^ . + "36"^^ . + "37"^^ . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002l/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0002l/mapping.ttl index 2565df27..a2263a55 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002l/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0002l/mapping.ttl @@ -2,7 +2,7 @@ @prefix foaf: . @prefix formats: . @prefix xsd: . -@prefix ex: . +@prefix ex: . @base . <#TriplesMap> a rml:TriplesMap; diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002m/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002m/README.md index c00d2821..6727d987 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002m/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0002m/README.md @@ -97,11 +97,6 @@ **Output 1** ``` - "33". - "34". - "35". - "36". - "37". ``` diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002m/default.nq b/src/test/resources/new-test-cases/io/RMLTTC0002m/default.nq index ad87bcca..e69de29b 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002m/default.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002m/default.nq @@ -1,5 +0,0 @@ - "33". - "34". - "35". - "36". - "37". diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002n/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002n/README.md index 1b68ae38..e0a1076f 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002n/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0002n/README.md @@ -97,11 +97,6 @@ **Output 1** ``` - "33". - "34". - "35". - "36". - "37". ``` diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002n/default.nq b/src/test/resources/new-test-cases/io/RMLTTC0002n/default.nq index ad87bcca..e69de29b 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002n/default.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002n/default.nq @@ -1,5 +0,0 @@ - "33". - "34". - "35". - "36". - "37". diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002o/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002o/README.md index 4a9f102d..67d69c41 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002o/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0002o/README.md @@ -71,8 +71,8 @@ rml:reference "$.name"; ]; rml:graphMap [ a rml:GraphMap; - rml:constant ex:PeopleGraph1; - rml:logicalTarget <#TargetDump1>; + rml:constant ex:PeopleGraph2; + rml:logicalTarget <#TargetDump2>; ]; ]; rml:predicateObjectMap [ a rml:PredicateObjectMap; @@ -93,6 +93,13 @@ rml:serialization formats:N-Quads; . +<#TargetDump2> a rml:LogicalTarget; + rml:target [ a rml:Target, rml:FilePath; + rml:root rml:CurrentWorkingDirectory; + rml:path "./dump2.nq"; + ]; + rml:serialization formats:N-Quads; +. ``` **Output 1** diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002r/README.md b/src/test/resources/new-test-cases/io/RMLTTC0002r/README.md index 39e68577..06d17ffa 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002r/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0002r/README.md @@ -89,11 +89,6 @@ **Output 1** ``` - "33". - "34". - "35". - "36". - "37". ``` diff --git a/src/test/resources/new-test-cases/io/RMLTTC0002r/default.nq b/src/test/resources/new-test-cases/io/RMLTTC0002r/default.nq index ad87bcca..e69de29b 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0002r/default.nq +++ b/src/test/resources/new-test-cases/io/RMLTTC0002r/default.nq @@ -1,5 +0,0 @@ - "33". - "34". - "35". - "36". - "37". diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004f/README.md b/src/test/resources/new-test-cases/io/RMLTTC0004f/README.md index 5c561276..83c12590 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004f/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0004f/README.md @@ -79,7 +79,7 @@ <#TargetDump1> a rml:LogicalTarget; rml:target [ a rml:Target, rml:FilePath; rml:root rml:CurrentWorkingDirectory; - rml:path "./dump1.nq"; + rml:path "./dump1.rdfxml"; ]; rml:serialization formats:RDF_XML; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004f/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004f/mapping.ttl index 64b10459..4a100eb8 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004f/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004f/mapping.ttl @@ -37,7 +37,7 @@ <#TargetDump1> a rml:LogicalTarget; rml:target [ a rml:Target, rml:FilePath; rml:root rml:CurrentWorkingDirectory; - rml:path "./dump1.nq"; + rml:path "./dump1.rdfxml"; ]; rml:serialization formats:RDF_XML; . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004g/README.md b/src/test/resources/new-test-cases/io/RMLTTC0004g/README.md index b812e5b6..f44425ce 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004g/README.md +++ b/src/test/resources/new-test-cases/io/RMLTTC0004g/README.md @@ -79,7 +79,7 @@ <#TargetDump1> a rml:LogicalTarget; rml:target [ a rml:Target, rml:FilePath; rml:root rml:CurrentWorkingDirectory; - rml:path "./dump1.nq"; + rml:path "./dump1.ttl"; ]; rml:serialization formats:Turtle; . @@ -93,19 +93,16 @@ **Output 2** ``` -@prefix foaf: . -@prefix ex: . - - "33" . - "Monica Geller" . - "34" . - "Rachel Green" . - "35" . - "Joey Tribbiani" . - "36" . - "Chandler Bing" . - "37" . - "Ross Geller" . + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + "33" . + "34" . + "35" . + "36" . + "37" . ``` diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004g/dump1.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004g/dump1.ttl index f5c1e6e1..36247500 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004g/dump1.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004g/dump1.ttl @@ -1,10 +1,10 @@ -http://example.org/0 http://xmlns.com/foaf/0.1/age "33" -http://example.org/0 http://xmlns.com/foaf/0.1/name "Monica Geller" -http://example.org/1 http://xmlns.com/foaf/0.1/age "34" -http://example.org/1 http://xmlns.com/foaf/0.1/name "Rachel Green" -http://example.org/2 http://xmlns.com/foaf/0.1/age "35" -http://example.org/2 http://xmlns.com/foaf/0.1/name "Joey Tribbiani" -http://example.org/3 http://xmlns.com/foaf/0.1/age "36" -http://example.org/3 http://xmlns.com/foaf/0.1/name "Chandler Bing" -http://example.org/4 http://xmlns.com/foaf/0.1/age "37" -http://example.org/4 http://xmlns.com/foaf/0.1/name "Ross Geller" + "Monica Geller" . + "Rachel Green" . + "Joey Tribbiani" . + "Chandler Bing" . + "Ross Geller" . + "33" . + "34" . + "35" . + "36" . + "37" . diff --git a/src/test/resources/new-test-cases/io/RMLTTC0004g/mapping.ttl b/src/test/resources/new-test-cases/io/RMLTTC0004g/mapping.ttl index 009fc001..7ebf1021 100644 --- a/src/test/resources/new-test-cases/io/RMLTTC0004g/mapping.ttl +++ b/src/test/resources/new-test-cases/io/RMLTTC0004g/mapping.ttl @@ -37,7 +37,7 @@ <#TargetDump1> a rml:LogicalTarget; rml:target [ a rml:Target, rml:FilePath; rml:root rml:CurrentWorkingDirectory; - rml:path "./dump1.nq"; + rml:path "./dump1.ttl"; ]; rml:serialization formats:Turtle; . From b9729131f53a826317eeedc87a5119bb148f0216 Mon Sep 17 00:00:00 2001 From: Ben De Meester Date: Fri, 8 Aug 2025 17:48:34 +0200 Subject: [PATCH 106/127] updated readme and added citation --- CITATION.cff | 23 +++++++++++ README.md | 113 +++++++++++++++++++++++++++++++++------------------ 2 files changed, 96 insertions(+), 40 deletions(-) create mode 100644 CITATION.cff diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 00000000..11df63e6 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,23 @@ +cff-version: 1.2.0 +message: "If you use this software, please cite it as below." +authors: +- family-names: "Heyvaert" + given-names: "Pieter" + orcid: "https://orcid.org/0000-0002-1583-5719" +- family-names: "Van Assche" + given-names: "Dylan" + orcid: "https://orcid.org/0000-0002-7195-9935" +- family-names: "De Meester" + given-names: "Ben" + orcid: "https://orcid.org/0000-0003-0248-0987" +- family-names: "Haesendonck" + given-names: "Gerald" + orcid: "https://orcid.org/0000-0003-1605-3855" +- family-names: "de Vleeschauwer" + given-names: "Els" + orcid: "https://orcid.org/0000-0002-8630-3947" +- given-names: "Sitt Min Oo" + orcid: "https://orcid.org/0000-0001-9157-7507" +title: "RMLMapper-JAVA" +doi: 10.5281/zenodo.3929132 +url: "https://github.com/RMLio/rmlmapper-java" \ No newline at end of file diff --git a/README.md b/README.md index d75b8c80..74218ff9 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,8 @@ and see [Usage](#cli) on how to use the commandline interface! - [Including functions](#including-functions) - [Generating metadata](#generating-metadata) - [Testing](#testing) + - [Command line](#command-line) + - [IntelliJ](#intellij) - [RDBs](#rdbs) - [Dependencies](#dependencies) - [Commercial Support](#commercial-support) @@ -38,26 +40,31 @@ and see [Usage](#cli) on how to use the commandline interface! ## Features ### Supported + - local data sources: - Excel (.xlsx) - LibreOffice (.ods) - - CSV files (including CSVW) - - JSON files (JSONPath) + - CSV files + - including CSVW, for an overview of which parts of CSVW are supported, have a look at the [test cases, introduced in v4.4.0](https://github.com/RMLio/rmlmapper-java/tree/master/src/test/resources/test-cases-CSVW) + - JSON files (JSONPath (`@` can be used to select the current object.)) - XML files (XPath) - remote data sources: - relational databases (MySQL, PostgreSQL, Oracle, and SQLServer) - - Web APIs with W3C Web of Things + - Web APIs with W3C Web of Things, see [an exemplary test case, introduced in v4.13.0](https://github.com/RMLio/rmlmapper-java/blob/master/src/test/resources/web-of-things/logical-target/sparql/mapping.ttl) - SPARQL endpoints - files via HTTP urls (via GET) - - CSV files + - CSV files, see [an exemplary test case, introduced in v0.1.0](https://github.com/RMLio/rmlmapper-java/blob/master/src/test/resources/test-cases/RMLTC1003-CSV/mapping.ttl) - JSON files (JSONPath (`@` can be used to select the current object.)) - XML files (XPath) - functions (most cases) - For examples on how to use functions within RML mapping documents, you can have a look at the [RML+FnO test cases](https://github.com/RMLio/rml-fno-test-cases) + - Notable function examples include + - SHA1 and MD5 functions, see [this comment on issue 100](https://github.com/RMLio/rmlmapper-java/issues/100#issuecomment-826547387) + - Lookup function, see [this comment on issue 200](https://github.com/RMLio/rmlmapper-java/issues/220#issuecomment-1754422677) - configuration file - metadata generation -- output formats: nquads (default), turtle, trig, trix, jsonld, hdt, [jelly](https://w3id.org/jelly) - join conditions +- output formats: nquads (default), turtle, trig, trix, jsonld, hdt, [jelly](https://w3id.org/jelly) - targets: - local file - VoID dataset @@ -65,24 +72,33 @@ and see [Usage](#cli) on how to use the commandline interface! - [HTTP request access](https://rml.io/specs/access/httprequest/) - [dynamic logical targets](https://rml.io/specs/target/dynamictarget/) +All functionalities above refer to using RML as maintained at . +There is _some_ support for RML as developed within W3C's [Knowledge Graph Construction Community Group](https://www.w3.org/community/kg-construct/), for a recent view, see the [test cases, support introduced in v7.0.0](https://github.com/RMLio/rmlmapper-java/tree/master/src/test/resources/new-test-cases). + ### Future + - functions (all cases) - conditions (all cases) +- logical views + - Currently, this can be mitigated: we maintain a preprocessor to support this: [RML-view-to-CSV](https://github.com/RMLio/rml-view-to-csv). - data sources: - NoSQL databases - TPF servers - [HTTP request access](https://rml.io/specs/access/httprequest/) + - dynamic logical source + - Currently, this can be mitigated: RMLMapper allows to use the commandline interface to combine multiple mapping rules, so you could script it, for more info, see [issue 161](https://github.com/RMLio/rmlmapper-java/issues/161). ## Releases The standalone jar file (that has a [commandline interface](#cli)) for every release can be found on the release's page on GitHub. -You can find the latest release [here](https://github.com/RMLio/rmlmapper-java/releases/latest). +You can find the latest release on [the dedicated RMLMapper-JAVA Github release page](https://github.com/RMLio/rmlmapper-java/releases/latest). This is the recommended way to get started with RMLMapper. Do you want to build from source yourself? Check [Build](#build). ## Build + The RMLMapper is built using Maven. -As it is also tested against Oracle (check [here](#accessing-oracle-database) for details), +As it is also tested against Oracle (check [the RDB documentation below](#rdbs) for details), it needs a specific set-up to run all tests. That's why we recommend to build without testing: `mvn install -DskipTests=true`. If you want, you can install with tests, and just skip the Oracle tests: `mvn test -Dtest=!Mapper_OracleDB_Test`. @@ -92,14 +108,17 @@ A standalone jar can be found in `/target`. Two jars are found in `/target`: a slim jar without bundled dependencies, and a standalone jar (suffixed with `-all.jar`) with all dependencies bundled. Building with profile `no-buildnumber` disables using and updating `buildNumber.properties` (and uses `0` as build number), e.g.: -``` + +```bash mvn clean package -P no-buildnumber ``` + outputs for example `target/rmlmapper--r0.jar` ## Usage ### CLI + The following options are most common. - `-m, --mapping `: one or more mapping file paths and/or strings (multiple values are concatenated). @@ -163,13 +182,13 @@ options: #### Accessing Web APIs with authentication The [W3C Web of Things Security Ontology](https://www.w3.org/2019/wot/security) -is used to describe how Web APIs authentication should be performed +is used to describe how Web APIs authentication should be performed but does not include the necessary credentials to access the Web API. These credentials can be supplied using the `-psd ` CLI argument. The `PATH` argument must point to one or more private security files which contain the necessary credentials to access the Web API. -An example can be found in the test cases +An example can be found in the test cases [src/test/resources/web-of-things](src/test/resources/web-of-things). ### Library @@ -197,13 +216,12 @@ The RMLMapper is executed in the `/data` folder in the Docker container. ### Including functions There are three ways to include (new) functions within the RML Mapper - * dynamic loading: you add links to java files or jar files, and those files are loaded dynamically at runtime - * preloading: you register functionality via code, and you need to rebuild the mapper to use that functionality - * add as dependency - -Registration of functions is done using a Turtle file, which you can find in `src/main/resources/functions.ttl` +- dynamic loading: you add links to java files or jar files, and those files are loaded dynamically at runtime +- preloading: you register functionality via code, and you need to rebuild the mapper to use that functionality +- add as dependency +Registration of functions is done using a Turtle file, which you can find in `src/main/resources/functions.ttl` #### Dynamic loading @@ -215,6 +233,7 @@ You can change the functions.ttl path (or use multiple functions.ttl paths) usin For example the snippets below dynamically link an fno:Function to a library, provided by a jar-file (`CustomFunctions.jar`). The example links a function that parses the latitude (`50.2`) out of the following string `"POINT (50.2 5.3)"`. `functions.ttl` contains the description of the function in Turtle: + ```turtle @prefix dcterms: . @prefix doap: . @@ -244,7 +263,9 @@ grelm:parsePointLat fno:methodMapping [ a fnom:Function ; fnom:method-name "parsePointLat" ] . ``` + The accompanying java file `CustomFunctions.java`: + ```java public class CustomFunctions { public static String parsePointLat(String s) { @@ -252,7 +273,9 @@ public class CustomFunctions { } } ``` + To dynamically include the custom function, compile the java-file and include `functions.ttl` with the `-f` option: + ```bash javac CustomFunctions.java && jar cvf CustomFunctions.jar CustomFunctions.class java -jar mapper.jar -f functions.ttl @@ -289,21 +312,26 @@ and up to which level metadata should be stored (dataset, triple, or term level ## Testing ### Command line -Run the tests via `test.sh`. + +Run the tests via `test.sh`. ### IntelliJ -Right-click `src/test/java` directory and select "Run 'All tests'". + +Right-click `src/test/java` directory and select "Run 'All tests'". #### Derived tests + Some tests (Excel, ODS) are derived from other tests (CSV) using a script (`./generate_spreadsheet_test_cases.sh`) ### RDBs + Make sure you have [Docker](https://www.docker.com) running. On Unix, others read-write permission (006) is required on `/var/run/docker.sock` in order to run the tests. -The tests will fail otherwise, as Testcontainers can't spin up the container. +The tests will fail otherwise, as Testcontainers can't spin up the container. #### Problems -* A problem with Docker (can't start the container) causes the SQLServer tests to fail locally. These tests will always succeed locally. -* A problem with Docker (can't start the container) causes the PostgreSQL tests to fail locally on Windows 7 machines. + +- A problem with Docker (can't start the container) causes the SQLServer tests to fail locally. These tests will always succeed locally. +- A problem with Docker (can't start the container) causes the PostgreSQL tests to fail locally on Windows 7 machines. ## Dependencies @@ -340,12 +368,12 @@ The tests will fail otherwise, as Testcontainers can't spin up the container. Do you need... -- training? -- specific features? -- different integrations? -- bugfixes, on _your_ timeline? -- custom code, built by experts? -- commercial support and licensing? +- training? +- specific features? +- different integrations? +- bugfixes, on _your_ timeline? +- custom code, built by experts? +- commercial support and licensing? You're welcome to [contact us](mailto:info@rml.io) regarding on-premise, enterprise, and internal installations, integrations, and deployments. @@ -357,6 +385,7 @@ We also offer consulting for all-things-RML. ## Remarks ### Typed spreadsheet files + All spreadsheet files are as of yet regarded as plain CSV files. No type information like Currency, Date... is used. ### XML file parsing performance @@ -374,40 +403,44 @@ The regex has no support for languages of length 5-8, but this currently only ap Performance depends on the serialization format (`--serialization `) and if duplicate removal is enabled (`--duplicates`). -Experimenting with various configurations may lead to better performance for +Experimenting with various configurations may lead to better performance for your use case. ### I have a question! Where can I get help? -Do you have any question related to writing RML mapping rules, -the RML specification, etc., feel free to ask them -here: https://github.com/kg-construct/rml-questions ! -If you have found a bug or need a feature for the RMLMapper itself, +Do you have any question related to writing RML mapping rules, +the RML specification, etc., feel free to ask them +here: ! +If you have found a bug or need a feature for the RMLMapper itself, you can make an issue in this repository. ## Documentation + Generate static files at /docs/apidocs with: -``` + +```bash mvn javadoc:javadoc ``` ### UML Diagrams #### Architecture UML Diagram + ##### How to generate with IntelliJ IDEA + (Requires Ultimate edition) -* Right click on package: "be.ugent.rml" -* Diagrams > Show Diagram > Java Class Diagrams -* Choose what properties of the classes you want to show in the upper left corner -* Export to file > .png | Save diagram > .uml +- Right click on package: "be.ugent.rml" +- Diagrams > Show Diagram > Java Class Diagrams +- Choose what properties of the classes you want to show in the upper left corner +- Export to file > .png | Save diagram > .uml #### Sequence Diagram + ##### Edit on [draw.io](https://www.draw.io) -* Go to [draw.io](https://www.draw.io) -* Click on 'Open Existing Diagram' and choose the .html file + +- Go to [draw.io](https://www.draw.io) +- Click on 'Open Existing Diagram' and choose the .html file [1]: A. Dimou, T. De Nies, R. Verborgh, E. Mannens, P. Mechant, and R. Van de Walle, “Automated metadata generation for linked data generation and publishing workflows,” in Proceedings of the 9th Workshop on Linked Data on the Web, Montreal, Canada, 2016, pp. 1–10. [PDF](http://events.linkeddata.org/ldow2016/papers/LDOW2016_paper_04.pdf) - - From 96f1c5a7929754c4b01804f7a15cd86a7508f375 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 14 Aug 2025 17:54:41 +0200 Subject: [PATCH 107/127] Use `.equals()` instead of `==` to compare strings --- CHANGELOG.md | 1 + src/main/java/be/ugent/rml/target/TargetFactory.java | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a5ddc85..1d6a27ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - A join between triples maps with different logical targets might result in quads ending up in wrong targets. - rmle:contentTypeHeader and rmle:acceptHeader is replaced by generic htv:headers for Http Request Targets. +- Comparing htv:headers might go wrong due to String comparison. ### Added - Option to serialize output as Jelly. diff --git a/src/main/java/be/ugent/rml/target/TargetFactory.java b/src/main/java/be/ugent/rml/target/TargetFactory.java index 4cfea689..bd590db4 100644 --- a/src/main/java/be/ugent/rml/target/TargetFactory.java +++ b/src/main/java/be/ugent/rml/target/TargetFactory.java @@ -1,6 +1,5 @@ package be.ugent.rml.target; -import be.ugent.idlab.knows.dataio.access.LocalFileAccess; import be.ugent.rml.NAMESPACES; import be.ugent.rml.Utils; import be.ugent.rml.store.Quad; @@ -437,7 +436,7 @@ private Map parseHttpRequestHeaders(QuadStore rmlStore, Term t){ List headersList = Utils.getObjectsFromQuads(rmlStore.getQuads(t, new NamedNode(NAMESPACES.HTV + "headers"), null)); if (!headersList.isEmpty()) { Term rest = headersList.get(0); - while (rest.getValue() != NAMESPACES.RDF + "nil") { + while (!rest.getValue().equals(NAMESPACES.RDF + "nil")) { Term first = Utils.getObjectsFromQuads(rmlStore.getQuads(rest, new NamedNode(NAMESPACES.RDF + "first"), null)).get(0); String headerName = getRequiredValue(first, new NamedNode(NAMESPACES.HTV + "fieldName"), rmlStore); String headerValue = getRequiredValue(first, new NamedNode(NAMESPACES.HTV + "fieldValue"), rmlStore); From 933e02896024b367463fb347d8635a9967a829ee Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 28 Aug 2025 16:47:13 +0200 Subject: [PATCH 108/127] Updated DataIO dependency to 2.1.2 --- CHANGELOG.md | 1 + pom.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d6a27ff..02d3bf60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Changed - Updated new RML test cases for IO and Core. +- Updated dependency of DataIO to 2.1.2 ### Removed - `QuadStore`: removed deprecated `write` methods. diff --git a/pom.xml b/pom.xml index a4ecc41f..21a20e1b 100644 --- a/pom.xml +++ b/pom.xml @@ -319,7 +319,7 @@ be.ugent.idlab.knows dataio - 2.0.1 + 2.1.2 org.apache.commons From 5a08b08b196f6a325ac7a8e34d3d4efd69e467a4 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 18 Sep 2025 11:46:06 +0200 Subject: [PATCH 109/127] Added rr:Literal to rml:Literal conversion for objects. --- CHANGELOG.md | 1 + src/main/java/be/ugent/rml/conformer/RMLConverterNew.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02d3bf60..c73ac16f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - A join between triples maps with different logical targets might result in quads ending up in wrong targets. - rmle:contentTypeHeader and rmle:acceptHeader is replaced by generic htv:headers for Http Request Targets. - Comparing htv:headers might go wrong due to String comparison. +- Conversion to new RML goes wrong when an object map has term type Literal. ### Added - Option to serialize output as Jelly. diff --git a/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java b/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java index eccdf5b9..1fadaec4 100644 --- a/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java +++ b/src/main/java/be/ugent/rml/conformer/RMLConverterNew.java @@ -17,7 +17,7 @@ public class RMLConverterNew implements Converter { - private static Logger logger = LoggerFactory.getLogger(RMLConverterNew.class); + private final static Logger logger = LoggerFactory.getLogger(RMLConverterNew.class); private final Map replacementsObjects = new HashMap<>() {{ /* Old RML */ @@ -46,6 +46,7 @@ public class RMLConverterNew implements Converter { put(QL + "JSONPath", ReferenceFormulation.JSONPath); put(QL + "XPath", ReferenceFormulation.XPath); put(RML + "LogicalSource", RML2 + "LogicalSource"); + put(RR + "Literal", RML2 + "Literal"); put(RML + "TriplesMap", RML2 + "TriplesMap"); put(RR + "BlankNode", RML2 + "BlankNode"); put(RR + "IRI", RML2 + "IRI"); From 913d3f1647cf0688e615a11db3126e9457c0e498 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 18 Sep 2025 13:30:41 +0200 Subject: [PATCH 110/127] release v8.0.0 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c73ac16f..3433d088 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [8.0.0] - 2025-09-18 + ### Fixed - A join between triples maps with different logical targets might result in quads ending up in wrong targets. - rmle:contentTypeHeader and rmle:acceptHeader is replaced by generic htv:headers for Http Request Targets. @@ -817,6 +819,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[8.0.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.3...v8.0.0 [7.3.3]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.2...v7.3.3 [7.3.2]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.1...v7.3.2 [7.3.1]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.0...v7.3.1 diff --git a/pom.xml b/pom.xml index 21a20e1b..842e5e3b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 7.3.3 + 8.0.0 The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. From 3103abeb7ef803b6bb67d3f22cbfd80013c496f8 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 2 Oct 2025 10:38:48 +0200 Subject: [PATCH 111/127] Update dependencies to DataIO and others to address vulnerabilities --- CHANGELOG.md | 8 ++++++++ pom.xml | 20 +++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3433d088..8d5f900d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Fixed +- Dependency updates to address some vulnerabilities: +- DataIO to 2.5.2 +- Jena to 5.2.0 +- commons-lang3 to 3.18.0 +- json-smart to 2.5.2 +- Added dependency to commons-cli (a transitive dependency which got lost) + ## [8.0.0] - 2025-09-18 ### Fixed diff --git a/pom.xml b/pom.xml index 842e5e3b..2dbd5d18 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ 5.10.0 17 17 - 5.0.0 + 5.2.0 3.2.0 1.18.3 @@ -95,7 +95,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.4.1 + 3.5.0 8 @@ -116,7 +116,7 @@ org.apache.maven.plugins maven-source-plugin - 3.2.1 + 3.3.0 attach-sources @@ -129,7 +129,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.5 + 3.1.0 sign-artifacts @@ -168,7 +168,13 @@ org.apache.commons commons-lang3 - 3.17.0 + 3.18.0 + + + + commons-cli + commons-cli + 1.10.0 @@ -226,7 +232,7 @@ net.minidev json-smart - 2.5.0 + 2.5.2 javax.xml.parsers @@ -319,7 +325,7 @@ be.ugent.idlab.knows dataio - 2.1.2 + 2.1.5 org.apache.commons From edeaec2b369837b53ba836eca325bdd79ac18061 Mon Sep 17 00:00:00 2001 From: Kengo Seki Date: Wed, 3 Dec 2025 19:20:04 +0900 Subject: [PATCH 112/127] Upgrade Testcontainers to work with a recent version of Docker --- pom.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 842e5e3b..d45485c8 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ 17 5.0.0 3.2.0 - 1.18.3 + 2.0.2 @@ -335,37 +335,37 @@ org.testcontainers - postgresql + testcontainers-postgresql ${testcontainers.version} test org.testcontainers - mysql + testcontainers-mysql ${testcontainers.version} test org.testcontainers - mssqlserver + testcontainers-mssqlserver ${testcontainers.version} test org.testcontainers - oracle-xe + testcontainers-oracle-xe ${testcontainers.version} test org.testcontainers - jdbc + testcontainers-jdbc ${testcontainers.version} test org.testcontainers - junit-jupiter + testcontainers-junit-jupiter ${testcontainers.version} test From 16a51d2d6a2afbd062052c221fb9595658b0df6e Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Wed, 10 Dec 2025 11:01:02 +0100 Subject: [PATCH 113/127] Update DataIO to 2.2.0 (to address https://github.com/RMLio/rmlmapper-java/issues/266) --- CHANGELOG.md | 1 + pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d5f900d..ff88464e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - commons-lang3 to 3.18.0 - json-smart to 2.5.2 - Added dependency to commons-cli (a transitive dependency which got lost) +- Update DataIO to 2.2.0 (to address https://github.com/RMLio/rmlmapper-java/issues/266) ## [8.0.0] - 2025-09-18 diff --git a/pom.xml b/pom.xml index 2dbd5d18..2396f694 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 8.0.0 + 8.0.1-SNAPSHOT The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. @@ -325,7 +325,7 @@ be.ugent.idlab.knows dataio - 2.1.5 + 2.2.0 org.apache.commons From d470491d29c9f6fdc6a204eb7e8d1f18779c8c2f Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 11 Dec 2025 11:10:03 +0100 Subject: [PATCH 114/127] Wrote Testcontainers update in CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff88464e..cbd13dca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - json-smart to 2.5.2 - Added dependency to commons-cli (a transitive dependency which got lost) - Update DataIO to 2.2.0 (to address https://github.com/RMLio/rmlmapper-java/issues/266) +- Update testcontainers-* dependencies to 2.0.2 ## [8.0.0] - 2025-09-18 From 5c91010228e4e7fa50761ce1c52496f32f96d2cf Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 11 Dec 2025 13:13:45 +0100 Subject: [PATCH 115/127] Update Docker (services) to version 29 --- .gitlab-ci.yml | 6 +++--- CHANGELOG.md | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0fc0a521..dbbe1f8c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -55,7 +55,7 @@ General: name: maven:3-eclipse-temurin-17 pull_policy: if-not-present services: - - name: docker:23.0.1-dind + - name: docker:29-dind # explicitly disable tls to avoid docker startup interruption command: ["--tls=false"] variables: @@ -83,10 +83,10 @@ General: R2RML Test Report: stage: deploy image: - name: docker:latest + name: docker:29 pull_policy: if-not-present services: - - docker:23.0.1-dind + - docker:29-dind before_script: # Dependencies - apk add git python3 python3-dev py3-pip postgresql-dev postgresql libpq gcc musl-dev docker docker-compose java-jre-headless maven java-jdk diff --git a/CHANGELOG.md b/CHANGELOG.md index cbd13dca..c923ac86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Added dependency to commons-cli (a transitive dependency which got lost) - Update DataIO to 2.2.0 (to address https://github.com/RMLio/rmlmapper-java/issues/266) - Update testcontainers-* dependencies to 2.0.2 +- GitLab CI: update GitLab CI Docker (services) to version 29 ## [8.0.0] - 2025-09-18 From 07ca19d8030c25ee17f33d19f1d45aa4d57aab5f Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 11 Dec 2025 13:53:18 +0100 Subject: [PATCH 116/127] Update grel-functions-java to v0.10.1 to fix bug in quotioent function --- CHANGELOG.md | 3 ++- pom.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c923ac86..e46a6853 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Added dependency to commons-cli (a transitive dependency which got lost) - Update DataIO to 2.2.0 (to address https://github.com/RMLio/rmlmapper-java/issues/266) - Update testcontainers-* dependencies to 2.0.2 -- GitLab CI: update GitLab CI Docker (services) to version 29 +- GitLab CI: update GitLab CI Docker (services) to version 29 +- Update grel-functions-java to v0.10.1 to fix bug in quotioent function ## [8.0.0] - 2025-09-18 diff --git a/pom.xml b/pom.xml index b1234c28..c234703c 100644 --- a/pom.xml +++ b/pom.xml @@ -295,7 +295,7 @@ com.github.fnoio grel-functions-java - v0.10.0 + v0.10.1 org.apache.commons From 65ea875d5c0d792deee3db3988b013619ed87dd9 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 11 Dec 2025 14:08:57 +0100 Subject: [PATCH 117/127] Fixed typo in CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e46a6853..c641cb68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Update DataIO to 2.2.0 (to address https://github.com/RMLio/rmlmapper-java/issues/266) - Update testcontainers-* dependencies to 2.0.2 - GitLab CI: update GitLab CI Docker (services) to version 29 -- Update grel-functions-java to v0.10.1 to fix bug in quotioent function +- Update grel-functions-java to v0.10.1 to fix bug in quotient function ## [8.0.0] - 2025-09-18 From 4b2d8048876feaf8956b05443d198ade7cfba7eb Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 11 Dec 2025 14:23:08 +0100 Subject: [PATCH 118/127] release v8.0.1 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c641cb68..0651dfc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [8.0.1] - 2025-12-11 + ### Fixed - Dependency updates to address some vulnerabilities: - DataIO to 2.5.2 @@ -831,6 +833,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[8.0.1]: https://github.com/RMLio/rmlmapper-java/compare/v8.0.0...v8.0.1 [8.0.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.3...v8.0.0 [7.3.3]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.2...v7.3.3 [7.3.2]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.1...v7.3.2 diff --git a/pom.xml b/pom.xml index c234703c..942958bb 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 8.0.1-SNAPSHOT + 8.0.1 The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. From 37a037b056e257582371b0d16ff318797e81cf70 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Thu, 11 Dec 2025 14:29:19 +0100 Subject: [PATCH 119/127] Update build nr --- buildNumber.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildNumber.properties b/buildNumber.properties index d1da3bd9..a30686cb 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,3 @@ #maven.buildNumber.plugin properties file -#Sun Jun 08 18:28:21 CEST 2025 -buildNumber0=378 +#Thu Dec 11 14:28:34 CET 2025 +buildNumber0=379 From f1672fa22846be7ee75f84c19f416f436dba09de Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Tue, 23 Dec 2025 09:21:45 +0000 Subject: [PATCH 120/127] Update dependency on idlab functions to add crossConcat functions + Updated required Java language to 21 --- .gitlab-ci.yml | 12 +-- CHANGELOG.md | 10 +++ Dockerfile | 6 +- pom.xml | 10 +-- .../rml/MapperCrossConcatSequenceTest.java | 11 +++ .../cross-concat-sequence/Person.csv | 2 + .../cross-concat-sequence/mapping.rml.ttl | 88 +++++++++++++++++++ .../resources/cross-concat-sequence/output.nq | 7 ++ 8 files changed, 132 insertions(+), 14 deletions(-) create mode 100644 src/test/java/be/ugent/rml/MapperCrossConcatSequenceTest.java create mode 100644 src/test/resources/cross-concat-sequence/Person.csv create mode 100644 src/test/resources/cross-concat-sequence/mapping.rml.ttl create mode 100644 src/test/resources/cross-concat-sequence/output.nq diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dbbe1f8c..856fa4c9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,10 +10,10 @@ include: - project: 'rml/util/ci-templates' ref: main file: 'CHANGELOG.gitlab-ci.yml' - # Push a Docker Image to Docker Hub on new tags - - project: 'rml/util/ci-templates' - ref: main - file: 'Docker-Hub.gitlab-ci.yml' +# # Push a Docker Image to Docker Hub on new tags +# - project: 'rml/util/ci-templates' +# ref: main +# file: 'Docker-Hub.gitlab-ci.yml' # Push a build to Maven Central on new tags - project: 'rml/util/ci-templates' ref: main @@ -52,7 +52,7 @@ default: General: stage: unittests image: - name: maven:3-eclipse-temurin-17 + name: maven:3-eclipse-temurin-21 pull_policy: if-not-present services: - name: docker:29-dind @@ -73,7 +73,7 @@ General: - '$TEST.log' parallel: matrix: - - TEST: [ArgumentsTest, MapperCSVTest, MapperJSONTest, MapperMySQLTest, MapperPostgresR2RMLTest, MapperWoTTest, ArgumentsTestMySQLTest, MapperCSVWTest, MapperLDESTest, MapperODSTest, MapperOracleDBTest, MapperPostgresXMLTest, MapperXMLTest, CustomRMLFnOMapperCSVTest, MapperEXCELTest, MapperMappingFileURLTest, MapperSPARQLTest, MetadataTest, CustomRMLFnOMapperJSONTest, CustomRMLFnOMapperTest, MapperHTMLTest, MapperMySQLR2RMLTest, MapperPostgresCSVTest, MapperSQLServerTest, OptimizationsTest, R2RMLConverterTest, QuadTest, ReadmeTest, ReadmeFunctionTest, ConformerDetectionTest, MapperNewRMLCoreJSONTest, MapperNewRMLIOSourceTest, MapperNewRMLIOTargetTest, HttpRequestTargetTest] + - TEST: [ArgumentsTest, MapperCSVTest, MapperJSONTest, MapperMySQLTest, MapperPostgresR2RMLTest, MapperWoTTest, ArgumentsTestMySQLTest, MapperCSVWTest, MapperLDESTest, MapperODSTest, MapperOracleDBTest, MapperPostgresXMLTest, MapperXMLTest, CustomRMLFnOMapperCSVTest, MapperEXCELTest, MapperMappingFileURLTest, MapperSPARQLTest, MetadataTest, CustomRMLFnOMapperJSONTest, CustomRMLFnOMapperTest, MapperHTMLTest, MapperMySQLR2RMLTest, MapperPostgresCSVTest, MapperSQLServerTest, OptimizationsTest, R2RMLConverterTest, QuadTest, ReadmeTest, ReadmeFunctionTest, ConformerDetectionTest, MapperNewRMLCoreJSONTest, MapperNewRMLIOSourceTest, MapperNewRMLIOTargetTest, HttpRequestTargetTest, MapperCrossConcatSequenceTest] except: - master - development diff --git a/CHANGELOG.md b/CHANGELOG.md index 0651dfc6..9fddeaae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Added +- `crossConcat` and `crossConcatSequence` functions (by updating dependency to idlab-functions-java) + +### Changed +- Requires Java version >= 21 + +### Fixed +- Updated dependency function-agent-java to 1.3.0 +- Updated idlab-functions-java to 1.4.0 + ## [8.0.1] - 2025-12-11 ### Fixed diff --git a/Dockerfile b/Dockerfile index 725f6b66..f58a25be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,14 @@ # Build image -FROM maven:3-eclipse-temurin-17 as buildimage +FROM maven:3.9.12-eclipse-temurin-21-alpine AS buildimage ADD . /rmlmapper-java -WORKDIR rmlmapper-java +WORKDIR /rmlmapper-java RUN mvn -Pno-buildnumber clean package -DskipTests=true RUN mv $(readlink -f target/rmlmapper-*-all.jar) /rmlmapper.jar # "Runtime" image -FROM eclipse-temurin:17-jre +FROM eclipse-temurin:25-jre COPY --from=buildimage /rmlmapper.jar /rmlmapper.jar WORKDIR /data diff --git a/pom.xml b/pom.xml index 942958bb..2533731d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 8.0.1 + 8.1.0-SNAPSHOT The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. @@ -36,8 +36,8 @@ UTF-8 5.10.0 - 17 - 17 + 21 + 21 5.2.0 3.2.0 2.0.2 @@ -284,7 +284,7 @@ be.ugent.idlab.knows function-agent-java - 1.2.1 + 1.3.0 org.apache.jena @@ -310,7 +310,7 @@ be.ugent.idlab.knows idlab-functions-java - 1.3.3 + 1.4.0 org.apache.commons diff --git a/src/test/java/be/ugent/rml/MapperCrossConcatSequenceTest.java b/src/test/java/be/ugent/rml/MapperCrossConcatSequenceTest.java new file mode 100644 index 00000000..72ee3009 --- /dev/null +++ b/src/test/java/be/ugent/rml/MapperCrossConcatSequenceTest.java @@ -0,0 +1,11 @@ +package be.ugent.rml; + +import org.junit.jupiter.api.Test; + +public class MapperCrossConcatSequenceTest extends TestCore { + + @Test + public void testConcatIRI() { + doMapping("./cross-concat-sequence/mapping.rml.ttl", "./cross-concat-sequence/output.nq"); + } +} diff --git a/src/test/resources/cross-concat-sequence/Person.csv b/src/test/resources/cross-concat-sequence/Person.csv new file mode 100644 index 00000000..e3d446eb --- /dev/null +++ b/src/test/resources/cross-concat-sequence/Person.csv @@ -0,0 +1,2 @@ +PersonNumber;FirstName;Surname;ResponsibleApplicantGrantNumber +1;John;Doe;"111925;34468;55836;66731" \ No newline at end of file diff --git a/src/test/resources/cross-concat-sequence/mapping.rml.ttl b/src/test/resources/cross-concat-sequence/mapping.rml.ttl new file mode 100644 index 00000000..198f988b --- /dev/null +++ b/src/test/resources/cross-concat-sequence/mapping.rml.ttl @@ -0,0 +1,88 @@ +@prefix csvw: . +@prefix rr: . +@prefix rml: . +@prefix ql: . +@prefix schema: . +@prefix fnml: . +@prefix grel: . +@prefix fno: . +@prefix idlab-fn: . +@base . + +<#LogicalSourcePerson> a rml:LogicalSource ; + rml:source <#CSVW_sourcePerson> ; + rml:referenceFormulation ql:CSV . + +<#CSVW_sourcePerson> a csvw:Table; + csvw:url "Person.csv" ; + csvw:dialect [ a csvw:Dialect; + csvw:delimiter ";" + ] . + +<#PersonMapping> a rr:TriplesMap; + rml:logicalSource <#LogicalSourcePerson> ; + + rr:subjectMap [ + rr:template "http://snf.ch/person/{PersonNumber}"; + rr:class schema:Person + ] ; + + rr:predicateObjectMap [ + rr:predicate schema:memberOf ; + rr:objectMap <#JoinMap> ; + ] ; + + rr:predicateObjectMap [ + rr:predicate schema:givenName ; + rr:objectMap [ + rml:reference "FirstName" + ] + ] ; + + rr:predicateObjectMap [ + rr:predicate schema:familyName ; + rr:objectMap [ + rml:reference "Surname" + ] + ] . + +<#JoinMap> + fnml:functionValue [ + rr:predicateObjectMap [ + rr:predicate fno:executes ; + rr:objectMap [ rr:constant idlab-fn:crossConcatSequence ] + ]; + rr:predicateObjectMap [ + rr:predicate rdf:_1 ; + rr:objectMap [ rr:constant "http://snf.ch/project/" ] + ]; + rr:predicateObjectMap [ + rr:predicate rdf:_2 ; + rr:objectMap <#FunctionMap> + ]; + ] . + + +# https://stackoverflow.com/questions/53715353/converting-a-csv-to-rdf-where-one-column-is-a-set-of-values +<#FunctionMap> + fnml:functionValue [ + rml:logicalSource <#LogicalSourceGrant>; + rr:predicateObjectMap [ + rr:predicate fno:executes; + rr:objectMap [ + rr:constant grel:string_split # function to use + ]; + ]; + rr:predicateObjectMap [ + rr:predicate grel:valueParameter; + rr:objectMap [ + rml:reference "ResponsibleApplicantGrantNumber" # input string: concatenated foreign keys + ]; + ]; + rr:predicateObjectMap [ + rr:predicate grel:p_string_sep; + rr:objectMap [ + rr:constant ";"; + ]; + ]; + ]. diff --git a/src/test/resources/cross-concat-sequence/output.nq b/src/test/resources/cross-concat-sequence/output.nq new file mode 100644 index 00000000..f7ac05bc --- /dev/null +++ b/src/test/resources/cross-concat-sequence/output.nq @@ -0,0 +1,7 @@ + "Doe" . + "John" . + "http://snf.ch/project/111925" . + "http://snf.ch/project/34468" . + "http://snf.ch/project/55836" . + "http://snf.ch/project/66731" . + . From 037e7bc5f011c4b81e832fb553cc7efe73efb608 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Tue, 23 Dec 2025 11:00:51 +0100 Subject: [PATCH 121/127] Configure maven to use central-publishing-maven-plugin --- .m2/settings.xml | 5 ----- CHANGELOG.md | 1 + pom.xml | 22 +++++++--------------- 3 files changed, 8 insertions(+), 20 deletions(-) diff --git a/.m2/settings.xml b/.m2/settings.xml index f01b50ab..48953beb 100644 --- a/.m2/settings.xml +++ b/.m2/settings.xml @@ -6,10 +6,5 @@ xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001 ${env.MAVEN_REPO_USER} ${env.MAVEN_REPO_PASS} - - ossrh - ${env.MAVEN_REPO_USER} - ${env.MAVEN_REPO_PASS} - diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fddeaae..4cb39441 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - Updated dependency function-agent-java to 1.3.0 - Updated idlab-functions-java to 1.4.0 +- Publish to Maven Central using central-publishing-maven-plugin ## [8.0.1] - 2025-12-11 diff --git a/pom.xml b/pom.xml index 2533731d..b924c059 100644 --- a/pom.xml +++ b/pom.xml @@ -59,13 +59,6 @@ - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - no-buildnumber @@ -417,7 +410,7 @@ ${maven.compiler.source} ${maven.compiler.source} - 3.8.1 + 3.13.0 org.apache.maven.plugins @@ -463,7 +456,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.2 + 3.3.1 true false @@ -494,14 +487,13 @@ - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.13 + org.sonatype.central + central-publishing-maven-plugin + 0.9.0 true - ossrh - https://oss.sonatype.org/ - true + central + true From ce5494f7f730aa2d1d3e9892945dffac15f2f746 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Tue, 23 Dec 2025 11:20:53 +0100 Subject: [PATCH 122/127] release v8.1.0 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cb39441..148a5c8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +## [8.1.0] - 2025-12-23 + ### Added - `crossConcat` and `crossConcatSequence` functions (by updating dependency to idlab-functions-java) @@ -844,6 +846,7 @@ and [169](https://gitlab.ilabt.imec.be/rml/proc/rmlmapper-java/-/issues/169)) - support for accessing remote files (via HTTP GET) - basic support for functions +[8.1.0]: https://github.com/RMLio/rmlmapper-java/compare/v8.0.1...v8.1.0 [8.0.1]: https://github.com/RMLio/rmlmapper-java/compare/v8.0.0...v8.0.1 [8.0.0]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.3...v8.0.0 [7.3.3]: https://github.com/RMLio/rmlmapper-java/compare/v7.3.2...v7.3.3 diff --git a/pom.xml b/pom.xml index b924c059..3defbb85 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 8.1.0-SNAPSHOT + 8.1.0 The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. From 488bd8f6db1758437d971c5b235dafd513238773 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Tue, 23 Dec 2025 13:19:48 +0100 Subject: [PATCH 123/127] Buildnr used in release 8.1.0 --- buildNumber.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildNumber.properties b/buildNumber.properties index a30686cb..a2d8f523 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,3 @@ #maven.buildNumber.plugin properties file -#Thu Dec 11 14:28:34 CET 2025 -buildNumber0=379 +#Tue Dec 23 11:40:14 CET 2025 +buildNumber0=380 From 672e66d0306b8971128329ce6c2fb8d35164c146 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Tue, 23 Dec 2025 13:20:10 +0100 Subject: [PATCH 124/127] prepare for next development cycle --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3defbb85..da672038 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ be.ugent.rml rmlmapper RMLMapper - 8.1.0 + 8.1.1-SNAPSHOT The RMLMapper executes RML rules to generate high quality Linked Data from multiple originally (semi-)structured data sources. From 6a24c40cf6c1e5c0518d0cdff32bccfe09296739 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 5 Feb 2026 18:32:26 +0100 Subject: [PATCH 125/127] MappingOptimizer: do not crash if parent TM is not defined Fixes https://github.com/RMLio/rmlmapper-java/issues/270 --- .../java/be/ugent/rml/MappingOptimizer.java | 140 +++++++++--------- 1 file changed, 73 insertions(+), 67 deletions(-) diff --git a/src/main/java/be/ugent/rml/MappingOptimizer.java b/src/main/java/be/ugent/rml/MappingOptimizer.java index 70be3760..3b4b9ac2 100644 --- a/src/main/java/be/ugent/rml/MappingOptimizer.java +++ b/src/main/java/be/ugent/rml/MappingOptimizer.java @@ -64,88 +64,94 @@ private void eliminateSelfJoins() { for (Quad refObjectMapQuad : refObjectMapsQuads) { Term parentTriplesMap = refObjectMapQuad.getObject(); Term childObjectMap = refObjectMapQuad.getSubject(); - Term parentLogicalSource = Utils.getObjectsFromQuads(rmlStore.getQuads(parentTriplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)).get(0); - Term childPredicateObjectMap = Utils.getSubjectsFromQuads(rmlStore.getQuads(null, new NamedNode(NAMESPACES.RML2 + "objectMap"), childObjectMap)).get(0); - Term childTriplesMap = Utils.getSubjectsFromQuads(rmlStore.getQuads(null, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), childPredicateObjectMap)).get(0); - Term childLogicalSource = Utils.getObjectsFromQuads(rmlStore.getQuads(childTriplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)).get(0); - // check if the logical sources are the same - if (childLogicalSource.equals(parentLogicalSource)) { - List joinConditions = Utils.getObjectsFromQuads(rmlStore.getQuads(childObjectMap, new NamedNode(NAMESPACES.RML2 + "joinCondition"), null)); + try { + Term parentLogicalSource = Utils.getObjectsFromQuads(rmlStore.getQuads(parentTriplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)).get(0); + Term childPredicateObjectMap = Utils.getSubjectsFromQuads(rmlStore.getQuads(null, new NamedNode(NAMESPACES.RML2 + "objectMap"), childObjectMap)).get(0); + Term childTriplesMap = Utils.getSubjectsFromQuads(rmlStore.getQuads(null, new NamedNode(NAMESPACES.RML2 + "predicateObjectMap"), childPredicateObjectMap)).get(0); + Term childLogicalSource = Utils.getObjectsFromQuads(rmlStore.getQuads(childTriplesMap, new NamedNode(NAMESPACES.RML2 + "logicalSource"), null)).get(0); - List parentSubjectMaps = Utils.getObjectsFromQuads(rmlStore.getQuads(parentTriplesMap, new NamedNode(NAMESPACES.RML2 + "subjectMap"), null)); - Term parentSubjectMap = null; - if (!parentSubjectMaps.isEmpty()) { - parentSubjectMap = parentSubjectMaps.get(0); - } + // check if the logical sources are the same + if (childLogicalSource.equals(parentLogicalSource)) { - boolean safeSelfJoinElimination = true; - - // if no join condition, we can safely eliminate the self-join - // else we need more checks - if (parentSubjectMap != null && !joinConditions.isEmpty()) { - // we can eliminate a self-join when all join conditions have equal references and all references for the parent subject or all reference for the related child triple come back in the join conditions - // 1. check if all join references are equal - List joinReferences = new ArrayList<>(); - for (Term joinCondition : joinConditions) { - String parent = getObjectsFromQuads(rmlStore.getQuads(joinCondition, new NamedNode(NAMESPACES.RML2 + "parent"), null)).get(0).getValue(); - String child = getObjectsFromQuads(rmlStore.getQuads(joinCondition, new NamedNode(NAMESPACES.RML2 + "child"), null)).get(0).getValue(); - if (child.equals(parent)) { - joinReferences.add(child); - } else { - safeSelfJoinElimination = false; - } + List joinConditions = Utils.getObjectsFromQuads(rmlStore.getQuads(childObjectMap, new NamedNode(NAMESPACES.RML2 + "joinCondition"), null)); + + List parentSubjectMaps = Utils.getObjectsFromQuads(rmlStore.getQuads(parentTriplesMap, new NamedNode(NAMESPACES.RML2 + "subjectMap"), null)); + Term parentSubjectMap = null; + if (!parentSubjectMaps.isEmpty()) { + parentSubjectMap = parentSubjectMaps.get(0); } - if (safeSelfJoinElimination) { - // 2. check if all references for the parent subject come back in the join conditions - boolean safeTerms = hasSafeReferences(parentSubjectMap, joinReferences); - if(!safeTerms) { - // if not all references for the parent subject come back in the join conditions, - // 3. check if all references for the related child terms come back in the join conditions - // 3.1 check child subject - List childSubjectMaps = Utils.getObjectsFromQuads(rmlStore.getQuads(parentTriplesMap, new NamedNode(NAMESPACES.RML2 + "subjectMap"), null)); - if(!childSubjectMaps.isEmpty()) { - safeTerms = hasSafeReferences(childSubjectMaps.get(0), joinReferences); + + boolean safeSelfJoinElimination = true; + + // if no join condition, we can safely eliminate the self-join + // else we need more checks + if (parentSubjectMap != null && !joinConditions.isEmpty()) { + // we can eliminate a self-join when all join conditions have equal references and all references for the parent subject or all reference for the related child triple come back in the join conditions + // 1. check if all join references are equal + List joinReferences = new ArrayList<>(); + for (Term joinCondition : joinConditions) { + String parent = getObjectsFromQuads(rmlStore.getQuads(joinCondition, new NamedNode(NAMESPACES.RML2 + "parent"), null)).get(0).getValue(); + String child = getObjectsFromQuads(rmlStore.getQuads(joinCondition, new NamedNode(NAMESPACES.RML2 + "child"), null)).get(0).getValue(); + if (child.equals(parent)) { + joinReferences.add(child); } else { - safeTerms = true; + safeSelfJoinElimination = false; } - //3.2 check child predicate (only make sense if the child subject was safe, otherwise we cannot eliminate the-self join) - if (safeTerms) { - List childPredicateMaps = Utils.getObjectsFromQuads(rmlStore.getQuads(childPredicateObjectMap, new NamedNode(NAMESPACES.RML2 + "predicateMap"), null)); - if(!childPredicateMaps.isEmpty()) { - safeTerms = hasSafeReferences(childPredicateMaps.get(0), joinReferences); + } + if (safeSelfJoinElimination) { + // 2. check if all references for the parent subject come back in the join conditions + boolean safeTerms = hasSafeReferences(parentSubjectMap, joinReferences); + if (!safeTerms) { + // if not all references for the parent subject come back in the join conditions, + // 3. check if all references for the related child terms come back in the join conditions + // 3.1 check child subject + List childSubjectMaps = Utils.getObjectsFromQuads(rmlStore.getQuads(parentTriplesMap, new NamedNode(NAMESPACES.RML2 + "subjectMap"), null)); + if (!childSubjectMaps.isEmpty()) { + safeTerms = hasSafeReferences(childSubjectMaps.get(0), joinReferences); + } else { + safeTerms = true; + } + //3.2 check child predicate (only make sense if the child subject was safe, otherwise we cannot eliminate the-self join) + if (safeTerms) { + List childPredicateMaps = Utils.getObjectsFromQuads(rmlStore.getQuads(childPredicateObjectMap, new NamedNode(NAMESPACES.RML2 + "predicateMap"), null)); + if (!childPredicateMaps.isEmpty()) { + safeTerms = hasSafeReferences(childPredicateMaps.get(0), joinReferences); + } } } - } - // 4. if parent subject or all child terms are safe, the self join can be eliminated, else not - if (!safeTerms) { - safeSelfJoinElimination = false; + // 4. if parent subject or all child terms are safe, the self join can be eliminated, else not + if (!safeTerms) { + safeSelfJoinElimination = false; + } } } - } - if (safeSelfJoinElimination) { - // now we rewrite the mapping file to eliminate the self-join - boolean termTypeAdded = false; - List parentSubjectMapQuads = rmlStore.getQuads(parentSubjectMap, null, null); - for (Quad parentSubjectMapQuad : parentSubjectMapQuads) { - Term predicate = parentSubjectMapQuad.getPredicate(); - if (predicate.equals(new NamedNode(NAMESPACES.FNML + "functionValue")) - || predicate.equals(new NamedNode(NAMESPACES.RML2 + "termType")) - || predicate.equals(new NamedNode(NAMESPACES.RML2 + "reference")) - || predicate.equals(new NamedNode(NAMESPACES.RML2 + "template")) - || predicate.equals(new NamedNode(NAMESPACES.RML2 + "constant"))) { - rmlStore.addQuad(childObjectMap, predicate, parentSubjectMapQuad.getObject()); + if (safeSelfJoinElimination) { + // now we rewrite the mapping file to eliminate the self-join + boolean termTypeAdded = false; + List parentSubjectMapQuads = rmlStore.getQuads(parentSubjectMap, null, null); + for (Quad parentSubjectMapQuad : parentSubjectMapQuads) { + Term predicate = parentSubjectMapQuad.getPredicate(); + if (predicate.equals(new NamedNode(NAMESPACES.FNML + "functionValue")) + || predicate.equals(new NamedNode(NAMESPACES.RML2 + "termType")) + || predicate.equals(new NamedNode(NAMESPACES.RML2 + "reference")) + || predicate.equals(new NamedNode(NAMESPACES.RML2 + "template")) + || predicate.equals(new NamedNode(NAMESPACES.RML2 + "constant"))) { + rmlStore.addQuad(childObjectMap, predicate, parentSubjectMapQuad.getObject()); + } + if (predicate.equals(new NamedNode(NAMESPACES.RML2 + "termType"))) { + termTypeAdded = true; + } } - if (predicate.equals(new NamedNode(NAMESPACES.RML2 + "termType"))) { - termTypeAdded = true; + rmlStore.removeQuads(childObjectMap, new NamedNode(NAMESPACES.RML2 + "parentTriplesMap"), parentTriplesMap); + if (!termTypeAdded) { + rmlStore.addQuad(childObjectMap, new NamedNode(NAMESPACES.RML2 + "termType"), new NamedNode(NAMESPACES.RML2 + "IRI")); } } - rmlStore.removeQuads(childObjectMap, new NamedNode(NAMESPACES.RML2 + "parentTriplesMap"), parentTriplesMap); - if (!termTypeAdded) { - rmlStore.addQuad(childObjectMap, new NamedNode(NAMESPACES.RML2 + "termType"), new NamedNode(NAMESPACES.RML2 + "IRI")); - } } + } catch (java.lang.IndexOutOfBoundsException e) { + continue; } } } From 5ed368d5c724cfb71459d60a955536118ba50046 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 5 Feb 2026 19:26:22 +0100 Subject: [PATCH 126/127] RecordsFactory: handle gracefully missing Logical Source Do not crash if no Logical Source is found, try to continue without the affected TriplesMap --- src/main/java/be/ugent/rml/records/RecordsFactory.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/be/ugent/rml/records/RecordsFactory.java b/src/main/java/be/ugent/rml/records/RecordsFactory.java index 69480fb1..a61bb6d2 100644 --- a/src/main/java/be/ugent/rml/records/RecordsFactory.java +++ b/src/main/java/be/ugent/rml/records/RecordsFactory.java @@ -73,7 +73,8 @@ public List createRecords(Term triplesMap, QuadStore rmlStore) throws Ex return getRecords(access, logicalSource, referenceFormulation, rmlStore); } else { - throw new Error("No Logical Source is found for " + triplesMap + ". Exactly one Logical Source is required per Triples Map."); + logger.error("No Logical Source is found for " + triplesMap + ". Exactly one Logical Source is required per Triples Map."); + return new ArrayList<>(); } } From 86e961d73aee622b76761b4f40802873a40800e5 Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Tue, 17 Feb 2026 14:44:34 +0100 Subject: [PATCH 127/127] Update CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 148a5c8e..29ec3ee8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased +### Changed +- RMLMapper crashes when parent Triples Map cannot be found (https://github.com/RMLio/rmlmapper-java/issues/270). This changes behaviour of RMLMapper (log error instead of stopping), but is still valid RML Processor behaviour. + ## [8.1.0] - 2025-12-23 ### Added