From f6d5b0fd67975f1d8bf47474af53e7de525da071 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Wed, 24 Mar 2021 12:43:13 +0100 Subject: [PATCH 01/39] spec: initial version --- .gitignore | 2 + CHANGELOG.md | 40 + README.md | 14 + dev.html | 183 ++++ dist/20210324/index.html | 1072 +++++++++++++++++++++++ dist/index.html | 1072 +++++++++++++++++++++++ publish.js | 50 ++ rendered.html | 1072 +++++++++++++++++++++++ resources/css/extras.css | 21 + resources/images/orcid_logo.png | Bin 0 -> 1871 bytes resources/images/structure.png | Bin 0 -> 23286 bytes resources/js/respec-w3c-common_5.0.4.js | 23 + section/abstract.md | 10 + section/examples.md | 542 ++++++++++++ section/overview.md | 24 + section/target-in-rml.md | 81 ++ 16 files changed, 4206 insertions(+) create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 README.md create mode 100644 dev.html create mode 100644 dist/20210324/index.html create mode 100644 dist/index.html create mode 100644 publish.js create mode 100644 rendered.html create mode 100644 resources/css/extras.css create mode 100644 resources/images/orcid_logo.png create mode 100644 resources/images/structure.png create mode 100644 resources/js/respec-w3c-common_5.0.4.js create mode 100644 section/abstract.md create mode 100644 section/examples.md create mode 100644 section/overview.md create mode 100644 section/target-in-rml.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0cc2124 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.iml +.idea/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..def7d45 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,40 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## Unreleased + +## 2020-01-05 + +### Added + +- fno:uses description + +### Changed + +- General rewording and clarifications +- refactored the repo + +## 2020-06-24 + +### Added + +- Link to main publication: https://doi.org/10.1016/j.future.2019.10.006 + +### Fixed + +- description of `fno:type` (https://github.com/FnOio/fnoio.github.io/issues/1) +- general introduction + +## 2019-05-29 + +### Added + +- ReturnMapping description + +### Changed + +- updated FnO Ontology to v0.6.0 + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..0ae2585 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# The Function Ontology Specification + +Repository for https://w3id.org/function/spec + +## Quickstart + +- edit dev.html + - Makes sure all your local assets are in the `resources` folder, and the links in your dev.html file are relative (important because the publishing script creates multiple nested paths) +- run a HTTP server in this directory: `python3 -m http.server` +- open `dev.html` with a browser as http://localhost:8000/dev.html +- save as snapshot to function.html [using the respec functionality](https://respec.org/docs/#using-browser) +- run `node publish.js` to get the index.html + archived version in the `dist` folder + +The `dist` folder contents should mimic the contents on `https://w3id.org/function/spec` diff --git a/dev.html b/dev.html new file mode 100644 index 0000000..4e8df9a --- /dev/null +++ b/dev.html @@ -0,0 +1,183 @@ + + + + Target in RML + + + + + + + + +
+ +
+

+ This is an early draft, + yet efforts are made to keep things stable. +

+
+ +
+ +
+ +
+ +
+ + + diff --git a/dist/20210324/index.html b/dist/20210324/index.html new file mode 100644 index 0000000..8414d46 --- /dev/null +++ b/dist/20210324/index.html @@ -0,0 +1,1072 @@ + + + + + + + +Target in RML + + + + + + + + + + + + + + + + + +
+

Target in RML

+ +

+ Unofficial Draft + +

+
+ +
Latest editor's draft:
https://rml.io/specs/target-in-rml
+ + + + + +
Editors:
+
+ (Ghent University – imec – IDLab) +
+ (Ghent University – imec – IDLab) +
+ + +
This Version
+ https://rml.io/specs/target-in-rml/20210324/ +
Previous Version
+ https://rml.io/specs/target-in-rml/20210324/ +
Website
+ https://rml.io/target-in-rml +
+
+ + + + +
+
+

Abstract

This document describes a formal representation to align the +RDF Mapping Language [RML] with Target [paper] +to describe in RML mapping rules how a generated Knowledge Graph +should be directed and exported. +The current document describes how Target is integrated +with RML through definitions and examples.

The version of this document is v1.0.0.

+ +

Status of This Document

+ This document is a draft of a potential specification. It has no official + standing of any kind and does not represent the support or consensus of + any standards organization. +

+

This is an early draft, +yet efforts are made to keep things stable.

+
+ +

1. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

+ The key word MAY in this document + is to be interpreted as described in + BCP 14 + [RFC2119] [RFC8174] + when, and only when, they appear in all capitals, as shown here. +

+ +

2. Overview

This section is non-normative.

This document describes the alignment of Target specification with RML +to define how a generated RDF knowledge graph must be exported +in the RML mapping rules. +Target and RML are self-standing specifications +which are aligned through this specification.

In this document, examples assume +the following namespace prefix bindings unless otherwise stated:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrefixNamespace
rmlhttp://semweb.mmlab.be/ns/rml#
rmlthttp://semweb.mmlab.be/ns/rml-target#
rrhttp://www.w3.org/ns/r2rml#
formatshttps://www.w3.org/ns/formats/
comphttp://semweb.mmlab.be/ns/rml-compression#
csvwhttp://www.w3.org/ns/csvw#
foafhttp://xmlns.com/foaf/0.1/
fnmlhttp://semweb.mmlab.be/ns/fnml#
idlab-fnhttp://example.com/idlab/function/
+ +

3. Target in RML

RML does not specify where generated triples are exported to, +each RML processor has its own way to describe this information +through configuration files or command line parameters. +To incorporate this information in the RML mapping rules, +RML is aligned with the +Target vocabulary +which describes how the generated triples are exported. +RML is aligned with the Target vocabulary +by extending rr:TermMap with the rml:logicalTarget property +to describe on Term Map [RML] level where each triple must be directed to. +A Term Map is a function that generates an RDF term +from a logical reference [RML]. +The result of that function is known as the term map's generated +RDF term [RDF-Concepts] +such as subjects, predicates, objects, named graphs and language tags.

A Term Map MAY also contain zero or more rml:logicalTarget properties +to export all triples containing the generated term to different targets. +The same Term Map can have multiple targets by specifying +multiple rml:logicalTarget properties in the Term Map.

Multiple Targets MAY be combined by specifying multiple Targets +in the same Term Map or multiple Term Maps of the same RDF triple. +If multiple Targets are defined in the same Term Map, +all triples containing the generated Term are exported +to all the specified Targets. +In case multiple Term Maps of the same RDF triple contain more than one Target, +the generated triples are exported to all the specified Targets.

+
+ Example 1: +
<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource [ a rml:LogicalSource;
+    rml:source [ a csvw:Table;
+      csvw:url "http://rml.io/data/csvw/Airport.csv";
+      csvw:dialect [ a csvw:Dialect;
+        csvw:delimiter ";”;
+        csvw:encoding "UTF-8";
+        csvw:header "1"^^xsd:boolean;
+      ];
+    ];
+  ];
+  rr:subjectMap [ a rr:SubjectMap;
+    rr:template "http://example.com/{id}";
+    rml:logicalTarget [ a rmlt:LogicalTarget;
+      rmlt:target [ a void:Dataset
+        void:dataDump <file:///data/dump1.nq>;
+      ];
+      rmlt:serialization formats:N-Quads;
+    ];
+  ];
+  rr:predicateObjectMap [ a rr:PredicateObjectMap;
+    rr:predicateMap [ a rr:PredicateMap;
+      rr:constant foaf:name;
+      rml:logicalTarget [ a rmlt:LogicalTarget;
+         rmlt:target [ a void:Dataset
+           void:dataDump <file:///data/dump2.ttl>;
+         ];
+         rmlt:serialization formats:Turtle;
+         rmlt:compression comp:Zip;
+      ];
+    ];
+    rr:objectMap [ a rr:ObjectMap;
+      rml:reference "name";
+    ];
+  ];
+.
+
+

If the mapping document contains no Targets, +the processor falls back to the default target, +as it is specified through the processor's +specific configuration file or command line parameters. +If a mapping document contains at least one Target, +the processor will not export generated triples +which do not have a Target assigned.

+ + + + + + + + + + + + +
PropertyDomainRange
rml:logicalTargetrr:TermMaprmlt:LogicalTarget
+ +

4. Examples

4.1 Subject Map

All triples containing the generated subject are exported +to the specified targets in the Subject Map [RML].

The following example exports all triples containing +the generated subject http://example.org/{id} +to an RDF dump with N-Quads as serialization format and GZip compression:

+
+ Example 2: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt.gz>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Quads ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.2 Predicate Map

All triples containing the generated predicate are exported +to the specified targets in the Predicate Map [RML].

The following example exports all triples containing +the generated predicate foaf:name to an RDF dump +with Turtle as serialization format and Zip compression:

+
+ Example 3: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ 
+      rr:constant foaf:name;
+      rml:logicalTarget <#LogicalTarget1>; 
+    ];
+    rr:objectMap [ rml:reference "name" ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.3 Object Map

All triples containing the generated object are exported +to the specified targets in the Object Map [RML].

The following example exports all triples containing +the generated object name to an RDF dump +with N-Triples as serialization format:

+
+ Example 4: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ 
+      rml:reference "name";
+      rml:logicalTarget <#LogicalTarget1>;
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.4 Graph Map

All triples within a named graph are exported to the specified targets +in the Graph Map [RML]. +The named graph doesn't influence where the named graph's triples +are exported to by the Target. +If a named graph is spread over multiple targets, +all targets must be combined to access the complete named graph.

The following example exports all triples in the named graph ex:MyGraph +to an SPARQL [SPARQL] endpoint using SPARQL UPDATE:

+
+ Example 5: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ 
+      rml:reference "age";
+      rr:graphMap [
+        rml:logicalTarget <#LogicalTarget1>;
+        rr:template "http://www.example.org/{type}" 
+      ];
+    ];
+  ];
+.
+
+

4.5 Language Map

All triples with a language tag are exported to the specified targets +in the Language Map [RML].

The following examples export all triples with a language tag +to a RDF dump with JSON-LD as serialization format:

+
+ Example 6: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ 
+      rml:reference "name";
+      rml:languageMap [
+        rml:logicalTarget <#LogicalTarget1>;
+        rml:reference "language";
+      ]; 
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age"; ];
+  ];
+.
+
+

4.6 Combining multiple Targets

Multiple Targets MAY be specified for the same triple +in the same or multiple Term Maps. +Each triple is exported to all the Targets +specified in the triple's Term Maps.

4.6.1 Subject Map and Predicate Map

All triples containing the subject http://example.org/{id} +are exported to LogicalTarget1 +and all triples containing the predicate foaf:name +are exported to LogicalTarget2.

+
+ Example 7: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ 
+      rml:logicalTarget <#LogicalTarget2>;
+      rr:constant foaf:name 
+    ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.6.2 Subject Map, Predicate Map and Object Map

All triples containing the subject http://example.org/{id} are exported +to LogicalTarget1, all triples containing the predicate foaf:name +are exported to LogicalTarget2 and all triples containing the object "age" +are exported to LogicalTarget3.

+
+ Example 8: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Quads ;
+.
+
+<#SPARQLUPDATE_target> a sd:Service ;
+  sd:endpoint  <http://example.org/sparql-update> ;
+  sd:supportedLanguage sd:SPARQL11Update ;
+.
+
+<#LogicalTarget3> a rml:logicalTarget;
+  rmlt:target <#SPARQLEndpoint>;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ 
+      rml:logicalTarget <#LogicalTarget2>;
+      rr:constant foaf:name;
+    ];
+    rr:objectMap [ 
+      rml:reference "name"; 
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [
+      rml:logicalTarget <#LogicalTarget3>;
+      rml:reference "age";
+    ];
+  ];
+.
+
+

4.6.3 Language Map and Object Map

All triples containing the language tag language +are exported to LogicalTarget1 +and all triples containing the object "age" +are exported to LogicalTarget2.

+
+ Example 9: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ 
+      rml:reference "name"; 
+      rml:languageMap [
+        rml:logicalTarget <#LogicalTarget1>;
+        rml:reference "language";
+      ];
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ 
+      rml:reference "age";
+      rml:logicalTarget <#LogicalTarget2>;
+    ];
+  ];
+.
+
+

4.7 Overriding Targets

In some cases exporting all triples to a target is not desired, +therefore Targets can be overridden when needed +by either using a separate Triples Map which isolates certain triples or +by using FnO functions [FnO] as conditions.

4.7.1 Separate Triples Map

Triples can be exported to a specific Target while not to other Targets +by isolating these triples in a separate Triples Map.

In this example, all triples containing the subject http://example.org/{id} +are exported to LogicalTarget1 +and all triples containing the subject http://newtarget.org/{id} +are exported to LogicalTarget2.

+
+ Example 10: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap1> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ 
+      rml:reference "age";
+    ];
+  ];
+.
+
+<#TriplesMap2> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://newtarget.org/{id}";
+    rml:logicalTarget <#LogicalTarget2>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:interest ];
+    rr:objectMap [ rml:reference "interest"; ];
+  ];
+.
+
+

4.7.2 Conditions

FnO functions MAY be leveraged to export triples +only under certain conditions. +Conditions are already integrated in RML+FnO processors, +thus conditions apply on Targets as well. +Triples are generated and exported based on the FnO condition's evaluation. +Only if the condition is true, the triples are generated and exported.

+
+ Example 11: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";    
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [
+      fnml:functionValue [
+        rr:predicateObjectMap [
+          rr:predicate fno:executes ;
+          rr:objectMap [ rr:constant idlab-fn:trueCondition ]
+        ];
+        rr:predicateObjectMap [
+          rr:predicate idlab-fn:strBoolean ;
+          rr:objectMap [ rr:constant "true"]
+        ];
+        rr:predicateObjectMap [
+          rr:predicate idlab-fn:str ;
+          rr:objectMap [ 
+            rml:reference "age";
+            rml:logicalTarget <#LogicalTarget1>;
+          ];
+        ];
+      ];
+    ];
+  ];
+.
+
+
+ + + +

A. References

+

A.1 Normative references

+
[FnO]
The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
[RDF-Concepts]
Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
[RML]
RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
[SPARQL]
SPARQL 1.1 Overview. W3C. 21 March 2013. W3C Recommendation. URL: https://www.w3.org/TR/sparql11-overview/
+
+

A.2 Informative references

+
[paper]
Leveraging Web of Things W3C recommendations for knowledge graphs generation. Dylan Van Assche; Gerald Haesendonck; Gertjan De Mulder; Thomas Delva; Pieter Heyvaert; Ben De Meester; Anastasia Dimou. Springer. 2021. In Proceedings of the 21st International Conference on Web Engineering 2021. URL: https://dylanvanassche.be/publications/#icwe2021
+
\ No newline at end of file diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000..abf76cd --- /dev/null +++ b/dist/index.html @@ -0,0 +1,1072 @@ + + + + + + + +Target in RML + + + + + + + + + + + + + + + + + +
+

Target in RML

+ +

+ Unofficial Draft + +

+
+ +
Latest editor's draft:
https://rml.io/specs/target-in-rml
+ + + + + +
Editors:
+
+ (Ghent University – imec – IDLab) +
+ (Ghent University – imec – IDLab) +
+ + +
This Version
+ https://rml.io/specs/target-in-rml/20210324/ +
Previous Version
+ https://rml.io/specs/target-in-rml/20210324/ +
Website
+ https://rml.io/target-in-rml +
+
+ + + + +
+
+

Abstract

This document describes a formal representation to align the +RDF Mapping Language [RML] with Target [paper] +to describe in RML mapping rules how a generated Knowledge Graph +should be directed and exported. +The current document describes how Target is integrated +with RML through definitions and examples.

The version of this document is v1.0.0.

+ +

Status of This Document

+ This document is a draft of a potential specification. It has no official + standing of any kind and does not represent the support or consensus of + any standards organization. +

+

This is an early draft, +yet efforts are made to keep things stable.

+
+ +

1. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

+ The key word MAY in this document + is to be interpreted as described in + BCP 14 + [RFC2119] [RFC8174] + when, and only when, they appear in all capitals, as shown here. +

+ +

2. Overview

This section is non-normative.

This document describes the alignment of Target specification with RML +to define how a generated RDF knowledge graph must be exported +in the RML mapping rules. +Target and RML are self-standing specifications +which are aligned through this specification.

In this document, examples assume +the following namespace prefix bindings unless otherwise stated:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrefixNamespace
rmlhttp://semweb.mmlab.be/ns/rml#
rmlthttp://semweb.mmlab.be/ns/rml-target#
rrhttp://www.w3.org/ns/r2rml#
formatshttps://www.w3.org/ns/formats/
comphttp://semweb.mmlab.be/ns/rml-compression#
csvwhttp://www.w3.org/ns/csvw#
foafhttp://xmlns.com/foaf/0.1/
fnmlhttp://semweb.mmlab.be/ns/fnml#
idlab-fnhttp://example.com/idlab/function/
+ +

3. Target in RML

RML does not specify where generated triples are exported to, +each RML processor has its own way to describe this information +through configuration files or command line parameters. +To incorporate this information in the RML mapping rules, +RML is aligned with the +Target vocabulary +which describes how the generated triples are exported. +RML is aligned with the Target vocabulary +by extending rr:TermMap with the rml:logicalTarget property +to describe on Term Map [RML] level where each triple must be directed to. +A Term Map is a function that generates an RDF term +from a logical reference [RML]. +The result of that function is known as the term map's generated +RDF term [RDF-Concepts] +such as subjects, predicates, objects, named graphs and language tags.

A Term Map MAY also contain zero or more rml:logicalTarget properties +to export all triples containing the generated term to different targets. +The same Term Map can have multiple targets by specifying +multiple rml:logicalTarget properties in the Term Map.

Multiple Targets MAY be combined by specifying multiple Targets +in the same Term Map or multiple Term Maps of the same RDF triple. +If multiple Targets are defined in the same Term Map, +all triples containing the generated Term are exported +to all the specified Targets. +In case multiple Term Maps of the same RDF triple contain more than one Target, +the generated triples are exported to all the specified Targets.

+
+ Example 1: +
<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource [ a rml:LogicalSource;
+    rml:source [ a csvw:Table;
+      csvw:url "http://rml.io/data/csvw/Airport.csv";
+      csvw:dialect [ a csvw:Dialect;
+        csvw:delimiter ";”;
+        csvw:encoding "UTF-8";
+        csvw:header "1"^^xsd:boolean;
+      ];
+    ];
+  ];
+  rr:subjectMap [ a rr:SubjectMap;
+    rr:template "http://example.com/{id}";
+    rml:logicalTarget [ a rmlt:LogicalTarget;
+      rmlt:target [ a void:Dataset
+        void:dataDump <file:///data/dump1.nq>;
+      ];
+      rmlt:serialization formats:N-Quads;
+    ];
+  ];
+  rr:predicateObjectMap [ a rr:PredicateObjectMap;
+    rr:predicateMap [ a rr:PredicateMap;
+      rr:constant foaf:name;
+      rml:logicalTarget [ a rmlt:LogicalTarget;
+         rmlt:target [ a void:Dataset
+           void:dataDump <file:///data/dump2.ttl>;
+         ];
+         rmlt:serialization formats:Turtle;
+         rmlt:compression comp:Zip;
+      ];
+    ];
+    rr:objectMap [ a rr:ObjectMap;
+      rml:reference "name";
+    ];
+  ];
+.
+
+

If the mapping document contains no Targets, +the processor falls back to the default target, +as it is specified through the processor's +specific configuration file or command line parameters. +If a mapping document contains at least one Target, +the processor will not export generated triples +which do not have a Target assigned.

+ + + + + + + + + + + + +
PropertyDomainRange
rml:logicalTargetrr:TermMaprmlt:LogicalTarget
+ +

4. Examples

4.1 Subject Map

All triples containing the generated subject are exported +to the specified targets in the Subject Map [RML].

The following example exports all triples containing +the generated subject http://example.org/{id} +to an RDF dump with N-Quads as serialization format and GZip compression:

+
+ Example 2: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt.gz>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Quads ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.2 Predicate Map

All triples containing the generated predicate are exported +to the specified targets in the Predicate Map [RML].

The following example exports all triples containing +the generated predicate foaf:name to an RDF dump +with Turtle as serialization format and Zip compression:

+
+ Example 3: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ 
+      rr:constant foaf:name;
+      rml:logicalTarget <#LogicalTarget1>; 
+    ];
+    rr:objectMap [ rml:reference "name" ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.3 Object Map

All triples containing the generated object are exported +to the specified targets in the Object Map [RML].

The following example exports all triples containing +the generated object name to an RDF dump +with N-Triples as serialization format:

+
+ Example 4: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ 
+      rml:reference "name";
+      rml:logicalTarget <#LogicalTarget1>;
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.4 Graph Map

All triples within a named graph are exported to the specified targets +in the Graph Map [RML]. +The named graph doesn't influence where the named graph's triples +are exported to by the Target. +If a named graph is spread over multiple targets, +all targets must be combined to access the complete named graph.

The following example exports all triples in the named graph ex:MyGraph +to an SPARQL [SPARQL] endpoint using SPARQL UPDATE:

+
+ Example 5: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ 
+      rml:reference "age";
+      rr:graphMap [
+        rml:logicalTarget <#LogicalTarget1>;
+        rr:template "http://www.example.org/{type}" 
+      ];
+    ];
+  ];
+.
+
+

4.5 Language Map

All triples with a language tag are exported to the specified targets +in the Language Map [RML].

The following examples export all triples with a language tag +to a RDF dump with JSON-LD as serialization format:

+
+ Example 6: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ 
+      rml:reference "name";
+      rml:languageMap [
+        rml:logicalTarget <#LogicalTarget1>;
+        rml:reference "language";
+      ]; 
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age"; ];
+  ];
+.
+
+

4.6 Combining multiple Targets

Multiple Targets MAY be specified for the same triple +in the same or multiple Term Maps. +Each triple is exported to all the Targets +specified in the triple's Term Maps.

4.6.1 Subject Map and Predicate Map

All triples containing the subject http://example.org/{id} +are exported to LogicalTarget1 +and all triples containing the predicate foaf:name +are exported to LogicalTarget2.

+
+ Example 7: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ 
+      rml:logicalTarget <#LogicalTarget2>;
+      rr:constant foaf:name 
+    ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.6.2 Subject Map, Predicate Map and Object Map

All triples containing the subject http://example.org/{id} are exported +to LogicalTarget1, all triples containing the predicate foaf:name +are exported to LogicalTarget2 and all triples containing the object "age" +are exported to LogicalTarget3.

+
+ Example 8: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Quads ;
+.
+
+<#SPARQLUPDATE_target> a sd:Service ;
+  sd:endpoint  <http://example.org/sparql-update> ;
+  sd:supportedLanguage sd:SPARQL11Update ;
+.
+
+<#LogicalTarget3> a rml:logicalTarget;
+  rmlt:target <#SPARQLEndpoint>;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ 
+      rml:logicalTarget <#LogicalTarget2>;
+      rr:constant foaf:name;
+    ];
+    rr:objectMap [ 
+      rml:reference "name"; 
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [
+      rml:logicalTarget <#LogicalTarget3>;
+      rml:reference "age";
+    ];
+  ];
+.
+
+

4.6.3 Language Map and Object Map

All triples containing the language tag language +are exported to LogicalTarget1 +and all triples containing the object "age" +are exported to LogicalTarget2.

+
+ Example 9: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ 
+      rml:reference "name"; 
+      rml:languageMap [
+        rml:logicalTarget <#LogicalTarget1>;
+        rml:reference "language";
+      ];
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ 
+      rml:reference "age";
+      rml:logicalTarget <#LogicalTarget2>;
+    ];
+  ];
+.
+
+

4.7 Overriding Targets

In some cases exporting all triples to a target is not desired, +therefore Targets can be overridden when needed +by either using a separate Triples Map which isolates certain triples or +by using FnO functions [FnO] as conditions.

4.7.1 Separate Triples Map

Triples can be exported to a specific Target while not to other Targets +by isolating these triples in a separate Triples Map.

In this example, all triples containing the subject http://example.org/{id} +are exported to LogicalTarget1 +and all triples containing the subject http://newtarget.org/{id} +are exported to LogicalTarget2.

+
+ Example 10: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap1> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ 
+      rml:reference "age";
+    ];
+  ];
+.
+
+<#TriplesMap2> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://newtarget.org/{id}";
+    rml:logicalTarget <#LogicalTarget2>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:interest ];
+    rr:objectMap [ rml:reference "interest"; ];
+  ];
+.
+
+

4.7.2 Conditions

FnO functions MAY be leveraged to export triples +only under certain conditions. +Conditions are already integrated in RML+FnO processors, +thus conditions apply on Targets as well. +Triples are generated and exported based on the FnO condition's evaluation. +Only if the condition is true, the triples are generated and exported.

+
+ Example 11: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";    
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [
+      fnml:functionValue [
+        rr:predicateObjectMap [
+          rr:predicate fno:executes ;
+          rr:objectMap [ rr:constant idlab-fn:trueCondition ]
+        ];
+        rr:predicateObjectMap [
+          rr:predicate idlab-fn:strBoolean ;
+          rr:objectMap [ rr:constant "true"]
+        ];
+        rr:predicateObjectMap [
+          rr:predicate idlab-fn:str ;
+          rr:objectMap [ 
+            rml:reference "age";
+            rml:logicalTarget <#LogicalTarget1>;
+          ];
+        ];
+      ];
+    ];
+  ];
+.
+
+
+ + + +

A. References

+

A.1 Normative references

+
[FnO]
The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
[RDF-Concepts]
Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
[RML]
RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
[SPARQL]
SPARQL 1.1 Overview. W3C. 21 March 2013. W3C Recommendation. URL: https://www.w3.org/TR/sparql11-overview/
+
+

A.2 Informative references

+
[paper]
Leveraging Web of Things W3C recommendations for knowledge graphs generation. Dylan Van Assche; Gerald Haesendonck; Gertjan De Mulder; Thomas Delva; Pieter Heyvaert; Ben De Meester; Anastasia Dimou. Springer. 2021. In Proceedings of the 21st International Conference on Web Engineering 2021. URL: https://dylanvanassche.be/publications/#icwe2021
+
\ No newline at end of file diff --git a/publish.js b/publish.js new file mode 100644 index 0000000..b025c67 --- /dev/null +++ b/publish.js @@ -0,0 +1,50 @@ +/** + * Created by bjdmeest on 10/06/2016. + * Modified by Dylan Van Assche on 12/02/2021. + */ + +var fs = require('fs'); +var path = require('path'); + +var dateString = (new Date()).toISOString().split('T')[0].replace(/-/g, ''); + +try { + if (!fs.existsSync (path.resolve(__dirname, 'dist'))) { + fs.mkdirSync (path.resolve(__dirname, 'dist')); + } + fs.mkdirSync (path.resolve(__dirname, 'dist', dateString)); +} catch (e) { + +} + +var files = fs.readdirSync (path.resolve(__dirname, 'dist')); +var dirs = []; +for (var i = 0; i < files.length; i++) { + if (fs.lstatSync (path.resolve(__dirname, 'dist', files[i])).isDirectory()) { + dirs.push(files[i]); + } +} + +dirs.sort(); +dirs.reverse(); + +if (dirs[0] === "resources") { + dirs.splice (0, 1); +} + +if (dirs[0] === dateString) { + dirs.splice (0, 1); +} + +// First version, set previous version to this one +if (dirs.length == 0) { + dirs.push (dateString) +} + +var html = fs.readFileSync ('./rendered.html', 'utf8'); +html = html.replace (/%thisDate%/g, dateString); +html = html.replace (/%prevDate%/g, dirs[0]); +fs.writeFileSync (path.resolve (__dirname, 'dist', 'index.html'), html); +html = html.replace (/\.\/resources/g, '../resources'); +fs.writeFileSync (path.resolve(__dirname, 'dist', dateString, 'index.html'), html); + diff --git a/rendered.html b/rendered.html new file mode 100644 index 0000000..5767524 --- /dev/null +++ b/rendered.html @@ -0,0 +1,1072 @@ + + + + + + + +Target in RML + + + + + + + + + + + + + + + + + +
+

Target in RML

+ +

+ Unofficial Draft + +

+
+ +
Latest editor's draft:
https://rml.io/specs/target-in-rml
+ + + + + +
Editors:
+
+ (Ghent University – imec – IDLab) +
+ (Ghent University – imec – IDLab) +
+ + +
This Version
+ https://rml.io/specs/target-in-rml/%thisDate%/ +
Previous Version
+ https://rml.io/specs/target-in-rml/%prevDate%/ +
Website
+ https://rml.io/target-in-rml +
+
+ + + + +
+
+

Abstract

This document describes a formal representation to align the +RDF Mapping Language [RML] with Target [paper] +to describe in RML mapping rules how a generated Knowledge Graph +should be directed and exported. +The current document describes how Target is integrated +with RML through definitions and examples.

The version of this document is v1.0.0.

+ +

Status of This Document

+ This document is a draft of a potential specification. It has no official + standing of any kind and does not represent the support or consensus of + any standards organization. +

+

This is an early draft, +yet efforts are made to keep things stable.

+
+ +

1. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

+ The key word MAY in this document + is to be interpreted as described in + BCP 14 + [RFC2119] [RFC8174] + when, and only when, they appear in all capitals, as shown here. +

+ +

2. Overview

This section is non-normative.

This document describes the alignment of Target specification with RML +to define how a generated RDF knowledge graph must be exported +in the RML mapping rules. +Target and RML are self-standing specifications +which are aligned through this specification.

In this document, examples assume +the following namespace prefix bindings unless otherwise stated:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrefixNamespace
rmlhttp://semweb.mmlab.be/ns/rml#
rmlthttp://semweb.mmlab.be/ns/rml-target#
rrhttp://www.w3.org/ns/r2rml#
formatshttps://www.w3.org/ns/formats/
comphttp://semweb.mmlab.be/ns/rml-compression#
csvwhttp://www.w3.org/ns/csvw#
foafhttp://xmlns.com/foaf/0.1/
fnmlhttp://semweb.mmlab.be/ns/fnml#
idlab-fnhttp://example.com/idlab/function/
+ +

3. Target in RML

RML does not specify where generated triples are exported to, +each RML processor has its own way to describe this information +through configuration files or command line parameters. +To incorporate this information in the RML mapping rules, +RML is aligned with the +Target vocabulary +which describes how the generated triples are exported. +RML is aligned with the Target vocabulary +by extending rr:TermMap with the rml:logicalTarget property +to describe on Term Map [RML] level where each triple must be directed to. +A Term Map is a function that generates an RDF term +from a logical reference [RML]. +The result of that function is known as the term map's generated +RDF term [RDF-Concepts] +such as subjects, predicates, objects, named graphs and language tags.

A Term Map MAY also contain zero or more rml:logicalTarget properties +to export all triples containing the generated term to different targets. +The same Term Map can have multiple targets by specifying +multiple rml:logicalTarget properties in the Term Map.

Multiple Targets MAY be combined by specifying multiple Targets +in the same Term Map or multiple Term Maps of the same RDF triple. +If multiple Targets are defined in the same Term Map, +all triples containing the generated Term are exported +to all the specified Targets. +In case multiple Term Maps of the same RDF triple contain more than one Target, +the generated triples are exported to all the specified Targets.

+
+ Example 1: +
<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource [ a rml:LogicalSource;
+    rml:source [ a csvw:Table;
+      csvw:url "http://rml.io/data/csvw/Airport.csv";
+      csvw:dialect [ a csvw:Dialect;
+        csvw:delimiter ";”;
+        csvw:encoding "UTF-8";
+        csvw:header "1"^^xsd:boolean;
+      ];
+    ];
+  ];
+  rr:subjectMap [ a rr:SubjectMap;
+    rr:template "http://example.com/{id}";
+    rml:logicalTarget [ a rmlt:LogicalTarget;
+      rmlt:target [ a void:Dataset
+        void:dataDump <file:///data/dump1.nq>;
+      ];
+      rmlt:serialization formats:N-Quads;
+    ];
+  ];
+  rr:predicateObjectMap [ a rr:PredicateObjectMap;
+    rr:predicateMap [ a rr:PredicateMap;
+      rr:constant foaf:name;
+      rml:logicalTarget [ a rmlt:LogicalTarget;
+         rmlt:target [ a void:Dataset
+           void:dataDump <file:///data/dump2.ttl>;
+         ];
+         rmlt:serialization formats:Turtle;
+         rmlt:compression comp:Zip;
+      ];
+    ];
+    rr:objectMap [ a rr:ObjectMap;
+      rml:reference "name";
+    ];
+  ];
+.
+
+

If the mapping document contains no Targets, +the processor falls back to the default target, +as it is specified through the processor's +specific configuration file or command line parameters. +If a mapping document contains at least one Target, +the processor will not export generated triples +which do not have a Target assigned.

+ + + + + + + + + + + + +
PropertyDomainRange
rml:logicalTargetrr:TermMaprmlt:LogicalTarget
+ +

4. Examples

4.1 Subject Map

All triples containing the generated subject are exported +to the specified targets in the Subject Map [RML].

The following example exports all triples containing +the generated subject http://example.org/{id} +to an RDF dump with N-Quads as serialization format and GZip compression:

+
+ Example 2: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt.gz>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Quads ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.2 Predicate Map

All triples containing the generated predicate are exported +to the specified targets in the Predicate Map [RML].

The following example exports all triples containing +the generated predicate foaf:name to an RDF dump +with Turtle as serialization format and Zip compression:

+
+ Example 3: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ 
+      rr:constant foaf:name;
+      rml:logicalTarget <#LogicalTarget1>; 
+    ];
+    rr:objectMap [ rml:reference "name" ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.3 Object Map

All triples containing the generated object are exported +to the specified targets in the Object Map [RML].

The following example exports all triples containing +the generated object name to an RDF dump +with N-Triples as serialization format:

+
+ Example 4: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ 
+      rml:reference "name";
+      rml:logicalTarget <#LogicalTarget1>;
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.4 Graph Map

All triples within a named graph are exported to the specified targets +in the Graph Map [RML]. +The named graph doesn't influence where the named graph's triples +are exported to by the Target. +If a named graph is spread over multiple targets, +all targets must be combined to access the complete named graph.

The following example exports all triples in the named graph ex:MyGraph +to an SPARQL [SPARQL] endpoint using SPARQL UPDATE:

+
+ Example 5: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ 
+      rml:reference "age";
+      rr:graphMap [
+        rml:logicalTarget <#LogicalTarget1>;
+        rr:template "http://www.example.org/{type}" 
+      ];
+    ];
+  ];
+.
+
+

4.5 Language Map

All triples with a language tag are exported to the specified targets +in the Language Map [RML].

The following examples export all triples with a language tag +to a RDF dump with JSON-LD as serialization format:

+
+ Example 6: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump> a void:Dataset ;
+  void:dataDump <file:///data/file.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ 
+      rml:reference "name";
+      rml:languageMap [
+        rml:logicalTarget <#LogicalTarget1>;
+        rml:reference "language";
+      ]; 
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age"; ];
+  ];
+.
+
+

4.6 Combining multiple Targets

Multiple Targets MAY be specified for the same triple +in the same or multiple Term Maps. +Each triple is exported to all the Targets +specified in the triple's Term Maps.

4.6.1 Subject Map and Predicate Map

All triples containing the subject http://example.org/{id} +are exported to LogicalTarget1 +and all triples containing the predicate foaf:name +are exported to LogicalTarget2.

+
+ Example 7: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ 
+      rml:logicalTarget <#LogicalTarget2>;
+      rr:constant foaf:name 
+    ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ rml:reference "age" ];
+  ];
+.
+
+

4.6.2 Subject Map, Predicate Map and Object Map

All triples containing the subject http://example.org/{id} are exported +to LogicalTarget1, all triples containing the predicate foaf:name +are exported to LogicalTarget2 and all triples containing the object "age" +are exported to LogicalTarget3.

+
+ Example 8: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Quads ;
+.
+
+<#SPARQLUPDATE_target> a sd:Service ;
+  sd:endpoint  <http://example.org/sparql-update> ;
+  sd:supportedLanguage sd:SPARQL11Update ;
+.
+
+<#LogicalTarget3> a rml:logicalTarget;
+  rmlt:target <#SPARQLEndpoint>;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ 
+      rml:logicalTarget <#LogicalTarget2>;
+      rr:constant foaf:name;
+    ];
+    rr:objectMap [ 
+      rml:reference "name"; 
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [
+      rml:logicalTarget <#LogicalTarget3>;
+      rml:reference "age";
+    ];
+  ];
+.
+
+

4.6.3 Language Map and Object Map

All triples containing the language tag language +are exported to LogicalTarget1 +and all triples containing the object "age" +are exported to LogicalTarget2.

+
+ Example 9: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ 
+      rml:reference "name"; 
+      rml:languageMap [
+        rml:logicalTarget <#LogicalTarget1>;
+        rml:reference "language";
+      ];
+    ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ 
+      rml:reference "age";
+      rml:logicalTarget <#LogicalTarget2>;
+    ];
+  ];
+.
+
+

4.7 Overriding Targets

In some cases exporting all triples to a target is not desired, +therefore Targets can be overridden when needed +by either using a separate Triples Map which isolates certain triples or +by using FnO functions [FnO] as conditions.

4.7.1 Separate Triples Map

Triples can be exported to a specific Target while not to other Targets +by isolating these triples in a separate Triples Map.

In this example, all triples containing the subject http://example.org/{id} +are exported to LogicalTarget1 +and all triples containing the subject http://newtarget.org/{id} +are exported to LogicalTarget2.

+
+ Example 10: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#VoIDDump2> a void:Dataset ;
+  void:dataDump <file:///data/file2.nt>;
+.
+
+<#LogicalTarget2> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump2>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+.
+
+<#TriplesMap1> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";
+    rml:logicalTarget <#LogicalTarget1>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [ 
+      rml:reference "age";
+    ];
+  ];
+.
+
+<#TriplesMap2> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://newtarget.org/{id}";
+    rml:logicalTarget <#LogicalTarget2>;
+   ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:interest ];
+    rr:objectMap [ rml:reference "interest"; ];
+  ];
+.
+
+

4.7.2 Conditions

FnO functions MAY be leveraged to export triples +only under certain conditions. +Conditions are already integrated in RML+FnO processors, +thus conditions apply on Targets as well. +Triples are generated and exported based on the FnO condition's evaluation. +Only if the condition is true, the triples are generated and exported.

+
+ Example 11: +
<LogicalSource1> a rml:LogicalSource;
+  rml:source "/data/people.json";
+  rml:referenceFormulation ql:JSONPath;
+  rml:iterator "$.[*]";
+.
+
+<#VoIDDump1> a void:Dataset ;
+  void:dataDump <file:///data/file1.nt>;
+.
+
+<#LogicalTarget1> a rmlt:LogicalTarget;
+  rmlt:target <#VoIDDump1>;
+  rmlt:serialization formats:N-Triples ;
+  rmlt:compression comp:GZip;
+
+<#TriplesMap> a rr:TriplesMap;
+  rml:logicalSource <#LogicalSource1>;
+  rr:subjectMap [ 
+    rr:template "http://example.org/{id}";    
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:name ];
+    rr:objectMap [ rml:reference "name"; ];
+  ];
+  rr:predicateObjectMap [ 
+    rr:predicateMap [ rr:constant foaf:age ];
+    rr:objectMap [
+      fnml:functionValue [
+        rr:predicateObjectMap [
+          rr:predicate fno:executes ;
+          rr:objectMap [ rr:constant idlab-fn:trueCondition ]
+        ];
+        rr:predicateObjectMap [
+          rr:predicate idlab-fn:strBoolean ;
+          rr:objectMap [ rr:constant "true"]
+        ];
+        rr:predicateObjectMap [
+          rr:predicate idlab-fn:str ;
+          rr:objectMap [ 
+            rml:reference "age";
+            rml:logicalTarget <#LogicalTarget1>;
+          ];
+        ];
+      ];
+    ];
+  ];
+.
+
+
+ + + +

A. References

+

A.1 Normative references

+
[FnO]
The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
[RDF-Concepts]
Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
[RML]
RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
[SPARQL]
SPARQL 1.1 Overview. W3C. 21 March 2013. W3C Recommendation. URL: https://www.w3.org/TR/sparql11-overview/
+
+

A.2 Informative references

+
[paper]
Leveraging Web of Things W3C recommendations for knowledge graphs generation. Dylan Van Assche; Gerald Haesendonck; Gertjan De Mulder; Thomas Delva; Pieter Heyvaert; Ben De Meester; Anastasia Dimou. Springer. 2021. In Proceedings of the 21st International Conference on Web Engineering 2021. URL: https://dylanvanassche.be/publications/#icwe2021
+
\ No newline at end of file diff --git a/resources/css/extras.css b/resources/css/extras.css new file mode 100644 index 0000000..3d7ce4e --- /dev/null +++ b/resources/css/extras.css @@ -0,0 +1,21 @@ + +a.sec-ref:before { + content: "“"; +} + +a.sec-ref:after { + content: "”"; +} + +span.orcid a { + text-decoration: none !important; + border: none !important; +} + +span.orcid a img { + transform: translateY(3px); +} + +html { + background: white !important; +} \ No newline at end of file diff --git a/resources/images/orcid_logo.png b/resources/images/orcid_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e7437263ae862b0077a4437813199e26215a7463 GIT binary patch literal 1871 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}oCO|{#S9GG z!XV7ZFl&wk0|QG%W=KRygs+cPa(=E}VoH8es$NBI0Z=sqgH44MkeQoWlBiITo0C^; zRbi_HR$&EXgM{^!6u?SKvTc=BDPAKut~o znrv$B>|$hKVPIqmHQCa{+0xk5(Adq)#nHml9A+|-R)onm`WRjXCoo97!@>d6Qe$Ih zXA37c6E`=wpZ>sRx>AgxRI%f_A+qZm0|Qfmr;B5VhNx?hw|8iu$iHiL?~^mbP1Z(-a5$>mY*t{M=r&y@ zUVcJFMz-zolfZ*8qk z%=F@SiSM`W+j{ML?Gn=t4k?+#!Wt}MY_H~=W17$QAbDT^kNh5Cw_kpHWQ{8$dw*6~ z6(5a`k<~L}z0Mwc`};HVdD03(DXEz~K2fh{e0;C_@8sQGw|?u0E!zaDy|Z05=H!Drr->E`L}sciyFw4GaqpEPj#2^(NcKv;A`{$KAOZcklJ>ycAxez4yU6GpkSHn$N{2 zoT&6o5oIwx^~SLM&#IGLi;&|7uVYFQoc5i9)?4W-<@WA$JC zm09&th(-8l`NZ5KPwzeNE$9=?xX$OfilZ^Q{~h!8z~Ji}tjh%ocP*)3W4GwQ%Li*G z8AeA-1giqd;8QbO-Y7ZGU!VhFt{T~UzULa0(gkrFyYsR~I5 zC7{#;Xab?Bp%@78Zan9C9`U{RFSs|~VDDKoYi8D3Gi!dc;|%pR>CUj7p`xOq18Lnc zrlLAdOGS0;$>~$Tf9`&;U7(_}Y6sm>G4;1wg`V_z(1-AK$HqJMiuBToEW~GWiiwH! zp-|_<5;8M0FFE?&f75*qvupo1?;dR3+`<5oDo%VoYOLe8j@YVgEoYM;%*bvtOH%`5 z8{Y4|*Ik($;Gi)oMQ;IwFOnxSP+q-4q;FJ_fkfbpcD~vWwFPu}o_GRiebI zzPcUTExCI0u;pt)xc(S=&Jy#PG!uOVkFSd(f~7%~dX3Y?<_90(+|KJb6T1+CBVsUr z9X3{?FS_(VeG(xxRZvBlvrsI5RF8XQxtr^=t3Y2GlHS1BVP3amdC2hH2U(p;mpaDi zzn56-t%LN#v{_#%kmmdS7ZU6lQ}7&0xM3NPKDa*^2#ov+?X% zk$DoG8O^epOqX3?F4;g6fw$oB?hiHF~TmR7;zK9h5ioHHsq~;6V%dutn(wW=M&hborPa zSmBl2a?<>(Zf*Ddg4zW;YO}SFt#L?oz$|$E!eDY1d;V+y4k1;_@nq@}LXyQc%MJdv)X9tkRfd)h5S}vxtDlFO~BdaiS4R{P{&-Z)%5T+^QyhDp9+36+lea@&-!vg9abS) ztcQBs5j=E}Rku#zE>zuURmuQe_$Fw((e{j%&Hmdo!Noh+E5MW!9@dewP6f5Lk@h%;FCE5)eMBF!qa zc)~AWWpkE!bv{x>uyx+82O7yV*j}OKqdH$GcOiY6qWrb~MO7JX_7h^kBTN9kIz*E3 zaCZ*x=sSV;emG|7rrvkc!GGhcRe)x4ZXc%?rJswM%d&CQxsawSpFhXU-EYiEYOEi3 zB^UCl8Q^}wEBJeQfjkdw1U18@h2>MNS;8M0@WO3Bhql!V@_y(wd~P=1AMTsA;LCVi zP(TSU)EDfZkG!JiDPFXc7GqzL<1=$Hl|_*fQfaeZz4cvK=wETVl)*tHc9NCYq4N^o z5$pPWg4^O_dZ+e(!Vy0bgh$O)IbCR%5nX{&a+ zM}j_FamWbjh^ifT8+gb|%cgPB&ae5R1-zBSxJF-5GsCAoDeZvee6gWW%$LX=IxN$} znf$W~-JPs!<*wFwXfv!7t80g=qPw8g?EzrDmC6?FRQwpuUK=1bPKF?@Lgc+0D`jZE zyQAfoS3YYvzvQFMdXXn-Vjve{UXrghCsBo5Un;o8L(8_4+~9R6!;)}e!)S0+{c2{q zjs14$#ONAJ_9HX+_}h{wX4_iPJ{uBq0)OVCA6C}?=wa+3JxP#c0xm2P{H2HrKoJoM zatiSA=W6+Ot%@-}8W>MC?+8g&A;z01O;tmYDt@;{HPqsB5B~OpK(aj=-Hl2>=maF$ z)rgt#R3%SJhq<++fI|~GpT(`ZbuhorN$%djx6FmeIg3Ki>L4Yw<7o(6?qR5t5zVX=7s#`|80kPE65_ z>{jlIpC=&FgbfWY1Q$v#6CGJcxX3gh}K9L=7Kvifv9Hw+FnIQ4fJ|0!z<~F4;AL?JqG* z(*iElHMQWU%qlPKk2bg$T)_bJVFbBfd)-Ui!I0qpRGqmRf%_T4dwNb`^Rs90w`Qx| zDjr(L9~gdnp^3&+;chiV{rzFLWlz%-?#Ew1h$pwJ%iEdWKttb55a_#FdQ*g5K93qU zE*cM*Z7F{F)N--Fhrr8ojRy#ZsHiHtWbu9Y2>cYt*7{I`n>d35!wMo(+K+hL#l47E zG7>?U48~KJ_^-6ERo7}Tohq9%$husC@umbs4@x?J&1%gpb)RIX>3Yc^Z#`vu+5-`2 zQaTAa=yHSeo|IUUnX*lE)MoW5xlc|tuMXPx5kr~Mg3ly$oq+t~Q8UgeBpQ+e7+2(} zd&qzLW22(b7M=9|iq4tpw!PQ=14!}}cYcYK8(hh-a_?;imxPJ(l_kH9^3)|k)t#J% zQRm?`G}}axeqfuf`#0c_x@kv>Yg8N{P8f48`}{Prj=ln#5V1-a0Zk(4%BvQA84yL51G9h)Lm)8^puF9+@c%v&$qgtXCkH&2@eYA>9epNLQ%o)nNS0~q zaI5$zs}t*F;r;s5VQ8vsfA13MBFPE7R8&=WlqNN^r>%$Fdd8XuVhfy_SJG^I)Y-28 zvRW*jH^*(?h0EcUwf*$%Kgh7!nys?PAFs`ovsyY@tdFvT=P6vMPw!m7{{^xY15WMV zB=HhUASaSvH~Sio>mCVBvDUf{c8~UFrY1RT?5BN>J{zHxV2}(G9+c#VSFed2eU|*_ zQK;LDD<*ezQ{2*-re@_o0m>o`vlvWlR#=k<(yl&csd}sR`3rHw!>MI`jK@RpQg~nd zyOxQWqtiy;QziM6_(^xc&srwNE+0|JbllqIm3yJ?c8>b?_S42kRnmI*eeghVuMJO` zyZTWH&G6#uB1$4sx$=;yhB~i3qA#yr8#($S%pyk#bkH*;SGIh+S1jR4=mH`c z9k&eMJ^8z~!)Me2&=O`Ju8+&`z zRFKQbNzJCluohc*)#1R52WXL*8lsJ(-D=X_P%(?i6#!3H^YPBu-#T?LvD45-S{$7%w(O zX$@$UaX{!Ev=5Mz>m*f}te!4-aFZ)2k zxJe24b<}E(0W)9e*o#E14?<|yf)45nwol)Jiqmn_62c+xu>NzG~sJ( zj~qkq?T^Uga!ReL<<7w@4(we7pGMzsWs*XREuJySN|#omXjPX)o|Hc_@hXxSDL`tc z>YY;g0WR@sjkjq@D_xz%z;U*uqE@=;kJ1=}TtJO+xa2X5h-(hYsQ+Y>wvK@W3;DnS z8yq>{Sc~H~FVZz|EXiVX^WeZ;a1my%mYjX?a3(RuFG>$Jh?29(&3Wf?WGUD#a1fZD z`sAwIy}J31xKIp5lJbhp{3Hm%Qa+)xC#P*QnkT9RZmm(Eug1||lVv{~@rrm(flQ&M zpu)%X_w{e`O^+M_SodT+5Ob{J)i{$Za`|QbRr;lBbPZVt#r(ay%<6*Ad6(*7^wQyB z4;xH9z4YmF*pL4Q(=(fBKCLoY;JK^ZOcN z?4?+9KrU(bhD#4G@3miiu{`x{uGWjhgKa!NehXuuJLaZETwFegGUpELA%g}zDjyXo zTuix8>WDNn?Ent9I#<)N^Aku1C4$lj8MA(s?$?JoD%=NQ-p0%EM`D8yROU*e!gr?fUs?Un*FWo;_EfjQakX4 z`{Je`zY8gbixNVQ3t{72f$i`dnZ6d!RK?7{b+(PB-jXSfIIrcOl z0mi5~P>JjT2QT|E$O=Nl+5)@Fy&8PqI|APH5^e!qn2 zAz=9VehH7gQ_uaZiekW#s^G9cLZ(NW-#i1pFpV-Doi&9w$BJz{+IRYYKXQ9M^XZeqf6u z+d?50d3ChDp{yxMY`mN%IE#NouN#7%m^Lzek|#iJaeNFTfx4`WT1E1m3~-7ojd}Tc zwoY^esi2@yGJ5uxsCg_uo8d^c%Y1(O^bx+=V_auB^J%bBvd96FAZYqi0huvD8g?sE zZ|>i>haPiJUy7Am3^E-Ey_9;g-ljawWVOF7GUWzZ2g)5<1kIJ;p!xM~U`8|gI0}+8 zJD^-zS2cHsJ5#OPX#zaQNwCn&dSk^bjV3>sk1YarioZzt7z39vn=|ObUzFi?%5qoT ze;VC=zxbxq^T6%%Q=`vkaJ5FbKJ8oGD9qq(?Bh38Z_7wJMQ#Ot0H%E6?3 zH^&?$=Opj(NwZ~$^PC!C{klsb;@xdbV^A-}p1^<2FO?U?k^>{<>3#ZlMyyMeZ~5(L z0aS8<>?-^l0zMn#AVEkzj-Xqt>I?#oD!9#FE}i3mE`Ae(ti~%xUNQPbiS5c+*8rBO zr|J0B*%+0nWy;%Pf9l1mf-hh05G?Fud&y?0|FXb7=C1TDnoe&NE0GX-q9}q5rMdB4 zk@mhX0S3RKX4`%|50~OAjufkwEP+=aX4h2Vxp$IdQ(4>AD27Gh=JJ6!vdrnaJ72G^ zbUh9;_00e_pv3^F6EA5TKT@@vT=uANooI=+rjFk>b)KuZdCIQQE)~T;loG z&3$ACjV!G;bK{aPDt=7NI{gwce|zCut9E^j&F|-(P>FlSc#0ReZ8hYTQ@MJzz@qQN zMjp*{f1u|ECzK|sMMTeLtg1f{V+RUw#wK2)Qy89(ubP4aK}zETeyuxqHvZu=8Gs_s z25i=MO5?~al}SImbL=%BSw+E*usrw@C~UOiBN{kB=s(jio z`LS+LJW$o>WppMH*p>3G{rO z`uN*WIt6r7TjF6}c5eEX_P}Xld*wIP-|ox8Q{%5;goc1zXIj_y*_}Igs$acc0;0KS zGD;I_z&xf!1ZK z_%VF=jvL?#px|{h!e@Rb)Kig@TYnJhZ0DqJeK_-W&~Ni=fu^GU zP$j6SWZ(pKIbux@l+%pYey@$tp^(g1e-p*_VMag)xxE=CQ`Er*lqX*PHglh>eEd^9 z13m!%WfKRuU-|DIYx3yc{#e_1j@Yju`F|VIvF9p&1V4#?zG(&!S^REaHC?Y)qDTop zVd^p5UsTGl-z9N;5KLkvNZHA~&w1Oymbb|&eD581P6Fgkh3w@WZ zVR&;T84=JfV-g~vtdrcMcv#ao#}gY%m%$~Rua_oeF9nlgF(6Xy{AIav4M<{7syvJR z6uxwfiI_3n)0@su40GOU_}!|dw>&DHzI-%#sb&lr^-A@5zF7wH4+ya+z}7?mXU zX=;Gd9uOzv1aO7%z6d!?#4l@|JI^kxa4#(bfnq?%paYU*!#nhucMp?XmBhoshYn4d;hY?M2<%IuB$j&n~OndGu~0-16!hNg=<`pF^G)2F62;Xe|OYH*i^DVslADN{3Z0XT+JULBSAbKj*0YmWdQbUpMz zL#x_Pnm{gn_SuQ^HOEGdKjeORkz`8(f%A*#^H%;4N%4aX{y1>?(*o?*{(sWl&j@%5 zIAZlLN4)yy(|e@>iR6fYDw%)~395RPqY8fHEh(-fvMxf* zrl#Wj!&j{1m(cDgFEl6WDd6GQ%SXMXPCetD{22M=_$w*?3ixemvFvNM%bv0&wso3W zN;>`Q4w3{IJ72khZHT<(rniA`Drvp!BgyIVA4U>wiFgYozYKuNINEwNW9e}_ligs6 zPzNq1g*Cli?|qW(Yjg2;pD{{){ltYzcmg6_LyYwi*F8_R)TM*XTz7S+z05yM@FHG# zRv0G6qC@Q0$`W3D-oa&W=04O~$`p!d4zU`da_xLuPpX#is#M>ujVG-)nwU03lGdB= znU29e9`%IwcPn@(z69S3vdwhejLa7(qEV}J6>zxD{)aB8hx{QB4g{?8J!ZWc%aYmi zvctIY>uw-tc&^iZZeIHL|$p{$_tU)Xi{)4ZD6_vcM_64u-y!mYZ;m~>&mHTYML>C zfjs&ktFsQ+bG&=>>oNz8G84E1+wM5b!75&)S|V(f;#G=NhwGyTk7`39TsA8x8!06u zSyEcP2EMhX;iqu`Bd3!65o@z}9o&yeAUod&?ndm06rzFENo}28qQu&!fq;v+LleTP zk4U^Mk!i_kZ^=%`BZt_?4 zAR0AmFzZHe>W!x(UXTc~5Mg^iL(r|{juvuy7VQiTLl5SJRfVpb|FL06W+I^LScNYX z+~<8|E!I%+7>j|-&RveV;2^s9&#P^e9QI)(fje;;F+59t97`HVf;Ogc zl282celzjYO(PnMcL<#Z*}r$PyRW|;@v0P8(qisR)NanKWtBlC#o{iuc-RQ%;Z2hwJWJ`cpg#QD|}*PsV- z#J%I%tfRi;rMk$tq#L}Qm0EwScE+>PVL00^d2>DDj_ef&>~zuvh&b-)D;mxn$K)R) zS1G+yD9c@DrKuo6~6B3rTY8l2{ zA_uGrT$7P1A72u;pZBMvEbdKMjhTH+k8U~124WST(oS%$La^#-nX5i40p2o_rD%PO zw!5Z(&+3o;{4?4mBm{Cjj6lJCQrX1qJp(E=pD`&L{q@-CQ;6}$S*&OoL-IG`0tP5L zvPA!_#p{}7lHYvtm`7}htSwzwIUR&>g*JiB(gQxHA>!J3E(1rdp=h5G_fxgl#jOn* zW!HdMx4<3xAT?_jgBS%gIOhNb6o9rSx~^fhI`bSHT69L4=c)|vw(HPD=r&K0eOm^G z-2T{zJykjRAhn~%Mn3&Gyt})2#X*aSDnC-i0_v#Rd5*#P{B)}DX#_5pZd?|2AreW7 zz}RP6@LMOO>e@`d%8C`#FrO?p;T|#X%nLZfhA9eQ%hL3&Bl(@Q^M&fLj`{6xrkpOa zAVuwa^sJZ6T78Vbi^qF(<_(rUD7-B$V&kzXtNQU7UZyBf`1013{~o|7&wFP{It2bQ zw_4Azl8boc&moV)#Eu=TXUc^=x>J>~yK z1$Ad#Ty<@W&75!B#N9rw08E|kBHKj;&lkdx&Sgcx?QY~PT%S;87`V`a<4na`u-t9_ zn;PcaeksC>{T*Ch=I(PtcU&P9M5l3HAy9r&7N?#QAjB9TdO9#l&I?7sr%2owgIM~- zMy)WCxC2(W{O2~!_2%IR--QZ98BcYG=KVJs_)HTmH+y5uHtO~=TwBEesHRC*=+{@J zFjS{45w{7R8|5Z-ab{>HngUI)eD8#{!I5|n=0e*Iz1bt`zjaTR9C=0k8=7YVhtt^}|htukZVycDo#CdFi#50|&(RkP3M?d%ap= z?Zbwjr}}1yw1rY?j9# z*-q-Prdc}R3Lb6RKgv-kxea37G3b0dlqPop2F_PcM-ksHn;&r2_g%oNV+~9+HbxPMA$ght@_@^pNVX7 zUk|N)@)^xwYHmehQQtdd{m4Ro8!dET<#RV304@~Ra89Qy?sshMxOM_-+0JVb>;1fT z$vLOlzrs7%Eo{2oV0?zuL6|9P*LP+-HGS-p>$<)9AuwgWt`hMcpZcN-Dd*0=9{gjo zUr6$Exl76MUS6pg>t=ivzZ;AfmEH6+I>^n*pnXq$+TA8#_nLaM-8D+IpTefbmL2~A zv47r8!=>>M$D-f5nAIW)0A{#?_8NQMyT&D3o)?RlK%Fg z02)e-&NO7-d$}o}x?GjGAHA(`;JF%5&QQJG%Mw@+^Kf!Bspn&i zo@HAvQ2mF6gs!yV!dOJuWspx^N!Ah#k`<5j>oV^ueC@SfH_dchBfAmu5R#uNuD_Vf zQ6g>u=npb!ZeAy$bfsxrB~{aYSI;(^o!h^`SI}sBg5A@oes=k9$LHX?r6U2$qh~eE z(rmpE1);6e+X8sajvpTlQbXwFI%+=+4_GkUKYSp<&v|}tnyy_x9N1QnkTO>xOher zH#^{!bq=d?7=>BYo}d{LYVx!DW+ZOV=$d;t)B?KxEhhJX@B+6tlu8@fx1%X}?_KzW zV;QEyQ@z*8_~2XTatV!EPFye7A+%{hVWQ@zXa4HN zMn%(0e)3^&W6cWA?8kA|3x08Z)-P++97e5--2KtCm#k#w zQ%KKiUUna+Y7;rPD8g=~QzL zZ(z$0M$a43v+jTAsr0-zp)TJ`kgoCP$Yo-T_LqlO@l0=ENj)c;zJ+wDXn~A=+WLf# z%-WH}hSy`DjXQo#V`RuKVqjI7nriPQu$5{<`5`^FFcso6`$hTnkPkJ8C(|Bd&{Lb| z`Pe1Zjov&^V?m5c>a+UT4P6Y}6!L*6>9dMoRjJMwwdG~_s(lL6veG;6wsVN=NLiBS z5>*Thm3&4OD3f$D z<{oTRBX32^MLAgSyo8*z8?>NSl5Z5CiLf(4zV_se7OiwSzjkh^(bO_W7zKc~AdOEp z6;y+!?c(k26S_#Moxh-~S{4AiQwvumg9x@p0^`_X!z$cM)c|Sda>tP6LLrur zG^{?$nriDFy;6<&%oxWhUb*~A%t#AsX})yUz|S9Ep{2WRtDipgey)d2ZBL9cn!Z}wZ|@(< zs*T}@PGaS!y%HPY-I9{I$!nf~kd>0?fmo69eO$oOf7?@nf|?8^|^>OztD z@9+8BhdHSi0PvC1mq7X82ASGzcbz@Hok|HG9gCBl%S%-{E+eUtDn$KP^sGCrWf5HT zs>Xg)qkMp?_7$#)0f5R%L0Xox#CI2nKpGXz7A14z{o5zcqGh58$$$!pv(a+2RD0Qn z(FA~6Lra`?`hITmp7gqq!jsf_?;K&5sgNna@5Q_MQu+vrdtukdPsbW^**A@lO-RSY z!}Kls)!56(4EeU!G!dA>E62{b#lFJWW{qP%*y#eZZ2h@&t85M;4ilLXs5aN z(vU@Prza%EzceYH>D09P>95~8(;k;-M$2iioj;GnbX5nN#%te&tkOMi`Pq27Ye0)t z`+kn_b*lLmX$M1dwtk6B-W2Y@PD{iSx-Ocp?U}-;M(kB}xoLf!WuJ3rs|zd0pTvZ! z6vk|#TehdR6RoC!jYp*2zGCfh{9PyX1PQ3zHgdDrJcygG@hpyRum!RDuuD)nT6FU0 zTcU476(PmXmg~y>nq}G&t#7Fk>{{Y7c!9%u2N* z1e^y&9=x=Tia(4iZ>@cyhMYHmv}9HGd3T=UyF|SZd8I?O3cj2#pUY6wr=p4LSL@6h zrzPDM{{r$;5MQ}b|3b*WAyrrlN{}eIO8Yqu$GQ1RGKn)AfH3wnH6;s4%w8RhYQGBL zGi}Rm>a)(jX7--Fddu^w+ANPg>*y>EaObiou@r!SNR=xnp$2&zuE%+ICfb2sF`cT+ zz0eQvpDA*D#25|Y=QdAS;eOQ!b#Ib>xfx%ySrXL__rJ;_hWC;-=C_F0XpD2| z3#MqF#sz7I*j+vdjhgt)yvoQcD1*@x)4~SIuxs@rIc?v9=}gQmvxK!Ot%`t@=p0n3 zt4*y;@y>*zFEABc73-Hd77lJ#?0!eJGs^h$MDlLUxBr0hdapMbdK;^Mc{Gd|Y8a0TQb`j&5%ScB2A zT2XreUR;Z0W}xvHY$uMbv}!>QaDGE%(Ug~Zoq3@eO+VkXiewp9JVA$y-f>S|)(%@# z>IQBAOA6pLYC&B|3l7tB^a+ag*G<~{1DD(E_BbSJPkjmq5^%uQR_5C@{)Om$+s|&v zTc&XFn;Sf=^n0XJrOi1ZnK$1z7}_ZgtB3??^3)3ALDT%@z7*k7#|ltazKu>+^u;Sh zeClx9;K!!UHb__21tAFa}3>4N=`VohpSTh3THvV)>Fa9k$E`>Pk- zqqIf>)}o7h9_lsyk;cMdqrF~L-GBPArUucgI&N+$$dORF->~{#e~@Y~;&7|m0${gn ztPHb8eNwq_mg>u+K;q=&fO#f3;kwDIXG0IC`{;kYYRy092{e5paEBH_%7T2^{0z~j zg9dKO%m>hNRwj)abzYVzxl%uVF|=K?Z6!$Fr!5n>9bk@Xzad_s(>08kHTSQg-M!`d zBLJ(^u84{GKzHrT50+E}@sF9|5A~3yJ;)RLr%x=J#&-D8E>bjeG_9M@xCY zg+}GwvRTW4ZnvgHF8H;aae)@>1iO!I5JU^|;$kdK7wyaok88 z!Ona;OE$5aKjo+XY2Rt$`owu~HbWM7_A(EI3cK^5W;VGY9aw!>7W?{SS(asDQ1I90 z&omKf+pmO}iJh4kh{LmLym%zReG?{~iEXz2x??lv8B`&N>VZ>#T+?DL+A&^gHZ2rQ zInlkEl_{(>{c^}~32PUZv?DNA;Lyg3*=k+4-wsFsdJI|yM@-CTks4!EyKh=5--tZk z>C0Kee6o#pdcUFgy{cPfx?%LxweR0b?%fU5rEaOOQrP4Q6l#BH%^6bG%I;Q3bKlk0 zuWY?oKp_z3-xFJ7lw2Y)Dlqd!zgO+;yczQ|?YkQtfnn3n^_PnklP9j{uec1ezJe|t zt2=HkF)IcWW;ra_KtA3_;zp(Y>2!uqc59elaEq3ub|w2jz3MsKthnJdKj)@W>C1+` zUB)5C(_NzH6mT)1!7hbj!H%1*H}|7qloVXw&8Ncz+&-BZ^2F@9u?0-r$ z@86VJCuC*k2@tZ*Rmz;2sIpB4cgc1+nGGP_aIwNjwF6wQKigzRL(dpcH}rirhu6cW z&dm`=gqo6>8f4l=q>olsfNev=u zl1if7q683Nx`00h=DPQ`xse=1x(|L16t-RdsJ_-wXQJdMDevV!aaaM@D${@5>#v-A zD77xGBq5~_j2!ew#j^dwX%Zbt23%7_Pt~IFhbo*-Wld(zW{hWw0cB-n=l@#ppJM0j z&J*|=yaE0@J`#eU5^nfIW@g7g5*x`HOifrb;(E;--Pjwl$42}N@V^2-xS`VBb}oiW4V6zaZq zkG=v9U`G_ye?xinK37MTpc~N_m*I!a0g1nn>DN3ZTa)a-7+{T1S>^l>$?;IhIl4ZN z{gNBkB4wYBkeNIVpzD<3zp-5DbNPuyqV0<=PNRfL!K5It5?BkUv{Tiy{SR}54n@@g z_%UkK0VLFl`9#qJBeqY?;)X)OEnq)D+Nd@SVGAv3xHkBqILb z@F{zV-snNJQa0(%*JU{*2T&ZF^>E>fKtWOKC^*XXmx82z!|QCRy?VSKw3cKptprnn zwCq&3(vN4t#}SKm;wOkagmoVdk5?AI@G&a?(_9@)1WJ}7>7{#By)k=Pf1y0|INDvh zH@Ix)XH%)ISjOkJ_mqjL2@b?=> zXa(f*W*cC8rc$``8!PUbQZhHGp}sStpDaViowdLN$#Tq_RUh1a7d#;Uj)Oz0{0Eo> zU^PKLQD`X4Ie+{A#t*G%x+FIk0o!|X(1AoO(>L)nI&o z%kk;GCKRQ;xz&9a0|51WuKi|h#&1O=_9iqmWm)j)8uMb6N`ECj4DDK;&}Cey)U+da zY&Sbb4jJ!ekvSMVN_H?>f&#$hMUCIEOnV%9ZeyZws|oS1b_9aFi=8TJ1;fv3aL37^ zY|OS$bQNDAI$gY|Kjx$8>ffCsbqFQ${0;A9X>9Jj-`FHt`8ZTMi7~F{7i*;NzW%dZ zxFk$EtWSk>xrH5A=p(>F&k7r25|BPdl@k4%;rgK@)rl)ie-vC_3Fsm8j_qY_X>p)&0gS( zR{i+g{Bg@5#qw~Sy^1_`zQ*<+kfLzbV#REAC3@zsuAEtvURT8M$H5rsgJ8WJPstXw zS|kZ99Qu_)05HfRzaV5ojp66di#&N3ek|-U)>2#^1ZS!=2?@?4=~VQ#3Ue<|yxIdy znePG+O!V+`zJfa{G!cx{yyvtJ`{{rU?xRa`qXCrrp}4zg75TV*O9MX_92(7Ydo6fx z4Co+2WBl+4IJgdr<)JegHsqzV{1^OONWY&2%3S;V`Y{0YOuq>ttV_E590ubLq?JH{ zWMJ>XK5*fcFpyIM0Y(IVfr;Y)^u4zmf#E+($WntlC1)FCgo!wprb(Qgp2h;zTxV~@ z0Kw|l%gV{0X2=gN&%DzEb8(54NTrvJ&2rAU|>652k_#$R|`tZ1r;Wcwx$T4t%VIi_W!0F0d`peV=D36Sa)429T%IL$x)( z$gt|8L*uWoY(ENV&<=G{dMTk|;@TO#jgH?;@$C2fT;BF zw?U=N%4KjC?&6=grt!!)q|J4+#y3tdtp^g?xWo(JM60gDTdy@{*YQIB;c`b%;$V$} z84|Io(bB08U8E#cE@awg9Ekdf@{4IoBX5=SX}Bxi5xdkUKMDl6T@rpDEq+m!7F>+$ zfb8qPXTv`Rf;oOJ0f*Cm46l6lUv;YB`ko4xSq%=IaBGj|6OuaXpm>%;va$_yEVQ&r2h^HucDXtf&C_0d!Vbrs@+ z|J93lW>1cN(q>hCXVW|Ko%`)YHahv`!IMR8mM(XP*DwqwEvTIG!$l4JvU)r)gHBo& z{KJWPVRFc0HvOp>egGP9yFREs&C#}TtU$)4?9&Jo#u@_PREz%sPshc(SLHCvDupQn zcL}swU5VnbD|Y2(OvS0nHY*f*jGXL23;Mn}fr%4c_DLSte}G>&UtI%<=AF80)b~UZ ziG{gTaqL^35}<$}#l=^Vz6oRHx?&cS;%7a!w#vx`?)!HCbix>Zy-6~_UjQ}pT^10* z)|MRGL-x~)Q=1NK$gj?Rd*Cv9XCv1d=)#d|!t>ua^k z!y4x(*z5D@_%Nt_ErK803)YlFBD+CV%|YtFD3m)D1!q6$`JGEqu15%vxG;_5UtC47 zZ9`;-JLo$D9Yp$%ewg*U&^3Wy)2Gt=Tby)_U~z|WSq^s2#@^j%5Qt23Q2G zUayQBVz(H`?&-vv;N_}TLDRpOV9}AO2`S>i^TB^T#xD}t97=~daeZuDMG6$TfT~L zewGwtVWS9BCb3CA2`w&$qZMqy`~m_-K$YP=*$mqG?dGpR7WoAI_C4PdaeXZ>zUd-# z-FS=r`<&@?jQ=|C8%6Kp+0}(n(%hB2o{!C;zMar=ceLsf%5`R$GF;6L+&LWnupmC) z(7S`jU86{lr4Blv_2zVyZhsV?PK?aC2)I*V2j5Nij)-VUiR_E$MkrFPRx9MgF;f+D)H`hg@gQUB!XsU5;=L$Lb!1U1wLs=brgfH-9CA=i*^gBb zqS$;_{ASoFx%GlVRJ0lAJP^2B;XrDYdAUcL02dbB_Ufualk)g5Zei57>)6t)Y$qsT zxRylml?OAXdtoAl%~1o}fs39#eQKoJDJw3?E#EFZjXWk|@^3qEyuw70hczK)KeC+# z2)F1vV~Gp6sl_4{_MRS>lEtv*AyCYkRlOA99?iG{I|98xc>@NTpVdmke;dSy!CEG) zz-;~;_TZq4Je|29uxl@?)OXK{kQ}!QwfDZU`oZ0ax3aScmo||lH+0EI>PrZL-+l1^ z?upEs)1D}qdtPLdTnzbZ?78++q)eEFgW+ZkUcu#~IWOZf~1NWR~Dgs~iW-;O#ZmCf(97+CCfm7@9lxuj@txzjPo-w3ZR9YOAb zQQeJ865`tHt^ar1E3K6!h<`o=h?7(EFyt_FbHR^ExRZ{ClU1}CoVRi%tJSfd@q*sp z`~7W09Cj9y$fIq)v~0c`Y2->cjEWO4<{~C7Qm`Yva-nigheZyi9GOgpp(AX->x%Kt zTuwkN_(&gUv=%x#0!NF^w>M-10>6g+5+#(@$`?{f0!0xKIvcb&Lj05c6QR|lAW@gn zWZ7?7mqXkTdSXMv)jK&8j`y9V0*!scj`T}o>s&x4t2>k?pz{NM?Z)eKa0VFwqY zp#u*ul;m*B7CGoXR!x*HE5w%}f z4CsURdBT)kOutgx$bq1My1VazENn321rMZB>xd^qhECvhph{1}zEA{F2ZUh8nh*rK z0v!TgTwB$@Z_pg19pDE`rM z03HnlM+BL$9}L-@n>-UQcl-%bp>kt6c~uP(N4>~aLpJP*#nsoMQxtnraZy{z5Es(~ zVuu|pm%h$FlzpU`dWVnbk6fixVLj+}n{i|iR;T!4d!#uy5EI`YE6Fe<~|T}bCg~j3ZAizCw`hFxAG}~j;J)Orj48@6KXZo>4GbX$+4I9T`j80 zJTg$8*RR4Epd*h!!* zS@%)!Gaf%QZhIdT0&+?M@t=kE$yxv(8|oKZ4}~gF_hG=*Er=~3o+cf)4Dqtu(>;tL z_R_B46@g1sb^L`*90brl#ri9j2~!SvKuynPn(39Ve)H_DT7Rb;?>=~{P}?WtRH=@i zI$Ji6Z2tWgh?6LZgG5bA$76Sh&noIneYp?eVA%YH3((#}=+~1;$LdicSIDYVsti82 zdhDaZaxHru!Ev^6XZx_R_c|Ro!!Hw-#m)->zOZuM9sq!)9{)e>ocU7|c^Zdn99L!K z7-d8ziYz(-0TCU9)i8pB$mN7XP9ZR!KmsU7xDvuDA&3r#M?i##5fE}qBmoj2Bj*?g z144)dkR=EhFo^*q5;?Zp*{Rz77q<4tuIlQp@6lb|@B4h70$5YyjMJ#DUEn3sd8SZX zb~&tREl0!Vf~*~g12TTMS6y=(uCQ%Qo-CRW(VG{COlPHWtt(0*D3eMYN2dn9G(}@B zf^dV>mb2_doK<0Xb6wL}%;mY){WtVK>)PqD=q=+$ME8i5#>M505m-T5>%f{R&>0=S^3lcbEZ_;;sI;S4OGn4v@03)rGtxC#)9`J`JG&-cDKfGCuRF|W4Nst@e*Sc{1(aJe*+sLMw0(a}nxFv~j zi$z5k#w2s~Q-e5d?ZeQ=qx#PBa^OO?;q{30o{v_kPD>f1pB1=Yx3~?1GN#106af{4 zPl!v~BkB_sqdrD}3`_Hqx+SVCNhz~8LLi&YMO<}qUxuYRuLP-KS`2M;-_tcZdvHV9 z#d%o7(%TxLQ?5y5bFMT;FmW&{JV2tH%8jVaEL^Y~Q+J?<`3-L&n zWBG5~Mb6s#%{N3qTC^(3OUi(&pI z2hdX=M*{Mff;T$U2j(6QXZRqZ`=HjgxP?rH;)&&BDog3abTqK(jGUZb!`3~DUDh!-rkS~KAG_jnaYWrEdJ{~w zW5Ls-9Vb47-b_RjKrBs?0{Fm!PBM8xi;$T^g5@&P8`HBG{2aG+cD*4yK$0gZvI1`6 z3;=$zwU1+%2kHE|1;@y3g7aEPV!I8O)zXzI5`=vbp*i@wa%5Gg4k7A7+_hmtpV9$JslN+N^I%cEtFVgU@0QJ%OO*h#w9!yRKRE;qVD zwr-$kdIOUYNA)jeZ!lnj#;eXJ55}&|8aK%pDYIZG%fV-Hba+0;AS<#o_Vu@&^9zxP=aN)03Ez7>a%KAti4-t|DVs&l zI#b1n65q!n%y+9X5A#e zp-Ym?o3ItV0H(e+W;^2a2q!N~<9(UOimnk+x*?B0z74C8IOXDOiHfX_Jh!11(JF6o zECpf_q^ zoD?r}7ycEu@QC!`cFtVyabO4a*6AbPV`}+w^7K;?#8G^xf16^U)Mr*|r!4Ox1yT6B z$;vjAYM;=h?MVmQdO#{~&{GV^4JNhC-K>*M2L+<9_&35q&Ep#1K7!L+E){syMKPm{SNs&+IAu>9I0EM+BZAM|s z&OneQ%~x9tj&O}vAN{amlu>{yJ9GpFBm$5shCUk{@Uj<8BJI@4HizfV0Xo0>zVO=3 zqz^zgsXS}M0cX}*g%+Y>PyBNhU|kyoBAQX*_1#_1|B(uXH3;%Nn$ z_r}O(?g@yDniI%2{*>)I0mO;}0%6MEqHFz|A$M1qTKN4C#`=^Xq0Cd1@NW&B(hPVwFWke^UbZqX(cY6wocEd6Qn3Y1Q#Qgw>VU#( zLL)wpJ&ni=tJ_*6oS;cYOAkb|(IFi77d&Ln_e2p;vEfLfFNcaj#6RU?xXEegjt1vd zw>toukG(uS7k~U0oRNKSnQ{zZJ?6n!W?Cex1 zlC=fkuy!Z=z93TJCTj=6JxJIdTffp`cHj_O97sKsZ24g0qov(el3u%>)4sA=zLymc ztg0e>lOv*gj$5Gsa>$=UKIM6`@kJ$(-X`?a?i)vYesMJ3_Z|$L`3(fP2fr$rIh?x| zTysR1e~WBqN&LA()Q@yIL$#|{yu=?T1-DcX2JlC=YhytVox)xk78FRm!zA00odQ|k zr4p)d=QaLx@9V#P++j)C6vwwayXnOsb&sj78uycmkCtK5oE02$%1k**{5?^g`f8Wq%s;!WO>^*-4E*sfYgf6-XpP^8 zK`Gs$z5h@ZhO=M#??K*SKuf~v2Cv@bS(&E#SHqq`WOkrqQYsg6iX-$U*0O=6c}Goa z+`V7?{FL)BKzmX;qDlE&I>N?)>Pm`#Z8YG!&zv8X zPCTKbmT`bzt_pWEd2KWFYdO{cswbt}#MiuaDQnHC_OHe{_PA~GZuVLU>$7rKZ^%$U zb){=Av{?Cm&sqt}(z6fMU6J>PoU;k=&(-;v90ams%Q0t4sCi5zEnyx&Y5;KcOsNO( z0nXH%ve;diFXe==$ncDib=*DepHu4bsHl8^IP|UhL2v05rprWAXOC5K%`x572*s-^ z+rT7<3qS2nYn@*b{Qi>au?-1&&(!e[n]||!t(e[n],n,e));n-=1);}}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var n;for(n in e)if(hasProp(e,n)&&t(e[n],n))break}function mixin(e,t,n,r){return t&&eachProp(t,function(t,i){!n&&hasProp(e,i)||(!r||"object"!=typeof t||!t||isArray(t)||isFunction(t)||t instanceof RegExp?e[i]=t:(e[i]||(e[i]={}),mixin(e[i],t,n,r)))}),e}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName("script")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split("."),function(e){t=t[e]}),t}function makeError(e,t,n,r){var i=new Error(t+"\nhttp://requirejs.org/docs/errors.html#"+e);return i.requireType=e,i.requireModules=r,n&&(i.originalError=n),i}function newContext(e){function t(e){var t,n;for(t=0;t0&&(e.splice(t-1,2),t-=2)}}function n(e,n,r){var i,a,s,o,l,c,u,p,d,f,h,m,g=n&&n.split("/"),b=k.map,v=b&&b["*"];if(e&&(e=e.split("/"),u=e.length-1,k.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,"")),"."===e[0].charAt(0)&&g&&(m=g.slice(0,g.length-1),e=m.concat(e)),t(e),e=e.join("/")),r&&b&&(g||v)){s=e.split("/");e:for(o=s.length;o>0;o-=1){if(c=s.slice(0,o).join("/"),g)for(l=g.length;l>0;l-=1)if(a=getOwn(b,g.slice(0,l).join("/")),a&&(a=getOwn(a,c))){p=a,d=o;break e}!f&&v&&getOwn(v,c)&&(f=getOwn(v,c),h=o)}!p&&f&&(p=f,d=h),p&&(s.splice(0,d,p),e=s.join("/"))}return i=getOwn(k.pkgs,e),i?i:e}function r(e){isBrowser&&each(scripts(),function(t){if(t.getAttribute("data-requiremodule")===e&&t.getAttribute("data-requirecontext")===w.contextName)return t.parentNode.removeChild(t),!0})}function i(e){var t=getOwn(k.paths,e);if(t&&isArray(t)&&t.length>1)return t.shift(),w.require.undef(e),w.makeRequire(null,{skipMap:!0})([e]),!0}function a(e){var t,n=e?e.indexOf("!"):-1;return n>-1&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function s(e,t,r,i){var s,o,l,c,u=null,p=t?t.name:null,d=e,f=!0,h="";return e||(f=!1,e="_@r"+(D+=1)),c=a(e),u=c[0],e=c[1],u&&(u=n(u,p,i),o=getOwn(N,u)),e&&(u?h=o&&o.normalize?o.normalize(e,function(e){return n(e,p,i)}):e.indexOf("!")===-1?n(e,p,i):e:(h=n(e,p,i),c=a(h),u=c[0],h=c[1],r=!0,s=w.nameToUrl(h))),l=!u||o||r?"":"_unnormalized"+(L+=1),{prefix:u,name:h,parentMap:t,unnormalized:!!l,url:s,originalName:d,isDefine:f,id:(u?u+"!"+h:h)+l}}function o(e){var t=e.id,n=getOwn(E,t);return n||(n=E[t]=new w.Module(e)),n}function l(e,t,n){var r=e.id,i=getOwn(E,r);!hasProp(N,r)||i&&!i.defineEmitComplete?(i=o(e),i.error&&"error"===t?n(i.error):i.on(t,n)):"defined"===t&&n(N[r])}function c(e,t){var n=e.requireModules,r=!1;t?t(e):(each(n,function(t){var n=getOwn(E,t);n&&(n.error=e,n.events.error&&(r=!0,n.emit("error",e)))}),r||req.onError(e))}function u(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];"string"==typeof t&&(w.defQueueMap[t]=!0),C.push(e)}),globalDefQueue=[])}function p(e){delete E[e],delete T[e]}function d(e,t,n){var r=e.map.id;e.error?e.emit("error",e.error):(t[r]=!0,each(e.depMaps,function(r,i){var a=r.id,s=getOwn(E,a);!s||e.depMatched[i]||n[a]||(getOwn(t,a)?(e.defineDep(i,N[a]),e.check()):d(s,t,n))}),n[r]=!0)}function f(){var e,t,n=1e3*k.waitSeconds,a=n&&w.startTime+n<(new Date).getTime(),s=[],o=[],l=!1,u=!0;if(!v){if(v=!0,eachProp(T,function(e){var n=e.map,c=n.id;if(e.enabled&&(n.isDefine||o.push(e),!e.error))if(!e.inited&&a)i(c)?(t=!0,l=!0):(s.push(c),r(c));else if(!e.inited&&e.fetched&&n.isDefine&&(l=!0,!n.prefix))return u=!1}),a&&s.length)return e=makeError("timeout","Load timeout for modules: "+s,null,s),e.contextName=w.contextName,c(e);u&&each(o,function(e){d(e,{},{})}),a&&!t||!l||!isBrowser&&!isWebWorker||_||(_=setTimeout(function(){_=0,f()},50)),v=!1}}function h(e){hasProp(N,e[0])||o(s(e[0],null,!0)).init(e[1],e[2])}function m(e,t,n,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(n,t,!1)}function g(e){var t=e.currentTarget||e.srcElement;return m(t,w.onScriptLoad,"load","onreadystatechange"),m(t,w.onScriptError,"error"),{node:t,id:t&&t.getAttribute("data-requiremodule")}}function b(){var e;for(u();C.length;){if(e=C.shift(),null===e[0])return c(makeError("mismatch","Mismatched anonymous define() module: "+e[e.length-1]));h(e)}w.defQueueMap={}}var v,y,w,x,_,k={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},E={},T={},S={},C=[],N={},R={},A={},D=1,L=1;return x={require:function(e){return e.require?e.require:e.require=w.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?N[e.map.id]=e.exports:e.exports=N[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(k.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},y=function(e){this.events=getOwn(S,e.id)||{},this.map=e,this.shim=getOwn(k.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0},y.prototype={init:function(e,t,n,r){r=r||{},this.inited||(this.factory=t,n?this.on("error",n):this.events.error&&(n=bind(this,function(e){this.emit("error",e)})),this.depMaps=e&&e.slice(0),this.errback=n,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,w.startTime=(new Date).getTime();var e=this.map;return this.shim?void w.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()})):e.prefix?this.callPlugin():this.load()}},load:function(){var e=this.map.url;R[e]||(R[e]=!0,w.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var e,t,n=this.map.id,r=this.depExports,i=this.exports,a=this.factory;if(this.inited){if(this.error)this.emit("error",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(a)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{i=w.execCb(n,a,r,i)}catch(t){e=t}else i=w.execCb(n,a,r,i);if(this.map.isDefine&&void 0===i&&(t=this.module,t?i=t.exports:this.usingExports&&(i=this.exports)),e)return e.requireMap=this.map,e.requireModules=this.map.isDefine?[this.map.id]:null,e.requireType=this.map.isDefine?"define":"require",c(this.error=e)}else i=a;if(this.exports=i,this.map.isDefine&&!this.ignore&&(N[n]=i,req.onResourceLoad)){var s=[];each(this.depMaps,function(e){s.push(e.normalizedMap||e)}),req.onResourceLoad(w,this.map,s)}p(n),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else hasProp(w.defQueueMap,n)||this.fetch()}},callPlugin:function(){var e=this.map,t=e.id,r=s(e.prefix);this.depMaps.push(r),l(r,"defined",bind(this,function(r){var i,a,u,d=getOwn(A,this.map.id),f=this.map.name,h=this.map.parentMap?this.map.parentMap.name:null,m=w.makeRequire(e.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(r.normalize&&(f=r.normalize(f,function(e){return n(e,h,!0)})||""),a=s(e.prefix+"!"+f,this.map.parentMap),l(a,"defined",bind(this,function(e){this.map.normalizedMap=a,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),u=getOwn(E,a.id),void(u&&(this.depMaps.push(a),this.events.error&&u.on("error",bind(this,function(e){this.emit("error",e)})),u.enable()))):d?(this.map.url=w.nameToUrl(d),void this.load()):(i=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})}),i.error=bind(this,function(e){this.inited=!0,this.error=e,e.requireModules=[t],eachProp(E,function(e){0===e.map.id.indexOf(t+"_unnormalized")&&p(e.map.id)}),c(e)}),i.fromText=bind(this,function(n,r){var a=e.name,l=s(a),u=useInteractive;r&&(n=r),u&&(useInteractive=!1),o(l),hasProp(k.config,t)&&(k.config[a]=k.config[t]);try{req.exec(n)}catch(e){return c(makeError("fromtexteval","fromText eval for "+t+" failed: "+e,e,[t]))}u&&(useInteractive=!0),this.depMaps.push(l),w.completeLoad(a),m([a],i)}),void r.load(e.name,m,i,k))})),w.enable(r,this),this.pluginMaps[r.id]=r},enable:function(){T[this.map.id]=this,this.enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var n,r,i;if("string"==typeof e){if(e=s(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,i=getOwn(x,e.id))return void(this.depExports[t]=i(this));this.depCount+=1,l(e,"defined",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?l(e,"error",bind(this,this.errback)):this.events.error&&l(e,"error",bind(this,function(e){this.emit("error",e)}))}n=e.id,r=E[n],hasProp(x,n)||!r||r.enabled||w.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(E,e.id);t&&!t.enabled&&w.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var n=this.events[e];n||(n=this.events[e]=[]),n.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),"error"===e&&delete this.events[e]}},w={config:k,contextName:e,registry:E,defined:N,urlFetched:R,defQueue:C,defQueueMap:{},Module:y,makeModuleMap:s,nextTick:req.nextTick,onError:c,configure:function(e){if(e.baseUrl&&"/"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+="/"),"string"==typeof e.urlArgs){var t=e.urlArgs;e.urlArgs=function(e,n){return(n.indexOf("?")===-1?"?":"&")+t}}var n=k.shim,r={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){r[t]?(k[t]||(k[t]={}),mixin(k[t],e,!0,!0)):k[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(A[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=w.makeShimExports(e)),n[t]=e}),k.shim=n),e.packages&&each(e.packages,function(e){var t,n;e="string"==typeof e?{name:e}:e,n=e.name,t=e.location,t&&(k.paths[n]=e.location),k.pkgs[n]=e.name+"/"+(e.main||"main").replace(currDirRegExp,"").replace(jsSuffixRegExp,"")}),eachProp(E,function(e,t){e.inited||e.map.unnormalized||(e.map=s(t,null,!0))}),(e.deps||e.callback)&&w.require(e.deps||[],e.callback)},makeShimExports:function(e){function t(){var t;return e.init&&(t=e.init.apply(global,arguments)),t||e.exports&&getGlobal(e.exports)}return t},makeRequire:function(t,i){function a(n,r,l){var u,p,d;return i.enableBuildCallback&&r&&isFunction(r)&&(r.__requireJsBuild=!0),"string"==typeof n?isFunction(r)?c(makeError("requireargs","Invalid require call"),l):t&&hasProp(x,n)?x[n](E[t.id]):req.get?req.get(w,n,t,a):(p=s(n,t,!1,!0),u=p.id,hasProp(N,u)?N[u]:c(makeError("notloaded",'Module name "'+u+'" has not been loaded yet for context: '+e+(t?"":". Use require([])")))):(b(),w.nextTick(function(){b(),d=o(s(null,t)),d.skipMap=i.skipMap,d.init(n,r,l,{enabled:!0}),f()}),a)}return i=i||{},mixin(a,{isBrowser:isBrowser,toUrl:function(e){var r,i=e.lastIndexOf("."),a=e.split("/")[0],s="."===a||".."===a;return i!==-1&&(!s||i>1)&&(r=e.substring(i,e.length),e=e.substring(0,i)),w.nameToUrl(n(e,t&&t.id,!0),r,!0)},defined:function(e){return hasProp(N,s(e,t,!1,!0).id)},specified:function(e){return e=s(e,t,!1,!0).id,hasProp(N,e)||hasProp(E,e)}}),t||(a.undef=function(e){u();var n=s(e,t,!0),i=getOwn(E,e);i.undefed=!0,r(e),delete N[e],delete R[n.url],delete S[e],eachReverse(C,function(t,n){t[0]===e&&C.splice(n,1)}),delete w.defQueueMap[e],i&&(i.events.defined&&(S[e]=i.events),p(e))}),a},enable:function(e){var t=getOwn(E,e.id);t&&o(e).enable()},completeLoad:function(e){var t,n,r,a=getOwn(k.shim,e)||{},s=a.exports;for(u();C.length;){if(n=C.shift(),null===n[0]){if(n[0]=e,t)break;t=!0}else n[0]===e&&(t=!0);h(n)}if(w.defQueueMap={},r=getOwn(E,e),!t&&!hasProp(N,e)&&r&&!r.inited){if(!(!k.enforceDefine||s&&getGlobal(s)))return i(e)?void 0:c(makeError("nodefine","No define call for "+e,null,[e]));h([e,a.deps||[],a.exportsFn])}f()},nameToUrl:function(e,t,n){var r,i,a,s,o,l,c,u=getOwn(k.pkgs,e);if(u&&(e=u),c=getOwn(A,e))return w.nameToUrl(c,t,n);if(req.jsExtRegExp.test(e))o=e+(t||"");else{for(r=k.paths,i=e.split("/"),a=i.length;a>0;a-=1)if(s=i.slice(0,a).join("/"),l=getOwn(r,s)){isArray(l)&&(l=l[0]),i.splice(0,a,l);break}o=i.join("/"),o+=t||(/^data\:|^blob\:|\?/.test(o)||n?"":".js"),o=("/"===o.charAt(0)||o.match(/^[\w\+\.\-]+:/)?"":k.baseUrl)+o}return k.urlArgs&&!/^blob\:/.test(o)?o+k.urlArgs(e,o):o},load:function(e,t){req.load(w,e,t)},execCb:function(e,t,n,r){return t.apply(r,n)},onScriptLoad:function(e){if("load"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=g(e);w.completeLoad(t.id)}},onScriptError:function(e){var t=g(e);if(!i(t.id)){var n=[];return eachProp(E,function(e,r){0!==r.indexOf("_@r")&&each(e.depMaps,function(e){if(e.id===t.id)return n.push(r),!0})}),c(makeError("scripterror",'Script error for "'+t.id+(n.length?'", needed by: '+n.join(", "):'"'),e,[t.id]))}}},w.require=w.makeRequire(),w}function getInteractiveScript(){return interactiveScript&&"interactive"===interactiveScript.readyState?interactiveScript:(eachReverse(scripts(),function(e){if("interactive"===e.readyState)return interactiveScript=e}),interactiveScript)}var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version="2.3.2",commentRegExp=/\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/gm,cjsRequireRegExp=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,jsSuffixRegExp=/\.js$/,currDirRegExp=/^\.\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!("undefined"==typeof window||"undefined"==typeof navigator||!window.document),isWebWorker=!isBrowser&&"undefined"!=typeof importScripts,readyRegExp=isBrowser&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;if("undefined"==typeof define){if("undefined"!=typeof requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}"undefined"==typeof require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,n,r){var i,a,s=defContextName;return isArray(e)||"string"==typeof e||(a=e,isArray(t)?(e=t,t=n,n=r):e=[]),a&&a.context&&(s=a.context),i=getOwn(contexts,s),i||(i=contexts[s]=req.s.newContext(s)),a&&i.configure(a),i.require(e,t,n)},req.config=function(e){return req(e)},req.nextTick="undefined"!=typeof setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\/|:|\?|\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each(["toUrl","undef","defined","specified"],function(e){req[e]=function(){var t=contexts[defContextName];return t.require[e].apply(t,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName("head")[0],baseElement=document.getElementsByTagName("base")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,n){var r=e.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");return r.type=e.scriptType||"text/javascript",r.charset="utf-8",r.async=!0,r},req.load=function(e,t,n){var r,i=e&&e.config||{};if(isBrowser)return r=req.createNode(i,t,n),r.setAttribute("data-requirecontext",e.contextName),r.setAttribute("data-requiremodule",t),!r.attachEvent||r.attachEvent.toString&&r.attachEvent.toString().indexOf("[native code")<0||isOpera?(r.addEventListener("load",e.onScriptLoad,!1),r.addEventListener("error",e.onScriptError,!1)):(useInteractive=!0,r.attachEvent("onreadystatechange",e.onScriptLoad)),r.src=n,i.onNodeCreated&&i.onNodeCreated(r,i,t,n),currentlyAddingScript=r,baseElement?head.insertBefore(r,baseElement):head.appendChild(r),currentlyAddingScript=null,r;if(isWebWorker)try{setTimeout(function(){},0),importScripts(n),e.completeLoad(t)}catch(r){e.onError(makeError("importscripts","importScripts failed for "+t+" at "+n,r,[t]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute("data-main"))return mainScript=dataMain,cfg.baseUrl||mainScript.indexOf("!")!==-1||(src=mainScript.split("/"),mainScript=src.pop(),subPath=src.length?src.join("/")+"/":"./",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,""),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,t,n){var r,i;"string"!=typeof e&&(n=t,t=e,e=null),isArray(t)||(n=t,t=null),!t&&isFunction(n)&&(t=[],n.length&&(n.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,n){t.push(n)}),t=(1===n.length?["require"]:["require","exports","module"]).concat(t))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript(),r&&(e||(e=r.getAttribute("data-requiremodule")),i=contexts[r.getAttribute("data-requirecontext")])),i?(i.defQueue.push([e,t,n]),i.defQueueMap[e]=!0):globalDefQueue.push([e,t,n])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}}(this,"undefined"==typeof setTimeout?void 0:setTimeout),define("deps/require",function(){}),function(e){"use strict";function t(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function n(e){return"string"!=typeof e&&(e=String(e)),e}function r(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return m.iterable&&(t[Symbol.iterator]=function(){return t}),t}function i(e){this.map={},e instanceof i?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function a(e){return e.bodyUsed?Promise.reject(new TypeError("Already read")):void(e.bodyUsed=!0)}function s(e){return new Promise(function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}})}function o(e){var t=new FileReader;return t.readAsArrayBuffer(e),s(t)}function l(e){var t=new FileReader;return t.readAsText(e),s(t)}function c(){return this.bodyUsed=!1,this._initBody=function(e){if(this._bodyInit=e,"string"==typeof e)this._bodyText=e;else if(m.blob&&Blob.prototype.isPrototypeOf(e))this._bodyBlob=e;else if(m.formData&&FormData.prototype.isPrototypeOf(e))this._bodyFormData=e;else if(m.searchParams&&URLSearchParams.prototype.isPrototypeOf(e))this._bodyText=e.toString();else if(e){if(!m.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(e))throw new Error("unsupported BodyInit type")}else this._bodyText="";this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):m.searchParams&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},m.blob?(this.blob=function(){var e=a(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this.blob().then(o)},this.text=function(){var e=a(this);if(e)return e;if(this._bodyBlob)return l(this._bodyBlob);if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)}):this.text=function(){var e=a(this);return e?e:Promise.resolve(this._bodyText)},m.formData&&(this.formData=function(){return this.text().then(d)}),this.json=function(){return this.text().then(JSON.parse)},this}function u(e){var t=e.toUpperCase();return g.indexOf(t)>-1?t:e}function p(e,t){t=t||{};var n=t.body;if(p.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new i(e.headers)),this.method=e.method,this.mode=e.mode,n||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new i(t.headers)),this.method=u(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n)}function d(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),i=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(i))}}),t}function f(e){var t=new i,n=(e.getAllResponseHeaders()||"").trim().split("\n");return n.forEach(function(e){var n=e.trim().split(":"),r=n.shift().trim(),i=n.join(":").trim();t.append(r,i)}),t}function h(e,t){t||(t={}),this.type="default",this.status=t.status,this.ok=this.status>=200&&this.status<300,this.statusText=t.statusText,this.headers=t.headers instanceof i?t.headers:new i(t.headers),this.url=t.url||"",this._initBody(e)}if(!e.fetch){var m={searchParams:"URLSearchParams"in e,iterable:"Symbol"in e&&"iterator"in Symbol,blob:"FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in e,arrayBuffer:"ArrayBuffer"in e};i.prototype.append=function(e,r){e=t(e),r=n(r);var i=this.map[e];i||(i=[],this.map[e]=i),i.push(r)},i.prototype.delete=function(e){delete this.map[t(e)]},i.prototype.get=function(e){var n=this.map[t(e)];return n?n[0]:null},i.prototype.getAll=function(e){return this.map[t(e)]||[]},i.prototype.has=function(e){return this.map.hasOwnProperty(t(e))},i.prototype.set=function(e,r){this.map[t(e)]=[n(r)]},i.prototype.forEach=function(e,t){Object.getOwnPropertyNames(this.map).forEach(function(n){this.map[n].forEach(function(r){e.call(t,r,n,this)},this)},this)},i.prototype.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),r(e)},i.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),r(e)},i.prototype.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),r(e)},m.iterable&&(i.prototype[Symbol.iterator]=i.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];p.prototype.clone=function(){return new p(this)},c.call(p.prototype),c.call(h.prototype),h.prototype.clone=function(){return new h(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new i(this.headers),url:this.url})},h.error=function(){var e=new h(null,{status:0,statusText:""});return e.type="error",e};var b=[301,302,303,307,308];h.redirect=function(e,t){if(b.indexOf(t)===-1)throw new RangeError("Invalid status code");return new h(null,{status:t,headers:{location:e}})},e.Headers=i,e.Request=p,e.Response=h,e.fetch=function(e,t){return new Promise(function(n,r){function i(){return"responseURL"in s?s.responseURL:/^X-Request-URL:/m.test(s.getAllResponseHeaders())?s.getResponseHeader("X-Request-URL"):void 0}var a;a=p.prototype.isPrototypeOf(e)&&!t?e:new p(e,t);var s=new XMLHttpRequest;s.onload=function(){var e={status:s.status,statusText:s.statusText,headers:f(s),url:i()},t="response"in s?s.response:s.responseText;n(new h(t,e))},s.onerror=function(){r(new TypeError("Network request failed"))},s.ontimeout=function(){r(new TypeError("Network request failed"))},s.open(a.method,a.url,!0),"include"===a.credentials&&(s.withCredentials=!0),"responseType"in s&&m.blob&&(s.responseType="blob"),a.headers.forEach(function(e,t){s.setRequestHeader(t,e)}),s.send("undefined"==typeof a._bodyInit?null:a._bodyInit)})},e.fetch.polyfill=!0}}("undefined"!=typeof self?self:this),define("deps/fetch",function(){}),function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t){t=t||J;var n=t.createElement("script");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"function"!==n&&!de.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t,n){if(de.isFunction(t))return de.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return de.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(_e.test(t))return de.filter(t,e,n);t=de.filter(t,e)}return de.grep(e,function(e){return ie.call(t,e)>-1!==n&&1===e.nodeType})}function a(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function s(e){var t={};return de.each(e.match(Ne)||[],function(e,n){t[n]=!0}),t}function o(e){return e}function l(e){throw e}function c(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done(t).fail(n):e&&de.isFunction(r=e.then)?r.call(e,t,n):t.call(void 0,e)}catch(e){n.call(void 0,e)}}function u(){J.removeEventListener("DOMContentLoaded",u),e.removeEventListener("load",u),de.ready()}function p(){this.expando=de.expando+p.uid++}function d(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(je,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Ie.test(n)?JSON.parse(n):n)}catch(e){}Oe.set(e,t,n)}else n=void 0;return n}function f(e,t,n,r){var i,a=1,s=20,o=r?function(){return r.cur()}:function(){return de.css(e,t,"")},l=o(),c=n&&n[3]||(de.cssNumber[t]?"":"px"),u=(de.cssNumber[t]||"px"!==c&&+l)&&$e.exec(de.css(e,t));if(u&&u[3]!==c){c=c||u[3],n=n||[],u=+l||1;do a=a||".5",u/=a,de.style(e,t,u+c);while(a!==(a=o()/l)&&1!==a&&--s)}return n&&(u=+u||+l||0,i=n[1]?u+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=u,r.end=i)),i}function h(e){var t,n=e.ownerDocument,r=e.nodeName,i=He[r];return i?i:(t=n.body.appendChild(n.createElement(r)),i=de.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),He[r]=i,i)}function m(e,t){for(var n,r,i=[],a=0,s=e.length;a-1)i&&i.push(a);else if(c=de.contains(a.ownerDocument,a),s=g(p.appendChild(a),"script"),c&&b(s),n)for(u=0;a=s[u++];)We.test(a.type||"")&&n.push(a);return p}function y(){return!0}function w(){return!1}function x(){try{return J.activeElement}catch(e){}}function _(e,t,n,r,i,a){var s,o;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(o in t)_(e,o,n,r,t[o],a);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=w;else if(!i)return e;return 1===a&&(s=i,i=function(e){return de().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=de.guid++)),e.each(function(){de.event.add(this,t,i,r,n)})}function k(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e:e}function E(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function T(e){var t=tt.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function S(e,t){var n,r,i,a,s,o,l,c;if(1===t.nodeType){if(Pe.hasData(e)&&(a=Pe.access(e),s=Pe.set(t,a),c=a.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n1&&"string"==typeof h&&!ue.checkClone&&et.test(h))return e.each(function(n){var a=e.eq(n);m&&(t[0]=h.call(this,n,a.html())),N(a,t,r,i)});if(d&&(a=v(t,e[0].ownerDocument,!1,e,i),s=a.firstChild,1===a.childNodes.length&&(a=s),s||i)){for(o=de.map(g(a,"script"),E),l=o.length;p=0&&nk.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[F]=!0,e}function i(e){var t=P.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function a(e,t){for(var n=e.split("|"),r=n.length;r--;)k.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function o(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return function(t){return"label"in t&&t.disabled===e||"form"in t&&t.disabled===e||"form"in t&&t.disabled===!1&&(t.isDisabled===e||t.isDisabled!==!e&&("label"in t||!Ee(t))!==e)}}function u(e){return r(function(t){return t=+t,r(function(n,r){for(var i,a=e([],n.length,t),s=a.length;s--;)n[i=a[s]]&&(n[i]=!(r[i]=n[i]))})})}function p(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function f(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,n,r){for(var i=0,a=n.length;i-1&&(r[c]=!(s[c]=p))}}else y=b(y===s?y.splice(h,y.length):y),a?a(null,s,y,l):Z.apply(s,y)})}function y(e){for(var t,n,r,i=e.length,a=k.relative[e[0].type],s=a||k.relative[" "],o=a?1:0,l=h(function(e){return e===t},s,!0),c=h(function(e){return ee(t,e)>-1},s,!0),u=[function(e,n,r){var i=!a&&(r||n!==R)||((t=n).nodeType?l(e,n,r):c(e,n,r));return t=null,i}];o1&&m(u),o>1&&f(e.slice(0,o-1).concat({value:" "===e[o-2].type?"*":""})).replace(oe,"$1"),n,o0,a=e.length>0,s=function(r,s,o,l,c){var u,p,d,f=0,h="0",m=r&&[],g=[],v=R,y=r||a&&k.find.TAG("*",c),w=H+=null==v?1:Math.random()||.1,x=y.length;for(c&&(R=s===P||s||c);h!==x&&null!=(u=y[h]);h++){if(a&&u){for(p=0,s||u.ownerDocument===P||(L(u),o=!I);d=e[p++];)if(d(u,s||P,o)){l.push(u);break}c&&(H=w)}i&&((u=!d&&u)&&f--,r&&m.push(u))}if(f+=h,i&&h!==f){for(p=0;d=n[p++];)d(m,g,s,o);if(r){if(f>0)for(;h--;)m[h]||g[h]||(g[h]=Y.call(l));g=b(g)}Z.apply(l,g),c&&!r&&g.length>0&&f+n.length>1&&t.uniqueSort(l)}return c&&(H=w,R=v),m};return i?r(s):s}var x,_,k,E,T,S,C,N,R,A,D,L,P,O,I,j,M,$,B,F="sizzle"+1*new Date,q=e.document,H=0,U=0,K=n(),W=n(),z=n(),V=function(e,t){return e===t&&(D=!0),0},G={}.hasOwnProperty,X=[],Y=X.pop,Q=X.push,Z=X.push,J=X.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),ue=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),pe=new RegExp(ae),de=new RegExp("^"+re+"$"),fe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+ae),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,be=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ve=/[+~]/,ye=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},xe=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,_e=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ke=function(){L()},Ee=h(function(e){return e.disabled===!0},{dir:"parentNode",next:"legend"});try{Z.apply(X=J.call(q.childNodes),q.childNodes),X[q.childNodes.length].nodeType}catch(e){Z={apply:X.length?function(e,t){Q.apply(e,J.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}_=t.support={},T=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},L=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:q;return r!==P&&9===r.nodeType&&r.documentElement?(P=r,O=P.documentElement,I=!T(P),q!==P&&(n=P.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",ke,!1):n.attachEvent&&n.attachEvent("onunload",ke)),_.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),_.getElementsByTagName=i(function(e){return e.appendChild(P.createComment("")),!e.getElementsByTagName("*").length}),_.getElementsByClassName=ge.test(P.getElementsByClassName),_.getById=i(function(e){return O.appendChild(e).id=F,!P.getElementsByName||!P.getElementsByName(F).length}),_.getById?(k.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&I){var n=t.getElementById(e);return n?[n]:[]}},k.filter.ID=function(e){var t=e.replace(ye,we);return function(e){return e.getAttribute("id")===t}}):(delete k.find.ID,k.filter.ID=function(e){var t=e.replace(ye,we);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),k.find.TAG=_.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):_.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,a=t.getElementsByTagName(e);if("*"===e){for(;n=a[i++];)1===n.nodeType&&r.push(n);return r}return a},k.find.CLASS=_.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&I)return t.getElementsByClassName(e)},M=[],j=[],(_.qsa=ge.test(P.querySelectorAll))&&(i(function(e){O.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&j.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||j.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+F+"-]").length||j.push("~="),e.querySelectorAll(":checked").length||j.push(":checked"),e.querySelectorAll("a#"+F+"+*").length||j.push(".#.+[+~]")}),i(function(e){e.innerHTML="";var t=P.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&j.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&j.push(":enabled",":disabled"),O.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&j.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),j.push(",.*:")})),(_.matchesSelector=ge.test($=O.matches||O.webkitMatchesSelector||O.mozMatchesSelector||O.oMatchesSelector||O.msMatchesSelector))&&i(function(e){_.disconnectedMatch=$.call(e,"*"),$.call(e,"[s!='']:x"),M.push("!=",ae)}),j=j.length&&new RegExp(j.join("|")),M=M.length&&new RegExp(M.join("|")),t=ge.test(O.compareDocumentPosition),B=t||ge.test(O.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},V=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!_.sortDetached&&t.compareDocumentPosition(e)===n?e===P||e.ownerDocument===q&&B(q,e)?-1:t===P||t.ownerDocument===q&&B(q,t)?1:A?ee(A,e)-ee(A,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,i=e.parentNode,a=t.parentNode,o=[e],l=[t];if(!i||!a)return e===P?-1:t===P?1:i?-1:a?1:A?ee(A,e)-ee(A,t):0;if(i===a)return s(e,t);for(n=e;n=n.parentNode;)o.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;o[r]===l[r];)r++;return r?s(o[r],l[r]):o[r]===q?-1:l[r]===q?1:0},P):P},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==P&&L(e),n=n.replace(ue,"='$1']"),_.matchesSelector&&I&&!z[n+" "]&&(!M||!M.test(n))&&(!j||!j.test(n)))try{var r=$.call(e,n);if(r||_.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,P,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==P&&L(e),B(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==P&&L(e);var n=k.attrHandle[t.toLowerCase()],r=n&&G.call(k.attrHandle,t.toLowerCase())?n(e,t,!I):void 0;return void 0!==r?r:_.attributes||!I?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(xe,_e)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(D=!_.detectDuplicates,A=!_.sortStable&&e.slice(0),e.sort(V),D){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return A=null,e},E=t.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},k=t.selectors={cacheLength:50,createPseudo:r,match:fe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(ye,we),e[3]=(e[3]||e[4]||e[5]||"").replace(ye,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return fe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&pe.test(n)&&(t=S(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(ye,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=K[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&K(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var a=t.attr(i,e);return null==a?"!="===n:!n||(a+="","="===n?a===r:"!="===n?a!==r:"^="===n?r&&0===a.indexOf(r):"*="===n?r&&a.indexOf(r)>-1:"$="===n?r&&a.slice(-r.length)===r:"~="===n?(" "+a.replace(se," ")+" ").indexOf(r)>-1:"|="===n&&(a===r||a.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var a="nth"!==e.slice(0,3),s="last"!==e.slice(-4),o="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,p,d,f,h,m=a!==s?"nextSibling":"previousSibling",g=t.parentNode,b=o&&t.nodeName.toLowerCase(),v=!l&&!o,y=!1;if(g){if(a){for(;m;){for(d=t;d=d[m];)if(o?d.nodeName.toLowerCase()===b:1===d.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?g.firstChild:g.lastChild],s&&v){for(d=g,p=d[F]||(d[F]={}),u=p[d.uniqueID]||(p[d.uniqueID]={}),c=u[e]||[],f=c[0]===H&&c[1],y=f&&c[2],d=f&&g.childNodes[f];d=++f&&d&&d[m]||(y=f=0)||h.pop();)if(1===d.nodeType&&++y&&d===t){u[e]=[H,f,y];break}}else if(v&&(d=t,p=d[F]||(d[F]={}),u=p[d.uniqueID]||(p[d.uniqueID]={}),c=u[e]||[],f=c[0]===H&&c[1],y=f),y===!1)for(;(d=++f&&d&&d[m]||(y=f=0)||h.pop())&&((o?d.nodeName.toLowerCase()!==b:1!==d.nodeType)||!++y||(v&&(p=d[F]||(d[F]={}),u=p[d.uniqueID]||(p[d.uniqueID]={}),u[e]=[H,y]),d!==t)););return y-=i,y===r||y%r===0&&y/r>=0}}},PSEUDO:function(e,n){var i,a=k.pseudos[e]||k.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return a[F]?a(n):a.length>1?(i=[e,e,"",n],k.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=a(e,n),s=i.length;s--;)r=ee(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return a(e,0,i)}):a}},pseudos:{not:r(function(e){var t=[],n=[],i=C(e.replace(oe,"$1"));return i[F]?r(function(e,t,n,r){for(var a,s=i(e,null,r,[]),o=e.length;o--;)(a=s[o])&&(e[o]=!(t[o]=a))}):function(e,r,a){return t[0]=e,i(t,null,a,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(ye,we),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(ye,we).toLowerCase(),function(t){var n;do if(n=I?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===O},focus:function(e){return e===P.activeElement&&(!P.hasFocus||P.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!k.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:u(function(){return[0]}),last:u(function(e,t){return[t-1]}),eq:u(function(e,t,n){return[n<0?n+t:n]}),even:u(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:u(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(s=a[0]).type&&_.getById&&9===t.nodeType&&I&&k.relative[a[1].type]){if(t=(k.find.ID(s.matches[0].replace(ye,we),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(a.shift().value.length)}for(i=fe.needsContext.test(e)?0:a.length;i--&&(s=a[i],!k.relative[o=s.type]);)if((l=k.find[o])&&(r=l(s.matches[0].replace(ye,we),ve.test(a[0].type)&&p(t.parentNode)||t))){if(a.splice(i,1),e=r.length&&f(a),!e)return Z.apply(n,r),n;break}}return(c||C(e,u))(r,t,!I,n,!t||ve.test(e)&&p(t.parentNode)||t),n},_.sortStable=F.split("").sort(V).join("")===F,_.detectDuplicates=!!D,L(),_.sortDetached=i(function(e){return 1&e.compareDocumentPosition(P.createElement("fieldset"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||a("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),_.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||a("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||a(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);de.find=be,de.expr=be.selectors,de.expr[":"]=de.expr.pseudos,de.uniqueSort=de.unique=be.uniqueSort,de.text=be.getText,de.isXMLDoc=be.isXML,de.contains=be.contains,de.escapeSelector=be.escape;var ve=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&de(e).is(n))break;r.push(e)}return r},ye=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},we=de.expr.match.needsContext,xe=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,_e=/^.[^:#\[\.,]*$/;de.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?de.find.matchesSelector(r,e)?[r]:[]:de.find.matches(e,de.grep(t,function(e){return 1===e.nodeType}))},de.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(de(e).filter(function(){for(t=0;t1?de.uniqueSort(n):n},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&we.test(e)?de(e):e||[],!1).length}});var ke,Ee=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Te=de.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Ee.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof de?t[0]:t,de.merge(this,de.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:J,!0)),xe.test(r[1])&&de.isPlainObject(t))for(r in t)de.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=J.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):de.isFunction(e)?void 0!==n.ready?n.ready(e):e(de):de.makeArray(e,this)};Te.prototype=de.fn,ke=de(J);var Se=/^(?:parents|prev(?:Until|All))/,Ce={children:!0,contents:!0,next:!0,prev:!0};de.fn.extend({has:function(e){var t=de(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&de.find.matchesSelector(n,e))){a.push(n);break}return this.pushStack(a.length>1?de.uniqueSort(a):a)},index:function(e){return e?"string"==typeof e?ie.call(de(e),this[0]):ie.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(de.uniqueSort(de.merge(this.get(),de(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),de.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return ve(e,"parentNode")},parentsUntil:function(e,t,n){return ve(e,"parentNode",n)},next:function(e){return a(e,"nextSibling")},prev:function(e){return a(e,"previousSibling")},nextAll:function(e){return ve(e,"nextSibling")},prevAll:function(e){return ve(e,"previousSibling")},nextUntil:function(e,t,n){return ve(e,"nextSibling",n)},prevUntil:function(e,t,n){return ve(e,"previousSibling",n)},siblings:function(e){return ye((e.parentNode||{}).firstChild,e)},children:function(e){return ye(e.firstChild)},contents:function(e){return e.contentDocument||de.merge([],e.childNodes)}},function(e,t){de.fn[e]=function(n,r){var i=de.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=de.filter(r,i)),this.length>1&&(Ce[e]||de.uniqueSort(i),Se.test(e)&&i.reverse()),this.pushStack(i)}});var Ne=/\S+/g;de.Callbacks=function(e){e="string"==typeof e?s(e):de.extend({},e);var t,n,r,i,a=[],o=[],l=-1,c=function(){for(i=e.once,r=t=!0;o.length;l=-1)for(n=o.shift();++l-1;)a.splice(n,1),n<=l&&l--}),this},has:function(e){return e?de.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return i=o=[],a=n="",this},disabled:function(){return!a},lock:function(){return i=o=[],n||t||(a=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],o.push(n),t||c()),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!r}};return u},de.extend({Deferred:function(t){ +var n=[["notify","progress",de.Callbacks("memory"),de.Callbacks("memory"),2],["resolve","done",de.Callbacks("once memory"),de.Callbacks("once memory"),0,"resolved"],["reject","fail",de.Callbacks("once memory"),de.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return a.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return de.Deferred(function(t){de.each(n,function(n,r){var i=de.isFunction(e[r[4]])&&e[r[4]];a[r[1]](function(){var e=i&&i.apply(this,arguments);e&&de.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function a(t,n,r,i){return function(){var c=this,u=arguments,p=function(){var e,p;if(!(t=s&&(r!==l&&(c=void 0,u=[e]),n.rejectWith(c,u))}};t?d():(de.Deferred.getStackHook&&(d.stackTrace=de.Deferred.getStackHook()),e.setTimeout(d))}}var s=0;return de.Deferred(function(e){n[0][3].add(a(0,e,de.isFunction(i)?i:o,e.notifyWith)),n[1][3].add(a(0,e,de.isFunction(t)?t:o)),n[2][3].add(a(0,e,de.isFunction(r)?r:l))}).promise()},promise:function(e){return null!=e?de.extend(e,i):i}},a={};return de.each(n,function(e,t){var s=t[2],o=t[5];i[t[1]]=s.add,o&&s.add(function(){r=o},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),a[t[0]]=function(){return a[t[0]+"With"](this===a?void 0:this,arguments),this},a[t[0]+"With"]=s.fireWith}),i.promise(a),t&&t.call(a,a),a},when:function(e){var t=arguments.length,n=t,r=Array(n),i=te.call(arguments),a=de.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?te.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&(c(e,a.done(s(n)).resolve,a.reject),"pending"===a.state()||de.isFunction(i[n]&&i[n].then)))return a.then();for(;n--;)c(i[n],s(n),a.reject);return a.promise()}});var Re=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;de.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Re.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},de.readyException=function(t){e.setTimeout(function(){throw t})};var Ae=de.Deferred();de.fn.ready=function(e){return Ae.then(e).catch(function(e){de.readyException(e)}),this},de.extend({isReady:!1,readyWait:1,holdReady:function(e){e?de.readyWait++:de.ready(!0)},ready:function(e){(e===!0?--de.readyWait:de.isReady)||(de.isReady=!0,e!==!0&&--de.readyWait>0||Ae.resolveWith(J,[de]))}}),de.ready.then=Ae.then,"complete"===J.readyState||"loading"!==J.readyState&&!J.documentElement.doScroll?e.setTimeout(de.ready):(J.addEventListener("DOMContentLoaded",u),e.addEventListener("load",u));var De=function(e,t,n,r,i,a,s){var o=0,l=e.length,c=null==n;if("object"===de.type(n)){i=!0;for(o in n)De(e,t,o,n[o],!0,a,s)}else if(void 0!==r&&(i=!0,de.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(de(e),n)})),t))for(;o1,null,!0)},removeData:function(e){return this.each(function(){Oe.remove(this,e)})}}),de.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Pe.get(e,t),n&&(!r||de.isArray(n)?r=Pe.access(e,t,de.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=de.queue(e,t),r=n.length,i=n.shift(),a=de._queueHooks(e,t),s=function(){de.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete a.stop,i.call(e,s,a)),!r&&a&&a.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Pe.get(e,n)||Pe.access(e,n,{empty:de.Callbacks("once memory").add(function(){Pe.remove(e,[t+"queue",n])})})}}),de.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,We=/^$|\/(?:java|ecma)script/i,ze={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ze.optgroup=ze.option,ze.tbody=ze.tfoot=ze.colgroup=ze.caption=ze.thead,ze.th=ze.td;var Ve=/<|&#?\w+;/;!function(){var e=J.createDocumentFragment(),t=e.appendChild(J.createElement("div")),n=J.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),ue.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",ue.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Ge=J.documentElement,Xe=/^key/,Ye=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Qe=/^([^.]*)(?:\.(.+)|)/;de.event={global:{},add:function(e,t,n,r,i){var a,s,o,l,c,u,p,d,f,h,m,g=Pe.get(e);if(g)for(n.handler&&(a=n,n=a.handler,i=a.selector),i&&de.find.matchesSelector(Ge,i),n.guid||(n.guid=de.guid++),(l=g.events)||(l=g.events={}),(s=g.handle)||(s=g.handle=function(t){return"undefined"!=typeof de&&de.event.triggered!==t.type?de.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(Ne)||[""],c=t.length;c--;)o=Qe.exec(t[c])||[],f=m=o[1],h=(o[2]||"").split(".").sort(),f&&(p=de.event.special[f]||{},f=(i?p.delegateType:p.bindType)||f,p=de.event.special[f]||{},u=de.extend({type:f,origType:m,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&de.expr.match.needsContext.test(i),namespace:h.join(".")},a),(d=l[f])||(d=l[f]=[],d.delegateCount=0,p.setup&&p.setup.call(e,r,h,s)!==!1||e.addEventListener&&e.addEventListener(f,s)),p.add&&(p.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,u):d.push(u),de.event.global[f]=!0)},remove:function(e,t,n,r,i){var a,s,o,l,c,u,p,d,f,h,m,g=Pe.hasData(e)&&Pe.get(e);if(g&&(l=g.events)){for(t=(t||"").match(Ne)||[""],c=t.length;c--;)if(o=Qe.exec(t[c])||[],f=m=o[1],h=(o[2]||"").split(".").sort(),f){for(p=de.event.special[f]||{},f=(r?p.delegateType:p.bindType)||f,d=l[f]||[],o=o[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=a=d.length;a--;)u=d[a],!i&&m!==u.origType||n&&n.guid!==u.guid||o&&!o.test(u.namespace)||r&&r!==u.selector&&("**"!==r||!u.selector)||(d.splice(a,1),u.selector&&d.delegateCount--,p.remove&&p.remove.call(e,u));s&&!d.length&&(p.teardown&&p.teardown.call(e,h,g.handle)!==!1||de.removeEvent(e,f,g.handle),delete l[f])}else for(f in l)de.event.remove(e,f+t[c],n,r,!0);de.isEmptyObject(l)&&Pe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,a,s,o=de.event.fix(e),l=new Array(arguments.length),c=(Pe.get(this,"events")||{})[o.type]||[],u=de.event.special[o.type]||{};for(l[0]=o,t=1;t-1:de.find(i,this,null,[l]).length),r[i]&&r.push(a);r.length&&s.push({elem:l,handlers:r})}return o\x20\t\r\n\f]*)[^>]*)\/>/gi,Je=/\s*$/g;de.extend({htmlPrefilter:function(e){return e.replace(Ze,"<$1>")},clone:function(e,t,n){var r,i,a,s,o=e.cloneNode(!0),l=de.contains(e.ownerDocument,e);if(!(ue.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||de.isXMLDoc(e)))for(s=g(o),a=g(e),r=0,i=a.length;r0&&b(s,!l&&g(e,"script")),o},cleanData:function(e){for(var t,n,r,i=de.event.special,a=0;void 0!==(n=e[a]);a++)if(Le(n)){if(t=n[Pe.expando]){if(t.events)for(r in t.events)i[r]?de.event.remove(n,r):de.removeEvent(n,r,t.handle);n[Pe.expando]=void 0}n[Oe.expando]&&(n[Oe.expando]=void 0)}}}),de.fn.extend({detach:function(e){return R(this,e,!0)},remove:function(e){return R(this,e)},text:function(e){return De(this,function(e){return void 0===e?de.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return N(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=k(this,e);t.appendChild(e)}})},prepend:function(){return N(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=k(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return N(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return N(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(de.cleanData(g(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return de.clone(this,e,t)})},html:function(e){return De(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Je.test(e)&&!ze[(Ke.exec(e)||["",""])[1].toLowerCase()]){e=de.htmlPrefilter(e);try{for(;n1)}}),de.Tween=j,j.prototype={constructor:j,init:function(e,t,n,r,i,a){this.elem=e,this.prop=n,this.easing=i||de.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=a||(de.cssNumber[n]?"":"px")},cur:function(){var e=j.propHooks[this.prop];return e&&e.get?e.get(this):j.propHooks._default.get(this)},run:function(e){var t,n=j.propHooks[this.prop];return this.options.duration?this.pos=t=de.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):j.propHooks._default.set(this),this}},j.prototype.init.prototype=j.prototype,j.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=de.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){de.fx.step[e.prop]?de.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[de.cssProps[e.prop]]&&!de.cssHooks[e.prop]?e.elem[e.prop]=e.now:de.style(e.elem,e.prop,e.now+e.unit)}}},j.propHooks.scrollTop=j.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},de.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},de.fx=j.prototype.init,de.fx.step={};var pt,dt,ft=/^(?:toggle|show|hide)$/,ht=/queueHooks$/;de.Animation=de.extend(U,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return f(n.elem,e,$e.exec(t),n),n}]},tweener:function(e,t){de.isFunction(e)?(t=e,e=["*"]):e=e.match(Ne);for(var n,r=0,i=e.length;r1)},removeAttr:function(e){return this.each(function(){de.removeAttr(this,e)})}}),de.extend({attr:function(e,t,n){var r,i,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return"undefined"==typeof e.getAttribute?de.prop(e,t,n):(1===a&&de.isXMLDoc(e)||(i=de.attrHooks[t.toLowerCase()]||(de.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void de.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=de.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!ue.radioValue&&"radio"===t&&de.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(Ne);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),mt={set:function(e,t,n){return t===!1?de.removeAttr(e,n):e.setAttribute(n,n),n}},de.each(de.expr.match.bool.source.match(/\w+/g),function(e,t){var n=gt[t]||de.find.attr;gt[t]=function(e,t,r){var i,a,s=t.toLowerCase();return r||(a=gt[s],gt[s]=i,i=null!=n(e,t,r)?s:null,gt[s]=a),i}});var bt=/^(?:input|select|textarea|button)$/i,vt=/^(?:a|area)$/i;de.fn.extend({prop:function(e,t){return De(this,de.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[de.propFix[e]||e]})}}),de.extend({prop:function(e,t,n){var r,i,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return 1===a&&de.isXMLDoc(e)||(t=de.propFix[t]||t,i=de.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=de.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||vt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),ue.optSelected||(de.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),de.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){de.propFix[this.toLowerCase()]=this});var yt=/[\t\r\n\f]/g;de.fn.extend({addClass:function(e){var t,n,r,i,a,s,o,l=0;if(de.isFunction(e))return this.each(function(t){de(this).addClass(e.call(this,t,K(this)))});if("string"==typeof e&&e)for(t=e.match(Ne)||[];n=this[l++];)if(i=K(n),r=1===n.nodeType&&(" "+i+" ").replace(yt," ")){for(s=0;a=t[s++];)r.indexOf(" "+a+" ")<0&&(r+=a+" ");o=de.trim(r),i!==o&&n.setAttribute("class",o)}return this},removeClass:function(e){var t,n,r,i,a,s,o,l=0;if(de.isFunction(e))return this.each(function(t){de(this).removeClass(e.call(this,t,K(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(Ne)||[];n=this[l++];)if(i=K(n),r=1===n.nodeType&&(" "+i+" ").replace(yt," ")){for(s=0;a=t[s++];)for(;r.indexOf(" "+a+" ")>-1;)r=r.replace(" "+a+" "," ");o=de.trim(r),i!==o&&n.setAttribute("class",o)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):de.isFunction(e)?this.each(function(n){de(this).toggleClass(e.call(this,n,K(this),t),t)}):this.each(function(){var t,r,i,a;if("string"===n)for(r=0,i=de(this),a=e.match(Ne)||[];t=a[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=K(this),t&&Pe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Pe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+K(n)+" ").replace(yt," ").indexOf(t)>-1)return!0;return!1}});var wt=/\r/g,xt=/[\x20\t\r\n\f]+/g;de.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=de.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,de(this).val()):e,null==i?i="":"number"==typeof i?i+="":de.isArray(i)&&(i=de.map(i,function(e){return null==e?"":e+""})),t=de.valHooks[this.type]||de.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=de.valHooks[i.type]||de.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),de.extend({valHooks:{option:{get:function(e){var t=de.find.attr(e,"value");return null!=t?t:de.trim(de.text(e)).replace(xt," ")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,a="select-one"===e.type,s=a?null:[],o=a?i+1:r.length,l=i<0?o:a?i:0;l-1)&&(n=!0);return n||(e.selectedIndex=-1),a}}}}),de.each(["radio","checkbox"],function(){de.valHooks[this]={set:function(e,t){if(de.isArray(t))return e.checked=de.inArray(de(e).val(),t)>-1}},ue.checkOn||(de.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var _t=/^(?:focusinfocus|focusoutblur)$/;de.extend(de.event,{trigger:function(t,n,r,i){var a,s,o,l,c,u,p,d=[r||J],f=oe.call(t,"type")?t.type:t,h=oe.call(t,"namespace")?t.namespace.split("."):[];if(s=o=r=r||J,3!==r.nodeType&&8!==r.nodeType&&!_t.test(f+de.event.triggered)&&(f.indexOf(".")>-1&&(h=f.split("."),f=h.shift(),h.sort()),c=f.indexOf(":")<0&&"on"+f,t=t[de.expando]?t:new de.Event(f,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:de.makeArray(n,[t]),p=de.event.special[f]||{},i||!p.trigger||p.trigger.apply(r,n)!==!1)){if(!i&&!p.noBubble&&!de.isWindow(r)){for(l=p.delegateType||f,_t.test(l+f)||(s=s.parentNode);s;s=s.parentNode)d.push(s),o=s;o===(r.ownerDocument||J)&&d.push(o.defaultView||o.parentWindow||e)}for(a=0;(s=d[a++])&&!t.isPropagationStopped();)t.type=a>1?l:p.bindType||f,u=(Pe.get(s,"events")||{})[t.type]&&Pe.get(s,"handle"),u&&u.apply(s,n),u=c&&s[c],u&&u.apply&&Le(s)&&(t.result=u.apply(s,n),t.result===!1&&t.preventDefault());return t.type=f,i||t.isDefaultPrevented()||p._default&&p._default.apply(d.pop(),n)!==!1||!Le(r)||c&&de.isFunction(r[f])&&!de.isWindow(r)&&(o=r[c], +o&&(r[c]=null),de.event.triggered=f,r[f](),de.event.triggered=void 0,o&&(r[c]=o)),t.result}},simulate:function(e,t,n){var r=de.extend(new de.Event,n,{type:e,isSimulated:!0});de.event.trigger(r,null,t)}}),de.fn.extend({trigger:function(e,t){return this.each(function(){de.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return de.event.trigger(e,t,n,!0)}}),de.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){de.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),de.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ue.focusin="onfocusin"in e,ue.focusin||de.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){de.event.simulate(t,e.target,de.event.fix(e))};de.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=Pe.access(r,t);i||r.addEventListener(e,n,!0),Pe.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Pe.access(r,t)-1;i?Pe.access(r,t,i):(r.removeEventListener(e,n,!0),Pe.remove(r,t))}}});var kt=e.location,Et=de.now(),Tt=/\?/;de.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||de.error("Invalid XML: "+t),n};var St=/\[\]$/,Ct=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,Rt=/^(?:input|select|textarea|keygen)/i;de.param=function(e,t){var n,r=[],i=function(e,t){var n=de.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(de.isArray(e)||e.jquery&&!de.isPlainObject(e))de.each(e,function(){i(this.name,this.value)});else for(n in e)W(n,e[n],t,i);return r.join("&")},de.fn.extend({serialize:function(){return de.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=de.prop(this,"elements");return e?de.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!de(this).is(":disabled")&&Rt.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!Ue.test(e))}).map(function(e,t){var n=de(this).val();return null==n?null:de.isArray(n)?de.map(n,function(e){return{name:t.name,value:e.replace(Ct,"\r\n")}}):{name:t.name,value:n.replace(Ct,"\r\n")}}).get()}});var At=/%20/g,Dt=/#.*$/,Lt=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,It=/^(?:GET|HEAD)$/,jt=/^\/\//,Mt={},$t={},Bt="*/".concat("*"),Ft=J.createElement("a");Ft.href=kt.href,de.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:kt.href,type:"GET",isLocal:Ot.test(kt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Bt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":de.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?G(G(e,de.ajaxSettings),t):G(de.ajaxSettings,e)},ajaxPrefilter:z(Mt),ajaxTransport:z($t),ajax:function(t,n){function r(t,n,r,o){var c,d,f,w,x,_=n;u||(u=!0,l&&e.clearTimeout(l),i=void 0,s=o||"",k.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(w=X(h,k,r)),w=Y(h,w,k,c),c?(h.ifModified&&(x=k.getResponseHeader("Last-Modified"),x&&(de.lastModified[a]=x),x=k.getResponseHeader("etag"),x&&(de.etag[a]=x)),204===t||"HEAD"===h.type?_="nocontent":304===t?_="notmodified":(_=w.state,d=w.data,f=w.error,c=!f)):(f=_,!t&&_||(_="error",t<0&&(t=0))),k.status=t,k.statusText=(n||_)+"",c?b.resolveWith(m,[d,_,k]):b.rejectWith(m,[k,_,f]),k.statusCode(y),y=void 0,p&&g.trigger(c?"ajaxSuccess":"ajaxError",[k,h,c?d:f]),v.fireWith(m,[k,_]),p&&(g.trigger("ajaxComplete",[k,h]),--de.active||de.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,a,s,o,l,c,u,p,d,f,h=de.ajaxSetup({},n),m=h.context||h,g=h.context&&(m.nodeType||m.jquery)?de(m):de.event,b=de.Deferred(),v=de.Callbacks("once memory"),y=h.statusCode||{},w={},x={},_="canceled",k={readyState:0,getResponseHeader:function(e){var t;if(u){if(!o)for(o={};t=Pt.exec(s);)o[t[1].toLowerCase()]=t[2];t=o[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return u?s:null},setRequestHeader:function(e,t){return null==u&&(e=x[e.toLowerCase()]=x[e.toLowerCase()]||e,w[e]=t),this},overrideMimeType:function(e){return null==u&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(u)k.always(e[k.status]);else for(t in e)y[t]=[y[t],e[t]];return this},abort:function(e){var t=e||_;return i&&i.abort(t),r(0,t),this}};if(b.promise(k),h.url=((t||h.url||kt.href)+"").replace(jt,kt.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(Ne)||[""],null==h.crossDomain){c=J.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Ft.protocol+"//"+Ft.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=de.param(h.data,h.traditional)),V(Mt,h,n,k),u)return k;p=de.event&&h.global,p&&0===de.active++&&de.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!It.test(h.type),a=h.url.replace(Dt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(At,"+")):(f=h.url.slice(a.length),h.data&&(a+=(Tt.test(a)?"&":"?")+h.data,delete h.data),h.cache===!1&&(a=a.replace(Lt,""),f=(Tt.test(a)?"&":"?")+"_="+Et++ +f),h.url=a+f),h.ifModified&&(de.lastModified[a]&&k.setRequestHeader("If-Modified-Since",de.lastModified[a]),de.etag[a]&&k.setRequestHeader("If-None-Match",de.etag[a])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&k.setRequestHeader("Content-Type",h.contentType),k.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Bt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)k.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(h.beforeSend.call(m,k,h)===!1||u))return k.abort();if(_="abort",v.add(h.complete),k.done(h.success),k.fail(h.error),i=V($t,h,n,k)){if(k.readyState=1,p&&g.trigger("ajaxSend",[k,h]),u)return k;h.async&&h.timeout>0&&(l=e.setTimeout(function(){k.abort("timeout")},h.timeout));try{u=!1,i.send(w,r)}catch(e){if(u)throw e;r(-1,e)}}else r(-1,"No Transport");return k},getJSON:function(e,t,n){return de.get(e,t,n,"json")},getScript:function(e,t){return de.get(e,void 0,t,"script")}}),de.each(["get","post"],function(e,t){de[t]=function(e,n,r,i){return de.isFunction(n)&&(i=i||r,r=n,n=void 0),de.ajax(de.extend({url:e,type:t,dataType:i,data:n,success:r},de.isPlainObject(e)&&e))}}),de._evalUrl=function(e){return de.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},de.fn.extend({wrapAll:function(e){var t;return this[0]&&(de.isFunction(e)&&(e=e.call(this[0])),t=de(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return de.isFunction(e)?this.each(function(t){de(this).wrapInner(e.call(this,t))}):this.each(function(){var t=de(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=de.isFunction(e);return this.each(function(n){de(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){de(this).replaceWith(this.childNodes)}),this}}),de.expr.pseudos.hidden=function(e){return!de.expr.pseudos.visible(e)},de.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},de.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var qt={0:200,1223:204},Ht=de.ajaxSettings.xhr();ue.cors=!!Ht&&"withCredentials"in Ht,ue.ajax=Ht=!!Ht,de.ajaxTransport(function(t){var n,r;if(ue.cors||Ht&&!t.crossDomain)return{send:function(i,a){var s,o=t.xhr();if(o.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)o[s]=t.xhrFields[s];t.mimeType&&o.overrideMimeType&&o.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(s in i)o.setRequestHeader(s,i[s]);n=function(e){return function(){n&&(n=r=o.onload=o.onerror=o.onabort=o.onreadystatechange=null,"abort"===e?o.abort():"error"===e?"number"!=typeof o.status?a(0,"error"):a(o.status,o.statusText):a(qt[o.status]||o.status,o.statusText,"text"!==(o.responseType||"text")||"string"!=typeof o.responseText?{binary:o.response}:{text:o.responseText},o.getAllResponseHeaders()))}},o.onload=n(),r=o.onerror=n("error"),void 0!==o.onabort?o.onabort=r:o.onreadystatechange=function(){4===o.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{o.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),de.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),de.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return de.globalEval(e),e}}}),de.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),de.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=de("",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"meta",variants:[{begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?\w+/,end:/\?>/}]},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},n]}]}}),e.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0},{className:"bullet",begin:"^([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"quote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"^```w*s*$",end:"^```s*$"},{begin:"`.+?`"},{begin:"^( {4}|\t)",end:"$",relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}),e.registerLanguage("xquery",function(e){var t="for let if while then else return where group by xquery encoding versionmodule namespace boundary-space preserve strip default collation base-uri orderingcopy-namespaces order declare import schema namespace function option in allowing emptyat tumbling window sliding window start when only end when previous next stable ascendingdescending empty greatest least some every satisfies switch case typeswitch try catch andor to union intersect instance of treat as castable cast map array delete insert intoreplace value rename copy modify update",n="false true xs:string xs:integer element item xs:date xs:datetime xs:float xs:double xs:decimal QName xs:anyURI xs:long xs:int xs:short xs:byte attribute",r={begin:/\$[a-zA-Z0-9\-]+/},i={className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},a={className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},s={className:"meta",begin:"%\\w+"},o={className:"comment",begin:"\\(:",end:":\\)",relevance:10,contains:[{className:"doctag",begin:"@\\w+"}]},l={begin:"{",end:"}"},c=[r,a,i,o,s,l];return l.contains=c,{aliases:["xpath","xq"],case_insensitive:!1,lexemes:/[a-zA-Z\$][a-zA-Z0-9_:\-]*/,illegal:/(proc)|(abstract)|(extends)|(until)|(#)/,keywords:{keyword:t,literal:n},contains:c}}),e}),Object.values||(Object.values=function(e){if(e!==Object(e))throw new TypeError("Object.values called on a non-object");var t,n=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.push(e[t]);return n}),function(){function e(e,t){function n(e,t){for(var n=0;nn&&(n=e.line_indent_level));var r={mode:t,parent:e,last_text:e?e.last_text:"",last_word:e?e.last_word:"",declaration_statement:!1,declaration_assignment:!1,multiline_frame:!1,inline_frame:!1,if_block:!1,else_block:!1,do_block:!1,do_while:!1,import_block:!1,in_case_statement:!1,in_case:!1,case_body:!1,indentation_level:n,line_indent_level:e?e.line_indent_level:n,start_line_index:z.get_line_number(),ternary_depth:0};return r}function o(e){var t=e.newlines,n=ie.keep_array_indentation&&_(J.mode);if(n)for(var r=0;r0);else if(ie.max_preserve_newlines&&t>ie.max_preserve_newlines&&(t=ie.max_preserve_newlines),ie.preserve_newlines&&e.newlines>1){g();for(var i=1;i=ie.wrap_line_length&&g(!1,!0)}}}function g(e,t){if(!t&&";"!==J.last_text&&","!==J.last_text&&"="!==J.last_text&&"TK_OPERATOR"!==Y)for(;J.mode===f.Statement&&!J.if_block&&!J.do_block;)E();z.add_new_line(e)&&(J.multiline_frame=!0)}function b(){z.just_added_newline()&&(ie.keep_array_indentation&&_(J.mode)&&X.wanted_newline?(z.current_line.push(X.whitespace_before),z.space_before_token=!1):z.set_indent(J.indentation_level)&&(J.line_indent_level=J.indentation_level))}function v(e){if(z.raw)return void z.add_raw_token(X);if(ie.comma_first&&"TK_COMMA"===Y&&z.just_added_newline()&&","===z.previous_line.last()){var t=z.previous_line.pop();z.previous_line.is_empty()&&(z.previous_line.push(t),z.trim(!0),z.current_line.pop(),z.trim()),b(),z.add_token(","),z.space_before_token=!0}e=e||X.text,b(),z.add_token(e)}function y(){J.indentation_level+=1}function w(){J.indentation_level>0&&(!J.parent||J.indentation_level>J.parent.indentation_level)&&(J.indentation_level-=1)}function x(e){J?(te.push(J),ee=J):ee=s(null,e),J=s(ee,e)}function _(e){return e===f.ArrayLiteral}function k(e){return n(e,[f.Expression,f.ForInitializer,f.Conditional])}function E(){te.length>0&&(ee=J,J=te.pop(),ee.mode===f.Statement&&z.remove_redundant_indentation(ee))}function T(){return J.parent.mode===f.ObjectLiteral&&J.mode===f.Statement&&(":"===J.last_text&&0===J.ternary_depth||"TK_RESERVED"===Y&&n(J.last_text,["get","set"]))}function S(){return!!("TK_RESERVED"===Y&&n(J.last_text,["var","let","const"])&&"TK_WORD"===X.type||"TK_RESERVED"===Y&&"do"===J.last_text||"TK_RESERVED"===Y&&n(J.last_text,["return","throw"])&&!X.wanted_newline||"TK_RESERVED"===Y&&"else"===J.last_text&&("TK_RESERVED"!==X.type||"if"!==X.text)||"TK_END_EXPR"===Y&&(ee.mode===f.ForInitializer||ee.mode===f.Conditional)||"TK_WORD"===Y&&J.mode===f.BlockStatement&&!J.in_case&&"--"!==X.text&&"++"!==X.text&&"function"!==Q&&"TK_WORD"!==X.type&&"TK_RESERVED"!==X.type||J.mode===f.ObjectLiteral&&(":"===J.last_text&&0===J.ternary_depth||"TK_RESERVED"===Y&&n(J.last_text,["get","set"])))&&(x(f.Statement),y(),"TK_RESERVED"===Y&&n(J.last_text,["var","let","const"])&&"TK_WORD"===X.type&&(J.declaration_statement=!0),T()||m("TK_RESERVED"===X.type&&n(X.text,["do","for","if","while"])),!0)}function C(e,t){for(var n=0;n=ae.length?null:ae[t]}function D(){S();var e=f.Expression;if("["===X.text){if("TK_WORD"===Y||")"===J.last_text)return"TK_RESERVED"===Y&&n(J.last_text,G.line_starters)&&(z.space_before_token=!0),x(e),v(),y(),void(ie.space_in_paren&&(z.space_before_token=!0));e=f.ArrayLiteral,_(J.mode)&&("["!==J.last_text&&(","!==J.last_text||"]"!==Q&&"}"!==Q)||ie.keep_array_indentation||g())}else"TK_RESERVED"===Y&&"for"===J.last_text?e=f.ForInitializer:"TK_RESERVED"===Y&&n(J.last_text,["if","while"])&&(e=f.Conditional);";"===J.last_text||"TK_START_BLOCK"===Y?g():"TK_END_EXPR"===Y||"TK_START_EXPR"===Y||"TK_END_BLOCK"===Y||"."===J.last_text?m(X.wanted_newline):"TK_RESERVED"===Y&&"("===X.text||"TK_WORD"===Y||"TK_OPERATOR"===Y?"TK_RESERVED"===Y&&("function"===J.last_word||"typeof"===J.last_word)||"*"===J.last_text&&(n(Q,["function","yield"])||J.mode===f.ObjectLiteral&&n(Q,["{",","]))?ie.space_after_anon_function&&(z.space_before_token=!0):"TK_RESERVED"!==Y||!n(J.last_text,G.line_starters)&&"catch"!==J.last_text||ie.space_before_conditional&&(z.space_before_token=!0):z.space_before_token=!0,"("===X.text&&"TK_RESERVED"===Y&&"await"===J.last_word&&(z.space_before_token=!0),"("===X.text&&("TK_EQUALS"!==Y&&"TK_OPERATOR"!==Y||T()||m()),"("===X.text&&"TK_WORD"!==Y&&"TK_RESERVED"!==Y&&m(),x(e),v(),ie.space_in_paren&&(z.space_before_token=!0),y()}function L(){for(;J.mode===f.Statement;)E();J.multiline_frame&&m("]"===X.text&&_(J.mode)&&!ie.keep_array_indentation),ie.space_in_paren&&("TK_START_EXPR"!==Y||ie.space_in_empty_paren?z.space_before_token=!0:(z.trim(),z.space_before_token=!1)),"]"===X.text&&ie.keep_array_indentation?(v(),E()):(E(),v()),z.remove_redundant_indentation(ee),J.do_while&&ee.mode===f.Conditional&&(ee.mode=f.Expression,J.do_block=!1,J.do_while=!1)}function P(){var e=A(1),t=A(2);x(t&&(n(t.text,[":",","])&&n(e.type,["TK_STRING","TK_WORD","TK_RESERVED"])||n(e.text,["get","set"])&&n(t.type,["TK_WORD","TK_RESERVED"]))?n(Q,["class","interface"])?f.BlockStatement:f.ObjectLiteral:"TK_OPERATOR"===Y&&"=>"===J.last_text?f.BlockStatement:n(Y,["TK_EQUALS","TK_START_EXPR","TK_COMMA","TK_OPERATOR"])||"TK_RESERVED"===Y&&n(J.last_text,["return","throw","import","default"])?f.ObjectLiteral:f.BlockStatement);var r=!e.comments_before.length&&"}"===e.text,i=r&&"function"===J.last_word&&"TK_END_EXPR"===Y;if("expand"===ie.brace_style||"none"===ie.brace_style&&X.wanted_newline)"TK_OPERATOR"!==Y&&(i||"TK_EQUALS"===Y||"TK_RESERVED"===Y&&R(J.last_text)&&"else"!==J.last_text)?z.space_before_token=!0:g(!1,!0);else{if("collapse-preserve-inline"===ie.brace_style){var a=0,s=null;J.inline_frame=!0;do if(a+=1,s=A(a),s.wanted_newline){J.inline_frame=!1;break}while("TK_EOF"!==s.type&&("TK_END_BLOCK"!==s.type||s.opened!==X))}!_(ee.mode)||"TK_START_EXPR"!==Y&&"TK_COMMA"!==Y?"TK_OPERATOR"!==Y&&"TK_START_EXPR"!==Y&&("TK_START_BLOCK"===Y?g():z.space_before_token=!0):(("TK_COMMA"===Y||ie.space_in_paren)&&(z.space_before_token=!0),"collapse-preserve-inline"===ie.brace_style&&("TK_COMMA"===Y||"TK_START_EXPR"===Y&&J.inline_frame)&&(m(),ee.multiline_frame=ee.multiline_frame||J.multiline_frame,J.multiline_frame=!1))}v(),y()}function O(){for(;J.mode===f.Statement;)E();var e="TK_START_BLOCK"===Y;"expand"===ie.brace_style?e||g():e||(J.inline_frame?z.space_before_token=!0:_(J.mode)&&ie.keep_array_indentation?(ie.keep_array_indentation=!1,g(),ie.keep_array_indentation=!0):g()),E(),v()}function I(){if("TK_RESERVED"===X.type)if(n(X.text,["set","get"])&&J.mode!==f.ObjectLiteral)X.type="TK_WORD";else if(n(X.text,["as","from"])&&!J.import_block)X.type="TK_WORD";else if(J.mode===f.ObjectLiteral){var e=A(1);":"===e.text&&(X.type="TK_WORD")}if(S()||!X.wanted_newline||k(J.mode)||"TK_OPERATOR"===Y&&"--"!==J.last_text&&"++"!==J.last_text||"TK_EQUALS"===Y||!ie.preserve_newlines&&"TK_RESERVED"===Y&&n(J.last_text,["var","let","const","set","get"])||g(),J.do_block&&!J.do_while){if("TK_RESERVED"===X.type&&"while"===X.text)return z.space_before_token=!0,v(),z.space_before_token=!0,void(J.do_while=!0);g(),J.do_block=!1}if(J.if_block)if(J.else_block||"TK_RESERVED"!==X.type||"else"!==X.text){for(;J.mode===f.Statement;)E();J.if_block=!1,J.else_block=!1}else J.else_block=!0;if("TK_RESERVED"===X.type&&("case"===X.text||"default"===X.text&&J.in_case_statement))return g(),(J.case_body||ie.jslint_happy)&&(w(),J.case_body=!1),v(),J.in_case=!0,void(J.in_case_statement=!0);if("TK_RESERVED"===X.type&&"function"===X.text&&((n(J.last_text,["}",";"])||z.just_added_newline()&&!n(J.last_text,["[","{",":","=",","]))&&(z.just_added_blankline()||X.comments_before.length||(g(),g(!0))),"TK_RESERVED"===Y||"TK_WORD"===Y?"TK_RESERVED"===Y&&n(J.last_text,["get","set","new","return","export","async"])?z.space_before_token=!0:"TK_RESERVED"===Y&&"default"===J.last_text&&"export"===Q?z.space_before_token=!0:g():"TK_OPERATOR"===Y||"="===J.last_text?z.space_before_token=!0:(J.multiline_frame||!k(J.mode)&&!_(J.mode))&&g()),"TK_COMMA"!==Y&&"TK_START_EXPR"!==Y&&"TK_EQUALS"!==Y&&"TK_OPERATOR"!==Y||T()||m(),"TK_RESERVED"===X.type&&n(X.text,["function","get","set"]))return v(),void(J.last_word=X.text);if(ne="NONE","TK_END_BLOCK"===Y?"TK_RESERVED"===X.type&&n(X.text,["else","catch","finally","from"])?"expand"===ie.brace_style||"end-expand"===ie.brace_style||"none"===ie.brace_style&&X.wanted_newline?ne="NEWLINE":(ne="SPACE",z.space_before_token=!0):ne="NEWLINE":"TK_SEMICOLON"===Y&&J.mode===f.BlockStatement?ne="NEWLINE":"TK_SEMICOLON"===Y&&k(J.mode)?ne="SPACE":"TK_STRING"===Y?ne="NEWLINE":"TK_RESERVED"===Y||"TK_WORD"===Y||"*"===J.last_text&&(n(Q,["function","yield"])||J.mode===f.ObjectLiteral&&n(Q,["{",","]))?ne="SPACE":"TK_START_BLOCK"===Y?ne=J.inline_frame?"SPACE":"NEWLINE":"TK_END_EXPR"===Y&&(z.space_before_token=!0,ne="NEWLINE"),"TK_RESERVED"===X.type&&n(X.text,G.line_starters)&&")"!==J.last_text&&(ne=J.inline_frame||"else"===J.last_text||"export"===J.last_text?"SPACE":"NEWLINE"),"TK_RESERVED"===X.type&&n(X.text,["else","catch","finally"]))if("TK_END_BLOCK"!==Y||ee.mode!==f.BlockStatement||"expand"===ie.brace_style||"end-expand"===ie.brace_style||"none"===ie.brace_style&&X.wanted_newline)g();else{z.trim(!0);var t=z.current_line;"}"!==t.last()&&g(),z.space_before_token=!0}else"NEWLINE"===ne?"TK_RESERVED"===Y&&R(J.last_text)?z.space_before_token=!0:"TK_END_EXPR"!==Y?"TK_START_EXPR"===Y&&"TK_RESERVED"===X.type&&n(X.text,["var","let","const"])||":"===J.last_text||("TK_RESERVED"===X.type&&"if"===X.text&&"else"===J.last_text?z.space_before_token=!0:g()):"TK_RESERVED"===X.type&&n(X.text,G.line_starters)&&")"!==J.last_text&&g():J.multiline_frame&&_(J.mode)&&","===J.last_text&&"}"===Q?g():"SPACE"===ne&&(z.space_before_token=!0);v(),J.last_word=X.text,"TK_RESERVED"===X.type&&("do"===X.text?J.do_block=!0:"if"===X.text?J.if_block=!0:"import"===X.text?J.import_block=!0:J.import_block&&"TK_RESERVED"===X.type&&"from"===X.text&&(J.import_block=!1))}function j(){for(S()&&(z.space_before_token=!1);J.mode===f.Statement&&!J.if_block&&!J.do_block;)E();J.import_block&&(J.import_block=!1),v()}function M(){S()?z.space_before_token=!0:"TK_RESERVED"===Y||"TK_WORD"===Y||J.inline_frame?z.space_before_token=!0:"TK_COMMA"===Y||"TK_START_EXPR"===Y||"TK_EQUALS"===Y||"TK_OPERATOR"===Y?T()||m():g(),v()}function $(){S(),J.declaration_statement&&(J.declaration_assignment=!0),z.space_before_token=!0,v(),z.space_before_token=!0}function B(){v(),z.space_before_token=!0,J.declaration_statement?(k(J.parent.mode)&&(J.declaration_assignment=!1),J.declaration_assignment?(J.declaration_assignment=!1,g(!1,!0)):ie.comma_first&&m()):J.mode===f.ObjectLiteral||J.mode===f.Statement&&J.parent.mode===f.ObjectLiteral?(J.mode===f.Statement&&E(),J.inline_frame||g()):ie.comma_first&&m()}function F(){if(S(),"TK_RESERVED"===Y&&R(J.last_text))return z.space_before_token=!0,void v();if("*"===X.text&&"TK_DOT"===Y)return void v();if("::"===X.text)return void v();if("TK_OPERATOR"===Y&&n(ie.operator_position,d)&&m(),":"===X.text&&J.in_case)return J.case_body=!0,y(),v(),g(),void(J.in_case=!1);var e=!0,t=!0,r=!1,i="*"===X.text&&("TK_RESERVED"===Y&&n(J.last_text,["function","yield"])||J.mode===f.ObjectLiteral&&n(Y,["TK_START_BLOCK","TK_COMMA"])),a=n(X.text,["-","+"])&&(n(Y,["TK_START_BLOCK","TK_START_EXPR","TK_EQUALS","TK_OPERATOR"])||n(J.last_text,G.line_starters)||","===J.last_text);if(":"===X.text?0===J.ternary_depth?e=!1:(J.ternary_depth-=1,r=!0):"?"===X.text&&(J.ternary_depth+=1),!a&&!i&&ie.preserve_newlines&&n(X.text,G.positionable_operators)){var s=":"===X.text,o=s&&r,l=s&&!r;switch(ie.operator_position){case p.before_newline:return z.space_before_token=!l,v(),s&&!o||m(),void(z.space_before_token=!0);case p.after_newline:return z.space_before_token=!0,!s||o?A(1).wanted_newline?g(!1,!0):m():z.space_before_token=!1,v(),void(z.space_before_token=!0);case p.preserve_newline:return l||m(),e=!(z.just_added_newline()||l),z.space_before_token=e,v(),void(z.space_before_token=!0)}}n(X.text,["--","++","!","~"])||a?(e=!1,t=!1,!X.wanted_newline||"--"!==X.text&&"++"!==X.text||g(!1,!0),";"===J.last_text&&k(J.mode)&&(e=!0),"TK_RESERVED"===Y?e=!0:"TK_END_EXPR"===Y?e=!("]"===J.last_text&&("--"===X.text||"++"===X.text)):"TK_OPERATOR"===Y&&(e=n(X.text,["--","-","++","+"])&&n(J.last_text,["--","-","++","+"]),n(X.text,["+","-"])&&n(J.last_text,["--","++"])&&(t=!0)),(J.mode!==f.BlockStatement||J.inline_frame)&&J.mode!==f.Statement||"{"!==J.last_text&&";"!==J.last_text||g()):i&&(m(),e=!1,t=!1),z.space_before_token=z.space_before_token||e,v(),z.space_before_token=t}function q(){if(z.raw)return z.add_raw_token(X),void(X.directives&&"end"===X.directives.preserve&&(z.raw=ie.test_output_raw));if(X.directives)return g(!1,!0),v(),"start"===X.directives.preserve&&(z.raw=!0),void g(!1,!0);if(!u.newline.test(X.text)&&!X.wanted_newline)return z.space_before_token=!0,v(),void(z.space_before_token=!0);var e,t=h(X.text),n=!1,r=!1,a=X.whitespace_before,s=a.length;for(g(!1,!0),t.length>1&&(n=C(t.slice(1),"*"),r=N(t.slice(1),a)),v(t[0]),e=1;es?v(t[e].substring(s)):z.add_token(t[e]);g(!1,!0)}function H(){X.wanted_newline?g(!1,!0):z.trim(!0),z.space_before_token=!0,v(),g(!1,!0)}function U(){S(),"TK_RESERVED"===Y&&R(J.last_text)?z.space_before_token=!0:m(")"===J.last_text&&ie.break_chained_methods),v()}function K(){v(),"\n"===X.text[X.text.length-1]&&g()}function W(){for(;J.mode===f.Statement;)E()}var z,V,G,X,Y,Q,Z,J,ee,te,ne,re,ie,ae=[],se="";for(re={TK_START_EXPR:D,TK_END_EXPR:L,TK_START_BLOCK:P,TK_END_BLOCK:O,TK_WORD:I,TK_RESERVED:I,TK_SEMICOLON:j,TK_STRING:M,TK_EQUALS:$,TK_OPERATOR:F,TK_COMMA:B,TK_BLOCK_COMMENT:q,TK_COMMENT:H,TK_DOT:U,TK_UNKNOWN:K,TK_EOF:W},t=t?t:{},ie={},void 0!==t.braces_on_own_line&&(ie.brace_style=t.braces_on_own_line?"expand":"collapse"),ie.brace_style=t.brace_style?t.brace_style:ie.brace_style?ie.brace_style:"collapse","expand-strict"===ie.brace_style&&(ie.brace_style="expand"),ie.indent_size=t.indent_size?parseInt(t.indent_size,10):4,ie.indent_char=t.indent_char?t.indent_char:" ",ie.eol=t.eol?t.eol:"auto",ie.preserve_newlines=void 0===t.preserve_newlines||t.preserve_newlines,ie.break_chained_methods=void 0!==t.break_chained_methods&&t.break_chained_methods,ie.max_preserve_newlines=void 0===t.max_preserve_newlines?0:parseInt(t.max_preserve_newlines,10),ie.space_in_paren=void 0!==t.space_in_paren&&t.space_in_paren,ie.space_in_empty_paren=void 0!==t.space_in_empty_paren&&t.space_in_empty_paren,ie.jslint_happy=void 0!==t.jslint_happy&&t.jslint_happy,ie.space_after_anon_function=void 0!==t.space_after_anon_function&&t.space_after_anon_function,ie.keep_array_indentation=void 0!==t.keep_array_indentation&&t.keep_array_indentation,ie.space_before_conditional=void 0===t.space_before_conditional||t.space_before_conditional,ie.unescape_strings=void 0!==t.unescape_strings&&t.unescape_strings,ie.wrap_line_length=void 0===t.wrap_line_length?0:parseInt(t.wrap_line_length,10),ie.e4x=void 0!==t.e4x&&t.e4x,ie.end_with_newline=void 0!==t.end_with_newline&&t.end_with_newline,ie.comma_first=void 0!==t.comma_first&&t.comma_first,ie.operator_position=a(t.operator_position),ie.test_output_raw=void 0!==t.test_output_raw&&t.test_output_raw,ie.jslint_happy&&(ie.space_after_anon_function=!0),t.indent_with_tabs&&(ie.indent_char="\t",ie.indent_size=1),"auto"===ie.eol&&(ie.eol="\n",e&&u.lineBreak.test(e||"")&&(ie.eol=e.match(u.lineBreak)[0])),ie.eol=ie.eol.replace(/\\r/,"\r").replace(/\\n/,"\n"),Z="";ie.indent_size>0;)Z+=ie.indent_char,ie.indent_size-=1;var oe=0;if(e&&e.length){for(;" "===e.charAt(oe)||"\t"===e.charAt(oe);)se+=e.charAt(oe),oe+=1;e=e.substring(oe)}Y="TK_START_BLOCK",Q="",z=new l(Z,se),z.raw=ie.test_output_raw,te=[],x(f.BlockStatement),this.beautify=function(){function t(){return n=A()}var n,r;for(G=new c(e,ie,Z),ae=G.tokenize(),V=0;t();){for(var i=0;i0&&(n-=1,t-=e.indent_length)},this.trim=function(){for(;" "===this.last();)r.pop(),t-=1;i=0===r.length},this.toString=function(){var t="";return this._empty||(n>=0&&(t=e.indent_cache[n]),t+=r.join("")),t}}function l(e,t){t=t||"",this.indent_cache=[t],this.baseIndentLength=t.length,this.indent_length=e.length,this.raw=!1;var n=[];this.baseIndentString=t,this.indent_string=e,this.previous_line=null,this.current_line=null,this.space_before_token=!1,this.add_outputline=function(){this.previous_line=this.current_line,this.current_line=new o(this),n.push(this.current_line)},this.add_outputline(),this.get_line_number=function(){ +return n.length},this.add_new_line=function(e){return(1!==this.get_line_number()||!this.just_added_newline())&&(!(!e&&this.just_added_newline())&&(this.raw||this.add_outputline(),!0))},this.get_code=function(){var e=n.join("\n").replace(/[\r\n\t ]+$/,"");return e},this.set_indent=function(e){if(n.length>1){for(;e>=this.indent_cache.length;)this.indent_cache.push(this.indent_cache[this.indent_cache.length-1]+this.indent_string);return this.current_line.set_indent(e),!0}return this.current_line.set_indent(0),!1},this.add_raw_token=function(e){for(var t=0;t1&&this.current_line.is_empty();)n.pop(),this.current_line=n[n.length-1],this.current_line.trim();this.previous_line=n.length>1?n[n.length-2]:null},this.just_added_newline=function(){return this.current_line.is_empty()},this.just_added_blankline=function(){if(this.just_added_newline()){if(1===n.length)return!0;var e=n[n.length-2];return e.is_empty()}return!1}}function c(e,t){function i(e){if(!e.match(E))return null;var t={};T.lastIndex=0;for(var n=T.exec(e);n;)t[n[1]]=n[2],n=T.exec(e);return t}function a(){var e,a=[];g=0,b="";var h=w.next();if(null===h)return["","TK_EOF"];var E;for(E=y.length?y[y.length-1]:new m("TK_START_BLOCK","{");n(h,o);)if(u.newline.test(h)?"\n"===h&&"\r"===w.peek(-2)||(g+=1,a=[]):a.push(h),h=w.next(),null===h)return["","TK_EOF"];if(a.length&&(b=a.join("")),l.test(h)||"."===h&&w.testChar(l)){var T=!0,N=!0,R=l;for("0"===h&&w.testChar(/[XxOoBb]/)?(T=!1,N=!1,R=w.testChar(/[Bb]/)?c:w.testChar(/[Oo]/)?p:d,h+=w.next()):"."===h?T=!1:(h="",w.back());w.testChar(R);)h+=w.next(),T&&"."===w.peek()?(h+=w.next(),T=!1):N&&w.testChar(/[Ee]/)&&(h+=w.next(),w.testChar(/[+-]/)&&(h+=w.next()),N=!1,T=!1);return[h,"TK_WORD"]}if(u.isIdentifierStart(w.peekCharCode(-1))){if(w.hasNext())for(;u.isIdentifierChar(w.peekCharCode())&&(h+=w.next(),w.hasNext()););return"TK_DOT"===E.type||"TK_RESERVED"===E.type&&n(E.text,["set","get"])||!n(h,x)?[h,"TK_WORD"]:"in"===h?[h,"TK_OPERATOR"]:[h,"TK_RESERVED"]}if("("===h||"["===h)return[h,"TK_START_EXPR"];if(")"===h||"]"===h)return[h,"TK_END_EXPR"];if("{"===h)return[h,"TK_START_BLOCK"];if("}"===h)return[h,"TK_END_BLOCK"];if(";"===h)return[h,"TK_SEMICOLON"];if("/"===h){var A,D="";if("*"===w.peek()){w.next(),A=w.match(_),D="/*"+A[0];var L=i(D);return L&&"start"===L.ignore&&(A=w.match(S),D+=A[0]),D=D.replace(u.allLineBreaks,"\n"),[D,"TK_BLOCK_COMMENT",L]}if("/"===w.peek())return w.next(),A=w.match(k),D="//"+A[0],[D,"TK_COMMENT"]}var P=/<()([-a-zA-Z:0-9_.]+|{[\s\S]+?}|!\[CDATA\[[\s\S]*?\]\])(\s+{[\s\S]+?}|\s+[-a-zA-Z:0-9_.]+|\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{[\s\S]+?}))*\s*(\/?)\s*>/g;if("`"===h||"'"===h||'"'===h||("/"===h||t.e4x&&"<"===h&&w.test(P,-1))&&("TK_RESERVED"===E.type&&n(E.text,["return","case","throw","else","do","typeof","yield"])||"TK_END_EXPR"===E.type&&")"===E.text&&E.parent&&"TK_RESERVED"===E.parent.type&&n(E.parent.text,["if","while","for"])||n(E.type,["TK_COMMENT","TK_START_EXPR","TK_START_BLOCK","TK_END_BLOCK","TK_OPERATOR","TK_EQUALS","TK_EOF","TK_SEMICOLON","TK_COMMA"]))){var O=h,I=!1,j=!1;if(e=h,"/"===O)for(var M=!1;w.hasNext()&&(I||M||w.peek()!==O)&&!w.testChar(u.newline);)e+=w.peek(),I?I=!1:(I="\\"===w.peek(),"["===w.peek()?M=!0:"]"===w.peek()&&(M=!1)),w.next();else if(t.e4x&&"<"===O){var $=/[\s\S]*?<(\/?)([-a-zA-Z:0-9_.]+|{[\s\S]+?}|!\[CDATA\[[\s\S]*?\]\])(\s+{[\s\S]+?}|\s+[-a-zA-Z:0-9_.]+|\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{[\s\S]+?}))*\s*(\/?)\s*>/g;w.back();var B="",F=w.match(P);if(F){for(var q=F[2].replace(/^{\s+/,"{").replace(/\s+}$/,"}"),H=0===q.indexOf("{"),U=0;F;){var K=!!F[1],W=F[2],z=!!F[F.length-1]||"![CDATA["===W.slice(0,8);if(!z&&(W===q||H&&W.replace(/^{\s+/,"{").replace(/\s+}$/,"}"))&&(K?--U:++U),B+=F[0],U<=0)break;F=w.match($)}return F||(B+=w.match(/[\s\S]*/g)[0]),B=B.replace(u.allLineBreaks,"\n"),[B,"TK_STRING"]}}else{var V=function(t,n,r){for(var i;w.hasNext()&&(i=w.peek(),I||i!==t&&(n||!u.newline.test(i)));)(I||n)&&u.newline.test(i)?("\r"===i&&"\n"===w.peek(1)&&(w.next(),i=w.peek()),e+="\n"):e+=i,I?("x"!==i&&"u"!==i||(j=!0),I=!1):I="\\"===i,w.next(),r&&e.indexOf(r,e.length-r.length)!==-1&&("`"===t?V("}",n,"`"):V("`",n,"${"))};"`"===O?V("`",!0,"${"):V(O)}if(j&&t.unescape_strings&&(e=s(e)),w.peek()===O&&(e+=O,w.next(),"/"===O))for(;w.hasNext()&&u.isIdentifierStart(w.peekCharCode());)e+=w.next();return[e,"TK_STRING"]}if("#"===h){if(0===y.length&&"!"===w.peek()){for(e=h;w.hasNext()&&"\n"!==h;)h=w.next(),e+=h;return[r(e)+"\n","TK_UNKNOWN"]}var G="#";if(w.hasNext()&&w.testChar(l)){do h=w.next(),G+=h;while(w.hasNext()&&"#"!==h&&"="!==h);return"#"===h||("["===w.peek()&&"]"===w.peek(1)?(G+="[]",w.next(),w.next()):"{"===w.peek()&&"}"===w.peek(1)&&(G+="{}",w.next(),w.next())),[G,"TK_WORD"]}}if("<"===h&&("?"===w.peek()||"%"===w.peek())){w.back();var X=w.match(C);if(X)return h=X[0],h=h.replace(u.allLineBreaks,"\n"),[h,"TK_STRING"]}if("<"===h&&w.match(/\!--/g)){for(h="","TK_COMMENT"];if("."===h)return[h,"TK_DOT"];if(n(h,f)){for(;w.hasNext()&&n(h+w.peek(),f)&&(h+=w.next(),w.hasNext()););return","===h?[h,"TK_COMMA"]:"="===h?[h,"TK_EQUALS"]:[h,"TK_OPERATOR"]}return[h,"TK_UNKNOWN"]}function s(e){for(var t="",n=0,r=new h(e),i=null;r.hasNext();)if(i=r.match(/([\s]|[^\\]|\\\\)+/g),i&&(t+=i[0]),"\\"===r.peek()){if(r.next(),"x"===r.peek())i=r.match(/x([0-9A-Fa-f]{2})/g);else{if("u"!==r.peek()){t+="\\",r.hasNext()&&(t+=r.next());continue}i=r.match(/u([0-9A-Fa-f]{4})/g)}if(!i)return e;if(n=parseInt(i[1],16),n>126&&n<=255&&0===i[0].indexOf("x"))return e;if(n>=0&&n<32){t+="\\"+i[0];continue}t+=34===n||39===n||92===n?"\\"+String.fromCharCode(n):String.fromCharCode(n)}return t}var o="\n\r\t ".split(""),l=/[0-9]/,c=/[01]/,p=/[01234567]/,d=/[0123456789abcdefABCDEF]/;this.positionable_operators="!= !== % & && * ** + - / : < << <= == === > >= >> >>> ? ^ | ||".split(" ");var f=this.positionable_operators.concat("! %= &= *= **= ++ += , -- -= /= :: <<= = => >>= >>>= ^= |= ~".split(" "));this.line_starters="continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export".split(",");var g,b,v,y,w,x=this.line_starters.concat(["do","in","else","get","set","new","catch","finally","typeof","yield","async","await","from","as"]),_=/([\s\S]*?)((?:\*\/)|$)/g,k=/([^\n\r\u2028\u2029]*)/g,E=/\/\* beautify( \w+[:]\w+)+ \*\//g,T=/ (\w+)[:](\w+)/g,S=/([\s\S]*?)((?:\/\*\sbeautify\signore:end\s\*\/)|$)/g,C=/((<\?php|<\?=)[\s\S]*?\?>)|(<%[\s\S]*?%>)/g;this.tokenize=function(){w=new h(e),v=!1,y=[];for(var t,n,r,i=null,s=[],o=[];!n||"TK_EOF"!==n.type;){for(r=a(),t=new m(r[1],r[0],g,b);"TK_COMMENT"===t.type||"TK_BLOCK_COMMENT"===t.type||"TK_UNKNOWN"===t.type;)"TK_BLOCK_COMMENT"===t.type&&(t.directives=r[2]),o.push(t),r=a(),t=new m(r[1],r[0],g,b);o.length&&(t.comments_before=o,o=[]),"TK_START_BLOCK"===t.type||"TK_START_EXPR"===t.type?(t.parent=n,s.push(i),i=t):("TK_END_BLOCK"===t.type||"TK_END_EXPR"===t.type)&&i&&("]"===t.text&&"["===i.text||")"===t.text&&"("===i.text||"}"===t.text&&"{"===i.text)&&(t.parent=i.parent,t.opened=i,i=s.pop()),y.push(t),n=t}return y}}var u={};!function(e){var t="ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々-〇〡-〩〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",n="̀-ͯ҃-֑҇-ׇֽֿׁׂׅׄؐ-ؚؠ-ىٲ-ۓۧ-ۨۻ-ۼܰ-݊ࠀ-ࠔࠛ-ࠣࠥ-ࠧࠩ-࠭ࡀ-ࡗࣤ-ࣾऀ-ःऺ-़ा-ॏ॑-ॗॢ-ॣ०-९ঁ-ঃ়া-ৄেৈৗয়-ৠਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢ-ૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୟ-ୠ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఁ-ఃె-ైొ-్ౕౖౢ-ౣ౦-౯ಂಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢ-ೣ೦-೯ംഃെ-ൈൗൢ-ൣ൦-൯ංඃ්ා-ුූෘ-ෟෲෳิ-ฺเ-ๅ๐-๙ິ-ູ່-ໍ໐-໙༘༙༠-༩༹༵༷ཁ-ཇཱ-྄྆-྇ྍ-ྗྙ-ྼ࿆က-ဩ၀-၉ၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟ᜎ-ᜐᜠ-ᜰᝀ-ᝐᝲᝳក-ឲ៝០-៩᠋-᠍᠐-᠙ᤠ-ᤫᤰ-᤻ᥑ-ᥭᦰ-ᧀᧈ-ᧉ᧐-᧙ᨀ-ᨕᨠ-ᩓ᩠-᩿᩼-᪉᪐-᪙ᭆ-ᭋ᭐-᭙᭫-᭳᮰-᮹᯦-᯳ᰀ-ᰢ᱀-᱉ᱛ-ᱽ᳐-᳒ᴀ-ᶾḁ-ἕ‌‍‿⁀⁔⃐-⃥⃜⃡-⃰ⶁ-ⶖⷠ-ⷿ〡-〨゙゚Ꙁ-ꙭꙴ-꙽ꚟ꛰-꛱ꟸ-ꠀ꠆ꠋꠣ-ꠧꢀ-ꢁꢴ-꣄꣐-꣙ꣳ-ꣷ꤀-꤉ꤦ-꤭ꤰ-ꥅꦀ-ꦃ꦳-꧀ꨀ-ꨧꩀ-ꩁꩌ-ꩍ꩐-꩙ꩻꫠ-ꫩꫲ-ꫳꯀ-ꯡ꯬꯭꯰-꯹ﬠ-ﬨ︀-️︠-︦︳︴﹍-﹏0-9_",r=new RegExp("["+t+"]"),i=new RegExp("["+t+n+"]");e.newline=/[\n\r\u2028\u2029]/,e.lineBreak=new RegExp("\r\n|"+e.newline.source),e.allLineBreaks=new RegExp(e.lineBreak.source,"g"),e.isIdentifierStart=function(e){return e<65?36===e||64===e:e<91||(e<97?95===e:e<123||e>=170&&r.test(String.fromCharCode(e)))},e.isIdentifierChar=function(e){return e<48?36===e:e<58||!(e<65)&&(e<91||(e<97?95===e:e<123||e>=170&&i.test(String.fromCharCode(e))))}}(u);var p={before_newline:"before-newline",after_newline:"after-newline",preserve_newline:"preserve-newline"},d=[p.before_newline,p.preserve_newline],f={BlockStatement:"BlockStatement",Statement:"Statement",ObjectLiteral:"ObjectLiteral",ArrayLiteral:"ArrayLiteral",ForInitializer:"ForInitializer",Conditional:"Conditional",Expression:"Expression"},h=function(e){var t=e,n=t.length,r=0;this.back=function(){r-=1},this.hasNext=function(){return r=0&&e=0&&e0,this.whitespace_before=r||"",this.parent=i||null,this.opened=null,this.directives=null},g=new s(e,t);return g.beautify()}"function"==typeof define&&define.amd?define("deps/beautify",[],function(){return{js_beautify:e}}):"undefined"!=typeof exports?exports.js_beautify=e:"undefined"!=typeof window?window.js_beautify=e:"undefined"!=typeof global&&(global.js_beautify=e)}(),function(){function e(t,n){function r(){return x=t.charAt(++k),x||""}function i(e){var n="",i=k;return e&&o(),n=t.charAt(k+1)||"",k=i-1,r(),n}function a(e){for(var n=k;r();)if("\\"===x)r();else{if(e.indexOf(x)!==-1)break;if("\n"===x)break}return t.substring(n,k+1)}function s(e){var t=k,n=a(e);return k=t-1,r(),n}function o(){for(var e="";_.test(i());)r(),e+=x;return e}function l(){var e="";for(x&&_.test(x)&&(e=x);_.test(r());)e+=x;return e}function c(e){var n=k;for(e="/"===i(),r();r();){if(!e&&"*"===x&&"/"===i()){r();break}if(e&&"\n"===x)return t.substring(n,k)}return t.substring(n,k)+x}function u(e){return t.substring(k-e.length,k).toLowerCase()===e}function p(){for(var e=0,n=k+1;nN):D=C>=N):"}"===x?(f(),R["}"](x),D=!1,L=!1,N&&N--,v&&0===C&&R.newLine(!0)):":"===x?(o(),!D&&!P||u("&")||p()||u("(")?(u(" ")&&" "!==A[A.length-1]&&A.push(" "),":"===i()?(r(),A.push("::")):A.push(":")):(L=!0,A.push(":"),R.singleSpace())):'"'===x||"'"===x?(R.preserveSingleSpace(),A.push(a(x))):";"===x?(L=!1,A.push(x),R.newLine()):"("===x?u("url")?(A.push(x),o(),r()&&(")"!==x&&'"'!==x&&"'"!==x?A.push(a(")")):k--)):(E++,R.preserveSingleSpace(),A.push(x),o()):")"===x?(A.push(x),E--):","===x?(A.push(x),o(),g&&!L&&E<1?R.newLine():R.singleSpace()):(">"===x||"+"===x||"~"===x)&&!L&&E<1?y?(R.singleSpace(),A.push(x),R.singleSpace()):(A.push(x),o(),x&&_.test(x)&&(x="")):"]"===x?A.push(x):"["===x?(R.preserveSingleSpace(),A.push(x)):"="===x?(o(),x="=",A.push(x)):(R.preserveSingleSpace(),A.push(x))}var q="";return T&&(q+=T),q+=A.join("").replace(/[\r\n\t ]+$/,""),b&&(q+="\n"),"\n"!==w&&(q=q.replace(/[\n]/g,w)),q}e.NESTED_AT_RULE={"@page":!0,"@font-face":!0,"@keyframes":!0,"@media":!0,"@supports":!0,"@document":!0},e.CONDITIONAL_GROUP_RULE={"@media":!0,"@supports":!0,"@document":!0},"function"==typeof define&&define.amd?define("deps/beautify-css",[],function(){return{css_beautify:e}}):"undefined"!=typeof exports?exports.css_beautify=e:"undefined"!=typeof window?window.css_beautify=e:"undefined"!=typeof global&&(global.css_beautify=e)}(),function(){function e(e){return e.replace(/^\s+/g,"")}function t(e){return e.replace(/\s+$/g,"")}function n(n,r,i,a){function s(){function n(e){var t="",n=function(n){var r=t+n.toLowerCase();t=r.length<=e.length?r:r.substr(r.length-e.length,e.length)},r=function(){return t.indexOf(e)===-1};return{add:n,doesNotMatch:r}}return this.pos=0,this.token="",this.current_mode="CONTENT",this.tags={parent:"parent1",parentcount:1,parent1:""},this.tag_type="",this.token_text=this.last_token=this.last_text=this.token_type="",this.newlines=0,this.indent_content=l,this.indent_body_inner_html=c,this.indent_head_inner_html=u,this.Utils={whitespace:"\n\r\t ".split(""),single_token:["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr","!doctype","?xml","?php","basefont","isindex"],extra_liners:_,in_array:function(e,t){for(var n=0;n=this.wrap_line_length?(this.print_newline(!1,e),this.print_indentation(e),!0):(this.line_char_count++,e.push(" "),!1)},this.get_content=function(){for(var e="",t=[];"<"!==this.input.charAt(this.pos);){if(this.pos>=this.input.length)return t.length?t.join(""):["","TK_EOF"];if(this.traverse_whitespace())this.space_or_wrap(t);else{if(v){var n=this.input.substr(this.pos,3);if("{{#"===n||"{{/"===n)break;if("{{!"===n)return[this.get_tag(),"TK_TAG_HANDLEBARS_COMMENT"];if("{{"===this.input.substr(this.pos,2)&&"{{else}}"===this.get_tag(!0))break}e=this.input.charAt(this.pos),this.pos++,this.line_char_count++,t.push(e)}}return t.length?t.join(""):""},this.get_contents_to=function(e){if(this.pos===this.input.length)return["","TK_EOF"];var t="",n=new RegExp("","igm");n.lastIndex=this.pos;var r=n.exec(this.input),i=r?r.index:this.input.length;return this.pos=this.input.length)return e&&(this.pos=c,this.line_char_count=u),a.length?a.join(""):["","TK_EOF"];if(i=this.input.charAt(this.pos),this.pos++,this.Utils.in_array(i,this.Utils.whitespace))o=!0;else{if("'"!==i&&'"'!==i||(i+=this.get_unformatted(i),o=!0),"="===i&&(o=!1),a.length&&"="!==a[a.length-1]&&">"!==i&&o){var p=this.space_or_wrap(a),f=p&&"/"!==i&&"force"!==y;if(o=!1,l||"force"!==y||"/"===i||(this.print_newline(!1,a),this.print_indentation(a),f=!0),f)for(var h=0;h=2&&"{"===a[a.length-1]&&"{"===a[a.length-2]&&(t="#"===i||"/"===i||"!"===i?this.pos-3:this.pos-2,r="{"),this.line_char_count++,a.push(i),a[1]&&("!"===a[1]||"?"===a[1]||"%"===a[1])){a=[this.get_comment(t)];break}if(v&&a[1]&&"{"===a[1]&&a[2]&&"!"===a[2]){a=[this.get_comment(t)];break}if(v&&"{"===r&&a.length>2&&"}"===a[a.length-2]&&"}"===a[a.length-1])break}}while(">"!==i);var b,x,_=a.join("");b=_.indexOf(" ")!==-1?_.indexOf(" "):"{"===_.charAt(0)?_.indexOf("}"):_.indexOf(">"),x="<"!==_.charAt(0)&&v?"#"===_.charAt(2)?3:2:1;var k=_.substring(x,b).toLowerCase();return"/"===_.charAt(_.length-2)||this.Utils.in_array(k,this.Utils.single_token)?e||(this.tag_type="SINGLE"):v&&"{"===_.charAt(0)&&"else"===k?e||(this.indent_to_tag("if"),this.tag_type="HANDLEBARS_ELSE",this.indent_content=!0,this.traverse_whitespace()):this.is_unformatted(k,m)?(s=this.get_unformatted("",_),a.push(s),n=this.pos-1,this.tag_type="SINGLE"):"script"===k&&(_.search("type")===-1||_.search("type")>-1&&_.search(/\b(text|application|dojo)\/(x-)?(javascript|ecmascript|jscript|livescript|(ld\+)?json|method|aspect)/)>-1)?e||(this.record_tag(k),this.tag_type="SCRIPT"):"style"===k&&(_.search("type")===-1||_.search("type")>-1&&_.search("text/css")>-1)?e||(this.record_tag(k),this.tag_type="STYLE"):"!"===k.charAt(0)?e||(this.tag_type="SINGLE",this.traverse_whitespace()):e||("/"===k.charAt(0)?(this.retrieve_tag(k.substring(1)),this.tag_type="END"):(this.record_tag(k),"html"!==k.toLowerCase()&&(this.indent_content=!0),this.tag_type="START"),this.traverse_whitespace()&&this.space_or_wrap(a),this.Utils.in_array(k,this.Utils.extra_liners)&&(this.print_newline(!1,this.output),this.output.length&&"\n"!==this.output[this.output.length-2]&&this.print_newline(!0,this.output))),e&&(this.pos=c,this.line_char_count=u),a.join("")},this.get_comment=function(e){var t="",n=">",r=!1;this.pos=e;var i=this.input.charAt(this.pos);for(this.pos++;this.pos<=this.input.length&&(t+=i,t.charAt(t.length-1)!==n.charAt(n.length-1)||t.indexOf(n)===-1);)!r&&t.length<10&&(0===t.indexOf("",r=!0):0===t.indexOf("",r=!0):0===t.indexOf("",r=!0):0===t.indexOf("",r=!0):0===t.indexOf("{{!")?(n="}}",r=!0):0===t.indexOf("",r=!0):0===t.indexOf("<%")&&(n="%>",r=!0)),i=this.input.charAt(this.pos),this.pos++;return t},this.get_unformatted=function(e,t){if(t&&t.toLowerCase().indexOf(e)!==-1)return"";var r="",i="",a=!0,s=n(e);do{if(this.pos>=this.input.length)return i;if(r=this.input.charAt(this.pos),this.pos++,this.Utils.in_array(r,this.Utils.whitespace)){if(!a){this.line_char_count--;continue}if("\n"===r||"\r"===r){i+="\n",this.line_char_count=0;continue}}i+=r,s.add(r),this.line_char_count++,a=!0,v&&"{"===r&&i.length&&"{"===i.charAt(i.length-2)&&(i+=this.get_unformatted("}}"))}while(s.doesNotMatch());return i},this.get_token=function(){var e;if("TK_TAG_SCRIPT"===this.last_token||"TK_TAG_STYLE"===this.last_token){var t=this.last_token.substr(7);return e=this.get_contents_to(t),"string"!=typeof e?e:[e,"TK_"+t]}if("CONTENT"===this.current_mode)return e=this.get_content(),"string"!=typeof e?e:[e,"TK_CONTENT"];if("TAG"===this.current_mode){if(e=this.get_tag(),"string"!=typeof e)return e;var n="TK_TAG_"+this.tag_type;return[e,n]}},this.get_full_indent=function(e){return e=this.indent_level+e||0,e<1?"":Array(e+1).join(this.indent_string)},this.is_unformatted=function(e,t){if(!this.Utils.in_array(e,t))return!1;if("a"!==e.toLowerCase()||!this.Utils.in_array("a",t))return!0;var n=this.get_tag(!0),r=(n||"").match(/^\s*<\s*\/?([a-z]*)\s*[^>]*>\s*$/);return!(r&&!this.Utils.in_array(r,t))},this.printer=function(n,r,i,a,s){this.input=n||"",this.input=this.input.replace(/\r\n|[\r\u2028\u2029]/g,"\n"),this.output=[],this.indent_character=r,this.indent_string="",this.indent_size=i,this.brace_style=s,this.indent_level=0,this.wrap_line_length=a,this.line_char_count=0;for(var o=0;o0&&(e=t(e)),e&&""!==e&&(e.length>1&&"\n"===e.charAt(e.length-1)?(this.output.push(e.slice(0,-1)),this.print_newline(!1,this.output)):this.output.push(e));for(var n=0;n0,this.output);this.newlines=0},this.indent=function(){this.indent_level++},this.unindent=function(){this.indent_level>0&&this.indent_level--}},this}var o,l,c,u,p,d,f,h,m,g,b,v,y,w,x,_,k;for(r=r||{},void 0!==r.wrap_line_length&&0!==parseInt(r.wrap_line_length,10)||void 0===r.max_char||0===parseInt(r.max_char,10)||(r.wrap_line_length=r.max_char),l=void 0!==r.indent_inner_html&&r.indent_inner_html,c=void 0===r.indent_body_inner_html||r.indent_body_inner_html,u=void 0===r.indent_head_inner_html||r.indent_head_inner_html,p=void 0===r.indent_size?4:parseInt(r.indent_size,10),d=void 0===r.indent_char?" ":r.indent_char,h=void 0===r.brace_style?"collapse":r.brace_style,f=0===parseInt(r.wrap_line_length,10)?32786:parseInt(r.wrap_line_length||250,10),m=r.unformatted||["a","abbr","area","audio","b","bdi","bdo","br","button","canvas","cite","code","data","datalist","del","dfn","em","embed","i","iframe","img","input","ins","kbd","keygen","label","map","mark","math","meter","noscript","object","output","progress","q","ruby","s","samp","select","small","span","strong","sub","sup","svg","template","textarea","time","u","var","video","wbr","text","acronym","address","big","dt","ins","small","strike","tt","pre"],g=void 0===r.preserve_newlines||r.preserve_newlines,b=g?isNaN(parseInt(r.max_preserve_newlines,10))?32786:parseInt(r.max_preserve_newlines,10):0,v=void 0!==r.indent_handlebars&&r.indent_handlebars,y=void 0===r.wrap_attributes?"auto":r.wrap_attributes,w=isNaN(parseInt(r.wrap_attributes_indent_size,10))?p:parseInt(r.wrap_attributes_indent_size,10),x=void 0!==r.end_with_newline&&r.end_with_newline,_="object"==typeof r.extra_liners&&r.extra_liners?r.extra_liners.concat():"string"==typeof r.extra_liners?r.extra_liners.split(","):"head,body,/html".split(","),k=r.eol?r.eol:"\n",r.indent_with_tabs&&(d="\t",p=1),k=k.replace(/\\r/,"\r").replace(/\\n/,"\n"),o=new s,o.printer(n,d,p,f,h);;){var E=o.get_token();if(o.token_text=E[0],o.token_type=E[1],"TK_EOF"===o.token_type)break;switch(o.token_type){case"TK_TAG_START":o.print_newline(!1,o.output),o.print_token(o.token_text),o.indent_content&&(!o.indent_body_inner_html&&o.token_text.match(//)||!o.indent_head_inner_html&&o.token_text.match(//)||o.indent(),o.indent_content=!1),o.current_mode="CONTENT";break;case"TK_TAG_STYLE":case"TK_TAG_SCRIPT":o.print_newline(!1,o.output),o.print_token(o.token_text),o.current_mode="CONTENT";break;case"TK_TAG_END":if("TK_CONTENT"===o.last_token&&""===o.last_text){var T=(o.token_text.match(/\w+/)||[])[0],S=null;o.output.length&&(S=o.output[o.output.length-1].match(/(?:<|{{#)\s*(\w+)/)),(null===S||S[1]!==T&&!o.Utils.in_array(S[1],m))&&o.print_newline(!1,o.output)}o.print_token(o.token_text),o.current_mode="CONTENT";break;case"TK_TAG_SINGLE":var C=o.token_text.match(/^\s*<([a-z-]+)/i);C&&o.Utils.in_array(C[1],m)||o.print_newline(!1,o.output),o.print_token(o.token_text),o.current_mode="CONTENT";break;case"TK_TAG_HANDLEBARS_ELSE":for(var N=!1,R=o.output.length-1;R>=0&&"\n"!==o.output[R];R--)if(o.output[R].match(/{{#if/)){N=!0;break}N||o.print_newline(!1,o.output),o.print_token(o.token_text),o.indent_content&&(o.indent(),o.indent_content=!1),o.current_mode="CONTENT";break;case"TK_TAG_HANDLEBARS_COMMENT":o.print_token(o.token_text),o.current_mode="TAG";break;case"TK_CONTENT":o.print_token(o.token_text),o.current_mode="TAG";break;case"TK_STYLE":case"TK_SCRIPT":if(""!==o.token_text){o.print_newline(!1,o.output);var A,D=o.token_text,L=1;"TK_SCRIPT"===o.token_type?A="function"==typeof i&&i:"TK_STYLE"===o.token_type&&(A="function"==typeof a&&a),"keep"===r.indent_scripts?L=0:"separate"===r.indent_scripts&&(L=-o.indent_level);var P=o.get_full_indent(L);if(A){var O=function(){this.eol="\n"};O.prototype=r;var I=new O;D=A(D.replace(/^\s*/,P),I)}else{var j=D.match(/^\s*/)[0],M=j.match(/[^\n\r]*$/)[0].split(o.indent_string).length-1,$=o.get_full_indent(L-M);D=D.replace(/^\s*/,P).replace(/\r\n|\r|\n/g,"\n"+$).replace(/\s+$/,"")}D&&(o.print_token_raw(D),o.print_newline(!0,o.output))}o.current_mode="TAG";break;default:""!==o.token_text&&o.print_token(o.token_text)}o.last_token=o.token_type,o.last_text=o.token_text}var B=o.output.join("").replace(/[\r\n\t ]+$/,"");return x&&(B+="\n"),"\n"!==k&&(B=B.replace(/[\n]/g,k)),B}if("function"==typeof define&&define.amd)define("deps/beautify-html",["require","./beautify","./beautify-css"],function(e){var t=e("./beautify"),r=e("./beautify-css");return{html_beautify:function(e,i){return n(e,i,t.js_beautify,r.css_beautify)}}});else if("undefined"!=typeof exports){var r=require("./beautify.js"),i=require("./beautify-css.js");exports.html_beautify=function(e,t){return n(e,t,r.js_beautify,i.css_beautify)}}else"undefined"!=typeof window?window.html_beautify=function(e,t){return n(e,t,window.js_beautify,window.css_beautify)}:"undefined"!=typeof global&&(global.html_beautify=function(e,t){return n(e,t,global.js_beautify,global.css_beautify)})}(),define("core/beautify-options",[],function(){return Object.freeze({brace_style:"expand",extra_liners:["section"],indent_char:" ",indent_handlebars:!1,indent_inner_html:!1,indent_size:2,max_preserve_newlines:5,preserve_newlines:!0,wrap_line_length:0})}),define("core/markdown",["deps/marked","core/utils","deps/highlight","deps/beautify-html","core/beautify-options"],function(e,t,n,r,i){function a(){var e=document.createElement("div");return function(r,i){var a,s=t.calculateLeftPad(r);if(s){var o=new RegExp("^ {"+s+"}","gm");a=r.replace(o,"")}else a=r;e.innerHTML=a;var l=e.textContent,c=[].concat(i||p),u=n.highlightAuto(l,c);return u.value}}function s(n){var r=t.normalizePadding(n),i=r.replace(/>/g,">"),a=e(i);return a}function o(e){return function(t){Array.from(t.querySelectorAll(e)).map(function(e){return{element:e,html:s(e.innerHTML)}}).reduce(function(e,t){var n=t.element,r=e;for(e.innerHTML=t.html,e.firstChild&&n.localName===e.firstChild.localName&&(r=e.firstChild),n.innerHTML="";r.firstChild;)t.element.appendChild(r.firstChild);return e},t.ownerDocument.createElement("div"))}}function l(e){function t(e){return parseInt(e.tagName.charAt(1),10)}function n(e){for(var t;e>0;)if(e--,t=c[e])return t}function r(e){for(e=e.firstChild;e;){if(p.test(e.tagName))return e;e=e.nextSibling}return null}function i(r){var i=e.createElement("section"),a=t(r);i.appendChild(r),n(a).appendChild(i),c[a]=i,c.length=a+1,u=i}function a(e,i){var a=r(e),s=a?t(a):1,o=n(s);a&&e.removeChild(a),e.appendChild(i(e)),a&&e.insertBefore(a,e.firstChild),o.appendChild(e),u=o}function s(e){u.appendChild(e)}function o(){return l}var l=e.createDocumentFragment(),c=[l],u=l,p=/H[1-6]/;return{addHeader:i,addSection:a,addElement:s,getRoot:o}}function c(e,t){function n(e){for(var r,i,a=l(t);e.firstChild;)if(r=e.firstChild,r.nodeType===Node.ELEMENT_NODE)switch(i=r.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":a.addHeader(r);break;case"section":a.addSection(r,n);break;default:a.addElement(r)}else e.removeChild(r);return a.getRoot()}return n(e)}function u(e){Array.from(e).forEach(function(e){var t=e.ownerDocument.createTextNode(e.textContent);e.parentElement.replaceChild(t,e)})}var p=Object.freeze(["css","html","http","js","json","markdown","xml","xquery"]);n.configure({tabReplace:" "}),e.setOptions({sanitize:!1,gfm:!0,highlight:a()});var d=o("section, .issue, .note, .req");return{run:function(e,t,n){if("markdown"===e.format){var a=t.getElementById("respec-ui");a.remove();var o=t.createElement("body");o.innerHTML=t.body.innerHTML,d(o);var l=s(o.innerHTML),p=l.replace(/

\s*<\/p>/gm,"").replace(/\n\s*"= 2.0.0-beta.1",7:">= 4.0.0"};t.REVISION_CHANGES=h;var m="[object Object]";r.prototype={constructor:r,logger:p.default,log:p.default.log,registerHelper:function(e,t){if(a.toString.call(e)===m){if(t)throw new o.default("Arg not supported with multiple helpers");a.extend(this.helpers,e)}else this.helpers[e]=t},unregisterHelper:function(e){delete this.helpers[e]},registerPartial:function(e,t){if(a.toString.call(e)===m)a.extend(this.partials,e);else{if("undefined"==typeof t)throw new o.default('Attempting to register a partial called "'+e+'" as undefined');this.partials[e]=t}},unregisterPartial:function(e){delete this.partials[e]},registerDecorator:function(e,t){if(a.toString.call(e)===m){if(t)throw new o.default("Arg not supported with multiple decorators");a.extend(this.decorators,e)}else this.decorators[e]=t},unregisterDecorator:function(e){delete this.decorators[e]}};var g=p.default.log;t.log=g,t.createFrame=a.createFrame,t.logger=p.default},function(e,t){"use strict";function n(e){return u[e]}function r(e){for(var t=1;t":">",'"':""","'":"'","`":"`","=":"="},p=/[&<>"'`=]/g,d=/[&<>"'`=]/,f=Object.prototype.toString;t.toString=f;var h=function(e){return"function"==typeof e};h(/x/)&&(t.isFunction=h=function(e){return"function"==typeof e&&"[object Function]"===f.call(e)}),t.isFunction=h;var m=Array.isArray||function(e){return!(!e||"object"!=typeof e)&&"[object Array]"===f.call(e)};t.isArray=m},function(e,t){"use strict";function n(e,t){var i=t&&t.loc,a=void 0,s=void 0;i&&(a=i.start.line,s=i.start.column,e+=" - "+a+":"+s);for(var o=Error.prototype.constructor.call(this,e),l=0;l0?(n.ids&&(n.ids=[n.name]),e.helpers.each(t,n)):i(this);if(n.data&&n.ids){var s=r.createFrame(n.data);s.contextPath=r.appendContextPath(n.data.contextPath,n.name),n={data:s}}return a(t,n)})},e.exports=t.default},function(e,t,n){"use strict";var r=n(1).default;t.__esModule=!0;var i=n(5),a=n(6),s=r(a);t.default=function(e){e.registerHelper("each",function(e,t){function n(t,n,a){c&&(c.key=t,c.index=n,c.first=0===n,c.last=!!a,u&&(c.contextPath=u+t)),l+=r(e[t],{data:c,blockParams:i.blockParams([e[t],t],[u+t,null])})}if(!t)throw new s.default("Must pass iterator to #each");var r=t.fn,a=t.inverse,o=0,l="",c=void 0,u=void 0;if(t.data&&t.ids&&(u=i.appendContextPath(t.data.contextPath,t.ids[0])+"."),i.isFunction(e)&&(e=e.call(this)),t.data&&(c=i.createFrame(t.data)),e&&"object"==typeof e)if(i.isArray(e))for(var p=e.length;o=0?t:parseInt(e,10)}return e},log:function(e){if(e=i.lookupLevel(e),"undefined"!=typeof console&&i.lookupLevel(i.level)<=e){var t=i.methodMap[e];console[t]||(t="log");for(var n=arguments.length,r=Array(n>1?n-1:0),a=1;a2&&x.push("'"+this.terminals_[v]+"'");k=this.lexer.showPosition?"Parse error on line "+(l+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+x.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(k,{text:this.lexer.match,token:this.terminals_[f]||f,line:this.lexer.yylineno,loc:p,expected:x})}}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(g[0]){case 1:r.push(f),i.push(this.lexer.yytext),a.push(this.lexer.yylloc),r.push(g[1]),f=null,h?(f=h,h=null):(c=this.lexer.yyleng,o=this.lexer.yytext,l=this.lexer.yylineno,p=this.lexer.yylloc,u>0&&u--);break;case 2:if(y=this.productions_[g[1]][1],_.$=i[i.length-y],_._$={first_line:a[a.length-(y||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(y||1)].first_column,last_column:a[a.length-1].last_column},d&&(_._$.range=[a[a.length-(y||1)].range[0],a[a.length-1].range[1]]),b=this.performAction.call(_,o,c,l,this.yy,g[1],i,a),"undefined"!=typeof b)return b;y&&(r=r.slice(0,-1*y*2),i=i.slice(0,-1*y),a=a.slice(0,-1*y)),r.push(this.productions_[g[1]][0]),i.push(_.$),a.push(_._$),w=s[r[r.length-2]][r[r.length-1]],r.push(w);break;case 3:return!0}}return!0}},n=function(){var e={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e;var t=e.match(/(?:\r\n?|\n).*/g);return t?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t-1),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this},more:function(){return this._more=!0,this},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var e,t,n,r,i;this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),s=0;st[0].length)||(t=n,r=s,this.options.flex));s++);return t?(i=t[0].match(/(?:\r\n?|\n).*/g),i&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,a[r],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e?e:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return"undefined"!=typeof e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)}};return e.options={},e.performAction=function(e,t,n,r){function i(e,n){return t.yytext=t.yytext.substr(e,t.yyleng-n)}switch(n){case 0:if("\\\\"===t.yytext.slice(-2)?(i(0,1),this.begin("mu")):"\\"===t.yytext.slice(-1)?(i(0,1),this.begin("emu")):this.begin("mu"),t.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(t.yytext=t.yytext.substr(5,t.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(t.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return t.yytext=i(1,2).replace(/\\"/g,'"'),80;case 32:return t.yytext=i(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return t.yytext=t.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},e.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],e.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},e}();return t.lexer=n,e.prototype=t,t.Parser=e,new e}();t.__esModule=!0,t.default=n},function(e,t,n){"use strict";function r(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=e}function i(e,t,n){void 0===t&&(t=e.length);var r=e[t-1],i=e[t-2];return r?"ContentStatement"===r.type?(i||!n?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(r.original):void 0:n}function a(e,t,n){void 0===t&&(t=-1);var r=e[t+1],i=e[t+2];return r?"ContentStatement"===r.type?(i||!n?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(r.original):void 0:n}function s(e,t,n){var r=e[null==t?0:t+1];if(r&&"ContentStatement"===r.type&&(n||!r.rightStripped)){var i=r.value;r.value=r.value.replace(n?/^\s+/:/^[ \t]*\r?\n?/,""),r.rightStripped=r.value!==i}}function o(e,t,n){var r=e[null==t?e.length-1:t-1];if(r&&"ContentStatement"===r.type&&(n||!r.leftStripped)){var i=r.value;return r.value=r.value.replace(n?/\s+$/:/[ \t]+$/,""),r.leftStripped=r.value!==i,r.leftStripped}}var l=n(1).default;t.__esModule=!0;var c=n(25),u=l(c);r.prototype=new u.default,r.prototype.Program=function(e){var t=!this.options.ignoreStandalone,n=!this.isRootSeen;this.isRootSeen=!0;for(var r=e.body,l=0,c=r.length;l0)throw new g.default("Invalid path: "+r,{loc:n});".."===c&&(a++,s+="../")}}return{type:"PathExpression",data:e,depth:a,parts:i,original:r,loc:n}}function c(e,t,n,r,i,a){var s=r.charAt(3)||r.charAt(2),o="{"!==s&&"&"!==s,l=/\*/.test(r);return{type:l?"Decorator":"MustacheStatement",path:e,params:t,hash:n,escaped:o,strip:i,loc:this.locInfo(a)}}function u(e,t,n,i){r(e,n),i=this.locInfo(i);var a={type:"Program",body:t,strip:{},loc:i};return{type:"BlockStatement",path:e.path,params:e.params,hash:e.hash,program:a,openStrip:{},inverseStrip:{},closeStrip:{},loc:i}}function p(e,t,n,i,a,s){i&&i.path&&r(e,i);var o=/\*/.test(e.open);t.blockParams=e.blockParams;var l=void 0,c=void 0;if(n){if(o)throw new g.default("Unexpected inverse block on decorator",n);n.chain&&(n.program.body[0].closeStrip=i.strip),c=n.strip,l=n.program}return a&&(a=l,l=t,t=a),{type:o?"DecoratorBlock":"BlockStatement",path:e.path,params:e.params,hash:e.hash,program:t,inverse:l,openStrip:e.strip,inverseStrip:c,closeStrip:i&&i.strip,loc:this.locInfo(s)}}function d(e,t){if(!t&&e.length){var n=e[0].loc,r=e[e.length-1].loc;n&&r&&(t={source:n.source,start:{line:n.start.line,column:n.start.column},end:{line:r.end.line,column:r.end.column}})}return{type:"Program",body:e,strip:{},loc:t}}function f(e,t,n,i){return r(e,n),{type:"PartialBlockStatement",name:e.path,params:e.params,hash:e.hash,program:t,openStrip:e.strip,closeStrip:n&&n.strip,loc:this.locInfo(i)}}var h=n(1).default;t.__esModule=!0,t.SourceLocation=i,t.id=a,t.stripFlags=s,t.stripComment=o,t.preparePath=l,t.prepareMustache=c,t.prepareRawBlock=u,t.prepareBlock=p,t.prepareProgram=d,t.preparePartialBlock=f;var m=n(6),g=h(m)},function(e,t,n){"use strict";function r(){}function i(e,t,n){if(null==e||"string"!=typeof e&&"Program"!==e.type)throw new u.default("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+e);t=t||{},"data"in t||(t.data=!0),t.compat&&(t.useDepths=!0);var r=n.parse(e,t),i=(new n.Compiler).compile(r,t);return(new n.JavaScriptCompiler).compile(i,t)}function a(e,t,n){function r(){var r=n.parse(e,t),i=(new n.Compiler).compile(r,t),a=(new n.JavaScriptCompiler).compile(i,t,void 0,!0);return n.template(a)}function i(e,t){return a||(a=r()),a.call(this,e,t)}if(void 0===t&&(t={}),null==e||"string"!=typeof e&&"Program"!==e.type)throw new u.default("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+e);"data"in t||(t.data=!0),t.compat&&(t.useDepths=!0);var a=void 0;return i._setup=function(e){return a||(a=r()),a._setup(e)},i._child=function(e,t,n,i){return a||(a=r()),a._child(e,t,n,i)},i}function s(e,t){if(e===t)return!0;if(p.isArray(e)&&p.isArray(t)&&e.length===t.length){for(var n=0;n1)throw new u.default("Unsupported number of partial arguments: "+n.length,e);n.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):n.push({type:"PathExpression",parts:[],depth:0}));var r=e.name.original,i="SubExpression"===e.name.type;i&&this.accept(e.name),this.setupFullMustacheParams(e,t,void 0,!0);var a=e.indent||"";this.options.preventIndent&&a&&(this.opcode("appendContent",a),a=""),this.opcode("invokePartial",i,r,a),this.opcode("append")},PartialBlockStatement:function(e){this.PartialStatement(e)},MustacheStatement:function(e){this.SubExpression(e),e.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(e){this.DecoratorBlock(e)},ContentStatement:function(e){e.value&&this.opcode("appendContent",e.value)},CommentStatement:function(){},SubExpression:function(e){o(e);var t=this.classifySexpr(e);"simple"===t?this.simpleSexpr(e):"helper"===t?this.helperSexpr(e):this.ambiguousSexpr(e)},ambiguousSexpr:function(e,t,n){var r=e.path,i=r.parts[0],a=null!=t||null!=n;this.opcode("getContext",r.depth),this.opcode("pushProgram",t),this.opcode("pushProgram",n),r.strict=!0,this.accept(r),this.opcode("invokeAmbiguous",i,a)},simpleSexpr:function(e){var t=e.path;t.strict=!0,this.accept(t),this.opcode("resolvePossibleLambda")},helperSexpr:function(e,t,n){var r=this.setupFullMustacheParams(e,t,n),i=e.path,a=i.parts[0];if(this.options.knownHelpers[a])this.opcode("invokeKnownHelper",r.length,a);else{if(this.options.knownHelpersOnly)throw new u.default("You specified knownHelpersOnly, but used the unknown helper "+a,e);i.strict=!0,i.falsy=!0,this.accept(i),this.opcode("invokeHelper",r.length,i.original,f.default.helpers.simpleId(i))}},PathExpression:function(e){this.addDepth(e.depth),this.opcode("getContext",e.depth);var t=e.parts[0],n=f.default.helpers.scopedId(e),r=!e.depth&&!n&&this.blockParamIndex(t);r?this.opcode("lookupBlockParam",r,e.parts):t?e.data?(this.options.data=!0,this.opcode("lookupData",e.depth,e.parts,e.strict)):this.opcode("lookupOnContext",e.parts,e.falsy,e.strict,n):this.opcode("pushContext")},StringLiteral:function(e){this.opcode("pushString",e.value)},NumberLiteral:function(e){this.opcode("pushLiteral",e.value)},BooleanLiteral:function(e){this.opcode("pushLiteral",e.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(e){var t=e.pairs,n=0,r=t.length;for(this.opcode("pushHash");n=0)return[t,i]}}}},function(e,t,n){"use strict";function r(e){this.value=e}function i(){}function a(e,t,n,r){var i=t.popStack(),a=0,s=n.length;for(e&&s--;a0&&(t+=", "+n.join(", "));var r=0;for(var i in this.aliases){var a=this.aliases[i];this.aliases.hasOwnProperty(i)&&a.children&&a.referenceCount>1&&(t+=", alias"+ ++r+"="+i,a.children[0]="alias"+r)}var s=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&s.push("blockParams"),this.useDepths&&s.push("depths");var o=this.mergeSource(t);return e?(s.push(o),Function.apply(this,s)):this.source.wrap(["function(",s.join(","),") {\n ",o,"}"])},mergeSource:function(e){var t=this.environment.isSimple,n=!this.forceBuffer,r=void 0,i=void 0,a=void 0,s=void 0;return this.source.each(function(e){e.appendToBuffer?(a?e.prepend(" + "):a=e,s=e):(a&&(i?a.prepend("buffer += "):r=!0,s.add(";"),a=s=void 0),i=!0,t||(n=!1))}),n?a?(a.prepend("return "),s.add(";")):i||this.source.push('return "";'):(e+=", buffer = "+(r?"":this.initializeBuffer()),a?(a.prepend("return buffer + "),s.add(";")):this.source.push("return buffer;")),e&&this.source.prepend("var "+e.substring(2)+(r?"":";\n")),this.source.merge()},blockValue:function(e){var t=this.aliasable("helpers.blockHelperMissing"),n=[this.contextName(0)];this.setupHelperArgs(e,0,n);var r=this.popStack();n.splice(1,0,r),this.push(this.source.functionCall(t,"call",n))},ambiguousBlockValue:function(){var e=this.aliasable("helpers.blockHelperMissing"),t=[this.contextName(0)];this.setupHelperArgs("",0,t,!0),this.flushInline();var n=this.topStack();t.splice(1,0,n),this.pushSource(["if (!",this.lastHelper,") { ",n," = ",this.source.functionCall(e,"call",t),"}"])},appendContent:function(e){this.pendingContent?e=this.pendingContent+e:this.pendingLocation=this.source.currentLocation,this.pendingContent=e},append:function(){if(this.isInline())this.replaceStack(function(e){return[" != null ? ",e,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var e=this.popStack();this.pushSource(["if (",e," != null) { ",this.appendToBuffer(e,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(e){this.lastContext=e},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(e,t,n,r){var i=0;r||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(e[i++])),this.resolvePath("context",e,i,t,n)},lookupBlockParam:function(e,t){this.useBlockParams=!0,this.push(["blockParams[",e[0],"][",e[1],"]"]),this.resolvePath("context",t,1)},lookupData:function(e,t,n){e?this.pushStackLiteral("container.data(data, "+e+")"):this.pushStackLiteral("data"),this.resolvePath("data",t,0,!0,n)},resolvePath:function(e,t,n,r,i){var s=this;if(this.options.strict||this.options.assumeObjects)return void this.push(a(this.options.strict&&i,this,t,e));for(var o=t.length;nthis.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var e=this.inlineStack;this.inlineStack=[];for(var t=0,n=e.length;t\n

\n {{#if logos}}\n {{showLogos logos}}\n {{else}}\n {{#if prependW3C}}\n \n {{#if isMemberSubmission}}\n \"W3C\n {{/if}}\n {{#if isTeamSubmission}}\n \"W3C\n {{/if}}\n {{/if}}\n {{/if}}\n

\n

{{title}}

\n {{#if subtitle}}\n

{{subtitle}}

\n {{/if}}\n

{{#if prependW3C}}W3C {{/if}}{{textStatus}}

\n
\n {{#unless isNoTrack}}\n
{{l10n.this_version}}
\n
{{thisVersion}}
\n
{{l10n.latest_published_version}}
\n
{{#if latestVersion}}{{latestVersion}}{{else}}none{{/if}}
\n {{/unless}}\n {{#if edDraftURI}}\n
{{l10n.latest_editors_draft}}
\n
{{edDraftURI}}
\n {{/if}}\n {{#if testSuiteURI}}\n
Test suite:
\n
{{testSuiteURI}}
\n {{/if}}\n {{#if implementationReportURI}}\n
Implementation report:
\n
{{implementationReportURI}}
\n {{/if}}\n {{#if bugTrackerHTML}}\n
{{l10n.bug_tracker}}
\n
{{{bugTrackerHTML}}}
\n {{/if}}\n {{#if isED}}\n {{#if prevED}}\n
Previous editor's draft:
\n
{{prevED}}
\n {{/if}}\n {{/if}}\n {{#if showPreviousVersion}}\n
Previous version:
\n
{{prevVersion}}
\n {{/if}}\n {{#if prevRecURI}}\n {{#if isRec}}\n
Previous Recommendation:
\n
{{prevRecURI}}
\n {{else}}\n
Latest Recommendation:
\n
{{prevRecURI}}
\n {{/if}}\n {{/if}}\n
{{#if multipleEditors}}{{l10n.editors}}{{else}}{{l10n.editor}}{{/if}}
\n {{showPeople \"Editor\" editors}}\n {{#if authors}}\n
{{#if multipleAuthors}}{{l10n.authors}}{{else}}{{l10n.author}}{{/if}}
\n {{showPeople \"Author\" authors}}\n {{/if}}\n {{#if otherLinks}}\n {{#each otherLinks}}\n {{#if key}}\n
{{key}}:
\n {{#if data}}\n {{#each data}}\n {{#if value}}\n
\n {{#if href}}{{/if}}\n {{value}}\n {{#if href}}{{/if}}\n
\n {{else}}\n {{#if href}}\n
{{href}}
\n {{/if}}\n {{/if}}\n {{/each}}\n {{else}}\n {{#if value}}\n
\n {{#if href}}{{/if}}\n {{value}}\n {{#if href}}{{/if}}\n
\n {{else}}\n {{#if href}}\n
\n {{href}}\n
\n {{/if}}\n {{/if}}\n {{/if}}\n {{/if}}\n {{/each}}\n {{/if}}\n
\n {{#if errata}}\n

\n Please check the errata for any errors or issues\n reported since publication.\n

\n {{/if}}\n {{#if alternateFormats}}\n

\n {{#if multipleAlternates}}\n This document is also available in these non-normative formats:\n {{else}}\n This document is also available in this non-normative format:\n {{/if}}\n {{{alternatesHTML}}}\n

\n {{/if}}\n {{#if isRec}}\n

\n The English version of this specification is the only normative version. Non-normative\n translations may also be available.\n

\n {{/if}}\n {{#if isUnofficial}}\n {{#if additionalCopyrightHolders}}\n \n {{else}}\n {{#if overrideCopyright}}\n {{{overrideCopyright}}}\n {{else}}\n \n {{/if}}\n {{/if}}\n {{else}}\n {{#if overrideCopyright}}\n {{{overrideCopyright}}}\n {{else}}\n \n {{/if}}\n {{/if}}\n
\n\n")}),define("tmpl!w3c/templates/sotd.html",["deps/handlebars"],function(e){return e.compile("

{{l10n.sotd}}

\n {{#if isUnofficial}}\n

\n This document is merely a public working draft of a potential specification. It has\n no official standing of any kind and does not represent the support or consensus of any\n standards organisation.\n

\n {{{sotdCustomParagraph}}}\n {{else}}\n {{#if isTagFinding}}\n {{{sotdCustomParagraph}}}\n {{else}}\n {{#if isNoTrack}}\n

\n This document is merely a W3C-internal {{#if isMO}}member-confidential{{/if}} document. It\n has no official standing of any kind and does not represent consensus of the W3C\n Membership.\n

\n {{{sotdCustomParagraph}}}\n {{else}}\n

\n {{{l10n.status_at_publication}}}\n

\n {{#if isSubmission}}\n {{{sotdCustomParagraph}}}\n {{#if isMemberSubmission}}\n

By publishing this document, W3C acknowledges that the Submitting Members have made a formal Submission request to W3C for discussion. Publication of this document by W3C indicates no endorsement of its content by W3C, nor that W3C has, is, or will be allocating any resources to the issues addressed by it. This document is not the product of a chartered W3C group, but is published as potential input to the W3C Process. A W3C Team Comment has been published in conjunction with this Member Submission. Publication of acknowledged Member Submissions at the W3C site is one of the benefits of W3C Membership. Please consult the requirements associated with Member Submissions of section 3.3 of the W3C Patent Policy. Please consult the complete list of acknowledged W3C Member Submissions.

\n {{else}}\n {{#if isTeamSubmission}}\n

If you wish to make comments regarding this document, please send them to\n {{wgPublicList}}@w3.org\n (subscribe,\n archives){{#if subjectPrefix}}\n with {{subjectPrefix}} at the start of your email's subject{{/if}}.

\n

Please consult the complete list of Team Submissions.

\n {{/if}}\n {{/if}}\n {{else}}\n {{#unless sotdAfterWGinfo}}\n {{{sotdCustomParagraph}}}\n {{/unless}}\n {{#unless overrideStatus}}\n

\n This document was published by {{{wgHTML}}} as {{anOrA}} {{longStatus}}.\n {{#if notYetRec}}\n This document is intended to become a W3C Recommendation.\n {{/if}}\n {{#unless isPR}}\n If you wish to make comments regarding this document, please send them to\n {{wgPublicList}}@w3.org\n (subscribe,\n archives){{#if subjectPrefix}}\n with {{subjectPrefix}} at the start of your email's subject{{/if}}.\n {{/unless}}\n {{#if isLC}}The Last Call period ends {{humanLCEnd}}.{{/if}}\n {{#if isCR}}\n W3C publishes a Candidate Recommendation to indicate that the document is believed to be\n stable and to encourage implementation by the developer community. This Candidate\n Recommendation is expected to advance to Proposed Recommendation no earlier than\n {{humanCREnd}}.\n {{/if}}\n {{#if isPER}}\n W3C Advisory Committee Members are invited to\n send formal review comments on this Proposed\n Edited Recommendation to the W3C Team until\n {{humanPEREnd}}.\n Members of the Advisory Committee will find the\n appropriate review form for this document by\n consulting their list of current\n WBS questionnaires.\n {{/if}}\n {{#if isPR}}\n The W3C Membership and other interested parties are invited to review the document and\n send comments to\n {{wgPublicList}}@w3.org\n (subscribe,\n archives)\n through {{humanPREnd}}. Advisory Committee Representatives should consult their\n WBS questionnaires.\n Note that substantive technical comments were expected during the Last Call review\n period that ended {{humanLCEnd}}.\n {{else}}\n {{#unless isPER}}\n All comments are welcome.\n {{/unless}}\n {{/if}}\n

\n {{/unless}}\n {{#if implementationReportURI}}\n

\n Please see the Working Group's implementation\n report.\n

\n {{/if}}\n {{#if sotdAfterWGinfo}}\n {{{sotdCustomParagraph}}}\n {{/if}}\n {{#if notRec}}\n

\n Publication as {{anOrA}} {{textStatus}} does not imply endorsement by the W3C\n Membership. This is a draft document and may be updated, replaced or obsoleted by other\n documents at any time. It is inappropriate to cite this document as other than work in\n progress.\n

\n {{/if}}\n {{#if isRec}}\n

\n This document has been reviewed by W3C Members, by software developers, and by other W3C\n groups and interested parties, and is endorsed by the Director as a W3C Recommendation.\n It is a stable document and may be used as reference material or cited from another\n document. W3C's role in making the Recommendation is to draw attention to the\n specification and to promote its widespread deployment. This enhances the functionality\n and interoperability of the Web.\n

\n {{/if}}\n {{#if isLC}}\n

\n This is a Last Call Working Draft and thus the Working Group has determined that this\n document has satisfied the relevant technical requirements and is sufficiently stable to\n advance through the Technical Recommendation process.\n

\n {{/if}}\n

\n {{#unless isIGNote}}\n This document was produced by\n {{#if multipleWGs}}\n groups\n {{else}}\n a group\n {{/if}} operating under the\n 5 February 2004 W3C Patent\n Policy.\n {{/unless}}\n {{#if recNotExpected}}\n The group does not expect this document to become a W3C Recommendation.\n {{/if}}\n {{#unless isIGNote}}\n {{#if multipleWGs}}\n W3C maintains {{{wgPatentHTML}}}\n {{else}}\n W3C maintains a public list of any patent\n disclosures\n {{/if}}\n made in connection with the deliverables of\n {{#if multipleWGs}}\n each group; these pages also include\n {{else}}\n the group; that page also includes\n {{/if}}\n instructions for disclosing a patent. An individual who has actual knowledge of a patent\n which the individual believes contains\n Essential\n Claim(s) must disclose the information in accordance with\n section\n 6 of the W3C Patent Policy.\n {{/unless}}\n {{#if isIGNote}}\n The disclosure obligations of the Participants of this group are described in the\n charter.\n {{/if}}\n

\n {{#if isNewProcess}}\n

This document is governed by the 1 September 2015 W3C Process Document.\n

\n {{else}}\n

\n This document is governed by the 14 October 2005 W3C Process Document.\n

\n {{/if}}\n {{#if addPatentNote}}

{{{addPatentNote}}}

{{/if}}\n {{/if}}\n {{/if}}\n {{/if}}\n {{/if}}\n
\n")}),define("tmpl!w3c/templates/cgbg-headers.html",["deps/handlebars"],function(e){return e.compile("
\n

\n \n

\n

{{title}}

\n {{#if subtitle}}\n

{{subtitle}}

\n {{/if}}\n

{{longStatus}}

\n
\n {{#if thisVersion}}\n
{{l10n.this_version}}
\n
{{thisVersion}}
\n {{/if}}\n {{#if latestVersion}}\n
{{l10n.latest_published_version}}
\n
{{latestVersion}}
\n {{/if}}\n {{#if edDraftURI}}\n
{{l10n.latest_editors_draft}}
\n
{{edDraftURI}}
\n {{/if}}\n {{#if testSuiteURI}}\n
Test suite:
\n
{{testSuiteURI}}
\n {{/if}}\n {{#if implementationReportURI}}\n
Implementation report:
\n
{{implementationReportURI}}
\n {{/if}}\n {{#if bugTrackerHTML}}\n
{{l10n.bug_tracker}}
\n
{{{bugTrackerHTML}}}
\n {{/if}}\n {{#if prevVersion}}\n
Previous version:
\n
{{prevVersion}}
\n {{/if}}\n {{#unless isCGFinal}}\n {{#if prevED}}\n
Previous editor's draft:
\n
{{prevED}}
\n {{/if}}\n {{/unless}}\n
{{#if multipleEditors}}{{l10n.editors}}{{else}}{{l10n.editor}}{{/if}}
\n {{showPeople \"Editor\" editors}}\n {{#if authors}}\n
{{#if multipleAuthors}}{{l10n.authors}}{{else}}{{l10n.author}}{{/if}}
\n {{showPeople \"Author\" authors}}\n {{/if}}\n {{#if otherLinks}}\n {{#each otherLinks}}\n {{#if key}}\n
{{key}}:
\n {{#if data}}\n {{#each data}}\n {{#if value}}\n
\n {{#if href}}{{/if}}\n {{value}}\n {{#if href}}{{/if}}\n
\n {{else}}\n {{#if href}}\n
{{href}}
\n {{/if}}\n {{/if}}\n {{/each}}\n {{else}}\n {{#if value}}\n
\n {{#if href}}{{/if}}\n {{value}}\n {{#if href}}{{/if}}\n
\n {{else}}\n {{#if href}}\n
\n {{href}}\n
\n {{/if}}\n {{/if}}\n {{/if}}\n {{/if}}\n {{/each}}\n {{/if}}\n
\n {{#if alternateFormats}}\n

\n {{#if multipleAlternates}}\n This document is also available in these non-normative formats: \n {{else}}\n This document is also available in this non-normative format: \n {{/if}}\n {{{alternatesHTML}}}\n

\n {{/if}}\n \n
\n
\n")}),define("tmpl!w3c/templates/cgbg-sotd.html",["deps/handlebars"],function(e){return e.compile("

{{l10n.sotd}}

\n

\n This specification was published by the {{wg}}.\n It is not a W3C Standard nor is it on the W3C Standards Track.\n {{#if isCGFinal}}\n Please note that under the \n W3C Community Final Specification Agreement (FSA) \n other conditions apply.\n {{else}}\n Please note that under the \n W3C Community Contributor License Agreement (CLA)\n there is a limited opt-out and other conditions apply.\n {{/if}}\n Learn more about \n W3C Community and Business Groups.\n

\n {{#unless sotdAfterWGinfo}}\n {{{sotdCustomParagraph}}}\n {{/unless}}\n {{#if wgPublicList}}\n

If you wish to make comments regarding this document, please send them to \n {{wgPublicList}}@w3.org \n (subscribe,\n archives){{#if subjectPrefix}}\n with {{subjectPrefix}} at the start of your\n email's subject{{/if}}.

\n {{/if}}\n {{#if sotdAfterWGinfo}}\n {{{sotdCustomParagraph}}}\n {{/if}}\n
\n")}),define("w3c/headers",["deps/handlebars","core/utils","tmpl!w3c/templates/headers.html","tmpl!w3c/templates/sotd.html","tmpl!w3c/templates/cgbg-headers.html","tmpl!w3c/templates/cgbg-sotd.html","core/pubsubhub"],function(e,t,n,r,i,a,s){return e.registerHelper("showPeople",function(t,n){var r="",i="",a="",s="",o="",l="",c="",u="",p="";this.doRDFa&&("Editor"===t?(c="_:editor0",r=" property='bibo:editor' resource='"+c+"'",i=" property='rdf:first' typeof='foaf:Person'"):"Author"===t&&(i=" property='dc:contributor' typeof='foaf:Person'"),s=" property='foaf:name'",a=" property='foaf:mbox'",o=" property='foaf:workplaceHomepage'",l=" property='foaf:homepage'",p=" property='rdfs:seeAlso'");for(var d="",f=0,h=n.length;f","Editor"===t&&(c=f",d+=m.url?this.doRDFa?""+m.name+"":""+m.name+"":""+m.name+"",m.company&&(d+=", ",d+=m.companyURL?""+m.company+"":m.company),m.mailto&&(d+=", "),m.note&&(d+=" ("+m.note+")"),m.extras){var g=this,b=m.extras.filter(function(e){return e.name&&e.name.trim()}).map(function(e){var t=document.createElement("span"),n=t;if(e.class&&(t.className=e.class),e.href){var r=document.createElement("a");t.appendChild(r),r.href=e.href,n=r,g.doRDFa&&r.setAttribute("property","rdfs:seeAlso")}return n.innerHTML=e.name,t.outerHTML}).join(", ");d+=", "+b}this.doRDFa&&(d+="\n","Editor"===t&&(d+="\n")),d+="\n"}return new e.SafeString(d)}),e.registerHelper("showLogos",function(t){for(var n="

",r=0,i=t.length;r"),a.id&&(n+=""),a.src?(n+=""+a.alt+""),a.id&&(n+="")}return n+="

",new e.SafeString(n)}),{status2maturity:{FPWD:"WD",LC:"WD",FPLC:"WD","FPWD-NOTE":"NOTE","WD-NOTE":"WD","LC-NOTE":"LC","IG-NOTE":"NOTE","WG-NOTE":"NOTE"},status2rdf:{NOTE:"w3p:NOTE",WD:"w3p:WD",LC:"w3p:LastCall",CR:"w3p:CR",PR:"w3p:PR",REC:"w3p:REC",PER:"w3p:PER",RSCND:"w3p:RSCND"},status2text:{NOTE:"Working Group Note","WG-NOTE":"Working Group Note","CG-NOTE":"Co-ordination Group Note","IG-NOTE":"Interest Group Note","Member-SUBM":"Member Submission","Team-SUBM":"Team Submission",MO:"Member-Only Document",ED:"Editor's Draft",FPWD:"First Public Working Draft",WD:"Working Draft","FPWD-NOTE":"Working Group Note","WD-NOTE":"Working Draft","LC-NOTE":"Working Draft",FPLC:"First Public and Last Call Working Draft",LC:"Last Call Working Draft",CR:"Candidate Recommendation",PR:"Proposed Recommendation",PER:"Proposed Edited Recommendation",REC:"Recommendation",RSCND:"Rescinded Recommendation",unofficial:"Unofficial Draft",base:"Document",finding:"TAG Finding","draft-finding":"Draft TAG Finding","CG-DRAFT":"Draft Community Group Report","CG-FINAL":"Final Community Group Report","BG-DRAFT":"Draft Business Group Report","BG-FINAL":"Final Business Group Report"},status2long:{"FPWD-NOTE":"First Public Working Group Note","LC-NOTE":"Last Call Working Draft"},recTrackStatus:["FPWD","WD","FPLC","LC","CR","PR","PER","REC"],noTrackStatus:["MO","unofficial","base","finding","draft-finding","CG-DRAFT","CG-FINAL","BG-DRAFT","BG-FINAL","webspec"],cgbg:["CG-DRAFT","CG-FINAL","BG-DRAFT","BG-FINAL"],precededByAn:["ED","IG-NOTE"],licenses:{cc0:{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"},"w3c-software":{name:"W3C Software Notice and License",short:"W3C Software",url:"https://www.w3.org/Consortium/Legal/2002/copyright-software-20021231"},"w3c-software-doc":{name:"W3C Software and Document Notice and License",short:"W3C Software and Document",url:"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document"},"cc-by":{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}},run:function(e,o,l){void 0===e.doRDFa&&(e.doRDFa=!0),e.license||(e.license="webspec"===e.specStatus?"w3c-software":"w3c"),e.isCCBY="cc-by"===e.license,e.isW3CSoftAndDocLicense="w3c-software-doc"===e.license,"webspec"!==e.specStatus||$.inArray(e.license,["cc0","w3c-software"])||s.pub("error","You cannot use that license with WebSpecs."),"webspec"===e.specStatus||$.inArray(e.license,["cc-by","w3c"])||s.pub("error","You cannot use that license with that type of document."),e.licenseInfo=this.licenses[e.license],e.isCGBG=$.inArray(e.specStatus,this.cgbg)>=0,e.isCGFinal=e.isCGBG&&/G-FINAL$/.test(e.specStatus),e.isBasic="base"===e.specStatus,e.isRegular=!e.isCGBG&&!e.isBasic,e.specStatus||s.pub("error","Missing required configuration: specStatus"),e.isRegular&&!e.shortName&&s.pub("error","Missing required configuration: shortName"),e.title=o.title||"No Title",e.subtitle||(e.subtitle=""),e.publishDate?e.publishDate instanceof Date||(e.publishDate=t.parseSimpleDate(e.publishDate)):e.publishDate=t.parseLastModified(o.lastModified),e.publishYear=e.publishDate.getFullYear(),e.publishHumanDate=t.humanDate(e.publishDate),e.isNoTrack=$.inArray(e.specStatus,this.noTrackStatus)>=0,e.isRecTrack=!e.noRecTrack&&$.inArray(e.specStatus,this.recTrackStatus)>=0,e.isMemberSubmission="Member-SUBM"===e.specStatus,e.isTeamSubmission="Team-SUBM"===e.specStatus,e.isSubmission=e.isMemberSubmission||e.isTeamSubmission,e.anOrA=$.inArray(e.specStatus,this.precededByAn)>=0?"an":"a",e.isTagFinding="finding"===e.specStatus||"draft-finding"===e.specStatus,e.edDraftURI||(e.edDraftURI="","ED"===e.specStatus&&s.pub("warn","Editor's Drafts should set edDraftURI.")),e.maturity=this.status2maturity[e.specStatus]?this.status2maturity[e.specStatus]:e.specStatus;var c="TR";if("Member-SUBM"===e.specStatus?c="Submission":"Team-SUBM"===e.specStatus&&(c="TeamSubmission"),e.isRegular&&(e.thisVersion="https://www.w3.org/"+c+"/"+e.publishDate.getFullYear()+"/"+e.maturity+"-"+e.shortName+"-"+t.concatDate(e.publishDate)+"/"),"ED"===e.specStatus&&(e.thisVersion=e.edDraftURI),e.isRegular&&(e.latestVersion="https://www.w3.org/"+c+"/"+e.shortName+"/"),e.isTagFinding&&(e.latestVersion="https://www.w3.org/2001/tag/doc/"+e.shortName,e.thisVersion=e.latestVersion+"-"+t.concatDate(e.publishDate,"-")),e.previousPublishDate){e.previousMaturity||e.isTagFinding||s.pub("error","previousPublishDate is set, but not previousMaturity"),e.previousPublishDate instanceof Date||(e.previousPublishDate=t.parseSimpleDate(e.previousPublishDate));var u=this.status2maturity[e.previousMaturity]?this.status2maturity[e.previousMaturity]:e.previousMaturity;e.isTagFinding?e.prevVersion=e.latestVersion+"-"+t.concatDate(e.previousPublishDate,"-"):e.isCGBG?e.prevVersion=e.prevVersion||"":e.isBasic?e.prevVersion="":e.prevVersion="https://www.w3.org/TR/"+e.previousPublishDate.getFullYear()+"/"+u+"-"+e.shortName+"-"+t.concatDate(e.previousPublishDate)+"/"}else/NOTE$/.test(e.specStatus)||"FPWD"===e.specStatus||"FPLC"===e.specStatus||"ED"===e.specStatus||e.noRecTrack||e.isNoTrack||e.isSubmission||s.pub("error","Document on track but no previous version: Add previousMaturity previousPublishDate to ReSpec's config."),e.prevVersion||(e.prevVersion="");e.prevRecShortname&&!e.prevRecURI&&(e.prevRecURI="https://www.w3.org/TR/"+e.prevRecShortname),e.editors&&0!==e.editors.length||s.pub("error","At least one editor is required");var p=function(e){e.name||s.pub("error","All authors and editors must have a name.")};e.editors&&e.editors.forEach(p),e.authors&&e.authors.forEach(p),e.multipleEditors=e.editors&&e.editors.length>1,e.multipleAuthors=e.authors&&e.authors.length>1,$.each(e.alternateFormats||[],function(e,t){t.uri&&t.label||s.pub("error","All alternate formats must have a uri and a label.")}),e.multipleAlternates=e.alternateFormats&&e.alternateFormats.length>1,e.alternatesHTML=t.joinAnd(e.alternateFormats,function(e){var t=e.hasOwnProperty("lang")&&e.lang?" hreflang='"+e.lang+"'":"";return t+=e.hasOwnProperty("type")&&e.type?" type='"+e.type+"'":"",""+e.label+""}),e.bugTracker&&(e.bugTracker.new&&e.bugTracker.open?e.bugTrackerHTML=""+e.l10n.file_a_bug+" "+e.l10n.open_parens+""+e.l10n.open_bugs+""+e.l10n.close_parens:e.bugTracker.open?e.bugTrackerHTML="open bugs":e.bugTracker.new&&(e.bugTrackerHTML="file a bug")),e.copyrightStart&&e.copyrightStart==e.publishYear&&(e.copyrightStart="");for(var d in this.status2text)this.status2long[d]||(this.status2long[d]=this.status2text[d]);if(e.longStatus=this.status2long[e.specStatus],e.textStatus=this.status2text[e.specStatus],this.status2rdf[e.specStatus]&&(e.rdfStatus=this.status2rdf[e.specStatus]),e.showThisVersion=!e.isNoTrack||e.isTagFinding,e.showPreviousVersion="FPWD"!==e.specStatus&&"FPLC"!==e.specStatus&&"ED"!==e.specStatus&&!e.isNoTrack&&!e.isSubmission,/NOTE$/.test(e.specStatus)&&!e.prevVersion&&(e.showPreviousVersion=!1),e.isTagFinding&&(e.showPreviousVersion=!!e.previousPublishDate),e.notYetRec=e.isRecTrack&&"REC"!==e.specStatus,e.isRec=e.isRecTrack&&"REC"===e.specStatus,e.isRec&&!e.errata&&s.pub("error","Recommendations must have an errata link."),e.notRec="REC"!==e.specStatus,e.isUnofficial="unofficial"===e.specStatus,e.prependW3C=!e.isUnofficial,e.isED="ED"===e.specStatus,e.isLC="LC"===e.specStatus||"FPLC"===e.specStatus,e.isCR="CR"===e.specStatus,e.isPR="PR"===e.specStatus,e.isPER="PER"===e.specStatus,e.isMO="MO"===e.specStatus,e.isIGNote="IG-NOTE"===e.specStatus,e.dashDate=t.concatDate(e.publishDate,"-"),e.publishISODate=t.isoDate(e.publishDate),e.shortISODate=e.publishISODate.replace(/T.*/,""),e.processVersion=e.processVersion||"2015","2014"==e.processVersion&&(s.pub("warn","Process "+e.processVersion+" has been superceded by Process 2015."),e.processVersion="2015"),e.isNewProcess="2015"==e.processVersion,e.doRDFa){e.rdfStatus?$("html").attr("typeof","bibo:Document "+e.rdfStatus):$("html").attr("typeof","bibo:Document ");var f="bibo: http://purl.org/ontology/bibo/ w3p: http://www.w3.org/2001/02pd/rec54#";$("html").attr("prefix",f),$("html>head").prepend($(""))}var h;h=e.isCGBG?i(e):n(e),$("body",o).prepend($(h)).addClass("h-entry");var m=$("#sotd");!e.isCGBG&&e.isNoTrack&&!e.isTagFinding||m.length||s.pub("error","A custom SotD paragraph is required for your type of document."),e.sotdCustomParagraph=m.html(),m.remove();var g=[e.wg,e.wgURI,e.wgPatentURI];if(g.some(function(e){return $.isArray(e)})&&g.some(function(e){return!$.isArray(e)})&&s.pub("error","If one of 'wg', 'wgURI', or 'wgPatentURI' is an array, they all have to be."),$.isArray(e.wg)){e.multipleWGs=e.wg.length>1,e.wgHTML=t.joinAnd(e.wg,function(t,n){return"the "+t+""});for(var b=[],v=0,y=e.wg.length;vpublic list of any patent disclosures ("+e.wg[v]+")");e.wgPatentHTML=t.joinAnd(b)}else e.multipleWGs=!1,e.wgHTML="the "+e.wg+"";e.isLC&&!e.lcEnd&&s.pub("error","Status is LC but no lcEnd is specified"),"PR"!==e.specStatus||e.lcEnd||s.pub("error","Status is PR but no lcEnd is specified (needed to indicate end of previous LC)"),e.humanLCEnd=t.humanDate(e.lcEnd||""),"CR"!==e.specStatus||e.crEnd||s.pub("error","Status is CR but no crEnd is specified"),e.humanCREnd=t.humanDate(e.crEnd||""),"PR"!==e.specStatus||e.prEnd||s.pub("error","Status is PR but no prEnd is specified"),e.humanPREnd=t.humanDate(e.prEnd||""),e.humanPEREnd=t.humanDate(e.perEnd||""),"PER"!==e.specStatus||e.perEnd||s.pub("error","Status is PER but no perEnd is specified"),e.recNotExpected=!e.isRecTrack&&"WD"==e.maturity&&"FPWD-NOTE"!==e.specStatus,e.isIGNote&&!e.charterDisclosureURI&&s.pub("error","IG-NOTEs must link to charter's disclosure section using charterDisclosureURI"),""!==e.subjectPrefix&&(e.subjectPrefixEnc=encodeURIComponent(e.subjectPrefix));var w;w=e.isCGBG?a(e):r(e),w&&$(w).insertAfter($("#abstract")),!e.implementationReportURI&&(e.isCR||e.isPR||e.isRec)&&s.pub("error","CR, PR, and REC documents need to have an implementationReportURI defined."),e.isTagFinding&&!e.sotdCustomParagraph&&s.pub("error","ReSpec does not support automated SotD generation for TAG findings, please specify one using a
element with ID=sotd."),l()}}}),define("w3c/abstract",["core/pubsubhub"],function(e){return{run:function(t,n,r){var i=$("#abstract");if(i.length){if(0===i.find("p").length&&i.contents().wrapAll($("

")),i.prepend("

"+t.l10n.abstract+"

"),i.addClass("introductory"),t.doRDFa){var a="dc:abstract",s=i.attr("property");s&&(a=s+" "+a),i.attr({property:a})}}else e.pub("error","Document must have one element with ID 'abstract'");r()}}}),define("tmpl!w3c/templates/conformance.html",["deps/handlebars"],function(e){return e.compile("

Conformance

\n

\n As well as sections marked as non-normative, all authoring guidelines, diagrams, examples,\n and notes in this specification are non-normative. Everything else in this specification is\n normative.\n

\n

\n to be interpreted as described in [[!RFC2119]].\n

\n")}),define("w3c/conformance",["tmpl!w3c/templates/conformance.html","core/pubsubhub"],function(e,t){return{run:function(n,r,i){var a=$("#conformance");a.length&&a.prepend(e(n)),t.pub("end","w3c/conformance"),i()}}}),define("core/data-transform",["core/utils"],function(e){return{run:function(t,n,r){$("[data-transform]",n).each(function(t,n){var r=$(n),i=r.attr("data-transform");r.removeAttr("data-transform");var a;try{a=e.runTransforms(r.html(),i)}catch(e){console.error(e)}a&&r.html(a)}),r()}}}),define("core/data-include",["core/utils","core/pubsubhub"],function(e,t){return{run:function(n,r,i){var a=$("[data-include]"),s=a.length,o=function(e){if(e.removeAttr("data-include"),e.removeAttr("data-oninclude"),e.removeAttr("data-include-format"),e.removeAttr("data-include-replace"),s--,s<=0)return i()};return s?void a.each(function(){var n=$(this),i=n.attr("data-include"),a=n.attr("data-include-format")||"html",s=!!n.attr("data-include-replace");$.ajax({dataType:a,url:i,success:function(t){if(t){var l=n.attr("data-oninclude");l&&(t=e.runTransforms(t,l,i)),s?n.replaceWith("text"===a?r.createTextNode(t):t):"text"===a?n.text(t):n.html(t)}o(n)},error:function(e,r,a){t.pub("error","Error including URI="+i+": "+r+" ("+a+")"),o(n)}})}):i()}}}),define("core/inlines",["core/pubsubhub"],function(e){return{run:function(t,n,r){n.normalize(),t.normativeReferences||(t.normativeReferences={}),t.informativeReferences||(t.informativeReferences={}),t.respecRFC2119||(t.respecRFC2119={});var i={},a={};$("abbr[title]",n).each(function(){i[$(this).text()]=$(this).attr("title")}),$("acronym[title]",n).each(function(){a[$(this).text()]=$(this).attr("title")});var s=[];for(var o in i)s.push(o);for(var o in a)s.push(o);s.sort(function(e,t){return t.length").attr({class:"rfc2119",title:g}).text(g)[0]),t.respecRFC2119[g]=!0;else if(/^\[\[/.test(g)){var b=g;if(b=b.replace(/^\[\[/,""),b=b.replace(/\]\]$/,""),0===b.indexOf("\\"))h.appendChild(n.createTextNode("[["+b.replace(/^\\/,"")+"]]"));else{var v=!1;0===b.indexOf("!")&&(v=!0,b=b.replace(/^!/,"")),v?t.normativeReferences[b]=!0:t.informativeReferences[b]=!0,h.appendChild(n.createTextNode("[")),h.appendChild($("").wrapInner($("").attr({class:"bibref",href:"#bib-"+b}).text(b))[0]),h.appendChild(n.createTextNode("]"))}}else i[g]?$(d).parents("abbr").length?h.appendChild(n.createTextNode(g)):h.appendChild($("").attr({title:i[g]}).text(g)[0]):a[g]?$(d).parents("acronym").length?h.appendChild(n.createTextNode(g)):h.appendChild($("").attr({title:a[g]}).text(g)[0]):e.pub("error","Found token '"+g+"' but it does not correspond to anything")}d.parentNode.replaceChild(h,d)}}r()}}}),define("core/dfn",[],function(){return{run:function(e,t,n){t.normalize(),$("[dfn-for]").each(function(){this.setAttribute("data-dfn-for",this.getAttribute("dfn-for").toLowerCase()),this.removeAttribute("dfn-for")}),e.definitionMap||(e.definitionMap=Object.create(null)),$("dfn").each(function(){var t=$(this);t.attr("for")?(t.attr("data-dfn-for",t.attr("for").toLowerCase()),t.removeAttr("for")):t.attr("data-dfn-for",(t.closest("[data-dfn-for]").attr("data-dfn-for")||"").toLowerCase());var n=t.getDfnTitles({isDefinition:!0});n.forEach(function(n){e.definitionMap[n]||(e.definitionMap[n]=[]),e.definitionMap[n].push($(t[0]))})}),n()}}}),define("w3c/rfc2119",["core/utils"],function(e){return{run:function(t,n,r){var i=$("#respecRFC2119");if(i.length){var a=Object.getOwnPropertyNames(t.respecRFC2119).sort();if(a&&a.length){var s="The ",o=function(e){var t=""+e+"";return t};s+=a.length>1?"key words "+e.joinAnd(a,o)+" are ":"key word "+e.joinAnd(a,o)+" is ",s+=i[0].innerHTML,i[0].innerHTML=s}else i.remove()}r()}}}),define("deps/text!core/css/examples.css",[],function(){return"/* --- EXAMPLES --- */\ndiv.example-title {\n min-width: 7.5em;\n color: #b9ab2d;\n}\ndiv.example-title span {\n text-transform: uppercase;\n}\naside.example, div.example, div.illegal-example {\n padding: 0.5em;\n margin: 1em 0;\n position: relative;\n clear: both;\n}\ndiv.illegal-example { color: red }\ndiv.illegal-example p { color: black }\naside.example, div.example {\n padding: .5em;\n border-left-width: .5em;\n border-left-style: solid;\n border-color: #e0cb52;\n background: #fcfaee;\n}\n\naside.example div.example {\n border-left-width: .1em;\n border-color: #999;\n background: #fff;\n}\naside.example div.example div.example-title {\n color: #999;\n}\n"}),define("core/examples",["core/pubsubhub","deps/text!core/css/examples.css"],function(e,t){var n=function(e,t,n,r){var i=n>0?" "+n:"",a=$("
Example"+i+"
");return r.title=t.attr("title"),r.title&&(a.append($(": "+r.title+"")),t.removeAttr("title")),a.addClass("marker"),a};return{run:function(r,i,a){var s=$("pre.example, pre.illegal-example, aside.example"),o=0;s.length&&($(i).find("head link").first().before($("";$(n).find("head link").first().before(a);var s=$(n).find("h2, h3, h4, h5, h6");s.each(function(e,n){var r=$(n);if(!r.hasClass("nolink")){var a=r.attr("id"),s=r.parent();if((s.is("section")||s.is("div"))&&(a=s.hasClass("introductory")||s.hasClass("nolink")?null:s.attr("id")),null!=a){var o=$("");o.attr("class","permalink"),t.doRDFa&&o.attr("typeof","bookmark");var l=r.text(),c=$("
");c.attr({href:"#"+a,"aria-label":"Permalink for "+l,title:"Permalink for "+l}),t.doRDFa&&c.attr("property","url");var u=$("");t.doRDFa&&u.attr({property:"title",content:l}),u.append(i),c.append(u),o.append(c),t.permalinkEdge||r.append(" "),r.append(o)}}})}r()}}}),define("core/id-headers",[],function(){return{run:function(e,t,n){$("h2, h3, h4, h5, h6").each(function(){var e=$(this);if(!e.attr("id")){if(e.parent("section").attr("id")&&0===e.prev().length)return;e.makeID()}}),n()}}}),define("core/rdfa",[],function(){return{run:function(e,t,n){e.doRDFa&&$("section,nav").each(function(){var e=$(this),t="",n=e.children("h1,h2,h3,h4,h5,h6").first(),r=e.attr("id"),i=null;r?t="#"+r:n.length&&(r=n.attr("id"),r&&(t="#"+r,i=r));var a="bibo:hasPart";t.match(/#(abstract|sotd|toc)$/)||e.attr({typeof:"bibo:Chapter",resource:t,property:a}),n.length&&(i||(i=n.makeID("h",r)),n.attr({resource:"#"+i}),n.wrapInner(""))}),n()}}}),define("w3c/aria",[],function(){return{run:function(e,t,n){t.body.hasAttribute("role")||t.body.setAttribute("role","document"),t.body.hasAttribute("id")||t.body.setAttribute("id","respecDocument");var r=document.querySelector("div.head");r&&(r.setAttribute("role","contentinfo"),r.setAttribute("id","respecHeader"));var i=t.querySelector("#toc ol:first-of-type");i&&i.setAttribute("role","directory");var a=1,s=1,o=1;Array.from(t.querySelectorAll(".note-title, .ednote-title, .issue-title")).forEach(function(e){var t=$(e),n=e.classList.contains("issue-title"),r=e.classList.contains("ednote-title"),i=t.parents("section").length+2;e.setAttribute("aria-level",i),e.setAttribute("role","heading"),n?t.makeID("h","issue"+s++):r?t.makeID("h","ednote"+o++):t.makeID("h","note"+a++)}),n()}}}),define("core/shiv",[],function(){return{run:function(e,t,n){var r=t.createComment("[if lt IE 9]>

ReSpec is a document production toolchain, with a notable focus on W3C specifications.

");$("

You can find more information in the documentation.

").appendTo(t),$("

Found a bug in ReSpec? File it!.

").appendTo(t),e.freshModal("About ReSpec",t)}}}),define("ui/dfn-list",[],function(){return{show:function(e,t){var n=$("
    ");Object.keys(t.definitionMap).sort().forEach(function(r){t.definitionMap[r].forEach(function(t){var i=$(""+r+"").attr("href","#"+t.attr("id")).click(function(){e.closeModal()});$("
  • ").append(i).appendTo(n)})}),e.freshModal("List of Definitions",n)}}}),define("ui/save-html",["deps/beautify-html","core/beautify-options","core/pubsubhub","core/utils"],function(e,t,n,r){function i(e){return e.replace(/\n\s*\(-1,i=this,o=$("
    "),l={background:"#eee",border:"1px solid #000",borderRadius:"5px",padding:"5px",margin:"5px",display:"block",width:"100%",color:"#000",textDecoration:"none",textAlign:"center",fontSize:"inherit"},c=function(t){r?$("").appendTo(o).text(t.title).css(l).attr({id:t.id,href:t.url,download:t.fileName,type:t.type||""}).click(function(){e.closeModal()}):$("").appendTo(o).text(t.title).css(l).click(function(){t.popupContent(),e.closeModal()})};c({id:"respec-save-as-html",title:"Save as HTML",url:this.htmlToDataURL(this.toString()),popupContent:function(){i.toHTMLSource()},fileName:"index.html"}),c({id:"respec-save-as-xhtml5",fileName:"index.xhtml",popupContent:function(){i.toXHTMLSource(5)},title:"Save as XHTML5",url:this.htmlToDataURL(this.toXML(5))}),c({id:"respec-save-as-xhtml",fileName:"index.xhtml",popupContent:function(){i.toXHTMLSource(1)},title:"Save as XHTML 1.0",url:this.htmlToDataURL(this.toXML(1))}),c({id:"respec-save-as-epub",fileName:"spec.epub",popupContent:function(){window.open(i.makeEPubHref(),"_blank")},title:"Save as EPUB 3",type:"application/epub+zip",url:this.makeEPubHref()}),s.diffTool&&(s.previousDiffURI||s.previousURI)&&$("").appendTo(o).css(l).click(function(){i.toDiffHTML(),e.closeModal()}),e.freshModal("Save Snapshot",o)},htmlToDataURL:function(e){return e=encodeURIComponent(e),"data:text/html;charset=utf-8,"+e},makeEPubHref:function(){var e="https://labs.w3.org/epub-generator/cgi-bin/epub-generator.py",t=e+"?type=respec&";return t+="url="+encodeURIComponent(a.location.href)},toString:function(){n.pub("save","toString");var s="\n";var f=i(s),h=e.html_beautify(f,t);return h},toXML:function(l){n.pub("save","toXML"+l);var c=a.documentElement.cloneNode(!0);o(c),5!==l&&($.each("section figcaption figure aside".split(" "),function(e,t){$(t,c).renameElement("div").addClass(t)}),$("time",c).renameElement("span").addClass("time").removeAttr("datetime"),$("[role]",c).removeAttr("role"),$("[aria-level]",c).removeAttr("aria-level"),$("style:not([type])",c).attr("type","text/css"),$("script:not([type])",c).attr("type","text/javascript"));var u="\n"}}else 8===e.nodeType?t+="\n\n":3===e.nodeType||4===e.nodeType?t+=b[b.length-1]?e.nodeValue:r.xmlEscape(e.nodeValue):n.pub("warn","Cannot handle serialising nodes of type: "+e.nodeType);return t};u+=v(c)+"";var y=i(u),w=e.html_beautify(y,t);return w},toDiffHTML:function(){n.pub("save","toDiffHTML");var e=window.location.href.replace(/\/[^\/]*$/,"/"),t="\n\nDiff form \n
    \n\n";t+=s.previousDiffURI?"\n":"\n",t+='\n

    Submitting, please wait...

    \n';var i=window.open();i.document.write(t),i.document.close(),i.document.form.submit()},toHTMLSource:function(){var e=window.open();e.document.write("
    "+r.xmlEscape(this.toString())+"
    "),e.document.close()},toXHTMLSource:function(e){var t=window.open();t.document.write("
    "+r.xmlEscape(this.toXML(e))+"
    "),t.document.close()}}}),define("ui/search-specref",["core/biblio"],function(e){function t(e,t,n){return e+" "+(1==e?t:n)}function n(t){var n="",r=0;for(var i in t){var a=t[i];a.aliasOf||(r++,n+="
    ["+(a.id||i)+"]
    "+e.stringifyRef(a)+"
    ")}return{html:n,count:r}}function r(e,n){return n?"We found "+t(n,"result","results")+' for your search for "'+e+'".':'Your search for "'+e+"\" did not match any references in the Specref database.
    Sorry. :'("}function i(e,t){var n=new RegExp("(<[^>]+>)|("+t+")","gi");return(e||"").replace(n,function(e,t,n){return t?t:""+n+""})}return{show:function(e){var t=$("

    "),o=$("
    ");s.appendTo(t),o.appendTo(t),e.freshModal("Search Specref DB",t),a.focus(),t.find("form").on("submit",function(){s.html("Searching…");var e=a.val();return $.when($.getJSON("https://specref.herokuapp.com/search-refs",{q:e}),$.getJSON("https://specref.herokuapp.com/reverse-lookup",{ +urls:e})).done(function(t,l){var c;t=t[0],l=l[0];for(var u in l)c=l[u],t[c.id]=c;var p=n(t);o.html(i(p.html,e)),s.html(r(e,p.count)),a.select()}),!1})}}}),define("w3c/linter",["core/pubsubhub"],function(e){function t(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).map(function(e){return e.textContent}).some(function(e){var t=/(privacy|security)/gim,n=/(considerations)/gim;return t.test(e)&&n.test(e)})}function n(e,t){return Object.getOwnPropertyNames(e).filter(function(e){return e.endsWith("URI")||"prevED"===e}).filter(function(n){return new URL(e[n],t).href.startsWith("http://")})}return{run:function(r,i,a){if(!r.lint||"unofficial"===r.status)return a();var s=[],o="";t(i)||(o="This specification doesn't appear to have any 'Privacy' or 'Security' considerations sections. Please consider adding one, see https://w3ctag.github.io/security-questionnaire/",s.push(o));var l=n(r,i.location.href);l.length&&(o="There are insecure URLs in your respecConfig! Please change the following properties to use 'https://': "+l.join(", ")+".",s.push(o)),s.map(function(t){e.pub("warn",t)}),a()},rules:{findHTTPProps:n,hasPriSecConsiderations:t}}}),require.config({shim:{shortcut:{exports:"shortcut"},Promise:{exports:"Promise"},highlight:{exports:"hljs"},beautify:{exports:"beautify"}},paths:{"beautify-css":"deps/beautify-css","beautify-html":"deps/beautify-html"},deps:["deps/fetch","deps/jquery"]}),define("profile-w3c-common",["deps/domReady","core/base-runner","core/ui","core/respec-ready","core/include-config","core/override-configuration","core/default-root-attr","core/style","w3c/style","w3c/l10n","core/markdown","w3c/headers","w3c/abstract","w3c/conformance","core/data-transform","core/data-include","core/inlines","core/dfn","w3c/rfc2119","core/examples","core/issues-notes","core/requirements","core/best-practices","core/figures","core/biblio","core/webidl-contiguous","core/webidl-oldschool","core/link-to-dfn","core/highlight","core/contrib","core/fix-headers","core/structure","w3c/informative","w3c/permalinks","core/id-headers","core/rdfa","w3c/aria","core/shiv","core/remove-respec","core/location-hash","ui/about-respec","ui/dfn-list","ui/save-html","ui/search-specref","w3c/linter"],function(e,t,n){var r=Array.from(arguments);e(function(){t.runAll(r).then(document.respecIsReady).then(n.show).catch(function(e){console.error(e),n.show()}),n.addCommand("Save Snapshot","ui/save-html","Ctrl+Shift+Alt+S"),n.addCommand("About ReSpec","ui/about-respec","Ctrl+Shift+Alt+A"),n.addCommand("Definition List","ui/dfn-list","Ctrl+Shift+Alt+D"),n.addCommand("Search Specref DB","ui/search-specref","Ctrl+Shift+Alt+space")})}); +//# sourceMappingURL=respec-w3c-common.build.js.map +require(['profile-w3c-common']); \ No newline at end of file diff --git a/section/abstract.md b/section/abstract.md new file mode 100644 index 0000000..c4c5ae0 --- /dev/null +++ b/section/abstract.md @@ -0,0 +1,10 @@ +## Abstract {#abstract} + +This document describes a formal representation to align the +RDF Mapping Language [[RML]] with Target [[paper]] +to describe in RML mapping rules how a generated Knowledge Graph +should be directed and exported. +The current document describes how Target is integrated +with RML through definitions and examples. + +The version of this document is *v1.0.0*. diff --git a/section/examples.md b/section/examples.md new file mode 100644 index 0000000..733da49 --- /dev/null +++ b/section/examples.md @@ -0,0 +1,542 @@ +## Examples {#examples} + +### Subject Map {#subject-map} + +All triples containing the generated subject are exported +to the specified targets in the Subject Map [[RML]]. + +The following example exports all triples containing +the generated subject `http://example.org/{id}` +to an RDF dump with N-Quads as serialization format and GZip compression: + +```turtle "example": " " + a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump>; + rmlt:serialization formats:N-Quads ; + rmlt:compression comp:GZip; +. + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + rml:logicalTarget <#LogicalTarget1>; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ rml:reference "name"; ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ rml:reference "age" ]; + ]; +. +``` + +### Predicate Map {#predicate-map} + +All triples containing the generated predicate are exported +to the specified targets in the Predicate Map [[RML]]. + +The following example exports all triples containing +the generated predicate `foaf:name` to an RDF dump +with Turtle as serialization format and Zip compression: + +```turtle "example": " " + a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; +. + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ rr:template "http://example.org/{id}"; ]; + rr:predicateObjectMap [ + rr:predicateMap [ + rr:constant foaf:name; + rml:logicalTarget <#LogicalTarget1>; + ]; + rr:objectMap [ rml:reference "name" ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ rml:reference "age" ]; + ]; +. +``` + +### Object Map {#object-map} + +All triples containing the generated object are exported +to the specified targets in the Object Map [[RML]]. + +The following example exports all triples containing +the generated object name to an RDF dump +with N-Triples as serialization format: + +```turtle "example": " " + a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource>; + rr:subjectMap [ rr:template "http://example.org/{id}"; ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ + rml:reference "name"; + rml:logicalTarget <#LogicalTarget1>; + ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ rml:reference "age" ]; + ]; +. +``` + +### Graph Map {#graph-map} + +All triples within a named graph are exported to the specified targets +in the Graph Map [[RML]]. +The named graph doesn't influence where the named graph's triples +are exported to by the Target. +If a named graph is spread over multiple targets, +all targets must be combined to access the complete named graph. + +The following example exports all triples in the named graph `ex:MyGraph` +to an SPARQL [[SPARQL]] endpoint using `SPARQL UPDATE`: + +```turtle "example": " " + a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ rml:reference "name"; ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ + rml:reference "age"; + rr:graphMap [ + rml:logicalTarget <#LogicalTarget1>; + rr:template "http://www.example.org/{type}" + ]; + ]; + ]; +. +``` + +### Language Map {#language-map} + +All triples with a language tag are exported to the specified targets +in the Language Map [[RML]]. + +The following examples export all triples with a language tag +to a RDF dump with JSON-LD as serialization format: + +```turtle "example": " " + a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ + rml:reference "name"; + rml:languageMap [ + rml:logicalTarget <#LogicalTarget1>; + rml:reference "language"; + ]; + ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ rml:reference "age"; ]; + ]; +. +``` + +### Combining multiple Targets {#combining-targets} + +Multiple Targets MAY be specified for the same triple +in the same or multiple Term Maps. +Each triple is exported to all the Targets +specified in the triple's Term Maps. + +#### Subject Map and Predicate Map {#subject-and-predicate-map} + +All triples containing the subject `http://example.org/{id}` +are exported to `LogicalTarget1` +and all triples containing the predicate `foaf:name` +are exported to `LogicalTarget2`. + +```turtle "example": " " + a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump1> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump1>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#VoIDDump2> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget2> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump2>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; +. + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + rml:logicalTarget <#LogicalTarget1>; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ + rml:logicalTarget <#LogicalTarget2>; + rr:constant foaf:name + ]; + rr:objectMap [ rml:reference "name"; ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ rml:reference "age" ]; + ]; +. +``` + +#### Subject Map, Predicate Map and Object Map {#subject-predicate-and-object-map} + +All triples containing the subject `http://example.org/{id}` are exported +to `LogicalTarget1`, all triples containing the predicate `foaf:name` +are exported to `LogicalTarget2` and all triples containing the object `"age"` +are exported to `LogicalTarget3`. + +```turtle "example": " " + a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump1> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump1>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#VoIDDump2> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget2> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump2>; + rmlt:serialization formats:N-Quads ; +. + +<#SPARQLUPDATE_target> a sd:Service ; + sd:endpoint ; + sd:supportedLanguage sd:SPARQL11Update ; +. + +<#LogicalTarget3> a rml:logicalTarget; + rmlt:target <#SPARQLEndpoint>; +. + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + rml:logicalTarget <#LogicalTarget1>; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ + rml:logicalTarget <#LogicalTarget2>; + rr:constant foaf:name; + ]; + rr:objectMap [ + rml:reference "name"; + ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ + rml:logicalTarget <#LogicalTarget3>; + rml:reference "age"; + ]; + ]; +. +``` + +#### Language Map and Object Map {#language-and-object-map} + +All triples containing the language tag `language` +are exported to `LogicalTarget1` +and all triples containing the object `"age"` +are exported to `LogicalTarget2`. + +```turtle "example": " " + a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump1> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump1>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#VoIDDump2> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget2> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump2>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; +. + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ + rml:reference "name"; + rml:languageMap [ + rml:logicalTarget <#LogicalTarget1>; + rml:reference "language"; + ]; + ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ + rml:reference "age"; + rml:logicalTarget <#LogicalTarget2>; + ]; + ]; +. +``` + +### Overriding Targets {#overriding-targets} + +In some cases exporting all triples to a target is not desired, +therefore Targets can be overridden when needed +by either using a separate Triples Map which isolates certain triples or +by using FnO functions [[FnO]] as conditions. + +#### Separate Triples Map {#seperate-triples-map} + +Triples can be exported to a specific Target while not to other Targets +by isolating these triples in a separate Triples Map. + +In this example, all triples containing the subject `http://example.org/{id}` +are exported to `LogicalTarget1` +and all triples containing the subject `http://newtarget.org/{id}` +are exported to LogicalTarget2. + +```turtle "example": " " + a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump1> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump1>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#VoIDDump2> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget2> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump2>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; +. + +<#TriplesMap1> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + rml:logicalTarget <#LogicalTarget1>; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ rml:reference "name"; ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ + rml:reference "age"; + ]; + ]; +. + +<#TriplesMap2> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://newtarget.org/{id}"; + rml:logicalTarget <#LogicalTarget2>; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:interest ]; + rr:objectMap [ rml:reference "interest"; ]; + ]; +. +``` + +#### Conditions {#conditions} + +FnO functions MAY be leveraged to export triples +only under certain conditions. +Conditions are already integrated in RML+FnO processors, +thus conditions apply on Targets as well. +Triples are generated and exported based on the FnO condition's evaluation. +Only if the condition is true, the triples are generated and exported. + +```turtle "example": " " + a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump1> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump1>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ rml:reference "name"; ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ + fnml:functionValue [ + rr:predicateObjectMap [ + rr:predicate fno:executes ; + rr:objectMap [ rr:constant idlab-fn:trueCondition ] + ]; + rr:predicateObjectMap [ + rr:predicate idlab-fn:strBoolean ; + rr:objectMap [ rr:constant "true"] + ]; + rr:predicateObjectMap [ + rr:predicate idlab-fn:str ; + rr:objectMap [ + rml:reference "age"; + rml:logicalTarget <#LogicalTarget1>; + ]; + ]; + ]; + ]; + ]; +. +``` diff --git a/section/overview.md b/section/overview.md new file mode 100644 index 0000000..ac7eeba --- /dev/null +++ b/section/overview.md @@ -0,0 +1,24 @@ +## Overview {#overview} + +*This section is non-normative.* + +This document describes the alignment of Target specification with RML +to define how a generated RDF knowledge graph must be exported +in the RML mapping rules. +Target and RML are self-standing specifications +which are aligned through this specification. + +In this document, examples assume +the following namespace prefix bindings unless otherwise stated: + +| Prefix | Namespace | +| --------- | ------------------------------------------------ | +| `rml` | http://semweb.mmlab.be/ns/rml# | +| `rmlt` | http://semweb.mmlab.be/ns/rml-target# | +| `rr` | http://www.w3.org/ns/r2rml# | +| `formats` | https://www.w3.org/ns/formats/ | +| `comp` | http://semweb.mmlab.be/ns/rml-compression# | +| `csvw` | http://www.w3.org/ns/csvw# | +| `foaf` | http://xmlns.com/foaf/0.1/ | +| `fnml` | http://semweb.mmlab.be/ns/fnml# | +| `idlab-fn` | http://example.com/idlab/function/ | diff --git a/section/target-in-rml.md b/section/target-in-rml.md new file mode 100644 index 0000000..ccffd19 --- /dev/null +++ b/section/target-in-rml.md @@ -0,0 +1,81 @@ +## Target in RML {#target-in-rml} + +RML does not specify where generated triples are exported to, +each RML processor has its own way to describe this information +through configuration files or command line parameters. +To incorporate this information in the RML mapping rules, +RML is aligned with the +[Target vocabulary](http://semweb.mmlab.be/ns/rml-target#) +which describes how the generated triples are exported. +RML is aligned with the Target vocabulary +by extending `rr:TermMap` with the `rml:logicalTarget` property +to describe on Term Map [[RML]] level where each triple must be directed to. +A Term Map is a function that generates an RDF term +from a logical reference [[RML]]. +The result of that function is known as the term map's generated +RDF term [[RDF-Concepts]] +such as subjects, predicates, objects, named graphs and language tags. + +A Term Map MAY also contain zero or more `rml:logicalTarget` properties +to export all triples containing the generated term to different targets. +The same Term Map can have multiple targets by specifying +multiple `rml:logicalTarget` properties in the Term Map. + +Multiple Targets MAY be combined by specifying multiple Targets +in the same Term Map or multiple Term Maps of the same RDF triple. +If multiple Targets are defined in the same Term Map, +all triples containing the generated Term are exported +to all the specified Targets. +In case multiple Term Maps of the same RDF triple contain more than one Target, +the generated triples are exported to all the specified Targets. + +```turtle "example": " " +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource [ a rml:LogicalSource; + rml:source [ a csvw:Table; + csvw:url "http://rml.io/data/csvw/Airport.csv"; + csvw:dialect [ a csvw:Dialect; + csvw:delimiter ";”; + csvw:encoding "UTF-8"; + csvw:header "1"^^xsd:boolean; + ]; + ]; + ]; + rr:subjectMap [ a rr:SubjectMap; + rr:template "http://example.com/{id}"; + rml:logicalTarget [ a rmlt:LogicalTarget; + rmlt:target [ a void:Dataset + void:dataDump ; + ]; + rmlt:serialization formats:N-Quads; + ]; + ]; + rr:predicateObjectMap [ a rr:PredicateObjectMap; + rr:predicateMap [ a rr:PredicateMap; + rr:constant foaf:name; + rml:logicalTarget [ a rmlt:LogicalTarget; + rmlt:target [ a void:Dataset + void:dataDump ; + ]; + rmlt:serialization formats:Turtle; + rmlt:compression comp:Zip; + ]; + ]; + rr:objectMap [ a rr:ObjectMap; + rml:reference "name"; + ]; + ]; +. +``` + +If the mapping document contains no Targets, +the processor falls back to the default target, +as it is specified through the processor's +specific configuration file or command line parameters. +If a mapping document contains at least one Target, +the processor will not export generated triples +which do not have a Target assigned. + +| Property | Domain | Range | +| ------------------- | ------------ | -------------------- | +| `rml:logicalTarget` | `rr:TermMap` | `rmlt:LogicalTarget` | From 115b42bd4dc11b616c23873d57327dbade5588fe Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Fri, 2 Apr 2021 10:45:15 +0200 Subject: [PATCH 02/39] readme: update README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0ae2585..8840c98 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# The Function Ontology Specification +# Data IO in RML Specification -Repository for https://w3id.org/function/spec +Repository for https://rml.io/specs/target-in-rml ## Quickstart @@ -11,4 +11,4 @@ Repository for https://w3id.org/function/spec - save as snapshot to function.html [using the respec functionality](https://respec.org/docs/#using-browser) - run `node publish.js` to get the index.html + archived version in the `dist` folder -The `dist` folder contents should mimic the contents on `https://w3id.org/function/spec` +The `dist` folder contents should mimic the contents on `https://rml.io/specs/target-in-rml` From 4c30cb47413abe0eb4d3398868f8c01f984c735f Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 15 Apr 2021 09:26:00 +0200 Subject: [PATCH 03/39] overview: add VoID prefix The examples use the VoID namespace to access RDF datasets, but it isn't mentioned in the list of prefixes in the overview --- section/overview.md | 1 + 1 file changed, 1 insertion(+) diff --git a/section/overview.md b/section/overview.md index ac7eeba..6e503aa 100644 --- a/section/overview.md +++ b/section/overview.md @@ -22,3 +22,4 @@ the following namespace prefix bindings unless otherwise stated: | `foaf` | http://xmlns.com/foaf/0.1/ | | `fnml` | http://semweb.mmlab.be/ns/fnml# | | `idlab-fn` | http://example.com/idlab/function/ | +| `void` | http://rdfs.org/ns/void# | From 465279e2df9133c73a2aa5168e8750e9094d657b Mon Sep 17 00:00:00 2001 From: Gerald Haesendonck Date: Tue, 6 Apr 2021 16:29:24 +0200 Subject: [PATCH 04/39] examples: correct IRIs to Logical Sources. The IRIs which refer to the Logical Sources in the examples were wrong, making the examples unusable. --- section/examples.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/section/examples.md b/section/examples.md index 733da49..3988521 100644 --- a/section/examples.md +++ b/section/examples.md @@ -10,7 +10,7 @@ the generated subject `http://example.org/{id}` to an RDF dump with N-Quads as serialization format and GZip compression: ```turtle "example": " " - a rml:LogicalSource; +<#LogicalSource1> a rml:LogicalSource; rml:source "/data/people.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; @@ -53,7 +53,7 @@ the generated predicate `foaf:name` to an RDF dump with Turtle as serialization format and Zip compression: ```turtle "example": " " - a rml:LogicalSource; +<#LogicalSource1> a rml:LogicalSource; rml:source "/data/people.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; @@ -96,7 +96,7 @@ the generated object name to an RDF dump with N-Triples as serialization format: ```turtle "example": " " - a rml:LogicalSource; +<#LogicalSource1> a rml:LogicalSource; rml:source "/data/people.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; @@ -112,7 +112,7 @@ with N-Triples as serialization format: rmlt:compression comp:GZip; <#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource>; + rml:logicalSource <#LogicalSource1>; rr:subjectMap [ rr:template "http://example.org/{id}"; ]; rr:predicateObjectMap [ rr:predicateMap [ rr:constant foaf:name ]; @@ -141,7 +141,7 @@ The following example exports all triples in the named graph `ex:MyGraph` to an SPARQL [[SPARQL]] endpoint using `SPARQL UPDATE`: ```turtle "example": " " - a rml:LogicalSource; +<#LogicalSource1> a rml:LogicalSource; rml:source "/data/people.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; @@ -157,7 +157,7 @@ to an SPARQL [[SPARQL]] endpoint using `SPARQL UPDATE`: rmlt:compression comp:GZip; <#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource>; + rml:logicalSource <#LogicalSource1>; rr:subjectMap [ rr:template "http://example.org/{id}"; ]; @@ -187,7 +187,7 @@ The following examples export all triples with a language tag to a RDF dump with JSON-LD as serialization format: ```turtle "example": " " - a rml:LogicalSource; +<#LogicalSource1> a rml:LogicalSource; rml:source "/data/people.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; @@ -203,7 +203,7 @@ to a RDF dump with JSON-LD as serialization format: rmlt:compression comp:GZip; <#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource>; + rml:logicalSource <#LogicalSource1>; rr:subjectMap [ rr:template "http://example.org/{id}"; ]; @@ -239,7 +239,7 @@ and all triples containing the predicate `foaf:name` are exported to `LogicalTarget2`. ```turtle "example": " " - a rml:LogicalSource; +<#LogicalSource1> a rml:LogicalSource; rml:source "/data/people.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; @@ -265,7 +265,7 @@ are exported to `LogicalTarget2`. . <#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource>; + rml:logicalSource <#LogicalSource1>; rr:subjectMap [ rr:template "http://example.org/{id}"; rml:logicalTarget <#LogicalTarget1>; @@ -292,7 +292,7 @@ are exported to `LogicalTarget2` and all triples containing the object `"age"` are exported to `LogicalTarget3`. ```turtle "example": " " - a rml:LogicalSource; +<#LogicalSource1> a rml:LogicalSource; rml:source "/data/people.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; @@ -326,7 +326,7 @@ are exported to `LogicalTarget3`. . <#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource>; + rml:logicalSource <#LogicalSource1>; rr:subjectMap [ rr:template "http://example.org/{id}"; rml:logicalTarget <#LogicalTarget1>; @@ -358,7 +358,7 @@ and all triples containing the object `"age"` are exported to `LogicalTarget2`. ```turtle "example": " " - a rml:LogicalSource; +<#LogicalSource1> a rml:LogicalSource; rml:source "/data/people.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; @@ -384,7 +384,7 @@ are exported to `LogicalTarget2`. . <#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource>; + rml:logicalSource <#LogicalSource1>; rr:subjectMap [ rr:template "http://example.org/{id}"; ]; @@ -426,7 +426,7 @@ and all triples containing the subject `http://newtarget.org/{id}` are exported to LogicalTarget2. ```turtle "example": " " - a rml:LogicalSource; +<#LogicalSource1> a rml:LogicalSource; rml:source "/data/people.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; @@ -492,7 +492,7 @@ Triples are generated and exported based on the FnO condition's evaluation. Only if the condition is true, the triples are generated and exported. ```turtle "example": " " - a rml:LogicalSource; +<#LogicalSource1> a rml:LogicalSource; rml:source "/data/people.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; From 1e8a52aeb60b429b4ef5e00978f3c37b72a0dad0 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 15 Apr 2021 10:44:40 +0200 Subject: [PATCH 05/39] spec: replace Google Analytics in favor of Goatcounter We don't contribute to the Big Tech empire --- dev.html | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/dev.html b/dev.html index 4e8df9a..0530cd7 100644 --- a/dev.html +++ b/dev.html @@ -143,23 +143,11 @@ // !!!! IMPORTANT !!!! MAKE THE ABOVE BLINK IN YOUR HEAD }; - + +
    From 7be55f37923667f6d4675f2d7696ecc0064f91c9 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 15 Apr 2021 11:19:27 +0200 Subject: [PATCH 06/39] target-in-rml: always export to default target if none assigned This better matches the default behavior of an RML processor --- section/target-in-rml.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/section/target-in-rml.md b/section/target-in-rml.md index ccffd19..5cae30f 100644 --- a/section/target-in-rml.md +++ b/section/target-in-rml.md @@ -73,8 +73,9 @@ the processor falls back to the default target, as it is specified through the processor's specific configuration file or command line parameters. If a mapping document contains at least one Target, -the processor will not export generated triples -which do not have a Target assigned. +the processor will export the triples to these Targets, +triples which do not have one or more Target(s) assigned, +are exported to the default target of the processor. | Property | Domain | Range | | ------------------- | ------------ | -------------------- | From 86a3efe9ed04dc9fdc0d9d91d1b6140c291490f8 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 15 Apr 2021 11:36:34 +0200 Subject: [PATCH 07/39] abstract: refer to specification instead of paper The ICWE 2021 paper is referenced in the specification anyway --- dev.html | 17 ++++++----------- section/abstract.md | 2 +- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/dev.html b/dev.html index 0530cd7..2b7a682 100644 --- a/dev.html +++ b/dev.html @@ -41,21 +41,16 @@ publisher: "FnO team", date: "05 January 2021", }, - "paper": { // TODO: use DOI + "DataIO": { authors: [ "Dylan Van Assche", - "Gerald Haesendonck", - "Gertjan De Mulder", - "Thomas Delva", - "Pieter Heyvaert", - "Ben De Meester", "Anastasia Dimou" ], - title: "Leveraging Web of Things W3C recommendations for knowledge graphs generation", - href: "https://dylanvanassche.be/publications/#icwe2021", - status: "In Proceedings of the 21st International Conference on Web Engineering 2021", - publisher: "Springer", - date: "2021", // TODO: add month + title: "Target", + href: "https://rml.io/specs/target", + status: "Unofficial Draft", + publisher: "RML team", + date: "24 March 2021", }, }, // These may become useful if the document gets a more 'official' status diff --git a/section/abstract.md b/section/abstract.md index c4c5ae0..2bc534a 100644 --- a/section/abstract.md +++ b/section/abstract.md @@ -1,7 +1,7 @@ ## Abstract {#abstract} This document describes a formal representation to align the -RDF Mapping Language [[RML]] with Target [[paper]] +RDF Mapping Language [[RML]] with Target [[DataIO]] to describe in RML mapping rules how a generated Knowledge Graph should be directed and exported. The current document describes how Target is integrated From 25e81a3fe26ce437187ee334d331eaa4693addc7 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Thu, 15 Apr 2021 14:12:44 +0200 Subject: [PATCH 08/39] examples: improve examples multiple targets Move the statements about multiple targets to the examples, otherwise it seems disconnected --- dev.html | 6 +- section/examples.md | 542 ---------------------------------- section/multi-targets.md | 186 ++++++++++++ section/overriding-targets.md | 132 +++++++++ section/single-targets.md | 225 ++++++++++++++ section/target-in-rml.md | 7 +- 6 files changed, 549 insertions(+), 549 deletions(-) delete mode 100644 section/examples.md create mode 100644 section/multi-targets.md create mode 100644 section/overriding-targets.md create mode 100644 section/single-targets.md diff --git a/dev.html b/dev.html index 2b7a682..2ac26bf 100644 --- a/dev.html +++ b/dev.html @@ -160,7 +160,11 @@
    -
    +
    + +
    + +
    diff --git a/section/examples.md b/section/examples.md deleted file mode 100644 index 3988521..0000000 --- a/section/examples.md +++ /dev/null @@ -1,542 +0,0 @@ -## Examples {#examples} - -### Subject Map {#subject-map} - -All triples containing the generated subject are exported -to the specified targets in the Subject Map [[RML]]. - -The following example exports all triples containing -the generated subject `http://example.org/{id}` -to an RDF dump with N-Quads as serialization format and GZip compression: - -```turtle "example": " " -<#LogicalSource1> a rml:LogicalSource; - rml:source "/data/people.json"; - rml:referenceFormulation ql:JSONPath; - rml:iterator "$.[*]"; -. - -<#VoIDDump> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump>; - rmlt:serialization formats:N-Quads ; - rmlt:compression comp:GZip; -. - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ - rr:template "http://example.org/{id}"; - rml:logicalTarget <#LogicalTarget1>; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:name ]; - rr:objectMap [ rml:reference "name"; ]; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:age ]; - rr:objectMap [ rml:reference "age" ]; - ]; -. -``` - -### Predicate Map {#predicate-map} - -All triples containing the generated predicate are exported -to the specified targets in the Predicate Map [[RML]]. - -The following example exports all triples containing -the generated predicate `foaf:name` to an RDF dump -with Turtle as serialization format and Zip compression: - -```turtle "example": " " -<#LogicalSource1> a rml:LogicalSource; - rml:source "/data/people.json"; - rml:referenceFormulation ql:JSONPath; - rml:iterator "$.[*]"; -. - -<#VoIDDump> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; -. - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ rr:template "http://example.org/{id}"; ]; - rr:predicateObjectMap [ - rr:predicateMap [ - rr:constant foaf:name; - rml:logicalTarget <#LogicalTarget1>; - ]; - rr:objectMap [ rml:reference "name" ]; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:age ]; - rr:objectMap [ rml:reference "age" ]; - ]; -. -``` - -### Object Map {#object-map} - -All triples containing the generated object are exported -to the specified targets in the Object Map [[RML]]. - -The following example exports all triples containing -the generated object name to an RDF dump -with N-Triples as serialization format: - -```turtle "example": " " -<#LogicalSource1> a rml:LogicalSource; - rml:source "/data/people.json"; - rml:referenceFormulation ql:JSONPath; - rml:iterator "$.[*]"; -. - -<#VoIDDump> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ rr:template "http://example.org/{id}"; ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:name ]; - rr:objectMap [ - rml:reference "name"; - rml:logicalTarget <#LogicalTarget1>; - ]; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:age ]; - rr:objectMap [ rml:reference "age" ]; - ]; -. -``` - -### Graph Map {#graph-map} - -All triples within a named graph are exported to the specified targets -in the Graph Map [[RML]]. -The named graph doesn't influence where the named graph's triples -are exported to by the Target. -If a named graph is spread over multiple targets, -all targets must be combined to access the complete named graph. - -The following example exports all triples in the named graph `ex:MyGraph` -to an SPARQL [[SPARQL]] endpoint using `SPARQL UPDATE`: - -```turtle "example": " " -<#LogicalSource1> a rml:LogicalSource; - rml:source "/data/people.json"; - rml:referenceFormulation ql:JSONPath; - rml:iterator "$.[*]"; -. - -<#VoIDDump> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ - rr:template "http://example.org/{id}"; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:name ]; - rr:objectMap [ rml:reference "name"; ]; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:age ]; - rr:objectMap [ - rml:reference "age"; - rr:graphMap [ - rml:logicalTarget <#LogicalTarget1>; - rr:template "http://www.example.org/{type}" - ]; - ]; - ]; -. -``` - -### Language Map {#language-map} - -All triples with a language tag are exported to the specified targets -in the Language Map [[RML]]. - -The following examples export all triples with a language tag -to a RDF dump with JSON-LD as serialization format: - -```turtle "example": " " -<#LogicalSource1> a rml:LogicalSource; - rml:source "/data/people.json"; - rml:referenceFormulation ql:JSONPath; - rml:iterator "$.[*]"; -. - -<#VoIDDump> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ - rr:template "http://example.org/{id}"; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:name ]; - rr:objectMap [ - rml:reference "name"; - rml:languageMap [ - rml:logicalTarget <#LogicalTarget1>; - rml:reference "language"; - ]; - ]; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:age ]; - rr:objectMap [ rml:reference "age"; ]; - ]; -. -``` - -### Combining multiple Targets {#combining-targets} - -Multiple Targets MAY be specified for the same triple -in the same or multiple Term Maps. -Each triple is exported to all the Targets -specified in the triple's Term Maps. - -#### Subject Map and Predicate Map {#subject-and-predicate-map} - -All triples containing the subject `http://example.org/{id}` -are exported to `LogicalTarget1` -and all triples containing the predicate `foaf:name` -are exported to `LogicalTarget2`. - -```turtle "example": " " -<#LogicalSource1> a rml:LogicalSource; - rml:source "/data/people.json"; - rml:referenceFormulation ql:JSONPath; - rml:iterator "$.[*]"; -. - -<#VoIDDump1> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump1>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; - -<#VoIDDump2> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget2> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump2>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; -. - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ - rr:template "http://example.org/{id}"; - rml:logicalTarget <#LogicalTarget1>; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ - rml:logicalTarget <#LogicalTarget2>; - rr:constant foaf:name - ]; - rr:objectMap [ rml:reference "name"; ]; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:age ]; - rr:objectMap [ rml:reference "age" ]; - ]; -. -``` - -#### Subject Map, Predicate Map and Object Map {#subject-predicate-and-object-map} - -All triples containing the subject `http://example.org/{id}` are exported -to `LogicalTarget1`, all triples containing the predicate `foaf:name` -are exported to `LogicalTarget2` and all triples containing the object `"age"` -are exported to `LogicalTarget3`. - -```turtle "example": " " -<#LogicalSource1> a rml:LogicalSource; - rml:source "/data/people.json"; - rml:referenceFormulation ql:JSONPath; - rml:iterator "$.[*]"; -. - -<#VoIDDump1> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump1>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; - -<#VoIDDump2> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget2> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump2>; - rmlt:serialization formats:N-Quads ; -. - -<#SPARQLUPDATE_target> a sd:Service ; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Update ; -. - -<#LogicalTarget3> a rml:logicalTarget; - rmlt:target <#SPARQLEndpoint>; -. - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ - rr:template "http://example.org/{id}"; - rml:logicalTarget <#LogicalTarget1>; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ - rml:logicalTarget <#LogicalTarget2>; - rr:constant foaf:name; - ]; - rr:objectMap [ - rml:reference "name"; - ]; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:age ]; - rr:objectMap [ - rml:logicalTarget <#LogicalTarget3>; - rml:reference "age"; - ]; - ]; -. -``` - -#### Language Map and Object Map {#language-and-object-map} - -All triples containing the language tag `language` -are exported to `LogicalTarget1` -and all triples containing the object `"age"` -are exported to `LogicalTarget2`. - -```turtle "example": " " -<#LogicalSource1> a rml:LogicalSource; - rml:source "/data/people.json"; - rml:referenceFormulation ql:JSONPath; - rml:iterator "$.[*]"; -. - -<#VoIDDump1> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump1>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; - -<#VoIDDump2> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget2> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump2>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; -. - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ - rr:template "http://example.org/{id}"; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:name ]; - rr:objectMap [ - rml:reference "name"; - rml:languageMap [ - rml:logicalTarget <#LogicalTarget1>; - rml:reference "language"; - ]; - ]; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:age ]; - rr:objectMap [ - rml:reference "age"; - rml:logicalTarget <#LogicalTarget2>; - ]; - ]; -. -``` - -### Overriding Targets {#overriding-targets} - -In some cases exporting all triples to a target is not desired, -therefore Targets can be overridden when needed -by either using a separate Triples Map which isolates certain triples or -by using FnO functions [[FnO]] as conditions. - -#### Separate Triples Map {#seperate-triples-map} - -Triples can be exported to a specific Target while not to other Targets -by isolating these triples in a separate Triples Map. - -In this example, all triples containing the subject `http://example.org/{id}` -are exported to `LogicalTarget1` -and all triples containing the subject `http://newtarget.org/{id}` -are exported to LogicalTarget2. - -```turtle "example": " " -<#LogicalSource1> a rml:LogicalSource; - rml:source "/data/people.json"; - rml:referenceFormulation ql:JSONPath; - rml:iterator "$.[*]"; -. - -<#VoIDDump1> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump1>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; - -<#VoIDDump2> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget2> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump2>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; -. - -<#TriplesMap1> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ - rr:template "http://example.org/{id}"; - rml:logicalTarget <#LogicalTarget1>; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:name ]; - rr:objectMap [ rml:reference "name"; ]; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:age ]; - rr:objectMap [ - rml:reference "age"; - ]; - ]; -. - -<#TriplesMap2> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ - rr:template "http://newtarget.org/{id}"; - rml:logicalTarget <#LogicalTarget2>; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:interest ]; - rr:objectMap [ rml:reference "interest"; ]; - ]; -. -``` - -#### Conditions {#conditions} - -FnO functions MAY be leveraged to export triples -only under certain conditions. -Conditions are already integrated in RML+FnO processors, -thus conditions apply on Targets as well. -Triples are generated and exported based on the FnO condition's evaluation. -Only if the condition is true, the triples are generated and exported. - -```turtle "example": " " -<#LogicalSource1> a rml:LogicalSource; - rml:source "/data/people.json"; - rml:referenceFormulation ql:JSONPath; - rml:iterator "$.[*]"; -. - -<#VoIDDump1> a void:Dataset ; - void:dataDump ; -. - -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump1>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource1>; - rr:subjectMap [ - rr:template "http://example.org/{id}"; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:name ]; - rr:objectMap [ rml:reference "name"; ]; - ]; - rr:predicateObjectMap [ - rr:predicateMap [ rr:constant foaf:age ]; - rr:objectMap [ - fnml:functionValue [ - rr:predicateObjectMap [ - rr:predicate fno:executes ; - rr:objectMap [ rr:constant idlab-fn:trueCondition ] - ]; - rr:predicateObjectMap [ - rr:predicate idlab-fn:strBoolean ; - rr:objectMap [ rr:constant "true"] - ]; - rr:predicateObjectMap [ - rr:predicate idlab-fn:str ; - rr:objectMap [ - rml:reference "age"; - rml:logicalTarget <#LogicalTarget1>; - ]; - ]; - ]; - ]; - ]; -. -``` diff --git a/section/multi-targets.md b/section/multi-targets.md new file mode 100644 index 0000000..aa45c41 --- /dev/null +++ b/section/multi-targets.md @@ -0,0 +1,186 @@ +## Combining multiple Targets {#multi-targets} + +Multiple Targets MAY be specified for the same triple +in the same or multiple Term Maps. +If multiple Targets are defined in the same Term Map, +all triples containing the generated Term are exported +to all the specified Targets. +In case multiple Term Maps of the same RDF triple contain more than one Target, +the generated triples are exported to all the specified Targets. + +### Subject Map and Predicate Map {#subject-and-predicate-map} + +All triples containing the subject `http://example.org/{id}` +are exported to `LogicalTarget1` +and all triples containing the predicate `foaf:name` +are exported to `LogicalTarget2`. + +```turtle "example": " " +<#LogicalSource1> a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump1> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump1>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#VoIDDump2> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget2> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump2>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; +. + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + rml:logicalTarget <#LogicalTarget1>; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ + rml:logicalTarget <#LogicalTarget2>; + rr:constant foaf:name + ]; + rr:objectMap [ rml:reference "name"; ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ rml:reference "age" ]; + ]; +. +``` + +### Subject Map, Predicate Map and Object Map {#subject-predicate-and-object-map} + +All triples containing the subject `http://example.org/{id}` are exported +to `LogicalTarget1`, all triples containing the predicate `foaf:name` +are exported to `LogicalTarget2` and all triples containing the object `"age"` +are exported to `LogicalTarget3`. + +```turtle "example": " " +<#LogicalSource1> a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump1> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump1>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#VoIDDump2> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget2> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump2>; + rmlt:serialization formats:N-Quads ; +. + +<#SPARQLUPDATE_target> a sd:Service ; + sd:endpoint ; + sd:supportedLanguage sd:SPARQL11Update ; +. + +<#LogicalTarget3> a rml:logicalTarget; + rmlt:target <#SPARQLEndpoint>; +. + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + rml:logicalTarget <#LogicalTarget1>; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ + rml:logicalTarget <#LogicalTarget2>; + rr:constant foaf:name; + ]; + rr:objectMap [ + rml:reference "name"; + ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ + rml:logicalTarget <#LogicalTarget3>; + rml:reference "age"; + ]; + ]; +. +``` + +### Language Map and Object Map {#language-and-object-map} + +All triples containing the language tag `language` +are exported to `LogicalTarget1` +and all triples containing the object `"age"` +are exported to `LogicalTarget2`. + +```turtle "example": " " +<#LogicalSource1> a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump1> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump1>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#VoIDDump2> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget2> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump2>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; +. + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ + rml:reference "name"; + rml:languageMap [ + rml:logicalTarget <#LogicalTarget1>; + rml:reference "language"; + ]; + ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ + rml:reference "age"; + rml:logicalTarget <#LogicalTarget2>; + ]; + ]; +. +``` diff --git a/section/overriding-targets.md b/section/overriding-targets.md new file mode 100644 index 0000000..27d10f0 --- /dev/null +++ b/section/overriding-targets.md @@ -0,0 +1,132 @@ +## Overriding Targets {#overriding-targets} + +In some cases exporting all triples to a target is not desired, +therefore Targets can be overridden when needed +by either using a separate Triples Map which isolates certain triples or +by using FnO functions [[FnO]] as conditions. + +### Separate Triples Map {#seperate-triples-map} + +Triples can be exported to a specific Target while not to other Targets +by isolating these triples in a separate Triples Map. + +In this example, all triples containing the subject `http://example.org/{id}` +are exported to `LogicalTarget1` +and all triples containing the subject `http://newtarget.org/{id}` +are exported to LogicalTarget2. + +```turtle "example": " " +<#LogicalSource1> a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump1> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump1>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#VoIDDump2> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget2> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump2>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; +. + +<#TriplesMap1> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + rml:logicalTarget <#LogicalTarget1>; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ rml:reference "name"; ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ + rml:reference "age"; + ]; + ]; +. + +<#TriplesMap2> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://newtarget.org/{id}"; + rml:logicalTarget <#LogicalTarget2>; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:interest ]; + rr:objectMap [ rml:reference "interest"; ]; + ]; +. +``` + +### Conditions {#conditions} + +FnO functions MAY be leveraged to export triples +only under certain conditions. +Conditions are already integrated in RML+FnO processors, +thus conditions apply on Targets as well. +Triples are generated and exported based on the FnO condition's evaluation. +Only if the condition is true, the triples are generated and exported. + +```turtle "example": " " +<#LogicalSource1> a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump1> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump1>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ rml:reference "name"; ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ + fnml:functionValue [ + rr:predicateObjectMap [ + rr:predicate fno:executes ; + rr:objectMap [ rr:constant idlab-fn:trueCondition ] + ]; + rr:predicateObjectMap [ + rr:predicate idlab-fn:strBoolean ; + rr:objectMap [ rr:constant "true"] + ]; + rr:predicateObjectMap [ + rr:predicate idlab-fn:str ; + rr:objectMap [ + rml:reference "age"; + rml:logicalTarget <#LogicalTarget1>; + ]; + ]; + ]; + ]; + ]; +. +``` diff --git a/section/single-targets.md b/section/single-targets.md new file mode 100644 index 0000000..5fcac8e --- /dev/null +++ b/section/single-targets.md @@ -0,0 +1,225 @@ +## Single targets {#single-targets} + +### Subject Map {#subject-map} + +All triples containing the generated subject are exported +to the specified targets in the Subject Map [[RML]]. + +The following example exports all triples containing +the generated subject `http://example.org/{id}` +to an RDF dump with N-Quads as serialization format and GZip compression: + +```turtle "example": " " +<#LogicalSource1> a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump>; + rmlt:serialization formats:N-Quads ; + rmlt:compression comp:GZip; +. + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + rml:logicalTarget <#LogicalTarget1>; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ rml:reference "name"; ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ rml:reference "age" ]; + ]; +. +``` + +### Predicate Map {#predicate-map} + +All triples containing the generated predicate are exported +to the specified targets in the Predicate Map [[RML]]. + +The following example exports all triples containing +the generated predicate `foaf:name` to an RDF dump +with Turtle as serialization format and Zip compression: + +```turtle "example": " " +<#LogicalSource1> a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; +. + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ rr:template "http://example.org/{id}"; ]; + rr:predicateObjectMap [ + rr:predicateMap [ + rr:constant foaf:name; + rml:logicalTarget <#LogicalTarget1>; + ]; + rr:objectMap [ rml:reference "name" ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ rml:reference "age" ]; + ]; +. +``` + +### Object Map {#object-map} + +All triples containing the generated object are exported +to the specified targets in the Object Map [[RML]]. + +The following example exports all triples containing +the generated object name to an RDF dump +with N-Triples as serialization format: + +```turtle "example": " " +<#LogicalSource1> a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ rr:template "http://example.org/{id}"; ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ + rml:reference "name"; + rml:logicalTarget <#LogicalTarget1>; + ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ rml:reference "age" ]; + ]; +. +``` + +### Graph Map {#graph-map} + +All triples within a named graph are exported to the specified targets +in the Graph Map [[RML]]. +The named graph doesn't influence where the named graph's triples +are exported to by the Target. +If a named graph is spread over multiple targets, +all targets must be combined to access the complete named graph. + +The following example exports all triples in the named graph `ex:MyGraph` +to an SPARQL [[SPARQL]] endpoint using `SPARQL UPDATE`: + +```turtle "example": " " +<#LogicalSource1> a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ rml:reference "name"; ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ + rml:reference "age"; + rr:graphMap [ + rml:logicalTarget <#LogicalTarget1>; + rr:template "http://www.example.org/{type}" + ]; + ]; + ]; +. +``` + +### Language Map {#language-map} + +All triples with a language tag are exported to the specified targets +in the Language Map [[RML]]. + +The following examples export all triples with a language tag +to a RDF dump with JSON-LD as serialization format: + +```turtle "example": " " +<#LogicalSource1> a rml:LogicalSource; + rml:source "/data/people.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.[*]"; +. + +<#VoIDDump> a void:Dataset ; + void:dataDump ; +. + +<#LogicalTarget1> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump>; + rmlt:serialization formats:N-Triples ; + rmlt:compression comp:GZip; + +<#TriplesMap> a rr:TriplesMap; + rml:logicalSource <#LogicalSource1>; + rr:subjectMap [ + rr:template "http://example.org/{id}"; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:name ]; + rr:objectMap [ + rml:reference "name"; + rml:languageMap [ + rml:logicalTarget <#LogicalTarget1>; + rml:reference "language"; + ]; + ]; + ]; + rr:predicateObjectMap [ + rr:predicateMap [ rr:constant foaf:age ]; + rr:objectMap [ rml:reference "age"; ]; + ]; +. +``` diff --git a/section/target-in-rml.md b/section/target-in-rml.md index 5cae30f..9effae8 100644 --- a/section/target-in-rml.md +++ b/section/target-in-rml.md @@ -22,12 +22,7 @@ The same Term Map can have multiple targets by specifying multiple `rml:logicalTarget` properties in the Term Map. Multiple Targets MAY be combined by specifying multiple Targets -in the same Term Map or multiple Term Maps of the same RDF triple. -If multiple Targets are defined in the same Term Map, -all triples containing the generated Term are exported -to all the specified Targets. -In case multiple Term Maps of the same RDF triple contain more than one Target, -the generated triples are exported to all the specified Targets. +in the same Term Map or multiple Term Maps of the same RDF triple (see [[[!#multiple-targets]]]). ```turtle "example": " " <#TriplesMap> a rr:TriplesMap; From 5be339d22b93622c572e093a7a8c01b8069355ef Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Fri, 16 Apr 2021 11:58:41 +0200 Subject: [PATCH 09/39] examples: fix Combining multiple Targets section Wrong filename and reference --- section/{multi-targets.md => multiple-targets.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename section/{multi-targets.md => multiple-targets.md} (98%) diff --git a/section/multi-targets.md b/section/multiple-targets.md similarity index 98% rename from section/multi-targets.md rename to section/multiple-targets.md index aa45c41..3e8e3a2 100644 --- a/section/multi-targets.md +++ b/section/multiple-targets.md @@ -1,4 +1,4 @@ -## Combining multiple Targets {#multi-targets} +## Combining multiple Targets {#multiple-targets} Multiple Targets MAY be specified for the same triple in the same or multiple Term Maps. From 758c01e486f8796322df43266fb6ceeda6bd52a7 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Fri, 16 Apr 2021 13:11:55 +0200 Subject: [PATCH 10/39] overview: add colored boxes for examples Each example contains multiple parts, each part has its own colored box --- dev.html | 81 +++++++++++++++++++++++++++++++++++++++++++-- section/overview.md | 31 +++++++++++++++++ 2 files changed, 110 insertions(+), 2 deletions(-) diff --git a/dev.html b/dev.html index 2ac26bf..d696b34 100644 --- a/dev.html +++ b/dev.html @@ -6,8 +6,85 @@ + + + + + + + + + +
    +

    Target in RML

    + +

    + Unofficial Draft + +

    +
    + +
    Latest editor's draft:
    https://rml.io/specs/target-in-rml
    + + + + + +
    Editors:
    +
    + (Ghent University – imec – IDLab) +
    + (Ghent University – imec – IDLab) +
    + + +
    This Version
    + https://rml.io/specs/target-in-rml/20210421/ +
    Previous Version
    + https://rml.io/specs/target-in-rml/20210324/ +
    Website
    + https://rml.io/target-in-rml +
    +
    + + + + +
    +
    +

    Abstract

    This document describes a formal representation to align the +RDF Mapping Language [RML] with Target [DataIO] +to describe in RML mapping rules how a generated Knowledge Graph +should be directed and exported. +The current document describes how Target is integrated +with RML through definitions and examples.

    The version of this document is v1.0.0.

    + +

    Status of This Document

    + This document is a draft of a potential specification. It has no official + standing of any kind and does not represent the support or consensus of + any standards organization. +

    +

    This is an early draft, +yet efforts are made to keep things stable.

    +
    + +

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    + The key word MAY in this document + is to be interpreted as described in + BCP 14 + [RFC2119] [RFC8174] + when, and only when, they appear in all capitals, as shown here. +

    + +

    2. Overview

    This section is non-normative.

    This document describes the alignment of Target specification with RML +to define how a generated RDF knowledge graph must be exported +in the RML mapping rules. +Target and RML are self-standing specifications +which are aligned through this specification.

    In this document, examples assume +the following namespace prefix bindings unless otherwise stated:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PrefixNamespace
    rmlhttp://semweb.mmlab.be/ns/rml#
    rmlthttp://semweb.mmlab.be/ns/rml-target#
    rrhttp://www.w3.org/ns/r2rml#
    formatshttps://www.w3.org/ns/formats/
    comphttp://semweb.mmlab.be/ns/rml-compression#
    csvwhttp://www.w3.org/ns/csvw#
    foafhttp://xmlns.com/foaf/0.1/
    fnmlhttp://semweb.mmlab.be/ns/fnml#
    idlab-fnhttp://example.com/idlab/function/
    voidhttp://rdfs.org/ns/void#
    exhttp://example.org/ns#
    schemahttp://schema.org/

    Examples are divided in several boxes, each box has its own color. +Blue boxes contain the input RDF data of the example:

    # This box contains the example's input RDF data.

    The Target description is contained in a pink box:

    # This box contains the example's Target description.

    The data access description is contained in a grey box:

    # This box contains the data access description of the example.

    The RML mapping is contained in a yellow box:

    # This box contains the example's RML mapping.

    The generated output RDF is contained in a green box:

    # This box contains the example's generated output RDF.
    + +

    3. Target in RML

    RML does not specify where generated triples are exported to, +each RML processor has its own way to describe this information +through configuration files or command line parameters. +To incorporate this information in the RML mapping rules, +RML is aligned with the +Target vocabulary +which describes how the generated triples are exported. +RML is aligned with the Target vocabulary +by extending rr:TermMap with the rml:logicalTarget property +to describe on Term Map [RML] level where each triple must be directed to. +A Term Map is a function that generates an RDF term +from a logical reference [RML]. +The result of that function is known as the term map's generated +RDF term [RDF-Concepts] +such as subjects, predicates, objects, named graphs and language tags.

    A Term Map MAY also contain zero or more rml:logicalTarget properties +to export all triples containing the generated term to different targets. +The same Term Map can have multiple targets by specifying +multiple rml:logicalTarget properties in the Term Map.

    Multiple Targets MAY be combined by specifying multiple Targets +in the same Term Map or multiple Term Maps of the same RDF triple +(Section § 5. Combining multiple Targets). +Targets MAY be overriden by using a separate Triples Map +or conditions [FnO] (Section § 6. Overriding Targets).

    If the mapping document contains no Targets, +the processor falls back to the default target, +as it is specified through the processor's +specific configuration file or command line parameters. +If a mapping document contains at least one Target, +the processor will export the triples to these Targets, +triples which do not have one or more Target(s) assigned, +are exported to the default target of the processor.

    + + + + + + + + + + + + +
    PropertyDomainRange
    rml:logicalTargetrr:TermMaprmlt:LogicalTarget

    In the example below, a CSV file is transformed into a knowledge graph. +The CSV file is accessed using the [CSVW] vocabulary, +transformed into a knowledge graph using [RML] mappings, +and exported to two Targets, which are accessed through the [VoID] vocabulary. +The knowledge graph is exported as N-Quads to the first Target, +and as Turtle to the second Target. +The Turtle file of the second Target is also compressed using the Zip +compression algorithm.

    id;name;nickname
    +0;Nathan Ford;Mastermind
    +1;Sophie Devereaux;Grifter
    +2;Eliot Spender;Hitter
    +3;Parker;Thief
    +4;Alec Hardison;Hacker
    <#CSVSourceAccess> a csvw:Table;
    +  csvw:url "https://rml.io/specs/rml-target/Leverage.csv";
    +  csvw:dialect [ a csvw:Dialect;
    +    csvw:delimiter ";";
    +    csvw:encoding "UTF-8";
    +    csvw:header "1"^^xsd:boolean;
    +  ];
    +.
    @base <http://example.com/ns#> .
    +
    +<#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#CSVSourceAccess>;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.com/{id}";
    +    rml:logicalTarget <#TargetDump1>;
    +    rr:class foaf:Person;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:Turtle;
    +  rmlt:compression comp:Zip;
    +.
    <#VoIDDump1> a void:Dataset;
    +    void:dataDump <file:///data/dump1.nt>;
    +.
    +
    +<#VoIDDump2> a void:Dataset;
    +    void:dataDump <file:///data/dump2.ttl.zip>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Nathan Ford" _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Mastermind" _b0 .
    +<http://example.org/1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Sophie Devereaux" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Grifter" _b0 .
    +<http://example.org/2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Eliot Spencer" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Hitter" _b0 .
    +<http://example.org/3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Parker" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Thief" _b0 .
    +<http://example.org/4> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Alec Hardison" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/nickname> "Hacker" _b0 .
    +
    +# file:///data/dump2.ttl.zip
    +@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    +
    +<http://example.org/0>
    +  foaf:name "Nathan Ford";
    +.
    +<http://example.org/1>
    +  foaf:name "Sophie Devereaux";
    +.
    +<http://example.org/2>
    +  foaf:name "Eliot Spencer";
    +.
    +<http://example.org/3>
    +  foaf:name "Parker";
    +.
    +<http://example.org/4>
    +  foaf:name "Alec Hardison";
    +.
    + +

    4. Single targets

    In the following examples, the RDF triples are exported to a single Target. +In some examples, not all RDF triples have a dedicated Target assigned, +therefore, they will be exported to the default Target of the processor.

    4.1 Subject Map

    All triples containing the generated subject are exported +to the specified targets in the Subject Map [RML].

    The following example exports all triples containing +the generated subject http://example.org/{id} +to an RDF dump with N-Quads as serialization format and GZip compression:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +    rml:logicalTarget <#TargetDump1;>
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Quads;
    +  rmlt:compression comp:GZip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq.gz>;
    +.
    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.2 Predicate Map

    All triples containing the generated predicate are exported +to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing +the generated predicate foaf:name to an RDF dump +with Turtle as serialization format and Zip compression:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1;>
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:Turtle;
    +  rmlt:compression comp:Zip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq.gz>;
    +.
    # file:///data/dump1.nq.gz
    +@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    +@base <http://example.com/ns#> .
    +
    +<http://example.org/0>
    +  foaf:name "Monica Geller";
    +.
    +<http://example.org/1>
    +  foaf:name "Rachel Green";
    +.
    +<http://example.org/2>
    +  foaf:name "Joey Tribbiani";
    +.
    +<http://example.org/3>
    +  foaf:name "Chandler Bing";
    +.
    +<http://example.org/4>
    +  foaf:name "Ross Geller";
    +.
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.3 Object Map

    All triples containing the generated object are exported +to the specified targets in the Object Map [RML].

    The following example exports all triples containing +the generated object from the reference name to an RDF dump +with N-Triples as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +      rml:logicalTarget <#TargetDump1;>
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.4 Graph Map

    All triples within a named graph are exported to the specified targets +in the Graph Map [RML]. +The named graph influences to where the named graph's triples +may be exported to as the Target's serialization format must +support named graphs such as N-Quads, JSON-LD or TriG. +When a Target contains a serialization format +which does not support named graphs and a Graph Map is used, +the mapping is considered invalid. +If a named graph is spread over multiple targets, +all targets must be combined to access the complete named graph. +In case RDF triples are not within a specific named graph, +they are added to the default graph as specified +by the [R2RML] specification.

    The following example exports all triples in the named graph ex:Friends +to an RDF dump with N-Quads as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#Target> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +.
    +
    +<#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +    rr:graphMap [
    +      rml:logicalTarget <#TargetDump1>;
    +      rr:constant ex:Friends;
    +    ];
    +   ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .

    4.5 Language Map

    All triples with a language tag are exported to the specified targets +in the Language Map [RML].

    The following examples export all triples with a language tag +to a RDF dump with N-Triples as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#Target> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:compression comp:GZip;
    +.
    +
    +<#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +   ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1;>
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller"@en .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green"@en .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani"@en .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing"@en .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller"@en .
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .
    + +

    5. Combining multiple Targets

    Multiple Targets MAY be specified for the same triple +in the same or multiple Term Maps. +If multiple Targets are defined in the same Term Map, +all triples containing the generated Term are exported +to all the specified Targets. +In case multiple Term Maps of the same RDF triple contain more than one Target, +the generated triples are exported to all the specified Targets. +If multiple Term Maps of an RDF triple refer multiple times to the same Target, +the RDF triple is written only once to the target to avoid duplicates.

    5.1 Multiple Targets in the same Term Map

    All triples are exported to all Targets, if the Term Map contains multiple +Targets. In the example a Subject Map has three specified Targets, +all triples with the subject http://example.org/{@id} are exported +to the three specified Targets:

      +
    • Target 1: /data/dump.nt.zip, N-Triples serialization, Zip compression
    • +
    • Target 2: /data/dump.jsonld.tar.xz, JSON-LD serialization, TarXz compression
    • +
    • Target 3: /data/dump.rdf.tar.gzip, RDF/XML serialization, TarGZip compression
    • +
    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +    rml:logicalTarget <#TargetDump2>;
    +    rml:logicalTarget <#TargetDump3>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +  rmlt:compression comp:Zip;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:JSON-LD;
    +  rmlt:compression comp:TarXz;
    +.
    +<#TargetDump3> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:RDF_XML;
    +  rmlt:compression comp:TarGZip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt.zip>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.jsonld.tar.xz>;
    +.
    +<#VoIDDump3> a void:Dataset ;
    +  void:dataDump <file:///data/dump3.rdf.tar.gz>;
    +.
    # file:///data/dump1.nt.zip
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.jsonld.tar.xz
    +[
    +  {
    +    "@id": "http://example.org/0",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Kara Danvers"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/1",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Alex Danvers"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/2",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "J'onn J'onzz"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/3",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Nia Nal"
    +      }
    +    ]
    +  }
    +]
    +
    +# file:///data/dump3.rdf.tar.gz
    +<?xml version="1.0" encoding="utf-8" ?>
    +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    +    xmlns:foaf="http://xmlns.com/foaf/0.1/">
    +  <rdf:Description rdf:about="http://example.org/0">
    +    <foaf:name>Kara Danvers</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/1">
    +    <foaf:name>Alex Danvers</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/2">
    +    <foaf:name>J'onn J'onzz</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/3">
    +    <foaf:name>Nia Nal</foaf:name>
    +  </rdf:Description>
    +</rdf:RDF>

    5.2 Subject Map and Predicate Map

    All triples containing the subject http://example.org/{id} +are exported to TargetDump1 +and all triples containing the predicate foaf:name +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.3 Subject Map and Object Map

    All triples containing the subject http://example.org/{id} +are exported to TargetDump1 +and all triples containing the object reference name/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.4 Predicate Map and Object Map

    All triples containing the predicate foaf:name +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.5 Subject Map, Predicate Map and Object Map

    All triples containing the subject http://example.org/{@id} +are exported to TargetDump1 +and all triples containing the object reference nickname/text() or +predicate foaf:nickname are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.6 Subject Map and Graph Map

    All triples containing the subject http://example.org/{@id} +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Object Map and Graph Map

    All triples containing the predicate foaf:nickname +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Language Map and Graph Map

    All triples containing the language tag en +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2. +The other triples are exported to the default target of the processor +as there is no dedicated Target assigned to triples containing +foaf:nickname as predicate.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    +
    +# default target of processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.9 Language Map and Object Map

    All triples containing the language tag en +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.10 Multiple Predicate Maps

    All triples containing the predicate foaf:name +are exported to TargetDump1 +and all triples containing the predicate foaf:nickname +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Object Maps

    All triples containing the object reference name/text() +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Graph Maps

    All triples within the named graph ex:Characters +are exported to TargetDump1 +and all triples within the named graph ex:NickNames +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump1>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:NickNames;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" <http://example.org/Nicknames> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" <http://example.org/Nicknames> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" <http://example.org/Nicknames> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" <http://example.org/Nicknames> .
    + +

    6. Overriding Targets

    In some cases exporting all triples to a target is not desired, +therefore Targets can be overridden when needed +by either using a separate Triples Map which isolates certain triples or +by using FnO functions [FnO] as conditions.

    6.1 Separate Triples Map

    Triples can be exported to a specific Target while not to other Targets +by isolating these triples in a separate Triples Map.

    In this example, the same subject and object are used in both Triples Maps, +but with a diffent predicate. The triples with the first predicate foaf:name +are exported to the first Target and the triples with the second predicate +schema:name to the second Target.

    # Results of DBPedia SPARQL query
    +actor,name,nickname
    +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    +  sd:endpoint ;
    +  sd:supportedLanguage sd:SPARQL11Query;
    +  sd:resultFormat formats:SPARQL_Results_CSV;
    +.
    +
    <#TriplesMap1> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +
    +<#TriplesMap2> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump2>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant schema:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +.
    +
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nt
    +<http://dbpedia.org/resource/Kevin_Sussman> <http://xmlns.com/foaf/0.1/name> "Kevin Sussman" .
    +<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    +<http://dbpedia.org/resource/Sara_Gilbert> <http://xmlns.com/foaf/0.1/name> "Sara Gilbert" .
    +<http://dbpedia.org/resource/Kunal_Nayyar> <http://xmlns.com/foaf/0.1/name> "Kunal Nayyar" .
    +<http://dbpedia.org/resource/Laura_Spencer> <http://xmlns.com/foaf/0.1/name> "Laura Spencer" .
    +<http://dbpedia.org/resource/Simon_Helberg> <http://xmlns.com/foaf/0.1/name> "Simon Helberg" .
    +<http://dbpedia.org/resource/Johnny_Galecki> <http://xmlns.com/foaf/0.1/name> "Johnny Galecki" .
    +<http://dbpedia.org/resource/Mayim_Bialik> <http://xmlns.com/foaf/0.1/name> "Mayim Bialik" .
    +<http://dbpedia.org/resource/Melissa_Rauch> <http://xmlns.com/foaf/0.1/name> "Melissa Rauch" .
    +
    +# file:///data/dump2.nt
    +<http://dbpedia.org/resource/Kevin_Sussman> <http://schema.org/name> "Kevin Sussman" .
    +<http://dbpedia.org/resource/Jim_Parsons> <http://schema.org/name> "Jim Parsons" .
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://schema.org/name> "Kaley Cuoco" .
    +<http://dbpedia.org/resource/Sara_Gilbert> <http://schema.org/name> "Sara Gilbert" .
    +<http://dbpedia.org/resource/Kunal_Nayyar> <http://schema.org/name> "Kunal Nayyar" .
    +<http://dbpedia.org/resource/Laura_Spencer> <http://schema.org/name> "Laura Spencer" .
    +<http://dbpedia.org/resource/Simon_Helberg> <http://schema.org/name> "Simon Helberg" .
    +<http://dbpedia.org/resource/Johnny_Galecki> <http://schema.org/name> "Johnny Galecki" .
    +<http://dbpedia.org/resource/Mayim_Bialik> <http://schema.org/name> "Mayim Bialik" .
    +<http://dbpedia.org/resource/Melissa_Rauch> <http://schema.org/name> "Melissa Rauch" .

    6.2 Conditions

    FnO functions MAY be leveraged to export triples +only under certain conditions. +Conditions are already integrated in RML+FnO processors, +thus conditions apply on Targets as well. +Triples are generated and exported based on the FnO condition's evaluation. +Only if the condition is true, the triples are generated and exported.

    In the example, the triples with Jim Parsons as object are exported +to the first Target, triples with Kaley Cuoco as object are exported +to the second Target.

    # Results of DBPedia SPARQL query
    +actor,name,nickname
    +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    +  sd:endpoint ;
    +  sd:supportedLanguage sd:SPARQL11Query;
    +  sd:resultFormat formats:SPARQL_Results_CSV;
    +.
    +
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ 
    +    rr:predicateMap [ rr:constant foaf:name ];
    +    rr:objectMap [
    +      fnml:functionValue [
    +        rr:predicateObjectMap [
    +          rr:predicate fno:executes ;
    +          rr:objectMap [ rr:constant idlab-fn:decide ]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:expectedStr ;
    +          rr:objectMap [ rr:constant "Jim Parsons"]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:str ;
    +          rr:objectMap [ 
    +            rml:reference "name";
    +            rml:logicalTarget <#TargetDump1>;
    +          ];
    +        ];
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ 
    +    rr:predicateMap [ rr:constant foaf:name ];
    +    rr:objectMap [
    +      fnml:functionValue [
    +        rr:predicateObjectMap [
    +          rr:predicate fno:executes ;
    +          rr:objectMap [ rr:constant idlab-fn:decide ]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:expectedStr ;
    +          rr:objectMap [ rr:constant "Kaley Cuoco"]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:str ;
    +          rr:objectMap [ 
    +            rml:reference "name";
    +            rml:logicalTarget <#TargetDump2>;
    +          ];
    +        ];
    +      ];
    +    ];
    +  ];
    +
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    +
    +# file:///data/dump2.nt
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    + + + +

    A. References

    +

    A.1 Normative references

    +
    [CSVW]
    CSV on the Web: A Primer. W3C. 25 February 2016. W3C Working Group Note. URL: https://www.w3.org/TR/tabular-data-primer/
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [R2RML]
    R2RML: RDB to RDF Mapping Language. Souripriya Das; Seema Sundara; Richard Cyganiak. W3C. 27 September 2012. W3C Recommendation. URL: https://www.w3.org/TR/r2rml/
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [VoID]
    Describing Linked Datasets with the VoID Vocabulary. Keith Alexander; Richard Cyganiak; Michael Hausenblas; Jun Zhao. W3C. 3 March 2011. W3C Note. URL: https://www.w3.org/TR/void/
    +
    +

    A.2 Informative references

    +
    [DataIO]
    Target. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/target
    +
    \ No newline at end of file diff --git a/dist/index.html b/dist/index.html index abf76cd..3d97c1f 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1,18 +1,8 @@ - + - - + + +
    @@ -265,7 +329,7 @@

    Target in RML

    Unofficial Draft - +

    @@ -284,7 +348,7 @@

    This Version
    - https://rml.io/specs/target-in-rml/20210324/ + https://rml.io/specs/target-in-rml/20210421/
    Previous Version
    https://rml.io/specs/target-in-rml/20210324/
    Website
    @@ -302,7 +366,7 @@


    Abstract

    This document describes a formal representation to align the -RDF Mapping Language [RML] with Target [paper] +RDF Mapping Language [RML] with Target [DataIO] to describe in RML mapping rules how a generated Knowledge Graph should be directed and exported. The current document describes how Target is integrated @@ -315,7 +379,7 @@

    This is an early draft, yet efforts are made to keep things stable.

    -

    +

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    The key word MAY in this document @@ -373,7 +437,20 @@

    idlab-fn http://example.com/idlab/function/ -

    + +void +http://rdfs.org/ns/void# + + +ex +http://example.org/ns# + + +schema +http://schema.org/ + +

    Examples are divided in several boxes, each box has its own color. +Blue boxes contain the input RDF data of the example:

    # This box contains the example's input RDF data.

    The Target description is contained in a pink box:

    # This box contains the example's Target description.

    The data access description is contained in a grey box:

    # This box contains the data access description of the example.

    The RML mapping is contained in a yellow box:

    # This box contains the example's RML mapping.

    The generated output RDF is contained in a green box:

    # This box contains the example's generated output RDF.

    3. Target in RML

    RML does not specify where generated triples are exported to, each RML processor has its own way to describe this information @@ -393,58 +470,17 @@

    to export all triples containing the generated term to different targets. The same Term Map can have multiple targets by specifying multiple rml:logicalTarget properties in the Term Map.

    Multiple Targets MAY be combined by specifying multiple Targets -in the same Term Map or multiple Term Maps of the same RDF triple. -If multiple Targets are defined in the same Term Map, -all triples containing the generated Term are exported -to all the specified Targets. -In case multiple Term Maps of the same RDF triple contain more than one Target, -the generated triples are exported to all the specified Targets.

    -
    - Example 1: -
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source [ a csvw:Table;
    -      csvw:url "http://rml.io/data/csvw/Airport.csv";
    -      csvw:dialect [ a csvw:Dialect;
    -        csvw:delimiter ";”;
    -        csvw:encoding "UTF-8";
    -        csvw:header "1"^^xsd:boolean;
    -      ];
    -    ];
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.com/{id}";
    -    rml:logicalTarget [ a rmlt:LogicalTarget;
    -      rmlt:target [ a void:Dataset
    -        void:dataDump <file:///data/dump1.nq>;
    -      ];
    -      rmlt:serialization formats:N-Quads;
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget [ a rmlt:LogicalTarget;
    -         rmlt:target [ a void:Dataset
    -           void:dataDump <file:///data/dump2.ttl>;
    -         ];
    -         rmlt:serialization formats:Turtle;
    -         rmlt:compression comp:Zip;
    -      ];
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -.
    -
    -

    If the mapping document contains no Targets, +in the same Term Map or multiple Term Maps of the same RDF triple +(Section § 5. Combining multiple Targets). +Targets MAY be overriden by using a separate Triples Map +or conditions [FnO] (Section § 6. Overriding Targets).

    If the mapping document contains no Targets, the processor falls back to the default target, as it is specified through the processor's specific configuration file or command line parameters. If a mapping document contains at least one Target, -the processor will not export generated triples -which do not have a Target assigned.

    +the processor will export the triples to these Targets, +triples which do not have one or more Target(s) assigned, +are exported to the default target of the processor.

    @@ -457,536 +493,1785 @@

    -
    Propertyrr:TermMap rmlt:LogicalTarget

    - -

    4. Examples

    4.1 Subject Map

    All triples containing the generated subject are exported -to the specified targets in the Subject Map [RML].

    The following example exports all triples containing -the generated subject http://example.org/{id} -to an RDF dump with N-Quads as serialization format and GZip compression:

    -
    - Example 2: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt.gz>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Quads ;
    -  rmlt:compression comp:GZip;
    -.
    +

    In the example below, a CSV file is transformed into a knowledge graph. +The CSV file is accessed using the [CSVW] vocabulary, +transformed into a knowledge graph using [RML] mappings, +and exported to two Targets, which are accessed through the [VoID] vocabulary. +The knowledge graph is exported as N-Quads to the first Target, +and as Turtle to the second Target. +The Turtle file of the second Target is also compressed using the Zip +compression algorithm.

    id;name;nickname
    +0;Nathan Ford;Mastermind
    +1;Sophie Devereaux;Grifter
    +2;Eliot Spender;Hitter
    +3;Parker;Thief
    +4;Alec Hardison;Hacker
    <#CSVSourceAccess> a csvw:Table;
    +  csvw:url "https://rml.io/specs/rml-target/Leverage.csv";
    +  csvw:dialect [ a csvw:Dialect;
    +    csvw:delimiter ";";
    +    csvw:encoding "UTF-8";
    +    csvw:header "1"^^xsd:boolean;
    +  ];
    +.
    @base <http://example.com/ns#> .
     
     <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#CSVSourceAccess>;
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.com/{id}";
    +    rml:logicalTarget <#TargetDump1>;
    +    rr:class foaf:Person;
       ];
    -.
    -
    -

    4.2 Predicate Map

    All triples containing the generated predicate are exported -to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing -the generated predicate foaf:name to an RDF dump -with Turtle as serialization format and Zip compression:

    -
    - Example 3: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ 
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
           rr:constant foaf:name;
    -      rml:logicalTarget <#LogicalTarget1>; 
    +      rml:logicalTarget <#TargetDump2>;
         ];
    -    rr:objectMap [ rml:reference "name" ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    -  ];
    -.
    -
    -

    4.3 Object Map

    All triples containing the generated object are exported -to the specified targets in the Object Map [RML].

    The following example exports all triples containing -the generated object name to an RDF dump -with N-Triples as serialization format:

    -
    - Example 4: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ 
    +    rr:objectMap [ a rr:ObjectMap;
           rml:reference "name";
    -      rml:logicalTarget <#LogicalTarget1>;
         ];
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname";
    +    ];
       ];
    -.
    -
    -

    4.4 Graph Map

    All triples within a named graph are exported to the specified targets -in the Graph Map [RML]. -The named graph doesn't influence where the named graph's triples -are exported to by the Target. -If a named graph is spread over multiple targets, -all targets must be combined to access the complete named graph.

    The following example exports all triples in the named graph ex:MyGraph -to an SPARQL [SPARQL] endpoint using SPARQL UPDATE:

    -
    - Example 5: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
     
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:Turtle;
    +  rmlt:compression comp:Zip;
    +.
    <#VoIDDump1> a void:Dataset;
    +    void:dataDump <file:///data/dump1.nt>;
     .
     
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +<#VoIDDump2> a void:Dataset;
    +    void:dataDump <file:///data/dump2.ttl.zip>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Nathan Ford" _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Mastermind" _b0 .
    +<http://example.org/1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Sophie Devereaux" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Grifter" _b0 .
    +<http://example.org/2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Eliot Spencer" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Hitter" _b0 .
    +<http://example.org/3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Parker" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Thief" _b0 .
    +<http://example.org/4> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Alec Hardison" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/nickname> "Hacker" _b0 .
     
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ 
    -      rml:reference "age";
    -      rr:graphMap [
    -        rml:logicalTarget <#LogicalTarget1>;
    -        rr:template "http://www.example.org/{type}" 
    -      ];
    -    ];
    -  ];
    +# file:///data/dump2.ttl.zip
    +@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    +
    +<http://example.org/0>
    +  foaf:name "Nathan Ford";
     .
    -
    -

    4.5 Language Map

    All triples with a language tag are exported to the specified targets -in the Language Map [RML].

    The following examples export all triples with a language tag -to a RDF dump with JSON-LD as serialization format:

    -
    - Example 6: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    +<http://example.org/1>
    +  foaf:name "Sophie Devereaux";
     .
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    +<http://example.org/2>
    +  foaf:name "Eliot Spencer";
     .
    +<http://example.org/3>
    +  foaf:name "Parker";
    +.
    +<http://example.org/4>
    +  foaf:name "Alec Hardison";
    +.
    -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource>; - rr:subjectMap [ +

    4. Single targets

    In the following examples, the RDF triples are exported to a single Target. +In some examples, not all RDF triples have a dedicated Target assigned, +therefore, they will be exported to the default Target of the processor.

    4.1 Subject Map

    All triples containing the generated subject are exported +to the specified targets in the Subject Map [RML].

    The following example exports all triples containing +the generated subject http://example.org/{id} +to an RDF dump with N-Quads as serialization format and GZip compression:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
         rr:template "http://example.org/{id}";
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ 
    +    rml:logicalTarget <#TargetDump1;>
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
           rml:reference "name";
    -      rml:languageMap [
    -        rml:logicalTarget <#LogicalTarget1>;
    -        rml:reference "language";
    -      ]; 
         ];
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age"; ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
       ];
    -.
    -
    -

    4.6 Combining multiple Targets

    Multiple Targets MAY be specified for the same triple -in the same or multiple Term Maps. -Each triple is exported to all the Targets -specified in the triple's Term Maps.

    4.6.1 Subject Map and Predicate Map

    All triples containing the subject http://example.org/{id} -are exported to LogicalTarget1 -and all triples containing the predicate foaf:name -are exported to LogicalTarget2.

    -
    - Example 7: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    -.
    -
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples ;
    +  rmlt:serialization formats:N-Quads;
       rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq.gz>;
    +.
    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.2 Predicate Map

    All triples containing the generated predicate are exported +to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing +the generated predicate foaf:name to an RDF dump +with Turtle as serialization format and Zip compression:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
         rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ 
    -      rml:logicalTarget <#LogicalTarget2>;
    -      rr:constant foaf:name 
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1;>
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
         ];
    -    rr:objectMap [ rml:reference "name"; ];
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
       ];
    -.
    -
    -

    4.6.2 Subject Map, Predicate Map and Object Map

    All triples containing the subject http://example.org/{id} are exported -to LogicalTarget1, all triples containing the predicate foaf:name -are exported to LogicalTarget2 and all triples containing the object "age" -are exported to LogicalTarget3.

    -
    - Example 8: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +  rmlt:serialization formats:Turtle;
    +  rmlt:compression comp:Zip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq.gz>;
    +.
    # file:///data/dump1.nq.gz
    +@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    +@base <http://example.com/ns#> .
     
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    +<http://example.org/0>
    +  foaf:name "Monica Geller";
     .
    -
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Quads ;
    +<http://example.org/1>
    +  foaf:name "Rachel Green";
     .
    -
    -<#SPARQLUPDATE_target> a sd:Service ;
    -  sd:endpoint  <http://example.org/sparql-update> ;
    -  sd:supportedLanguage sd:SPARQL11Update ;
    +<http://example.org/2>
    +  foaf:name "Joey Tribbiani";
     .
    -
    -<#LogicalTarget3> a rml:logicalTarget;
    -  rmlt:target <#SPARQLEndpoint>;
    +<http://example.org/3>
    +  foaf:name "Chandler Bing";
    +.
    +<http://example.org/4>
    +  foaf:name "Ross Geller";
     .
     
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.3 Object Map

    All triples containing the generated object are exported +to the specified targets in the Object Map [RML].

    The following example exports all triples containing +the generated object from the reference name to an RDF dump +with N-Triples as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
         rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ 
    -      rml:logicalTarget <#LogicalTarget2>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
           rr:constant foaf:name;
         ];
    -    rr:objectMap [ 
    -      rml:reference "name"; 
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +      rml:logicalTarget <#TargetDump1;>
         ];
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [
    -      rml:logicalTarget <#LogicalTarget3>;
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
           rml:reference "age";
         ];
       ];
    -.
    -
    -

    4.6.3 Language Map and Object Map

    All triples containing the language tag language -are exported to LogicalTarget1 -and all triples containing the object "age" -are exported to LogicalTarget2.

    -
    - Example 9: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    -.
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
     
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.4 Graph Map

    All triples within a named graph are exported to the specified targets +in the Graph Map [RML]. +The named graph influences to where the named graph's triples +may be exported to as the Target's serialization format must +support named graphs such as N-Quads, JSON-LD or TriG. +When a Target contains a serialization format +which does not support named graphs and a Graph Map is used, +the mapping is considered invalid. +If a named graph is spread over multiple targets, +all targets must be combined to access the complete named graph. +In case RDF triples are not within a specific named graph, +they are added to the default graph as specified +by the [R2RML] specification.

    The following example exports all triples in the named graph ex:Friends +to an RDF dump with N-Quads as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#Target> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
     .
     
     <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
         rr:template "http://example.org/{id}";
    +    rr:graphMap [
    +      rml:logicalTarget <#TargetDump1>;
    +      rr:constant ex:Friends;
    +    ];
        ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ 
    -      rml:reference "name"; 
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .

    4.5 Language Map

    All triples with a language tag are exported to the specified targets +in the Language Map [RML].

    The following examples export all triples with a language tag +to a RDF dump with N-Triples as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#Target> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:compression comp:GZip;
    +.
    +
    +<#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +   ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
           rml:languageMap [
    -        rml:logicalTarget <#LogicalTarget1>;
    -        rml:reference "language";
    +        rml:logicalTarget <#TargetDump1;>
    +        rr:constant "en";
           ];
         ];
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ 
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
           rml:reference "age";
    -      rml:logicalTarget <#LogicalTarget2>;
         ];
       ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller"@en .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green"@en .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani"@en .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing"@en .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller"@en .
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .
    + +

    5. Combining multiple Targets

    Multiple Targets MAY be specified for the same triple +in the same or multiple Term Maps. +If multiple Targets are defined in the same Term Map, +all triples containing the generated Term are exported +to all the specified Targets. +In case multiple Term Maps of the same RDF triple contain more than one Target, +the generated triples are exported to all the specified Targets. +If multiple Term Maps of an RDF triple refer multiple times to the same Target, +the RDF triple is written only once to the target to avoid duplicates.

    5.1 Multiple Targets in the same Term Map

    All triples are exported to all Targets, if the Term Map contains multiple +Targets. In the example a Subject Map has three specified Targets, +all triples with the subject http://example.org/{@id} are exported +to the three specified Targets:

      +
    • Target 1: /data/dump.nt.zip, N-Triples serialization, Zip compression
    • +
    • Target 2: /data/dump.jsonld.tar.xz, JSON-LD serialization, TarXz compression
    • +
    • Target 3: /data/dump.rdf.tar.gzip, RDF/XML serialization, TarGZip compression
    • +
    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +    rml:logicalTarget <#TargetDump2>;
    +    rml:logicalTarget <#TargetDump3>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +  rmlt:compression comp:Zip;
     .
    -
    -

    4.7 Overriding Targets

    In some cases exporting all triples to a target is not desired, -therefore Targets can be overridden when needed -by either using a separate Triples Map which isolates certain triples or -by using FnO functions [FnO] as conditions.

    4.7.1 Separate Triples Map

    Triples can be exported to a specific Target while not to other Targets -by isolating these triples in a separate Triples Map.

    In this example, all triples containing the subject http://example.org/{id} -are exported to LogicalTarget1 -and all triples containing the subject http://newtarget.org/{id} -are exported to LogicalTarget2.

    -
    - Example 10: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:JSON-LD;
    +  rmlt:compression comp:TarXz;
    +.
    +<#TargetDump3> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:RDF_XML;
    +  rmlt:compression comp:TarGZip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt.zip>;
     .
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.jsonld.tar.xz>;
    +.
    +<#VoIDDump3> a void:Dataset ;
    +  void:dataDump <file:///data/dump3.rdf.tar.gz>;
    +.
    # file:///data/dump1.nt.zip
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
     
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    +# file:///data/dump2.jsonld.tar.xz
    +[
    +  {
    +    "@id": "http://example.org/0",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Kara Danvers"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/1",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Alex Danvers"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/2",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "J'onn J'onzz"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/3",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Nia Nal"
    +      }
    +    ]
    +  }
    +]
    +
    +# file:///data/dump3.rdf.tar.gz
    +<?xml version="1.0" encoding="utf-8" ?>
    +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    +    xmlns:foaf="http://xmlns.com/foaf/0.1/">
    +  <rdf:Description rdf:about="http://example.org/0">
    +    <foaf:name>Kara Danvers</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/1">
    +    <foaf:name>Alex Danvers</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/2">
    +    <foaf:name>J'onn J'onzz</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/3">
    +    <foaf:name>Nia Nal</foaf:name>
    +  </rdf:Description>
    +</rdf:RDF>

    5.2 Subject Map and Predicate Map

    All triples containing the subject http://example.org/{id} +are exported to TargetDump1 +and all triples containing the predicate foaf:name +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
     .
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
     
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.3 Subject Map and Object Map

    All triples containing the subject http://example.org/{id} +are exported to TargetDump1 +and all triples containing the object reference name/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
     
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.4 Predicate Map and Object Map

    All triples containing the predicate foaf:name +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
     <#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.5 Subject Map, Predicate Map and Object Map

    All triples containing the subject http://example.org/{@id} +are exported to TargetDump1 +and all triples containing the object reference nickname/text() or +predicate foaf:nickname are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
     .
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
     
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.6 Subject Map and Graph Map

    All triples containing the subject http://example.org/{@id} +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
     
    -<#TriplesMap1> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Object Map and Graph Map

    All triples containing the predicate foaf:nickname +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ 
    -      rml:reference "age";
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
         ];
       ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
     
    -<#TriplesMap2> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://newtarget.org/{id}";
    -    rml:logicalTarget <#LogicalTarget2>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:interest ];
    -    rr:objectMap [ rml:reference "interest"; ];
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Language Map and Graph Map

    All triples containing the language tag en +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2. +The other triples are exported to the default target of the processor +as there is no dedicated Target assigned to triples containing +foaf:nickname as predicate.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
       ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
    -
    -

    4.7.2 Conditions

    FnO functions MAY be leveraged to export triples -only under certain conditions. -Conditions are already integrated in RML+FnO processors, -thus conditions apply on Targets as well. -Triples are generated and exported based on the FnO condition's evaluation. -Only if the condition is true, the triples are generated and exported.

    -
    - Example 11: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
     .
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
     
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    +# default target of processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.9 Language Map and Object Map

    All triples containing the language tag en +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
     .
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en .
     
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.10 Multiple Predicate Maps

    All triples containing the predicate foaf:name +are exported to TargetDump1 +and all triples containing the predicate foaf:nickname +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
     
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";    
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Object Maps

    All triples containing the object reference name/text() +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Graph Maps

    All triples within the named graph ex:Characters +are exported to TargetDump1 +and all triples within the named graph ex:NickNames +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump1>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:NickNames;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" <http://example.org/Nicknames> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" <http://example.org/Nicknames> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" <http://example.org/Nicknames> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" <http://example.org/Nicknames> .
    + +

    6. Overriding Targets

    In some cases exporting all triples to a target is not desired, +therefore Targets can be overridden when needed +by either using a separate Triples Map which isolates certain triples or +by using FnO functions [FnO] as conditions.

    6.1 Separate Triples Map

    Triples can be exported to a specific Target while not to other Targets +by isolating these triples in a separate Triples Map.

    In this example, the same subject and object are used in both Triples Maps, +but with a diffent predicate. The triples with the first predicate foaf:name +are exported to the first Target and the triples with the second predicate +schema:name to the second Target.

    # Results of DBPedia SPARQL query
    +actor,name,nickname
    +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    +  sd:endpoint ;
    +  sd:supportedLanguage sd:SPARQL11Query;
    +  sd:resultFormat formats:SPARQL_Results_CSV;
    +.
    +
    <#TriplesMap1> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +
    +<#TriplesMap2> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump2>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant schema:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +.
    +
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nt
    +<http://dbpedia.org/resource/Kevin_Sussman> <http://xmlns.com/foaf/0.1/name> "Kevin Sussman" .
    +<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    +<http://dbpedia.org/resource/Sara_Gilbert> <http://xmlns.com/foaf/0.1/name> "Sara Gilbert" .
    +<http://dbpedia.org/resource/Kunal_Nayyar> <http://xmlns.com/foaf/0.1/name> "Kunal Nayyar" .
    +<http://dbpedia.org/resource/Laura_Spencer> <http://xmlns.com/foaf/0.1/name> "Laura Spencer" .
    +<http://dbpedia.org/resource/Simon_Helberg> <http://xmlns.com/foaf/0.1/name> "Simon Helberg" .
    +<http://dbpedia.org/resource/Johnny_Galecki> <http://xmlns.com/foaf/0.1/name> "Johnny Galecki" .
    +<http://dbpedia.org/resource/Mayim_Bialik> <http://xmlns.com/foaf/0.1/name> "Mayim Bialik" .
    +<http://dbpedia.org/resource/Melissa_Rauch> <http://xmlns.com/foaf/0.1/name> "Melissa Rauch" .
    +
    +# file:///data/dump2.nt
    +<http://dbpedia.org/resource/Kevin_Sussman> <http://schema.org/name> "Kevin Sussman" .
    +<http://dbpedia.org/resource/Jim_Parsons> <http://schema.org/name> "Jim Parsons" .
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://schema.org/name> "Kaley Cuoco" .
    +<http://dbpedia.org/resource/Sara_Gilbert> <http://schema.org/name> "Sara Gilbert" .
    +<http://dbpedia.org/resource/Kunal_Nayyar> <http://schema.org/name> "Kunal Nayyar" .
    +<http://dbpedia.org/resource/Laura_Spencer> <http://schema.org/name> "Laura Spencer" .
    +<http://dbpedia.org/resource/Simon_Helberg> <http://schema.org/name> "Simon Helberg" .
    +<http://dbpedia.org/resource/Johnny_Galecki> <http://schema.org/name> "Johnny Galecki" .
    +<http://dbpedia.org/resource/Mayim_Bialik> <http://schema.org/name> "Mayim Bialik" .
    +<http://dbpedia.org/resource/Melissa_Rauch> <http://schema.org/name> "Melissa Rauch" .

    6.2 Conditions

    FnO functions MAY be leveraged to export triples +only under certain conditions. +Conditions are already integrated in RML+FnO processors, +thus conditions apply on Targets as well. +Triples are generated and exported based on the FnO condition's evaluation. +Only if the condition is true, the triples are generated and exported.

    In the example, the triples with Jim Parsons as object are exported +to the first Target, triples with Kaley Cuoco as object are exported +to the second Target.

    # Results of DBPedia SPARQL query
    +actor,name,nickname
    +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    +  sd:endpoint ;
    +  sd:supportedLanguage sd:SPARQL11Query;
    +  sd:resultFormat formats:SPARQL_Results_CSV;
    +.
    +
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
       ];
       rr:predicateObjectMap [ 
         rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    +    rr:objectMap [
    +      fnml:functionValue [
    +        rr:predicateObjectMap [
    +          rr:predicate fno:executes ;
    +          rr:objectMap [ rr:constant idlab-fn:decide ]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:expectedStr ;
    +          rr:objectMap [ rr:constant "Jim Parsons"]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:str ;
    +          rr:objectMap [ 
    +            rml:reference "name";
    +            rml:logicalTarget <#TargetDump1>;
    +          ];
    +        ];
    +      ];
    +    ];
       ];
       rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    +    rr:predicateMap [ rr:constant foaf:name ];
         rr:objectMap [
           fnml:functionValue [
             rr:predicateObjectMap [
               rr:predicate fno:executes ;
    -          rr:objectMap [ rr:constant idlab-fn:trueCondition ]
    +          rr:objectMap [ rr:constant idlab-fn:decide ]
             ];
             rr:predicateObjectMap [
    -          rr:predicate idlab-fn:strBoolean ;
    -          rr:objectMap [ rr:constant "true"]
    +          rr:predicate idlab-fn:expectedStr ;
    +          rr:objectMap [ rr:constant "Kaley Cuoco"]
             ];
             rr:predicateObjectMap [
               rr:predicate idlab-fn:str ;
               rr:objectMap [ 
    -            rml:reference "age";
    -            rml:logicalTarget <#LogicalTarget1>;
    +            rml:reference "name";
    +            rml:logicalTarget <#TargetDump2>;
               ];
             ];
           ];
         ];
       ];
    +
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
     .
    -
    -
    +<#VoIDDump2> a void:Dataset ; + void:dataDump <file:///data/dump2.nt>; +.
    # file:///data/dump1.nt
    +<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    +
    +# file:///data/dump2.nt
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .

    A. References

    A.1 Normative references

    -
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [SPARQL]
    SPARQL 1.1 Overview. W3C. 21 March 2013. W3C Recommendation. URL: https://www.w3.org/TR/sparql11-overview/
    +
    [CSVW]
    CSV on the Web: A Primer. W3C. 25 February 2016. W3C Working Group Note. URL: https://www.w3.org/TR/tabular-data-primer/
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [R2RML]
    R2RML: RDB to RDF Mapping Language. Souripriya Das; Seema Sundara; Richard Cyganiak. W3C. 27 September 2012. W3C Recommendation. URL: https://www.w3.org/TR/r2rml/
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [VoID]
    Describing Linked Datasets with the VoID Vocabulary. Keith Alexander; Richard Cyganiak; Michael Hausenblas; Jun Zhao. W3C. 3 March 2011. W3C Note. URL: https://www.w3.org/TR/void/

    A.2 Informative references

    -
    [paper]
    Leveraging Web of Things W3C recommendations for knowledge graphs generation. Dylan Van Assche; Gerald Haesendonck; Gertjan De Mulder; Thomas Delva; Pieter Heyvaert; Ben De Meester; Anastasia Dimou. Springer. 2021. In Proceedings of the 21st International Conference on Web Engineering 2021. URL: https://dylanvanassche.be/publications/#icwe2021
    +
    [DataIO]
    Target. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/target
    - + + +
    @@ -265,7 +329,7 @@

    Target in RML

    Unofficial Draft - +

    @@ -302,7 +366,7 @@


    Abstract

    This document describes a formal representation to align the -RDF Mapping Language [RML] with Target [paper] +RDF Mapping Language [RML] with Target [DataIO] to describe in RML mapping rules how a generated Knowledge Graph should be directed and exported. The current document describes how Target is integrated @@ -315,7 +379,7 @@

    This is an early draft, yet efforts are made to keep things stable.

    -

    +

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    The key word MAY in this document @@ -373,7 +437,20 @@

    idlab-fn http://example.com/idlab/function/ -

    + +void +http://rdfs.org/ns/void# + + +ex +http://example.org/ns# + + +schema +http://schema.org/ + +

    Examples are divided in several boxes, each box has its own color. +Blue boxes contain the input RDF data of the example:

    # This box contains the example's input RDF data.

    The Target description is contained in a pink box:

    # This box contains the example's Target description.

    The data access description is contained in a grey box:

    # This box contains the data access description of the example.

    The RML mapping is contained in a yellow box:

    # This box contains the example's RML mapping.

    The generated output RDF is contained in a green box:

    # This box contains the example's generated output RDF.

    3. Target in RML

    RML does not specify where generated triples are exported to, each RML processor has its own way to describe this information @@ -393,58 +470,17 @@

    to export all triples containing the generated term to different targets. The same Term Map can have multiple targets by specifying multiple rml:logicalTarget properties in the Term Map.

    Multiple Targets MAY be combined by specifying multiple Targets -in the same Term Map or multiple Term Maps of the same RDF triple. -If multiple Targets are defined in the same Term Map, -all triples containing the generated Term are exported -to all the specified Targets. -In case multiple Term Maps of the same RDF triple contain more than one Target, -the generated triples are exported to all the specified Targets.

    -
    - Example 1: -
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source [ a csvw:Table;
    -      csvw:url "http://rml.io/data/csvw/Airport.csv";
    -      csvw:dialect [ a csvw:Dialect;
    -        csvw:delimiter ";”;
    -        csvw:encoding "UTF-8";
    -        csvw:header "1"^^xsd:boolean;
    -      ];
    -    ];
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.com/{id}";
    -    rml:logicalTarget [ a rmlt:LogicalTarget;
    -      rmlt:target [ a void:Dataset
    -        void:dataDump <file:///data/dump1.nq>;
    -      ];
    -      rmlt:serialization formats:N-Quads;
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget [ a rmlt:LogicalTarget;
    -         rmlt:target [ a void:Dataset
    -           void:dataDump <file:///data/dump2.ttl>;
    -         ];
    -         rmlt:serialization formats:Turtle;
    -         rmlt:compression comp:Zip;
    -      ];
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -.
    -
    -

    If the mapping document contains no Targets, +in the same Term Map or multiple Term Maps of the same RDF triple +(Section § 5. Combining multiple Targets). +Targets MAY be overriden by using a separate Triples Map +or conditions [FnO] (Section § 6. Overriding Targets).

    If the mapping document contains no Targets, the processor falls back to the default target, as it is specified through the processor's specific configuration file or command line parameters. If a mapping document contains at least one Target, -the processor will not export generated triples -which do not have a Target assigned.

    +the processor will export the triples to these Targets, +triples which do not have one or more Target(s) assigned, +are exported to the default target of the processor.

    @@ -457,536 +493,1785 @@

    -
    Propertyrr:TermMap rmlt:LogicalTarget

    - -

    4. Examples

    4.1 Subject Map

    All triples containing the generated subject are exported -to the specified targets in the Subject Map [RML].

    The following example exports all triples containing -the generated subject http://example.org/{id} -to an RDF dump with N-Quads as serialization format and GZip compression:

    -
    - Example 2: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt.gz>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Quads ;
    -  rmlt:compression comp:GZip;
    -.
    +

    In the example below, a CSV file is transformed into a knowledge graph. +The CSV file is accessed using the [CSVW] vocabulary, +transformed into a knowledge graph using [RML] mappings, +and exported to two Targets, which are accessed through the [VoID] vocabulary. +The knowledge graph is exported as N-Quads to the first Target, +and as Turtle to the second Target. +The Turtle file of the second Target is also compressed using the Zip +compression algorithm.

    id;name;nickname
    +0;Nathan Ford;Mastermind
    +1;Sophie Devereaux;Grifter
    +2;Eliot Spender;Hitter
    +3;Parker;Thief
    +4;Alec Hardison;Hacker
    <#CSVSourceAccess> a csvw:Table;
    +  csvw:url "https://rml.io/specs/rml-target/Leverage.csv";
    +  csvw:dialect [ a csvw:Dialect;
    +    csvw:delimiter ";";
    +    csvw:encoding "UTF-8";
    +    csvw:header "1"^^xsd:boolean;
    +  ];
    +.
    @base <http://example.com/ns#> .
     
     <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#CSVSourceAccess>;
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.com/{id}";
    +    rml:logicalTarget <#TargetDump1>;
    +    rr:class foaf:Person;
       ];
    -.
    -
    -

    4.2 Predicate Map

    All triples containing the generated predicate are exported -to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing -the generated predicate foaf:name to an RDF dump -with Turtle as serialization format and Zip compression:

    -
    - Example 3: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ 
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
           rr:constant foaf:name;
    -      rml:logicalTarget <#LogicalTarget1>; 
    +      rml:logicalTarget <#TargetDump2>;
         ];
    -    rr:objectMap [ rml:reference "name" ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    -  ];
    -.
    -
    -

    4.3 Object Map

    All triples containing the generated object are exported -to the specified targets in the Object Map [RML].

    The following example exports all triples containing -the generated object name to an RDF dump -with N-Triples as serialization format:

    -
    - Example 4: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ 
    +    rr:objectMap [ a rr:ObjectMap;
           rml:reference "name";
    -      rml:logicalTarget <#LogicalTarget1>;
         ];
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname";
    +    ];
       ];
    -.
    -
    -

    4.4 Graph Map

    All triples within a named graph are exported to the specified targets -in the Graph Map [RML]. -The named graph doesn't influence where the named graph's triples -are exported to by the Target. -If a named graph is spread over multiple targets, -all targets must be combined to access the complete named graph.

    The following example exports all triples in the named graph ex:MyGraph -to an SPARQL [SPARQL] endpoint using SPARQL UPDATE:

    -
    - Example 5: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
     
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:Turtle;
    +  rmlt:compression comp:Zip;
    +.
    <#VoIDDump1> a void:Dataset;
    +    void:dataDump <file:///data/dump1.nt>;
     .
     
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +<#VoIDDump2> a void:Dataset;
    +    void:dataDump <file:///data/dump2.ttl.zip>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Nathan Ford" _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Mastermind" _b0 .
    +<http://example.org/1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Sophie Devereaux" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Grifter" _b0 .
    +<http://example.org/2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Eliot Spencer" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Hitter" _b0 .
    +<http://example.org/3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Parker" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Thief" _b0 .
    +<http://example.org/4> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Alec Hardison" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/nickname> "Hacker" _b0 .
     
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ 
    -      rml:reference "age";
    -      rr:graphMap [
    -        rml:logicalTarget <#LogicalTarget1>;
    -        rr:template "http://www.example.org/{type}" 
    -      ];
    -    ];
    -  ];
    +# file:///data/dump2.ttl.zip
    +@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    +
    +<http://example.org/0>
    +  foaf:name "Nathan Ford";
     .
    -
    -

    4.5 Language Map

    All triples with a language tag are exported to the specified targets -in the Language Map [RML].

    The following examples export all triples with a language tag -to a RDF dump with JSON-LD as serialization format:

    -
    - Example 6: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    +<http://example.org/1>
    +  foaf:name "Sophie Devereaux";
     .
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    +<http://example.org/2>
    +  foaf:name "Eliot Spencer";
     .
    +<http://example.org/3>
    +  foaf:name "Parker";
    +.
    +<http://example.org/4>
    +  foaf:name "Alec Hardison";
    +.
    -<#LogicalTarget1> a rmlt:LogicalTarget; - rmlt:target <#VoIDDump>; - rmlt:serialization formats:N-Triples ; - rmlt:compression comp:GZip; - -<#TriplesMap> a rr:TriplesMap; - rml:logicalSource <#LogicalSource>; - rr:subjectMap [ +

    4. Single targets

    In the following examples, the RDF triples are exported to a single Target. +In some examples, not all RDF triples have a dedicated Target assigned, +therefore, they will be exported to the default Target of the processor.

    4.1 Subject Map

    All triples containing the generated subject are exported +to the specified targets in the Subject Map [RML].

    The following example exports all triples containing +the generated subject http://example.org/{id} +to an RDF dump with N-Quads as serialization format and GZip compression:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
         rr:template "http://example.org/{id}";
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ 
    +    rml:logicalTarget <#TargetDump1;>
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
           rml:reference "name";
    -      rml:languageMap [
    -        rml:logicalTarget <#LogicalTarget1>;
    -        rml:reference "language";
    -      ]; 
         ];
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age"; ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
       ];
    -.
    -
    -

    4.6 Combining multiple Targets

    Multiple Targets MAY be specified for the same triple -in the same or multiple Term Maps. -Each triple is exported to all the Targets -specified in the triple's Term Maps.

    4.6.1 Subject Map and Predicate Map

    All triples containing the subject http://example.org/{id} -are exported to LogicalTarget1 -and all triples containing the predicate foaf:name -are exported to LogicalTarget2.

    -
    - Example 7: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    -.
    -
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples ;
    +  rmlt:serialization formats:N-Quads;
       rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq.gz>;
    +.
    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.2 Predicate Map

    All triples containing the generated predicate are exported +to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing +the generated predicate foaf:name to an RDF dump +with Turtle as serialization format and Zip compression:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
         rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ 
    -      rml:logicalTarget <#LogicalTarget2>;
    -      rr:constant foaf:name 
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1;>
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
         ];
    -    rr:objectMap [ rml:reference "name"; ];
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
       ];
    -.
    -
    -

    4.6.2 Subject Map, Predicate Map and Object Map

    All triples containing the subject http://example.org/{id} are exported -to LogicalTarget1, all triples containing the predicate foaf:name -are exported to LogicalTarget2 and all triples containing the object "age" -are exported to LogicalTarget3.

    -
    - Example 8: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +  rmlt:serialization formats:Turtle;
    +  rmlt:compression comp:Zip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq.gz>;
    +.
    # file:///data/dump1.nq.gz
    +@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    +@base <http://example.com/ns#> .
     
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    +<http://example.org/0>
    +  foaf:name "Monica Geller";
     .
    -
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Quads ;
    +<http://example.org/1>
    +  foaf:name "Rachel Green";
     .
    -
    -<#SPARQLUPDATE_target> a sd:Service ;
    -  sd:endpoint  <http://example.org/sparql-update> ;
    -  sd:supportedLanguage sd:SPARQL11Update ;
    +<http://example.org/2>
    +  foaf:name "Joey Tribbiani";
     .
    -
    -<#LogicalTarget3> a rml:logicalTarget;
    -  rmlt:target <#SPARQLEndpoint>;
    +<http://example.org/3>
    +  foaf:name "Chandler Bing";
    +.
    +<http://example.org/4>
    +  foaf:name "Ross Geller";
     .
     
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.3 Object Map

    All triples containing the generated object are exported +to the specified targets in the Object Map [RML].

    The following example exports all triples containing +the generated object from the reference name to an RDF dump +with N-Triples as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
         rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ 
    -      rml:logicalTarget <#LogicalTarget2>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
           rr:constant foaf:name;
         ];
    -    rr:objectMap [ 
    -      rml:reference "name"; 
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +      rml:logicalTarget <#TargetDump1;>
         ];
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [
    -      rml:logicalTarget <#LogicalTarget3>;
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
           rml:reference "age";
         ];
       ];
    -.
    -
    -

    4.6.3 Language Map and Object Map

    All triples containing the language tag language -are exported to LogicalTarget1 -and all triples containing the object "age" -are exported to LogicalTarget2.

    -
    - Example 9: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
     
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.4 Graph Map

    All triples within a named graph are exported to the specified targets +in the Graph Map [RML]. +The named graph influences to where the named graph's triples +may be exported to as the Target's serialization format must +support named graphs such as N-Quads, JSON-LD or TriG. +When a Target contains a serialization format +which does not support named graphs and a Graph Map is used, +the mapping is considered invalid. +If a named graph is spread over multiple targets, +all targets must be combined to access the complete named graph. +In case RDF triples are not within a specific named graph, +they are added to the default graph as specified +by the [R2RML] specification.

    The following example exports all triples in the named graph ex:Friends +to an RDF dump with N-Quads as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#Target> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
     .
     
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    -.
    -
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples ;
    +<#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +    rr:graphMap [
    +      rml:logicalTarget <#TargetDump1>;
    +      rr:constant ex:Friends;
    +    ];
    +   ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .

    4.5 Language Map

    All triples with a language tag are exported to the specified targets +in the Language Map [RML].

    The following examples export all triples with a language tag +to a RDF dump with N-Triples as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#Target> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
       rmlt:compression comp:GZip;
     .
     
     <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
         rr:template "http://example.org/{id}";
        ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ 
    -      rml:reference "name"; 
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
           rml:languageMap [
    -        rml:logicalTarget <#LogicalTarget1>;
    -        rml:reference "language";
    +        rml:logicalTarget <#TargetDump1;>
    +        rr:constant "en";
           ];
         ];
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ 
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
           rml:reference "age";
    -      rml:logicalTarget <#LogicalTarget2>;
         ];
       ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller"@en .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green"@en .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani"@en .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing"@en .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller"@en .
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .
    + +

    5. Combining multiple Targets

    Multiple Targets MAY be specified for the same triple +in the same or multiple Term Maps. +If multiple Targets are defined in the same Term Map, +all triples containing the generated Term are exported +to all the specified Targets. +In case multiple Term Maps of the same RDF triple contain more than one Target, +the generated triples are exported to all the specified Targets. +If multiple Term Maps of an RDF triple refer multiple times to the same Target, +the RDF triple is written only once to the target to avoid duplicates.

    5.1 Multiple Targets in the same Term Map

    All triples are exported to all Targets, if the Term Map contains multiple +Targets. In the example a Subject Map has three specified Targets, +all triples with the subject http://example.org/{@id} are exported +to the three specified Targets:

      +
    • Target 1: /data/dump.nt.zip, N-Triples serialization, Zip compression
    • +
    • Target 2: /data/dump.jsonld.tar.xz, JSON-LD serialization, TarXz compression
    • +
    • Target 3: /data/dump.rdf.tar.gzip, RDF/XML serialization, TarGZip compression
    • +
    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +    rml:logicalTarget <#TargetDump2>;
    +    rml:logicalTarget <#TargetDump3>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +  rmlt:compression comp:Zip;
     .
    -
    -

    4.7 Overriding Targets

    In some cases exporting all triples to a target is not desired, -therefore Targets can be overridden when needed -by either using a separate Triples Map which isolates certain triples or -by using FnO functions [FnO] as conditions.

    4.7.1 Separate Triples Map

    Triples can be exported to a specific Target while not to other Targets -by isolating these triples in a separate Triples Map.

    In this example, all triples containing the subject http://example.org/{id} -are exported to LogicalTarget1 -and all triples containing the subject http://newtarget.org/{id} -are exported to LogicalTarget2.

    -
    - Example 10: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:JSON-LD;
    +  rmlt:compression comp:TarXz;
    +.
    +<#TargetDump3> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:RDF_XML;
    +  rmlt:compression comp:TarGZip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt.zip>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.jsonld.tar.xz>;
     .
    +<#VoIDDump3> a void:Dataset ;
    +  void:dataDump <file:///data/dump3.rdf.tar.gz>;
    +.
    # file:///data/dump1.nt.zip
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
     
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    +# file:///data/dump2.jsonld.tar.xz
    +[
    +  {
    +    "@id": "http://example.org/0",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Kara Danvers"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/1",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Alex Danvers"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/2",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "J'onn J'onzz"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/3",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Nia Nal"
    +      }
    +    ]
    +  }
    +]
    +
    +# file:///data/dump3.rdf.tar.gz
    +<?xml version="1.0" encoding="utf-8" ?>
    +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    +    xmlns:foaf="http://xmlns.com/foaf/0.1/">
    +  <rdf:Description rdf:about="http://example.org/0">
    +    <foaf:name>Kara Danvers</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/1">
    +    <foaf:name>Alex Danvers</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/2">
    +    <foaf:name>J'onn J'onzz</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/3">
    +    <foaf:name>Nia Nal</foaf:name>
    +  </rdf:Description>
    +</rdf:RDF>

    5.2 Subject Map and Predicate Map

    All triples containing the subject http://example.org/{id} +are exported to TargetDump1 +and all triples containing the predicate foaf:name +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
     
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.3 Subject Map and Object Map

    All triples containing the subject http://example.org/{id} +are exported to TargetDump1 +and all triples containing the object reference name/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
     
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.4 Predicate Map and Object Map

    All triples containing the predicate foaf:name +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
     <#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.5 Subject Map, Predicate Map and Object Map

    All triples containing the subject http://example.org/{@id} +are exported to TargetDump1 +and all triples containing the object reference nickname/text() or +predicate foaf:nickname are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
     
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.6 Subject Map and Graph Map

    All triples containing the subject http://example.org/{@id} +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
     
    -<#TriplesMap1> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Object Map and Graph Map

    All triples containing the predicate foaf:nickname +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
       ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ 
    -      rml:reference "age";
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
         ];
       ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
     
    -<#TriplesMap2> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://newtarget.org/{id}";
    -    rml:logicalTarget <#LogicalTarget2>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:interest ];
    -    rr:objectMap [ rml:reference "interest"; ];
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Language Map and Graph Map

    All triples containing the language tag en +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2. +The other triples are exported to the default target of the processor +as there is no dedicated Target assigned to triples containing +foaf:nickname as predicate.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
       ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
    -
    -

    4.7.2 Conditions

    FnO functions MAY be leveraged to export triples -only under certain conditions. -Conditions are already integrated in RML+FnO processors, -thus conditions apply on Targets as well. -Triples are generated and exported based on the FnO condition's evaluation. -Only if the condition is true, the triples are generated and exported.

    -
    - Example 11: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    +
    +# default target of processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.9 Language Map and Object Map

    All triples containing the language tag en +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
     .
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en .
     
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.10 Multiple Predicate Maps

    All triples containing the predicate foaf:name +are exported to TargetDump1 +and all triples containing the predicate foaf:nickname +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
     
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Object Maps

    All triples containing the object reference name/text() +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
     
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";    
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Graph Maps

    All triples within the named graph ex:Characters +are exported to TargetDump1 +and all triples within the named graph ex:NickNames +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump1>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:NickNames;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" <http://example.org/Nicknames> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" <http://example.org/Nicknames> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" <http://example.org/Nicknames> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" <http://example.org/Nicknames> .
    + +

    6. Overriding Targets

    In some cases exporting all triples to a target is not desired, +therefore Targets can be overridden when needed +by either using a separate Triples Map which isolates certain triples or +by using FnO functions [FnO] as conditions.

    6.1 Separate Triples Map

    Triples can be exported to a specific Target while not to other Targets +by isolating these triples in a separate Triples Map.

    In this example, the same subject and object are used in both Triples Maps, +but with a diffent predicate. The triples with the first predicate foaf:name +are exported to the first Target and the triples with the second predicate +schema:name to the second Target.

    # Results of DBPedia SPARQL query
    +actor,name,nickname
    +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    +  sd:endpoint ;
    +  sd:supportedLanguage sd:SPARQL11Query;
    +  sd:resultFormat formats:SPARQL_Results_CSV;
    +.
    +
    <#TriplesMap1> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +
    +<#TriplesMap2> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump2>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant schema:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +.
    +
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nt
    +<http://dbpedia.org/resource/Kevin_Sussman> <http://xmlns.com/foaf/0.1/name> "Kevin Sussman" .
    +<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    +<http://dbpedia.org/resource/Sara_Gilbert> <http://xmlns.com/foaf/0.1/name> "Sara Gilbert" .
    +<http://dbpedia.org/resource/Kunal_Nayyar> <http://xmlns.com/foaf/0.1/name> "Kunal Nayyar" .
    +<http://dbpedia.org/resource/Laura_Spencer> <http://xmlns.com/foaf/0.1/name> "Laura Spencer" .
    +<http://dbpedia.org/resource/Simon_Helberg> <http://xmlns.com/foaf/0.1/name> "Simon Helberg" .
    +<http://dbpedia.org/resource/Johnny_Galecki> <http://xmlns.com/foaf/0.1/name> "Johnny Galecki" .
    +<http://dbpedia.org/resource/Mayim_Bialik> <http://xmlns.com/foaf/0.1/name> "Mayim Bialik" .
    +<http://dbpedia.org/resource/Melissa_Rauch> <http://xmlns.com/foaf/0.1/name> "Melissa Rauch" .
    +
    +# file:///data/dump2.nt
    +<http://dbpedia.org/resource/Kevin_Sussman> <http://schema.org/name> "Kevin Sussman" .
    +<http://dbpedia.org/resource/Jim_Parsons> <http://schema.org/name> "Jim Parsons" .
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://schema.org/name> "Kaley Cuoco" .
    +<http://dbpedia.org/resource/Sara_Gilbert> <http://schema.org/name> "Sara Gilbert" .
    +<http://dbpedia.org/resource/Kunal_Nayyar> <http://schema.org/name> "Kunal Nayyar" .
    +<http://dbpedia.org/resource/Laura_Spencer> <http://schema.org/name> "Laura Spencer" .
    +<http://dbpedia.org/resource/Simon_Helberg> <http://schema.org/name> "Simon Helberg" .
    +<http://dbpedia.org/resource/Johnny_Galecki> <http://schema.org/name> "Johnny Galecki" .
    +<http://dbpedia.org/resource/Mayim_Bialik> <http://schema.org/name> "Mayim Bialik" .
    +<http://dbpedia.org/resource/Melissa_Rauch> <http://schema.org/name> "Melissa Rauch" .

    6.2 Conditions

    FnO functions MAY be leveraged to export triples +only under certain conditions. +Conditions are already integrated in RML+FnO processors, +thus conditions apply on Targets as well. +Triples are generated and exported based on the FnO condition's evaluation. +Only if the condition is true, the triples are generated and exported.

    In the example, the triples with Jim Parsons as object are exported +to the first Target, triples with Kaley Cuoco as object are exported +to the second Target.

    # Results of DBPedia SPARQL query
    +actor,name,nickname
    +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    +  sd:endpoint ;
    +  sd:supportedLanguage sd:SPARQL11Query;
    +  sd:resultFormat formats:SPARQL_Results_CSV;
    +.
    +
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
       ];
       rr:predicateObjectMap [ 
         rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    +    rr:objectMap [
    +      fnml:functionValue [
    +        rr:predicateObjectMap [
    +          rr:predicate fno:executes ;
    +          rr:objectMap [ rr:constant idlab-fn:decide ]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:expectedStr ;
    +          rr:objectMap [ rr:constant "Jim Parsons"]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:str ;
    +          rr:objectMap [ 
    +            rml:reference "name";
    +            rml:logicalTarget <#TargetDump1>;
    +          ];
    +        ];
    +      ];
    +    ];
       ];
       rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    +    rr:predicateMap [ rr:constant foaf:name ];
         rr:objectMap [
           fnml:functionValue [
             rr:predicateObjectMap [
               rr:predicate fno:executes ;
    -          rr:objectMap [ rr:constant idlab-fn:trueCondition ]
    +          rr:objectMap [ rr:constant idlab-fn:decide ]
             ];
             rr:predicateObjectMap [
    -          rr:predicate idlab-fn:strBoolean ;
    -          rr:objectMap [ rr:constant "true"]
    +          rr:predicate idlab-fn:expectedStr ;
    +          rr:objectMap [ rr:constant "Kaley Cuoco"]
             ];
             rr:predicateObjectMap [
               rr:predicate idlab-fn:str ;
               rr:objectMap [ 
    -            rml:reference "age";
    -            rml:logicalTarget <#LogicalTarget1>;
    +            rml:reference "name";
    +            rml:logicalTarget <#TargetDump2>;
               ];
             ];
           ];
         ];
       ];
    +
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
     .
    -
    -
    +<#TargetDump2> a rmlt:LogicalTarget; + rmlt:target <#VoIDDump2>; + rmlt:serialization formats:N-Triples; +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    +
    +# file:///data/dump2.nt
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .

    A. References

    A.1 Normative references

    -
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [SPARQL]
    SPARQL 1.1 Overview. W3C. 21 March 2013. W3C Recommendation. URL: https://www.w3.org/TR/sparql11-overview/
    +
    [CSVW]
    CSV on the Web: A Primer. W3C. 25 February 2016. W3C Working Group Note. URL: https://www.w3.org/TR/tabular-data-primer/
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [R2RML]
    R2RML: RDB to RDF Mapping Language. Souripriya Das; Seema Sundara; Richard Cyganiak. W3C. 27 September 2012. W3C Recommendation. URL: https://www.w3.org/TR/r2rml/
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [VoID]
    Describing Linked Datasets with the VoID Vocabulary. Keith Alexander; Richard Cyganiak; Michael Hausenblas; Jun Zhao. W3C. 3 March 2011. W3C Note. URL: https://www.w3.org/TR/void/

    A.2 Informative references

    -
    [paper]
    Leveraging Web of Things W3C recommendations for knowledge graphs generation. Dylan Van Assche; Gerald Haesendonck; Gertjan De Mulder; Thomas Delva; Pieter Heyvaert; Ben De Meester; Anastasia Dimou. Springer. 2021. In Proceedings of the 21st International Conference on Web Engineering 2021. URL: https://dylanvanassche.be/publications/#icwe2021
    +
    [DataIO]
    Target. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/target
    - - -Target in RML - - - - - - - - - - - - - - - - - -
    -

    Target in RML

    - -

    - Unofficial Draft - -

    -
    - -
    Latest editor's draft:
    https://rml.io/specs/target-in-rml
    - - - - - -
    Editors:
    -
    - (Ghent University – imec – IDLab) -
    - (Ghent University – imec – IDLab) -
    - - -
    This Version
    - https://rml.io/specs/target-in-rml/20210324/ -
    Previous Version
    - https://rml.io/specs/target-in-rml/20210324/ -
    Website
    - https://rml.io/target-in-rml -
    -
    - - - - -
    -
    -

    Abstract

    This document describes a formal representation to align the -RDF Mapping Language [RML] with Target [paper] -to describe in RML mapping rules how a generated Knowledge Graph -should be directed and exported. -The current document describes how Target is integrated -with RML through definitions and examples.

    The version of this document is v1.0.0.

    - -

    Status of This Document

    - This document is a draft of a potential specification. It has no official - standing of any kind and does not represent the support or consensus of - any standards organization. -

    -

    This is an early draft, -yet efforts are made to keep things stable.

    -
    - -

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    - The key word MAY in this document - is to be interpreted as described in - BCP 14 - [RFC2119] [RFC8174] - when, and only when, they appear in all capitals, as shown here. -

    - -

    2. Overview

    This section is non-normative.

    This document describes the alignment of Target specification with RML -to define how a generated RDF knowledge graph must be exported -in the RML mapping rules. -Target and RML are self-standing specifications -which are aligned through this specification.

    In this document, examples assume -the following namespace prefix bindings unless otherwise stated:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    PrefixNamespace
    rmlhttp://semweb.mmlab.be/ns/rml#
    rmlthttp://semweb.mmlab.be/ns/rml-target#
    rrhttp://www.w3.org/ns/r2rml#
    formatshttps://www.w3.org/ns/formats/
    comphttp://semweb.mmlab.be/ns/rml-compression#
    csvwhttp://www.w3.org/ns/csvw#
    foafhttp://xmlns.com/foaf/0.1/
    fnmlhttp://semweb.mmlab.be/ns/fnml#
    idlab-fnhttp://example.com/idlab/function/
    - -

    3. Target in RML

    RML does not specify where generated triples are exported to, -each RML processor has its own way to describe this information -through configuration files or command line parameters. -To incorporate this information in the RML mapping rules, -RML is aligned with the -Target vocabulary -which describes how the generated triples are exported. -RML is aligned with the Target vocabulary -by extending rr:TermMap with the rml:logicalTarget property -to describe on Term Map [RML] level where each triple must be directed to. -A Term Map is a function that generates an RDF term -from a logical reference [RML]. -The result of that function is known as the term map's generated -RDF term [RDF-Concepts] -such as subjects, predicates, objects, named graphs and language tags.

    A Term Map MAY also contain zero or more rml:logicalTarget properties -to export all triples containing the generated term to different targets. -The same Term Map can have multiple targets by specifying -multiple rml:logicalTarget properties in the Term Map.

    Multiple Targets MAY be combined by specifying multiple Targets -in the same Term Map or multiple Term Maps of the same RDF triple. -If multiple Targets are defined in the same Term Map, -all triples containing the generated Term are exported -to all the specified Targets. -In case multiple Term Maps of the same RDF triple contain more than one Target, -the generated triples are exported to all the specified Targets.

    -
    - Example 1: -
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source [ a csvw:Table;
    -      csvw:url "http://rml.io/data/csvw/Airport.csv";
    -      csvw:dialect [ a csvw:Dialect;
    -        csvw:delimiter ";”;
    -        csvw:encoding "UTF-8";
    -        csvw:header "1"^^xsd:boolean;
    -      ];
    -    ];
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.com/{id}";
    -    rml:logicalTarget [ a rmlt:LogicalTarget;
    -      rmlt:target [ a void:Dataset
    -        void:dataDump <file:///data/dump1.nq>;
    -      ];
    -      rmlt:serialization formats:N-Quads;
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget [ a rmlt:LogicalTarget;
    -         rmlt:target [ a void:Dataset
    -           void:dataDump <file:///data/dump2.ttl>;
    -         ];
    -         rmlt:serialization formats:Turtle;
    -         rmlt:compression comp:Zip;
    -      ];
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -.
    -
    -

    If the mapping document contains no Targets, -the processor falls back to the default target, -as it is specified through the processor's -specific configuration file or command line parameters. -If a mapping document contains at least one Target, -the processor will not export generated triples -which do not have a Target assigned.

    - - - - - - - - - - - - -
    PropertyDomainRange
    rml:logicalTargetrr:TermMaprmlt:LogicalTarget
    - -

    4. Examples

    4.1 Subject Map

    All triples containing the generated subject are exported -to the specified targets in the Subject Map [RML].

    The following example exports all triples containing -the generated subject http://example.org/{id} -to an RDF dump with N-Quads as serialization format and GZip compression:

    -
    - Example 2: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt.gz>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Quads ;
    -  rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    -  ];
    -.
    -
    -

    4.2 Predicate Map

    All triples containing the generated predicate are exported -to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing -the generated predicate foaf:name to an RDF dump -with Turtle as serialization format and Zip compression:

    -
    - Example 3: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ 
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#LogicalTarget1>; 
    -    ];
    -    rr:objectMap [ rml:reference "name" ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    -  ];
    -.
    -
    -

    4.3 Object Map

    All triples containing the generated object are exported -to the specified targets in the Object Map [RML].

    The following example exports all triples containing -the generated object name to an RDF dump -with N-Triples as serialization format:

    -
    - Example 4: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ rr:template "http://example.org/{id}"; ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ 
    -      rml:reference "name";
    -      rml:logicalTarget <#LogicalTarget1>;
    -    ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    -  ];
    -.
    -
    -

    4.4 Graph Map

    All triples within a named graph are exported to the specified targets -in the Graph Map [RML]. -The named graph doesn't influence where the named graph's triples -are exported to by the Target. -If a named graph is spread over multiple targets, -all targets must be combined to access the complete named graph.

    The following example exports all triples in the named graph ex:MyGraph -to an SPARQL [SPARQL] endpoint using SPARQL UPDATE:

    -
    - Example 5: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ 
    -      rml:reference "age";
    -      rr:graphMap [
    -        rml:logicalTarget <#LogicalTarget1>;
    -        rr:template "http://www.example.org/{type}" 
    -      ];
    -    ];
    -  ];
    -.
    -
    -

    4.5 Language Map

    All triples with a language tag are exported to the specified targets -in the Language Map [RML].

    The following examples export all triples with a language tag -to a RDF dump with JSON-LD as serialization format:

    -
    - Example 6: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump> a void:Dataset ;
    -  void:dataDump <file:///data/file.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ 
    -      rml:reference "name";
    -      rml:languageMap [
    -        rml:logicalTarget <#LogicalTarget1>;
    -        rml:reference "language";
    -      ]; 
    -    ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age"; ];
    -  ];
    -.
    -
    -

    4.6 Combining multiple Targets

    Multiple Targets MAY be specified for the same triple -in the same or multiple Term Maps. -Each triple is exported to all the Targets -specified in the triple's Term Maps.

    4.6.1 Subject Map and Predicate Map

    All triples containing the subject http://example.org/{id} -are exported to LogicalTarget1 -and all triples containing the predicate foaf:name -are exported to LogicalTarget2.

    -
    - Example 7: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    -.
    -
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ 
    -      rml:logicalTarget <#LogicalTarget2>;
    -      rr:constant foaf:name 
    -    ];
    -    rr:objectMap [ rml:reference "name"; ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ rml:reference "age" ];
    -  ];
    -.
    -
    -

    4.6.2 Subject Map, Predicate Map and Object Map

    All triples containing the subject http://example.org/{id} are exported -to LogicalTarget1, all triples containing the predicate foaf:name -are exported to LogicalTarget2 and all triples containing the object "age" -are exported to LogicalTarget3.

    -
    - Example 8: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    -.
    -
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Quads ;
    -.
    -
    -<#SPARQLUPDATE_target> a sd:Service ;
    -  sd:endpoint  <http://example.org/sparql-update> ;
    -  sd:supportedLanguage sd:SPARQL11Update ;
    -.
    -
    -<#LogicalTarget3> a rml:logicalTarget;
    -  rmlt:target <#SPARQLEndpoint>;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ 
    -      rml:logicalTarget <#LogicalTarget2>;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ 
    -      rml:reference "name"; 
    -    ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [
    -      rml:logicalTarget <#LogicalTarget3>;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    -
    -

    4.6.3 Language Map and Object Map

    All triples containing the language tag language -are exported to LogicalTarget1 -and all triples containing the object "age" -are exported to LogicalTarget2.

    -
    - Example 9: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    -.
    -
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ 
    -      rml:reference "name"; 
    -      rml:languageMap [
    -        rml:logicalTarget <#LogicalTarget1>;
    -        rml:reference "language";
    -      ];
    -    ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ 
    -      rml:reference "age";
    -      rml:logicalTarget <#LogicalTarget2>;
    -    ];
    -  ];
    -.
    -
    -

    4.7 Overriding Targets

    In some cases exporting all triples to a target is not desired, -therefore Targets can be overridden when needed -by either using a separate Triples Map which isolates certain triples or -by using FnO functions [FnO] as conditions.

    4.7.1 Separate Triples Map

    Triples can be exported to a specific Target while not to other Targets -by isolating these triples in a separate Triples Map.

    In this example, all triples containing the subject http://example.org/{id} -are exported to LogicalTarget1 -and all triples containing the subject http://newtarget.org/{id} -are exported to LogicalTarget2.

    -
    - Example 10: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/file2.nt>;
    -.
    -
    -<#LogicalTarget2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap1> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#LogicalTarget1>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [ 
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    -
    -<#TriplesMap2> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://newtarget.org/{id}";
    -    rml:logicalTarget <#LogicalTarget2>;
    -   ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:interest ];
    -    rr:objectMap [ rml:reference "interest"; ];
    -  ];
    -.
    -
    -

    4.7.2 Conditions

    FnO functions MAY be leveraged to export triples -only under certain conditions. -Conditions are already integrated in RML+FnO processors, -thus conditions apply on Targets as well. -Triples are generated and exported based on the FnO condition's evaluation. -Only if the condition is true, the triples are generated and exported.

    -
    - Example 11: -
    <LogicalSource1> a rml:LogicalSource;
    -  rml:source "/data/people.json";
    -  rml:referenceFormulation ql:JSONPath;
    -  rml:iterator "$.[*]";
    -.
    -
    -<#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/file1.nt>;
    -.
    -
    -<#LogicalTarget1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples ;
    -  rmlt:compression comp:GZip;
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource <#LogicalSource1>;
    -  rr:subjectMap [ 
    -    rr:template "http://example.org/{id}";    
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [ rml:reference "name"; ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:age ];
    -    rr:objectMap [
    -      fnml:functionValue [
    -        rr:predicateObjectMap [
    -          rr:predicate fno:executes ;
    -          rr:objectMap [ rr:constant idlab-fn:trueCondition ]
    -        ];
    -        rr:predicateObjectMap [
    -          rr:predicate idlab-fn:strBoolean ;
    -          rr:objectMap [ rr:constant "true"]
    -        ];
    -        rr:predicateObjectMap [
    -          rr:predicate idlab-fn:str ;
    -          rr:objectMap [ 
    -            rml:reference "age";
    -            rml:logicalTarget <#LogicalTarget1>;
    -          ];
    -        ];
    -      ];
    -    ];
    -  ];
    -.
    -
    -
    - - - -

    A. References

    -

    A.1 Normative references

    -
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [SPARQL]
    SPARQL 1.1 Overview. W3C. 21 March 2013. W3C Recommendation. URL: https://www.w3.org/TR/sparql11-overview/
    -
    -

    A.2 Informative references

    -
    [paper]
    Leveraging Web of Things W3C recommendations for knowledge graphs generation. Dylan Van Assche; Gerald Haesendonck; Gertjan De Mulder; Thomas Delva; Pieter Heyvaert; Ben De Meester; Anastasia Dimou. Springer. 2021. In Proceedings of the 21st International Conference on Web Engineering 2021. URL: https://dylanvanassche.be/publications/#icwe2021
    -
    \ No newline at end of file diff --git a/dist/20210518/DBPedia.csv b/dist/20210518/DBPedia.csv new file mode 100644 index 0000000..c043bf3 --- /dev/null +++ b/dist/20210518/DBPedia.csv @@ -0,0 +1,10 @@ +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch diff --git a/dist/20210518/Friends.json b/dist/20210518/Friends.json new file mode 100644 index 0000000..8e55449 --- /dev/null +++ b/dist/20210518/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/dist/20210518/Leverage.csv b/dist/20210518/Leverage.csv new file mode 100644 index 0000000..024b34b --- /dev/null +++ b/dist/20210518/Leverage.csv @@ -0,0 +1,6 @@ +id;name;nickname +0;Nathan Ford;Mastermind +1;Sophie Devereaux;Grifter +2;Eliot Spender;Hitter +3;Parker;Thief +4;Alec Hardison;Hacker diff --git a/dist/20210518/Supergirl.xml b/dist/20210518/Supergirl.xml new file mode 100644 index 0000000..1e70bb4 --- /dev/null +++ b/dist/20210518/Supergirl.xml @@ -0,0 +1,18 @@ + + + Kara Danvers + Supergirl + + + Alex Danvers + Sentinel + + + J'onn J'onzz + Martian Manhunter + + + Nia Nal + Dreamer + + diff --git a/dist/20210421/index.html b/dist/20210518/index.html similarity index 92% rename from dist/20210421/index.html rename to dist/20210518/index.html index d5708d8..5066254 100644 --- a/dist/20210421/index.html +++ b/dist/20210518/index.html @@ -1,6 +1,6 @@ - +
    @@ -329,7 +329,7 @@

    Target in RML

    Unofficial Draft - +

    @@ -348,9 +348,9 @@

    This Version
    - https://rml.io/specs/target-in-rml/20210421/ + https://rml.io/specs/target-in-rml/20210518/
    Previous Version
    - https://rml.io/specs/target-in-rml/20210324/ + https://rml.io/specs/target-in-rml/20210518/
    Website
    https://rml.io/target-in-rml
    @@ -366,7 +366,7 @@


    Abstract

    This document describes a formal representation to align the -RDF Mapping Language [RML] with Target [DataIO] +RDF Mapping Language [RML] with Target [DataIO] to describe in RML mapping rules how a generated Knowledge Graph should be directed and exported. The current document describes how Target is integrated @@ -379,7 +379,7 @@

    This is an early draft, yet efforts are made to keep things stable.

    -

    +

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    The key word MAY in this document @@ -410,6 +410,10 @@

    http://semweb.mmlab.be/ns/rml-target# +comp +http://semweb.mmlab.be/ns/rml-compression# + + rr http://www.w3.org/ns/r2rml# @@ -548,7 +552,7 @@

    <#TargetDump2> a rmlt:LogicalTarget; rmlt:target <#VoIDDump2>; rmlt:serialization formats:Turtle; - rmlt:compression comp:Zip; + rmlt:compression comp:zip; .
    <#VoIDDump1> a void:Dataset;
         void:dataDump <file:///data/dump1.nt>;
     .
    @@ -634,7 +638,7 @@ 

    ]; rr:subjectMap [ a rr:SubjectMap; rr:template "http://example.org/{id}"; - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; ]; rr:predicateObjectMap [ a rr:PredicateObjectMap; rr:predicateMap [ a rr:PredicateMap; @@ -655,19 +659,19 @@

    .

    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:N-Quads;
    -  rmlt:compression comp:GZip;
    +  rmlt:compression comp:gzip;
     .
    <#VoIDDump1> a void:Dataset ;
       void:dataDump <file:///data/dump1.nq.gz>;
    -.
    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" _b0 .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" _b0 .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.2 Predicate Map

    All triples containing the generated predicate are exported +.

    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.2 Predicate Map

    All triples containing the generated predicate are exported to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing the generated predicate foaf:name to an RDF dump with Turtle as serialization format and Zip compression:

    [
    @@ -712,7 +716,7 @@ 

    rr:predicateObjectMap [ a rr:PredicateObjectMap; rr:predicateMap [ a rr:PredicateMap; rr:constant foaf:name; - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; ]; rr:objectMap [ a rr:ObjectMap; rml:reference "name"; @@ -729,10 +733,10 @@

    .

    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:Turtle;
    -  rmlt:compression comp:Zip;
    +  rmlt:compression comp:zip;
     .
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq.gz>;
    -.
    # file:///data/dump1.nq.gz
    +  void:dataDump <file:///data/dump1.ttl.zip>;
    +.
    # file:///data/dump1.ttl.zip
     @prefix foaf: <http://xmlns.com/foaf/0.1/> .
     @base <http://example.com/ns#> .
     
    @@ -753,11 +757,11 @@ 

    . # default target of the processor -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 . -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 . -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 . -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 . -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.3 Object Map

    All triples containing the generated object are exported +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" . +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" . +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" . +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" . +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.3 Object Map

    All triples containing the generated object are exported to the specified targets in the Object Map [RML].

    The following example exports all triples containing the generated object from the reference name to an RDF dump with N-Triples as serialization format:

    [
    @@ -805,7 +809,7 @@ 

    ]; rr:objectMap [ a rr:ObjectMap; rml:reference "name"; - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; ]; ]; rr:predicateObjectMap [ a rr:PredicateObjectMap; @@ -876,11 +880,7 @@

    dcat:distribution [ a dcat:Distribution; dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json"; ]; -.

    <#Target> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    +.
    <#TriplesMap> a rr:TriplesMap;
       rml:logicalSource [ a rml:LogicalSource;
         rml:source <#DCATSourceAccess>;
         rml:referenceFormulation ql:JSONPath;
    @@ -911,7 +911,6 @@ 

    ]; .

    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
     .
    <#VoIDDump1> a void:Dataset ;
       void:dataDump <file:///data/dump1.nq>;
     .
    # file:///data/dump1.nq
    @@ -956,12 +955,7 @@ 

    dcat:distribution [ a dcat:Distribution; dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json"; ]; -.

    <#Target> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    +.
    <#TriplesMap> a rr:TriplesMap;
       rml:logicalSource [ a rml:LogicalSource;
         rml:source <#DCATSourceAccess>;
         rml:referenceFormulation ql:JSONPath;
    @@ -977,7 +971,7 @@ 

    rr:objectMap [ a rr:ObjectMap; rml:reference "name"; rml:languageMap [ - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; rr:constant "en"; ]; ]; @@ -1003,11 +997,11 @@

    <http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller"@en . # default target of the processor -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 . -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 . -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 . -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 . -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" . +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" . +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" . +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" . +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    5. Combining multiple Targets

    Multiple Targets MAY be specified for the same triple in the same or multiple Term Maps. @@ -1068,17 +1062,17 @@

    .
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:N-Triples;
    -  rmlt:compression comp:Zip;
    +  rmlt:compression comp:zip;
     .
     <#TargetDump2> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:JSON-LD;
    -  rmlt:compression comp:TarXz;
    +  rmlt:compression comp:tarxz;
     .
     <#TargetDump3> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:RDF_XML;
    -  rmlt:compression comp:TarGZip;
    +  rmlt:compression comp:targzip;
     .
    <#VoIDDump1> a void:Dataset ;
       void:dataDump <file:///data/dump1.nt.zip>;
     .
    @@ -1530,7 +1524,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> . <http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> . <http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> . -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Object Map and Graph Map

    All triples containing the predicate foaf:nickname +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Map and Graph Map

    All triples containing the predicate foaf:nickname are exported to TargetDump1 and all triples within the named graph ex:Characters are exported to TargetDump2.

    <Supergirl>
    @@ -1606,7 +1600,83 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> . <http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> . <http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> . -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Language Map and Graph Map

    All triples containing the language tag en +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Object Map and Graph Map

    All triples containing the object reference nickname/text() +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.9 Language Map and Graph Map

    All triples containing the language tag en are exported to TargetDump1 and all triples within the named graph ex:Characters are exported to TargetDump2. @@ -1695,7 +1765,7 @@

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.9 Language Map and Object Map

    All triples containing the language tag en +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.10 Language Map and Object Map

    All triples containing the language tag en are exported to TargetDump1 and all triples containing the object reference nickname/text() are exported to TargetDump2.

    <Supergirl>
    @@ -1771,7 +1841,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.10 Multiple Predicate Maps

    All triples containing the predicate foaf:name +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Predicate Maps

    All triples containing the predicate foaf:name are exported to TargetDump1 and all triples containing the predicate foaf:nickname are exported to TargetDump2.

    <Supergirl>
    @@ -1844,7 +1914,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Object Maps

    All triples containing the object reference name/text() +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Object Maps

    All triples containing the object reference name/text() are exported to TargetDump1 and all triples containing the object reference nickname/text() are exported to TargetDump2.

    <Supergirl>
    @@ -1917,7 +1987,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Graph Maps

    All triples within the named graph ex:Characters +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.13 Multiple Graph Maps

    All triples within the named graph ex:Characters are exported to TargetDump1 and all triples within the named graph ex:NickNames are exported to TargetDump2.

    <Supergirl>
    @@ -2233,7 +2303,7 @@ 

    A.1 Normative referen
    [CSVW]
    CSV on the Web: A Primer. W3C. 25 February 2016. W3C Working Group Note. URL: https://www.w3.org/TR/tabular-data-primer/
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [R2RML]
    R2RML: RDB to RDF Mapping Language. Souripriya Das; Seema Sundara; Richard Cyganiak. W3C. 27 September 2012. W3C Recommendation. URL: https://www.w3.org/TR/r2rml/
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [VoID]
    Describing Linked Datasets with the VoID Vocabulary. Keith Alexander; Richard Cyganiak; Michael Hausenblas; Jun Zhao. W3C. 3 March 2011. W3C Note. URL: https://www.w3.org/TR/void/

    A.2 Informative references

    -
    [DataIO]
    Target. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/target
    +
    [DataIO]
    DataIO. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/dataio
    @@ -329,7 +329,7 @@

    Target in RML

    Unofficial Draft - +

    @@ -348,9 +348,9 @@

    This Version
    - https://rml.io/specs/target-in-rml/20210421/ + https://rml.io/specs/target-in-rml/20210518/
    Previous Version
    - https://rml.io/specs/target-in-rml/20210324/ + https://rml.io/specs/target-in-rml/20210518/
    Website
    https://rml.io/target-in-rml
    @@ -366,7 +366,7 @@


    Abstract

    This document describes a formal representation to align the -RDF Mapping Language [RML] with Target [DataIO] +RDF Mapping Language [RML] with Target [DataIO] to describe in RML mapping rules how a generated Knowledge Graph should be directed and exported. The current document describes how Target is integrated @@ -379,7 +379,7 @@

    This is an early draft, yet efforts are made to keep things stable.

    -

    +

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    The key word MAY in this document @@ -410,6 +410,10 @@

    http://semweb.mmlab.be/ns/rml-target# +comp +http://semweb.mmlab.be/ns/rml-compression# + + rr http://www.w3.org/ns/r2rml# @@ -548,7 +552,7 @@

    <#TargetDump2> a rmlt:LogicalTarget; rmlt:target <#VoIDDump2>; rmlt:serialization formats:Turtle; - rmlt:compression comp:Zip; + rmlt:compression comp:zip; .
    <#VoIDDump1> a void:Dataset;
         void:dataDump <file:///data/dump1.nt>;
     .
    @@ -634,7 +638,7 @@ 

    ]; rr:subjectMap [ a rr:SubjectMap; rr:template "http://example.org/{id}"; - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; ]; rr:predicateObjectMap [ a rr:PredicateObjectMap; rr:predicateMap [ a rr:PredicateMap; @@ -655,19 +659,19 @@

    .

    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:N-Quads;
    -  rmlt:compression comp:GZip;
    +  rmlt:compression comp:gzip;
     .
    <#VoIDDump1> a void:Dataset ;
       void:dataDump <file:///data/dump1.nq.gz>;
    -.
    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" _b0 .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" _b0 .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.2 Predicate Map

    All triples containing the generated predicate are exported +.

    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.2 Predicate Map

    All triples containing the generated predicate are exported to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing the generated predicate foaf:name to an RDF dump with Turtle as serialization format and Zip compression:

    [
    @@ -712,7 +716,7 @@ 

    rr:predicateObjectMap [ a rr:PredicateObjectMap; rr:predicateMap [ a rr:PredicateMap; rr:constant foaf:name; - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; ]; rr:objectMap [ a rr:ObjectMap; rml:reference "name"; @@ -729,10 +733,10 @@

    .

    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:Turtle;
    -  rmlt:compression comp:Zip;
    +  rmlt:compression comp:zip;
     .
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq.gz>;
    -.
    # file:///data/dump1.nq.gz
    +  void:dataDump <file:///data/dump1.ttl.zip>;
    +.
    # file:///data/dump1.ttl.zip
     @prefix foaf: <http://xmlns.com/foaf/0.1/> .
     @base <http://example.com/ns#> .
     
    @@ -753,11 +757,11 @@ 

    . # default target of the processor -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 . -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 . -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 . -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 . -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.3 Object Map

    All triples containing the generated object are exported +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" . +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" . +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" . +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" . +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.3 Object Map

    All triples containing the generated object are exported to the specified targets in the Object Map [RML].

    The following example exports all triples containing the generated object from the reference name to an RDF dump with N-Triples as serialization format:

    [
    @@ -805,7 +809,7 @@ 

    ]; rr:objectMap [ a rr:ObjectMap; rml:reference "name"; - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; ]; ]; rr:predicateObjectMap [ a rr:PredicateObjectMap; @@ -876,11 +880,7 @@

    dcat:distribution [ a dcat:Distribution; dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json"; ]; -.

    <#Target> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    +.
    <#TriplesMap> a rr:TriplesMap;
       rml:logicalSource [ a rml:LogicalSource;
         rml:source <#DCATSourceAccess>;
         rml:referenceFormulation ql:JSONPath;
    @@ -911,7 +911,6 @@ 

    ]; .

    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
     .
    <#VoIDDump1> a void:Dataset ;
       void:dataDump <file:///data/dump1.nq>;
     .
    # file:///data/dump1.nq
    @@ -956,12 +955,7 @@ 

    dcat:distribution [ a dcat:Distribution; dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json"; ]; -.

    <#Target> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    +.
    <#TriplesMap> a rr:TriplesMap;
       rml:logicalSource [ a rml:LogicalSource;
         rml:source <#DCATSourceAccess>;
         rml:referenceFormulation ql:JSONPath;
    @@ -977,7 +971,7 @@ 

    rr:objectMap [ a rr:ObjectMap; rml:reference "name"; rml:languageMap [ - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; rr:constant "en"; ]; ]; @@ -1003,11 +997,11 @@

    <http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller"@en . # default target of the processor -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 . -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 . -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 . -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 . -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" . +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" . +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" . +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" . +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    5. Combining multiple Targets

    Multiple Targets MAY be specified for the same triple in the same or multiple Term Maps. @@ -1068,17 +1062,17 @@

    .
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:N-Triples;
    -  rmlt:compression comp:Zip;
    +  rmlt:compression comp:zip;
     .
     <#TargetDump2> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:JSON-LD;
    -  rmlt:compression comp:TarXz;
    +  rmlt:compression comp:tarxz;
     .
     <#TargetDump3> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:RDF_XML;
    -  rmlt:compression comp:TarGZip;
    +  rmlt:compression comp:targzip;
     .
    <#VoIDDump1> a void:Dataset ;
       void:dataDump <file:///data/dump1.nt.zip>;
     .
    @@ -1530,7 +1524,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> . <http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> . <http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> . -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Object Map and Graph Map

    All triples containing the predicate foaf:nickname +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Map and Graph Map

    All triples containing the predicate foaf:nickname are exported to TargetDump1 and all triples within the named graph ex:Characters are exported to TargetDump2.

    <Supergirl>
    @@ -1606,7 +1600,83 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> . <http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> . <http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> . -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Language Map and Graph Map

    All triples containing the language tag en +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Object Map and Graph Map

    All triples containing the object reference nickname/text() +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.9 Language Map and Graph Map

    All triples containing the language tag en are exported to TargetDump1 and all triples within the named graph ex:Characters are exported to TargetDump2. @@ -1695,7 +1765,7 @@

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.9 Language Map and Object Map

    All triples containing the language tag en +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.10 Language Map and Object Map

    All triples containing the language tag en are exported to TargetDump1 and all triples containing the object reference nickname/text() are exported to TargetDump2.

    <Supergirl>
    @@ -1771,7 +1841,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.10 Multiple Predicate Maps

    All triples containing the predicate foaf:name +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Predicate Maps

    All triples containing the predicate foaf:name are exported to TargetDump1 and all triples containing the predicate foaf:nickname are exported to TargetDump2.

    <Supergirl>
    @@ -1844,7 +1914,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Object Maps

    All triples containing the object reference name/text() +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Object Maps

    All triples containing the object reference name/text() are exported to TargetDump1 and all triples containing the object reference nickname/text() are exported to TargetDump2.

    <Supergirl>
    @@ -1917,7 +1987,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Graph Maps

    All triples within the named graph ex:Characters +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.13 Multiple Graph Maps

    All triples within the named graph ex:Characters are exported to TargetDump1 and all triples within the named graph ex:NickNames are exported to TargetDump2.

    <Supergirl>
    @@ -2233,7 +2303,7 @@ 

    A.1 Normative referen
    [CSVW]
    CSV on the Web: A Primer. W3C. 25 February 2016. W3C Working Group Note. URL: https://www.w3.org/TR/tabular-data-primer/
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [R2RML]
    R2RML: RDB to RDF Mapping Language. Souripriya Das; Seema Sundara; Richard Cyganiak. W3C. 27 September 2012. W3C Recommendation. URL: https://www.w3.org/TR/r2rml/
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [VoID]
    Describing Linked Datasets with the VoID Vocabulary. Keith Alexander; Richard Cyganiak; Michael Hausenblas; Jun Zhao. W3C. 3 March 2011. W3C Note. URL: https://www.w3.org/TR/void/

    A.2 Informative references

    -
    [DataIO]
    Target. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/target
    +
    [DataIO]
    DataIO. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/dataio
    @@ -329,7 +329,7 @@

    Target in RML

    Unofficial Draft - +

    @@ -366,7 +366,7 @@


    Abstract

    This document describes a formal representation to align the -RDF Mapping Language [RML] with Target [DataIO] +RDF Mapping Language [RML] with Target [DataIO] to describe in RML mapping rules how a generated Knowledge Graph should be directed and exported. The current document describes how Target is integrated @@ -379,7 +379,7 @@

    This is an early draft, yet efforts are made to keep things stable.

    -

    +

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    The key word MAY in this document @@ -410,6 +410,10 @@

    http://semweb.mmlab.be/ns/rml-target# +comp +http://semweb.mmlab.be/ns/rml-compression# + + rr http://www.w3.org/ns/r2rml# @@ -548,7 +552,7 @@

    <#TargetDump2> a rmlt:LogicalTarget; rmlt:target <#VoIDDump2>; rmlt:serialization formats:Turtle; - rmlt:compression comp:Zip; + rmlt:compression comp:zip; .
    <#VoIDDump1> a void:Dataset;
         void:dataDump <file:///data/dump1.nt>;
     .
    @@ -634,7 +638,7 @@ 

    ]; rr:subjectMap [ a rr:SubjectMap; rr:template "http://example.org/{id}"; - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; ]; rr:predicateObjectMap [ a rr:PredicateObjectMap; rr:predicateMap [ a rr:PredicateMap; @@ -655,19 +659,19 @@

    .

    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:N-Quads;
    -  rmlt:compression comp:GZip;
    +  rmlt:compression comp:gzip;
     .
    <#VoIDDump1> a void:Dataset ;
       void:dataDump <file:///data/dump1.nq.gz>;
    -.
    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" _b0 .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" _b0 .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.2 Predicate Map

    All triples containing the generated predicate are exported +.

    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.2 Predicate Map

    All triples containing the generated predicate are exported to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing the generated predicate foaf:name to an RDF dump with Turtle as serialization format and Zip compression:

    [
    @@ -712,7 +716,7 @@ 

    rr:predicateObjectMap [ a rr:PredicateObjectMap; rr:predicateMap [ a rr:PredicateMap; rr:constant foaf:name; - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; ]; rr:objectMap [ a rr:ObjectMap; rml:reference "name"; @@ -729,10 +733,10 @@

    .

    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:Turtle;
    -  rmlt:compression comp:Zip;
    +  rmlt:compression comp:zip;
     .
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq.gz>;
    -.
    # file:///data/dump1.nq.gz
    +  void:dataDump <file:///data/dump1.ttl.zip>;
    +.
    # file:///data/dump1.ttl.zip
     @prefix foaf: <http://xmlns.com/foaf/0.1/> .
     @base <http://example.com/ns#> .
     
    @@ -753,11 +757,11 @@ 

    . # default target of the processor -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 . -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 . -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 . -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 . -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    4.3 Object Map

    All triples containing the generated object are exported +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" . +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" . +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" . +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" . +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.3 Object Map

    All triples containing the generated object are exported to the specified targets in the Object Map [RML].

    The following example exports all triples containing the generated object from the reference name to an RDF dump with N-Triples as serialization format:

    [
    @@ -805,7 +809,7 @@ 

    ]; rr:objectMap [ a rr:ObjectMap; rml:reference "name"; - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; ]; ]; rr:predicateObjectMap [ a rr:PredicateObjectMap; @@ -876,11 +880,7 @@

    dcat:distribution [ a dcat:Distribution; dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json"; ]; -.

    <#Target> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    +.
    <#TriplesMap> a rr:TriplesMap;
       rml:logicalSource [ a rml:LogicalSource;
         rml:source <#DCATSourceAccess>;
         rml:referenceFormulation ql:JSONPath;
    @@ -911,7 +911,6 @@ 

    ]; .

    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
     .
    <#VoIDDump1> a void:Dataset ;
       void:dataDump <file:///data/dump1.nq>;
     .
    # file:///data/dump1.nq
    @@ -956,12 +955,7 @@ 

    dcat:distribution [ a dcat:Distribution; dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json"; ]; -.

    <#Target> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:compression comp:GZip;
    -.
    -
    -<#TriplesMap> a rr:TriplesMap;
    +.
    <#TriplesMap> a rr:TriplesMap;
       rml:logicalSource [ a rml:LogicalSource;
         rml:source <#DCATSourceAccess>;
         rml:referenceFormulation ql:JSONPath;
    @@ -977,7 +971,7 @@ 

    rr:objectMap [ a rr:ObjectMap; rml:reference "name"; rml:languageMap [ - rml:logicalTarget <#TargetDump1;> + rml:logicalTarget <#TargetDump1>; rr:constant "en"; ]; ]; @@ -1003,11 +997,11 @@

    <http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller"@en . # default target of the processor -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" _b0 . -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" _b0 . -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" _b0 . -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" _b0 . -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" _b0 .

    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" . +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" . +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" . +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" . +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    5. Combining multiple Targets

    Multiple Targets MAY be specified for the same triple in the same or multiple Term Maps. @@ -1068,17 +1062,17 @@

    .
    <#TargetDump1> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:N-Triples;
    -  rmlt:compression comp:Zip;
    +  rmlt:compression comp:zip;
     .
     <#TargetDump2> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:JSON-LD;
    -  rmlt:compression comp:TarXz;
    +  rmlt:compression comp:tarxz;
     .
     <#TargetDump3> a rmlt:LogicalTarget;
       rmlt:target <#VoIDDump1>;
       rmlt:serialization formats:RDF_XML;
    -  rmlt:compression comp:TarGZip;
    +  rmlt:compression comp:targzip;
     .
    <#VoIDDump1> a void:Dataset ;
       void:dataDump <file:///data/dump1.nt.zip>;
     .
    @@ -1530,7 +1524,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> . <http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> . <http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> . -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Object Map and Graph Map

    All triples containing the predicate foaf:nickname +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Map and Graph Map

    All triples containing the predicate foaf:nickname are exported to TargetDump1 and all triples within the named graph ex:Characters are exported to TargetDump2.

    <Supergirl>
    @@ -1606,7 +1600,83 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> . <http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> . <http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> . -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Language Map and Graph Map

    All triples containing the language tag en +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Object Map and Graph Map

    All triples containing the object reference nickname/text() +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.9 Language Map and Graph Map

    All triples containing the language tag en are exported to TargetDump1 and all triples within the named graph ex:Characters are exported to TargetDump2. @@ -1695,7 +1765,7 @@

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.9 Language Map and Object Map

    All triples containing the language tag en +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.10 Language Map and Object Map

    All triples containing the language tag en are exported to TargetDump1 and all triples containing the object reference nickname/text() are exported to TargetDump2.

    <Supergirl>
    @@ -1771,7 +1841,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.10 Multiple Predicate Maps

    All triples containing the predicate foaf:name +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Predicate Maps

    All triples containing the predicate foaf:name are exported to TargetDump1 and all triples containing the predicate foaf:nickname are exported to TargetDump2.

    <Supergirl>
    @@ -1844,7 +1914,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Object Maps

    All triples containing the object reference name/text() +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Object Maps

    All triples containing the object reference name/text() are exported to TargetDump1 and all triples containing the object reference nickname/text() are exported to TargetDump2.

    <Supergirl>
    @@ -1917,7 +1987,7 @@ 

    <http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" . <http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" . <http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" . -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Graph Maps

    All triples within the named graph ex:Characters +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.13 Multiple Graph Maps

    All triples within the named graph ex:Characters are exported to TargetDump1 and all triples within the named graph ex:NickNames are exported to TargetDump2.

    <Supergirl>
    @@ -2233,7 +2303,7 @@ 

    A.1 Normative referen
    [CSVW]
    CSV on the Web: A Primer. W3C. 25 February 2016. W3C Working Group Note. URL: https://www.w3.org/TR/tabular-data-primer/
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [R2RML]
    R2RML: RDB to RDF Mapping Language. Souripriya Das; Seema Sundara; Richard Cyganiak. W3C. 27 September 2012. W3C Recommendation. URL: https://www.w3.org/TR/r2rml/
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [VoID]
    Describing Linked Datasets with the VoID Vocabulary. Keith Alexander; Richard Cyganiak; Michael Hausenblas; Jun Zhao. W3C. 3 March 2011. W3C Note. URL: https://www.w3.org/TR/void/

    A.2 Informative references

    -
    [DataIO]
    Target. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/target
    +
    [DataIO]
    DataIO. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/dataio
    + + + + + + + + + +
    +

    Target in RML

    + +

    + Unofficial Draft + +

    +
    + +
    Latest editor's draft:
    https://rml.io/specs/target-in-rml
    + + + + + +
    Editors:
    +
    + (Ghent University – imec – IDLab) +
    + (Ghent University – imec – IDLab) +
    + + +
    This Version
    + https://rml.io/specs/target-in-rml/20210518/ +
    Previous Version
    + https://rml.io/specs/target-in-rml/20210518/ +
    Website
    + https://rml.io/target-in-rml +
    +
    + + + + +
    +
    +

    Abstract

    This document describes a formal representation to align the +RDF Mapping Language [RML] with Target [DataIO] +to describe in RML mapping rules how a generated Knowledge Graph +should be directed and exported. +The current document describes how Target is integrated +with RML through definitions and examples.

    The version of this document is v1.0.0.

    + +

    Status of This Document

    + This document is a draft of a potential specification. It has no official + standing of any kind and does not represent the support or consensus of + any standards organization. +

    +

    This is an early draft, +yet efforts are made to keep things stable.

    +
    + +

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    + The key word MAY in this document + is to be interpreted as described in + BCP 14 + [RFC2119] [RFC8174] + when, and only when, they appear in all capitals, as shown here. +

    + +

    2. Overview

    This section is non-normative.

    This document describes the alignment of Target specification with RML +to define how a generated RDF knowledge graph must be exported +in the RML mapping rules. +Target and RML are self-standing specifications +which are aligned through this specification.

    In this document, examples assume +the following namespace prefix bindings unless otherwise stated:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PrefixNamespace
    rmlhttp://semweb.mmlab.be/ns/rml#
    rmlthttp://semweb.mmlab.be/ns/rml-target#
    comphttp://semweb.mmlab.be/ns/rml-compression#
    rrhttp://www.w3.org/ns/r2rml#
    formatshttps://www.w3.org/ns/formats/
    comphttp://semweb.mmlab.be/ns/rml-compression#
    csvwhttp://www.w3.org/ns/csvw#
    foafhttp://xmlns.com/foaf/0.1/
    fnmlhttp://semweb.mmlab.be/ns/fnml#
    idlab-fnhttp://example.com/idlab/function/
    voidhttp://rdfs.org/ns/void#
    exhttp://example.org/ns#
    schemahttp://schema.org/

    Examples are divided in several boxes, each box has its own color. +Blue boxes contain the input RDF data of the example:

    # This box contains the example's input RDF data.

    The Target description is contained in a pink box:

    # This box contains the example's Target description.

    The data access description is contained in a grey box:

    # This box contains the data access description of the example.

    The RML mapping is contained in a yellow box:

    # This box contains the example's RML mapping.

    The generated output RDF is contained in a green box:

    # This box contains the example's generated output RDF.
    + +

    3. Target in RML

    RML does not specify where generated triples are exported to, +each RML processor has its own way to describe this information +through configuration files or command line parameters. +To incorporate this information in the RML mapping rules, +RML is aligned with the +Target vocabulary +which describes how the generated triples are exported. +RML is aligned with the Target vocabulary +by extending rr:TermMap with the rml:logicalTarget property +to describe on Term Map [RML] level where each triple must be directed to. +A Term Map is a function that generates an RDF term +from a logical reference [RML]. +The result of that function is known as the term map's generated +RDF term [RDF-Concepts] +such as subjects, predicates, objects, named graphs and language tags.

    A Term Map MAY also contain zero or more rml:logicalTarget properties +to export all triples containing the generated term to different targets. +The same Term Map can have multiple targets by specifying +multiple rml:logicalTarget properties in the Term Map.

    Multiple Targets MAY be combined by specifying multiple Targets +in the same Term Map or multiple Term Maps of the same RDF triple +(Section § 5. Combining multiple Targets). +Targets MAY be overriden by using a separate Triples Map +or conditions [FnO] (Section § 6. Overriding Targets).

    If the mapping document contains no Targets, +the processor falls back to the default target, +as it is specified through the processor's +specific configuration file or command line parameters. +If a mapping document contains at least one Target, +the processor will export the triples to these Targets, +triples which do not have one or more Target(s) assigned, +are exported to the default target of the processor.

    + + + + + + + + + + + + +
    PropertyDomainRange
    rml:logicalTargetrr:TermMaprmlt:LogicalTarget

    In the example below, a CSV file is transformed into a knowledge graph. +The CSV file is accessed using the [CSVW] vocabulary, +transformed into a knowledge graph using [RML] mappings, +and exported to two Targets, which are accessed through the [VoID] vocabulary. +The knowledge graph is exported as N-Quads to the first Target, +and as Turtle to the second Target. +The Turtle file of the second Target is also compressed using the Zip +compression algorithm.

    id;name;nickname
    +0;Nathan Ford;Mastermind
    +1;Sophie Devereaux;Grifter
    +2;Eliot Spender;Hitter
    +3;Parker;Thief
    +4;Alec Hardison;Hacker
    <#CSVSourceAccess> a csvw:Table;
    +  csvw:url "https://rml.io/specs/rml-target/Leverage.csv";
    +  csvw:dialect [ a csvw:Dialect;
    +    csvw:delimiter ";";
    +    csvw:encoding "UTF-8";
    +    csvw:header "1"^^xsd:boolean;
    +  ];
    +.
    @base <http://example.com/ns#> .
    +
    +<#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#CSVSourceAccess>;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.com/{id}";
    +    rml:logicalTarget <#TargetDump1>;
    +    rr:class foaf:Person;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:Turtle;
    +  rmlt:compression comp:zip;
    +.
    <#VoIDDump1> a void:Dataset;
    +    void:dataDump <file:///data/dump1.nt>;
    +.
    +
    +<#VoIDDump2> a void:Dataset;
    +    void:dataDump <file:///data/dump2.ttl.zip>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Nathan Ford" _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Mastermind" _b0 .
    +<http://example.org/1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Sophie Devereaux" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Grifter" _b0 .
    +<http://example.org/2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Eliot Spencer" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Hitter" _b0 .
    +<http://example.org/3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Parker" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Thief" _b0 .
    +<http://example.org/4> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Alec Hardison" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/nickname> "Hacker" _b0 .
    +
    +# file:///data/dump2.ttl.zip
    +@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    +
    +<http://example.org/0>
    +  foaf:name "Nathan Ford";
    +.
    +<http://example.org/1>
    +  foaf:name "Sophie Devereaux";
    +.
    +<http://example.org/2>
    +  foaf:name "Eliot Spencer";
    +.
    +<http://example.org/3>
    +  foaf:name "Parker";
    +.
    +<http://example.org/4>
    +  foaf:name "Alec Hardison";
    +.
    + +

    4. Single targets

    In the following examples, the RDF triples are exported to a single Target. +In some examples, not all RDF triples have a dedicated Target assigned, +therefore, they will be exported to the default Target of the processor.

    4.1 Subject Map

    All triples containing the generated subject are exported +to the specified targets in the Subject Map [RML].

    The following example exports all triples containing +the generated subject http://example.org/{id} +to an RDF dump with N-Quads as serialization format and GZip compression:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Quads;
    +  rmlt:compression comp:gzip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq.gz>;
    +.
    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.2 Predicate Map

    All triples containing the generated predicate are exported +to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing +the generated predicate foaf:name to an RDF dump +with Turtle as serialization format and Zip compression:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:Turtle;
    +  rmlt:compression comp:zip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.ttl.zip>;
    +.
    # file:///data/dump1.ttl.zip
    +@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    +@base <http://example.com/ns#> .
    +
    +<http://example.org/0>
    +  foaf:name "Monica Geller";
    +.
    +<http://example.org/1>
    +  foaf:name "Rachel Green";
    +.
    +<http://example.org/2>
    +  foaf:name "Joey Tribbiani";
    +.
    +<http://example.org/3>
    +  foaf:name "Chandler Bing";
    +.
    +<http://example.org/4>
    +  foaf:name "Ross Geller";
    +.
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.3 Object Map

    All triples containing the generated object are exported +to the specified targets in the Object Map [RML].

    The following example exports all triples containing +the generated object from the reference name to an RDF dump +with N-Triples as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.4 Graph Map

    All triples within a named graph are exported to the specified targets +in the Graph Map [RML]. +The named graph influences to where the named graph's triples +may be exported to as the Target's serialization format must +support named graphs such as N-Quads, JSON-LD or TriG. +When a Target contains a serialization format +which does not support named graphs and a Graph Map is used, +the mapping is considered invalid. +If a named graph is spread over multiple targets, +all targets must be combined to access the complete named graph. +In case RDF triples are not within a specific named graph, +they are added to the default graph as specified +by the [R2RML] specification.

    The following example exports all triples in the named graph ex:Friends +to an RDF dump with N-Quads as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +    rr:graphMap [
    +      rml:logicalTarget <#TargetDump1>;
    +      rr:constant ex:Friends;
    +    ];
    +   ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .

    4.5 Language Map

    All triples with a language tag are exported to the specified targets +in the Language Map [RML].

    The following examples export all triples with a language tag +to a RDF dump with N-Triples as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +   ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller"@en .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green"@en .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani"@en .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing"@en .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller"@en .
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .
    + +

    5. Combining multiple Targets

    Multiple Targets MAY be specified for the same triple +in the same or multiple Term Maps. +If multiple Targets are defined in the same Term Map, +all triples containing the generated Term are exported +to all the specified Targets. +In case multiple Term Maps of the same RDF triple contain more than one Target, +the generated triples are exported to all the specified Targets. +If multiple Term Maps of an RDF triple refer multiple times to the same Target, +the RDF triple is written only once to the target to avoid duplicates.

    5.1 Multiple Targets in the same Term Map

    All triples are exported to all Targets, if the Term Map contains multiple +Targets. In the example a Subject Map has three specified Targets, +all triples with the subject http://example.org/{@id} are exported +to the three specified Targets:

      +
    • Target 1: /data/dump.nt.zip, N-Triples serialization, Zip compression
    • +
    • Target 2: /data/dump.jsonld.tar.xz, JSON-LD serialization, TarXz compression
    • +
    • Target 3: /data/dump.rdf.tar.gzip, RDF/XML serialization, TarGZip compression
    • +
    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +    rml:logicalTarget <#TargetDump2>;
    +    rml:logicalTarget <#TargetDump3>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +  rmlt:compression comp:zip;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:JSON-LD;
    +  rmlt:compression comp:tarxz;
    +.
    +<#TargetDump3> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:RDF_XML;
    +  rmlt:compression comp:targzip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt.zip>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.jsonld.tar.xz>;
    +.
    +<#VoIDDump3> a void:Dataset ;
    +  void:dataDump <file:///data/dump3.rdf.tar.gz>;
    +.
    # file:///data/dump1.nt.zip
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.jsonld.tar.xz
    +[
    +  {
    +    "@id": "http://example.org/0",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Kara Danvers"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/1",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Alex Danvers"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/2",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "J'onn J'onzz"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/3",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Nia Nal"
    +      }
    +    ]
    +  }
    +]
    +
    +# file:///data/dump3.rdf.tar.gz
    +<?xml version="1.0" encoding="utf-8" ?>
    +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    +    xmlns:foaf="http://xmlns.com/foaf/0.1/">
    +  <rdf:Description rdf:about="http://example.org/0">
    +    <foaf:name>Kara Danvers</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/1">
    +    <foaf:name>Alex Danvers</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/2">
    +    <foaf:name>J'onn J'onzz</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/3">
    +    <foaf:name>Nia Nal</foaf:name>
    +  </rdf:Description>
    +</rdf:RDF>

    5.2 Subject Map and Predicate Map

    All triples containing the subject http://example.org/{id} +are exported to TargetDump1 +and all triples containing the predicate foaf:name +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.3 Subject Map and Object Map

    All triples containing the subject http://example.org/{id} +are exported to TargetDump1 +and all triples containing the object reference name/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.4 Predicate Map and Object Map

    All triples containing the predicate foaf:name +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.5 Subject Map, Predicate Map and Object Map

    All triples containing the subject http://example.org/{@id} +are exported to TargetDump1 +and all triples containing the object reference nickname/text() or +predicate foaf:nickname are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.6 Subject Map and Graph Map

    All triples containing the subject http://example.org/{@id} +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Map and Graph Map

    All triples containing the predicate foaf:nickname +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Object Map and Graph Map

    All triples containing the object reference nickname/text() +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.9 Language Map and Graph Map

    All triples containing the language tag en +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2. +The other triples are exported to the default target of the processor +as there is no dedicated Target assigned to triples containing +foaf:nickname as predicate.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    +
    +# default target of processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.10 Language Map and Object Map

    All triples containing the language tag en +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Predicate Maps

    All triples containing the predicate foaf:name +are exported to TargetDump1 +and all triples containing the predicate foaf:nickname +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Object Maps

    All triples containing the object reference name/text() +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.13 Multiple Graph Maps

    All triples within the named graph ex:Characters +are exported to TargetDump1 +and all triples within the named graph ex:NickNames +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump1>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:NickNames;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" <http://example.org/Nicknames> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" <http://example.org/Nicknames> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" <http://example.org/Nicknames> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" <http://example.org/Nicknames> .
    + +

    6. Overriding Targets

    In some cases exporting all triples to a target is not desired, +therefore Targets can be overridden when needed +by either using a separate Triples Map which isolates certain triples or +by using FnO functions [FnO] as conditions.

    6.1 Separate Triples Map

    Triples can be exported to a specific Target while not to other Targets +by isolating these triples in a separate Triples Map.

    In this example, the same subject and object are used in both Triples Maps, +but with a diffent predicate. The triples with the first predicate foaf:name +are exported to the first Target and the triples with the second predicate +schema:name to the second Target.

    # Results of DBPedia SPARQL query
    +actor,name,nickname
    +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    +  sd:endpoint ;
    +  sd:supportedLanguage sd:SPARQL11Query;
    +  sd:resultFormat formats:SPARQL_Results_CSV;
    +.
    +
    <#TriplesMap1> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +
    +<#TriplesMap2> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump2>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant schema:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +.
    +
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nt
    +<http://dbpedia.org/resource/Kevin_Sussman> <http://xmlns.com/foaf/0.1/name> "Kevin Sussman" .
    +<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    +<http://dbpedia.org/resource/Sara_Gilbert> <http://xmlns.com/foaf/0.1/name> "Sara Gilbert" .
    +<http://dbpedia.org/resource/Kunal_Nayyar> <http://xmlns.com/foaf/0.1/name> "Kunal Nayyar" .
    +<http://dbpedia.org/resource/Laura_Spencer> <http://xmlns.com/foaf/0.1/name> "Laura Spencer" .
    +<http://dbpedia.org/resource/Simon_Helberg> <http://xmlns.com/foaf/0.1/name> "Simon Helberg" .
    +<http://dbpedia.org/resource/Johnny_Galecki> <http://xmlns.com/foaf/0.1/name> "Johnny Galecki" .
    +<http://dbpedia.org/resource/Mayim_Bialik> <http://xmlns.com/foaf/0.1/name> "Mayim Bialik" .
    +<http://dbpedia.org/resource/Melissa_Rauch> <http://xmlns.com/foaf/0.1/name> "Melissa Rauch" .
    +
    +# file:///data/dump2.nt
    +<http://dbpedia.org/resource/Kevin_Sussman> <http://schema.org/name> "Kevin Sussman" .
    +<http://dbpedia.org/resource/Jim_Parsons> <http://schema.org/name> "Jim Parsons" .
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://schema.org/name> "Kaley Cuoco" .
    +<http://dbpedia.org/resource/Sara_Gilbert> <http://schema.org/name> "Sara Gilbert" .
    +<http://dbpedia.org/resource/Kunal_Nayyar> <http://schema.org/name> "Kunal Nayyar" .
    +<http://dbpedia.org/resource/Laura_Spencer> <http://schema.org/name> "Laura Spencer" .
    +<http://dbpedia.org/resource/Simon_Helberg> <http://schema.org/name> "Simon Helberg" .
    +<http://dbpedia.org/resource/Johnny_Galecki> <http://schema.org/name> "Johnny Galecki" .
    +<http://dbpedia.org/resource/Mayim_Bialik> <http://schema.org/name> "Mayim Bialik" .
    +<http://dbpedia.org/resource/Melissa_Rauch> <http://schema.org/name> "Melissa Rauch" .

    6.2 Conditions

    FnO functions MAY be leveraged to export triples +only under certain conditions. +Conditions are already integrated in RML+FnO processors, +thus conditions apply on Targets as well. +Triples are generated and exported based on the FnO condition's evaluation. +Only if the condition is true, the triples are generated and exported.

    In the example, the triples with Jim Parsons as object are exported +to the first Target, triples with Kaley Cuoco as object are exported +to the second Target.

    # Results of DBPedia SPARQL query
    +actor,name,nickname
    +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    +  sd:endpoint ;
    +  sd:supportedLanguage sd:SPARQL11Query;
    +  sd:resultFormat formats:SPARQL_Results_CSV;
    +.
    +
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ 
    +    rr:predicateMap [ rr:constant foaf:name ];
    +    rr:objectMap [
    +      fnml:functionValue [
    +        rr:predicateObjectMap [
    +          rr:predicate fno:executes ;
    +          rr:objectMap [ rr:constant idlab-fn:decide ]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:expectedStr ;
    +          rr:objectMap [ rr:constant "Jim Parsons"]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:str ;
    +          rr:objectMap [ 
    +            rml:reference "name";
    +            rml:logicalTarget <#TargetDump1>;
    +          ];
    +        ];
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ 
    +    rr:predicateMap [ rr:constant foaf:name ];
    +    rr:objectMap [
    +      fnml:functionValue [
    +        rr:predicateObjectMap [
    +          rr:predicate fno:executes ;
    +          rr:objectMap [ rr:constant idlab-fn:decide ]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:expectedStr ;
    +          rr:objectMap [ rr:constant "Kaley Cuoco"]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:str ;
    +          rr:objectMap [ 
    +            rml:reference "name";
    +            rml:logicalTarget <#TargetDump2>;
    +          ];
    +        ];
    +      ];
    +    ];
    +  ];
    +
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    +
    +# file:///data/dump2.nt
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    + + + +

    A. References

    +

    A.1 Normative references

    +
    [CSVW]
    CSV on the Web: A Primer. W3C. 25 February 2016. W3C Working Group Note. URL: https://www.w3.org/TR/tabular-data-primer/
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [R2RML]
    R2RML: RDB to RDF Mapping Language. Souripriya Das; Seema Sundara; Richard Cyganiak. W3C. 27 September 2012. W3C Recommendation. URL: https://www.w3.org/TR/r2rml/
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [VoID]
    Describing Linked Datasets with the VoID Vocabulary. Keith Alexander; Richard Cyganiak; Michael Hausenblas; Jun Zhao. W3C. 3 March 2011. W3C Note. URL: https://www.w3.org/TR/void/
    +
    +

    A.2 Informative references

    +
    [DataIO]
    DataIO. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/dataio
    +
    \ No newline at end of file diff --git a/docs/dist/DBPedia.csv b/docs/dist/DBPedia.csv new file mode 100644 index 0000000..c043bf3 --- /dev/null +++ b/docs/dist/DBPedia.csv @@ -0,0 +1,10 @@ +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch diff --git a/docs/dist/Friends.json b/docs/dist/Friends.json new file mode 100644 index 0000000..8e55449 --- /dev/null +++ b/docs/dist/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/docs/dist/Leverage.csv b/docs/dist/Leverage.csv new file mode 100644 index 0000000..024b34b --- /dev/null +++ b/docs/dist/Leverage.csv @@ -0,0 +1,6 @@ +id;name;nickname +0;Nathan Ford;Mastermind +1;Sophie Devereaux;Grifter +2;Eliot Spender;Hitter +3;Parker;Thief +4;Alec Hardison;Hacker diff --git a/docs/dist/Supergirl.xml b/docs/dist/Supergirl.xml new file mode 100644 index 0000000..1e70bb4 --- /dev/null +++ b/docs/dist/Supergirl.xml @@ -0,0 +1,18 @@ + + + Kara Danvers + Supergirl + + + Alex Danvers + Sentinel + + + J'onn J'onzz + Martian Manhunter + + + Nia Nal + Dreamer + + diff --git a/docs/dist/index.html b/docs/dist/index.html new file mode 100644 index 0000000..adfc9f6 --- /dev/null +++ b/docs/dist/index.html @@ -0,0 +1,2531 @@ + + + + + + +Target in RML + + + + + + + + + + + + + + + + + + +
    +

    Target in RML

    + +

    + Unofficial Draft + +

    +
    + +
    Latest editor's draft:
    https://rml.io/specs/target-in-rml
    + + + + + +
    Editors:
    +
    + (Ghent University – imec – IDLab) +
    + (Ghent University – imec – IDLab) +
    + + +
    This Version
    + https://rml.io/specs/target-in-rml/20210518/ +
    Previous Version
    + https://rml.io/specs/target-in-rml/20210518/ +
    Website
    + https://rml.io/target-in-rml +
    +
    + + + + +
    +
    +

    Abstract

    This document describes a formal representation to align the +RDF Mapping Language [RML] with Target [DataIO] +to describe in RML mapping rules how a generated Knowledge Graph +should be directed and exported. +The current document describes how Target is integrated +with RML through definitions and examples.

    The version of this document is v1.0.0.

    + +

    Status of This Document

    + This document is a draft of a potential specification. It has no official + standing of any kind and does not represent the support or consensus of + any standards organization. +

    +

    This is an early draft, +yet efforts are made to keep things stable.

    +
    + +

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    + The key word MAY in this document + is to be interpreted as described in + BCP 14 + [RFC2119] [RFC8174] + when, and only when, they appear in all capitals, as shown here. +

    + +

    2. Overview

    This section is non-normative.

    This document describes the alignment of Target specification with RML +to define how a generated RDF knowledge graph must be exported +in the RML mapping rules. +Target and RML are self-standing specifications +which are aligned through this specification.

    In this document, examples assume +the following namespace prefix bindings unless otherwise stated:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PrefixNamespace
    rmlhttp://semweb.mmlab.be/ns/rml#
    rmlthttp://semweb.mmlab.be/ns/rml-target#
    comphttp://semweb.mmlab.be/ns/rml-compression#
    rrhttp://www.w3.org/ns/r2rml#
    formatshttps://www.w3.org/ns/formats/
    comphttp://semweb.mmlab.be/ns/rml-compression#
    csvwhttp://www.w3.org/ns/csvw#
    foafhttp://xmlns.com/foaf/0.1/
    fnmlhttp://semweb.mmlab.be/ns/fnml#
    idlab-fnhttp://example.com/idlab/function/
    voidhttp://rdfs.org/ns/void#
    exhttp://example.org/ns#
    schemahttp://schema.org/

    Examples are divided in several boxes, each box has its own color. +Blue boxes contain the input RDF data of the example:

    # This box contains the example's input RDF data.

    The Target description is contained in a pink box:

    # This box contains the example's Target description.

    The data access description is contained in a grey box:

    # This box contains the data access description of the example.

    The RML mapping is contained in a yellow box:

    # This box contains the example's RML mapping.

    The generated output RDF is contained in a green box:

    # This box contains the example's generated output RDF.
    + +

    3. Target in RML

    RML does not specify where generated triples are exported to, +each RML processor has its own way to describe this information +through configuration files or command line parameters. +To incorporate this information in the RML mapping rules, +RML is aligned with the +Target vocabulary +which describes how the generated triples are exported. +RML is aligned with the Target vocabulary +by extending rr:TermMap with the rml:logicalTarget property +to describe on Term Map [RML] level where each triple must be directed to. +A Term Map is a function that generates an RDF term +from a logical reference [RML]. +The result of that function is known as the term map's generated +RDF term [RDF-Concepts] +such as subjects, predicates, objects, named graphs and language tags.

    A Term Map MAY also contain zero or more rml:logicalTarget properties +to export all triples containing the generated term to different targets. +The same Term Map can have multiple targets by specifying +multiple rml:logicalTarget properties in the Term Map.

    Multiple Targets MAY be combined by specifying multiple Targets +in the same Term Map or multiple Term Maps of the same RDF triple +(Section § 5. Combining multiple Targets). +Targets MAY be overriden by using a separate Triples Map +or conditions [FnO] (Section § 6. Overriding Targets).

    If the mapping document contains no Targets, +the processor falls back to the default target, +as it is specified through the processor's +specific configuration file or command line parameters. +If a mapping document contains at least one Target, +the processor will export the triples to these Targets, +triples which do not have one or more Target(s) assigned, +are exported to the default target of the processor.

    + + + + + + + + + + + + +
    PropertyDomainRange
    rml:logicalTargetrr:TermMaprmlt:LogicalTarget

    In the example below, a CSV file is transformed into a knowledge graph. +The CSV file is accessed using the [CSVW] vocabulary, +transformed into a knowledge graph using [RML] mappings, +and exported to two Targets, which are accessed through the [VoID] vocabulary. +The knowledge graph is exported as N-Quads to the first Target, +and as Turtle to the second Target. +The Turtle file of the second Target is also compressed using the Zip +compression algorithm.

    id;name;nickname
    +0;Nathan Ford;Mastermind
    +1;Sophie Devereaux;Grifter
    +2;Eliot Spender;Hitter
    +3;Parker;Thief
    +4;Alec Hardison;Hacker
    <#CSVSourceAccess> a csvw:Table;
    +  csvw:url "https://rml.io/specs/rml-target/Leverage.csv";
    +  csvw:dialect [ a csvw:Dialect;
    +    csvw:delimiter ";";
    +    csvw:encoding "UTF-8";
    +    csvw:header "1"^^xsd:boolean;
    +  ];
    +.
    @base <http://example.com/ns#> .
    +
    +<#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#CSVSourceAccess>;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.com/{id}";
    +    rml:logicalTarget <#TargetDump1>;
    +    rr:class foaf:Person;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:Turtle;
    +  rmlt:compression comp:zip;
    +.
    <#VoIDDump1> a void:Dataset;
    +    void:dataDump <file:///data/dump1.nt>;
    +.
    +
    +<#VoIDDump2> a void:Dataset;
    +    void:dataDump <file:///data/dump2.ttl.zip>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Nathan Ford" _b0 .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Mastermind" _b0 .
    +<http://example.org/1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Sophie Devereaux" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Grifter" _b0 .
    +<http://example.org/2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Eliot Spencer" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Hitter" _b0 .
    +<http://example.org/3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Parker" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Thief" _b0 .
    +<http://example.org/4> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Alec Hardison" _b0 .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/nickname> "Hacker" _b0 .
    +
    +# file:///data/dump2.ttl.zip
    +@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    +
    +<http://example.org/0>
    +  foaf:name "Nathan Ford";
    +.
    +<http://example.org/1>
    +  foaf:name "Sophie Devereaux";
    +.
    +<http://example.org/2>
    +  foaf:name "Eliot Spencer";
    +.
    +<http://example.org/3>
    +  foaf:name "Parker";
    +.
    +<http://example.org/4>
    +  foaf:name "Alec Hardison";
    +.
    + +

    4. Single targets

    In the following examples, the RDF triples are exported to a single Target. +In some examples, not all RDF triples have a dedicated Target assigned, +therefore, they will be exported to the default Target of the processor.

    4.1 Subject Map

    All triples containing the generated subject are exported +to the specified targets in the Subject Map [RML].

    The following example exports all triples containing +the generated subject http://example.org/{id} +to an RDF dump with N-Quads as serialization format and GZip compression:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Quads;
    +  rmlt:compression comp:gzip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq.gz>;
    +.
    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.2 Predicate Map

    All triples containing the generated predicate are exported +to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing +the generated predicate foaf:name to an RDF dump +with Turtle as serialization format and Zip compression:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:Turtle;
    +  rmlt:compression comp:zip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.ttl.zip>;
    +.
    # file:///data/dump1.ttl.zip
    +@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    +@base <http://example.com/ns#> .
    +
    +<http://example.org/0>
    +  foaf:name "Monica Geller";
    +.
    +<http://example.org/1>
    +  foaf:name "Rachel Green";
    +.
    +<http://example.org/2>
    +  foaf:name "Joey Tribbiani";
    +.
    +<http://example.org/3>
    +  foaf:name "Chandler Bing";
    +.
    +<http://example.org/4>
    +  foaf:name "Ross Geller";
    +.
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.3 Object Map

    All triples containing the generated object are exported +to the specified targets in the Object Map [RML].

    The following example exports all triples containing +the generated object from the reference name to an RDF dump +with N-Triples as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.4 Graph Map

    All triples within a named graph are exported to the specified targets +in the Graph Map [RML]. +The named graph influences to where the named graph's triples +may be exported to as the Target's serialization format must +support named graphs such as N-Quads, JSON-LD or TriG. +When a Target contains a serialization format +which does not support named graphs and a Graph Map is used, +the mapping is considered invalid. +If a named graph is spread over multiple targets, +all targets must be combined to access the complete named graph. +In case RDF triples are not within a specific named graph, +they are added to the default graph as specified +by the [R2RML] specification.

    The following example exports all triples in the named graph ex:Friends +to an RDF dump with N-Quads as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +    rr:graphMap [
    +      rml:logicalTarget <#TargetDump1>;
    +      rr:constant ex:Friends;
    +    ];
    +   ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .

    4.5 Language Map

    All triples with a language tag are exported to the specified targets +in the Language Map [RML].

    The following examples export all triples with a language tag +to a RDF dump with N-Triples as serialization format:

    [
    +  { 
    +    "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
    +  }
    +]
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{id}";
    +   ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:age;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "age";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller"@en .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green"@en .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani"@en .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing"@en .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller"@en .
    +
    +# default target of the processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    +<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .
    + +

    5. Combining multiple Targets

    Multiple Targets MAY be specified for the same triple +in the same or multiple Term Maps. +If multiple Targets are defined in the same Term Map, +all triples containing the generated Term are exported +to all the specified Targets. +In case multiple Term Maps of the same RDF triple contain more than one Target, +the generated triples are exported to all the specified Targets. +If multiple Term Maps of an RDF triple refer multiple times to the same Target, +the RDF triple is written only once to the target to avoid duplicates.

    5.1 Multiple Targets in the same Term Map

    All triples are exported to all Targets, if the Term Map contains multiple +Targets. In the example a Subject Map has three specified Targets, +all triples with the subject http://example.org/{@id} are exported +to the three specified Targets:

      +
    • Target 1: /data/dump.nt.zip, N-Triples serialization, Zip compression
    • +
    • Target 2: /data/dump.jsonld.tar.xz, JSON-LD serialization, TarXz compression
    • +
    • Target 3: /data/dump.rdf.tar.gzip, RDF/XML serialization, TarGZip compression
    • +
    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +    rml:logicalTarget <#TargetDump2>;
    +    rml:logicalTarget <#TargetDump3>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +  rmlt:compression comp:zip;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:JSON-LD;
    +  rmlt:compression comp:tarxz;
    +.
    +<#TargetDump3> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:RDF_XML;
    +  rmlt:compression comp:targzip;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt.zip>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.jsonld.tar.xz>;
    +.
    +<#VoIDDump3> a void:Dataset ;
    +  void:dataDump <file:///data/dump3.rdf.tar.gz>;
    +.
    # file:///data/dump1.nt.zip
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.jsonld.tar.xz
    +[
    +  {
    +    "@id": "http://example.org/0",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Kara Danvers"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/1",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Alex Danvers"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/2",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "J'onn J'onzz"
    +      }
    +    ]
    +  },
    +  {
    +    "@id": "http://example.org/3",
    +    "http://xmlns.com/foaf/0.1/name": [
    +      {
    +        "@value": "Nia Nal"
    +      }
    +    ]
    +  }
    +]
    +
    +# file:///data/dump3.rdf.tar.gz
    +<?xml version="1.0" encoding="utf-8" ?>
    +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    +    xmlns:foaf="http://xmlns.com/foaf/0.1/">
    +  <rdf:Description rdf:about="http://example.org/0">
    +    <foaf:name>Kara Danvers</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/1">
    +    <foaf:name>Alex Danvers</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/2">
    +    <foaf:name>J'onn J'onzz</foaf:name>
    +  </rdf:Description>
    +  <rdf:Description rdf:about="http://example.org/3">
    +    <foaf:name>Nia Nal</foaf:name>
    +  </rdf:Description>
    +</rdf:RDF>

    5.2 Subject Map and Predicate Map

    All triples containing the subject http://example.org/{id} +are exported to TargetDump1 +and all triples containing the predicate foaf:name +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.3 Subject Map and Object Map

    All triples containing the subject http://example.org/{id} +are exported to TargetDump1 +and all triples containing the object reference name/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.4 Predicate Map and Object Map

    All triples containing the predicate foaf:name +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.5 Subject Map, Predicate Map and Object Map

    All triples containing the subject http://example.org/{@id} +are exported to TargetDump1 +and all triples containing the object reference nickname/text() or +predicate foaf:nickname are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.6 Subject Map and Graph Map

    All triples containing the subject http://example.org/{@id} +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +    rml:logicalTarget <#TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Map and Graph Map

    All triples containing the predicate foaf:nickname +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Object Map and Graph Map

    All triples containing the object reference nickname/text() +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.9 Language Map and Graph Map

    All triples containing the language tag en +are exported to TargetDump1 +and all triples within the named graph ex:Characters +are exported to TargetDump2. +The other triples are exported to the default target of the processor +as there is no dedicated Target assigned to triples containing +foaf:nickname as predicate.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    +
    +# default target of processor
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.10 Language Map and Object Map

    All triples containing the language tag en +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:languageMap [
    +        rml:logicalTarget <#TargetDump1>;
    +        rr:constant "en";
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Predicate Maps

    All triples containing the predicate foaf:name +are exported to TargetDump1 +and all triples containing the predicate foaf:nickname +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Object Maps

    All triples containing the object reference name/text() +are exported to TargetDump1 +and all triples containing the object reference nickname/text() +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +      rml:logicalTarget <#TargetDump1>;
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +      rml:logicalTarget <#TargetDump2>;
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    +
    +# file:///data/dump2.nt
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.13 Multiple Graph Maps

    All triples within the named graph ex:Characters +are exported to TargetDump1 +and all triples within the named graph ex:NickNames +are exported to TargetDump2.

    <Supergirl>
    +  <Character id="0">
    +    <name>Kara Danvers</name>
    +    <nickname>Supergirl</nickname>
    +  </Character>
    +  <Character id="1">
    +    <name>Alex Danvers</name>
    +    <nickname>Sentinel</nickname>
    +  </Character>
    +  <Character id="2">
    +    <name>J'onn J'onzz</name>
    +    <nickname>Martian Manhunter</nickname>
    +  </Character>
    +  <Character id="3">
    +    <name>Nia Nal</name>
    +    <nickname>Dreamer</nickname>
    +  </Character> 
    +</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    +  dcat:distribution [ a dcat:Distribution;
    +    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    +  ];
    +.
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#DCATSourceAccess>;
    +    rml:referenceFormulation ql:JSONPath;
    +    rml:iterator "$.[*]";
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rr:template "http://example.org/{@id}";
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump1>;
    +      rr:constant ex:Characters;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name/text()";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:graphMap [ a rr:GraphMap;
    +      rml:logicalTarget <#TargetDump2>;
    +      rr:constant ex:NickNames;
    +    ];
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:nickname;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "nickname/text()";
    +    ];
    +  ];
    +.
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nq>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    +
    +# file:///data/dump2.nq
    +<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" <http://example.org/Nicknames> .
    +<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" <http://example.org/Nicknames> .
    +<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" <http://example.org/Nicknames> .
    +<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" <http://example.org/Nicknames> .
    + +

    6. Overriding Targets

    In some cases exporting all triples to a target is not desired, +therefore Targets can be overridden when needed +by either using a separate Triples Map which isolates certain triples or +by using FnO functions [FnO] as conditions.

    6.1 Separate Triples Map

    Triples can be exported to a specific Target while not to other Targets +by isolating these triples in a separate Triples Map.

    In this example, the same subject and object are used in both Triples Maps, +but with a diffent predicate. The triples with the first predicate foaf:name +are exported to the first Target and the triples with the second predicate +schema:name to the second Target.

    # Results of DBPedia SPARQL query
    +actor,name,nickname
    +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    +  sd:endpoint ;
    +  sd:supportedLanguage sd:SPARQL11Query;
    +  sd:resultFormat formats:SPARQL_Results_CSV;
    +.
    +
    <#TriplesMap1> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +
    +<#TriplesMap2> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump2>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant schema:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +.
    +
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nq>;
    +.
    # file:///data/dump1.nt
    +<http://dbpedia.org/resource/Kevin_Sussman> <http://xmlns.com/foaf/0.1/name> "Kevin Sussman" .
    +<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    +<http://dbpedia.org/resource/Sara_Gilbert> <http://xmlns.com/foaf/0.1/name> "Sara Gilbert" .
    +<http://dbpedia.org/resource/Kunal_Nayyar> <http://xmlns.com/foaf/0.1/name> "Kunal Nayyar" .
    +<http://dbpedia.org/resource/Laura_Spencer> <http://xmlns.com/foaf/0.1/name> "Laura Spencer" .
    +<http://dbpedia.org/resource/Simon_Helberg> <http://xmlns.com/foaf/0.1/name> "Simon Helberg" .
    +<http://dbpedia.org/resource/Johnny_Galecki> <http://xmlns.com/foaf/0.1/name> "Johnny Galecki" .
    +<http://dbpedia.org/resource/Mayim_Bialik> <http://xmlns.com/foaf/0.1/name> "Mayim Bialik" .
    +<http://dbpedia.org/resource/Melissa_Rauch> <http://xmlns.com/foaf/0.1/name> "Melissa Rauch" .
    +
    +# file:///data/dump2.nt
    +<http://dbpedia.org/resource/Kevin_Sussman> <http://schema.org/name> "Kevin Sussman" .
    +<http://dbpedia.org/resource/Jim_Parsons> <http://schema.org/name> "Jim Parsons" .
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://schema.org/name> "Kaley Cuoco" .
    +<http://dbpedia.org/resource/Sara_Gilbert> <http://schema.org/name> "Sara Gilbert" .
    +<http://dbpedia.org/resource/Kunal_Nayyar> <http://schema.org/name> "Kunal Nayyar" .
    +<http://dbpedia.org/resource/Laura_Spencer> <http://schema.org/name> "Laura Spencer" .
    +<http://dbpedia.org/resource/Simon_Helberg> <http://schema.org/name> "Simon Helberg" .
    +<http://dbpedia.org/resource/Johnny_Galecki> <http://schema.org/name> "Johnny Galecki" .
    +<http://dbpedia.org/resource/Mayim_Bialik> <http://schema.org/name> "Mayim Bialik" .
    +<http://dbpedia.org/resource/Melissa_Rauch> <http://schema.org/name> "Melissa Rauch" .

    6.2 Conditions

    FnO functions MAY be leveraged to export triples +only under certain conditions. +Conditions are already integrated in RML+FnO processors, +thus conditions apply on Targets as well. +Triples are generated and exported based on the FnO condition's evaluation. +Only if the condition is true, the triples are generated and exported.

    In the example, the triples with Jim Parsons as object are exported +to the first Target, triples with Kaley Cuoco as object are exported +to the second Target.

    # Results of DBPedia SPARQL query
    +actor,name,nickname
    +http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    +http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    +http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    +http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    +http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    +http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    +http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    +http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    +http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    +http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    +  sd:endpoint ;
    +  sd:supportedLanguage sd:SPARQL11Query;
    +  sd:resultFormat formats:SPARQL_Results_CSV;
    +.
    +
    <#TriplesMap> a rr:TriplesMap;
    +  rml:logicalSource [ a rml:LogicalSource;
    +    rml:source <#SDSourceAccess>;
    +    rml:query """
    +      PREFIX dbo: 
    +      PREFIX rdf: 
    +      PREFIX rdfs: 
    +      SELECT DISTINCT ?actor ?name WHERE {
    +        ?tvshow rdf:type dbo:TelevisionShow .
    +        ?tvshow rdfs:label "The Big Bang Theory"@en .
    +        ?tvshow dbo:starring ?actor .
    +        ?actor foaf:name ?name .
    +      }
    +    """;
    +  ];
    +  rr:subjectMap [ a rr:SubjectMap;
    +    rml:reference "actor";
    +    rr:termType rr:IRI;
    +    rmlt:logicalTarget <TargetDump1>;
    +  ];
    +  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    +    rr:predicateMap [ a rr:PredicateMap;
    +      rr:constant foaf:name;
    +    ];
    +    rr:objectMap [ a rr:ObjectMap;
    +      rml:reference "name";
    +    ];
    +  ];
    +  rr:predicateObjectMap [ 
    +    rr:predicateMap [ rr:constant foaf:name ];
    +    rr:objectMap [
    +      fnml:functionValue [
    +        rr:predicateObjectMap [
    +          rr:predicate fno:executes ;
    +          rr:objectMap [ rr:constant idlab-fn:decide ]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:expectedStr ;
    +          rr:objectMap [ rr:constant "Jim Parsons"]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:str ;
    +          rr:objectMap [ 
    +            rml:reference "name";
    +            rml:logicalTarget <#TargetDump1>;
    +          ];
    +        ];
    +      ];
    +    ];
    +  ];
    +  rr:predicateObjectMap [ 
    +    rr:predicateMap [ rr:constant foaf:name ];
    +    rr:objectMap [
    +      fnml:functionValue [
    +        rr:predicateObjectMap [
    +          rr:predicate fno:executes ;
    +          rr:objectMap [ rr:constant idlab-fn:decide ]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:expectedStr ;
    +          rr:objectMap [ rr:constant "Kaley Cuoco"]
    +        ];
    +        rr:predicateObjectMap [
    +          rr:predicate idlab-fn:str ;
    +          rr:objectMap [ 
    +            rml:reference "name";
    +            rml:logicalTarget <#TargetDump2>;
    +          ];
    +        ];
    +      ];
    +    ];
    +  ];
    +
    <#TargetDump1> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump1>;
    +  rmlt:serialization formats:N-Triples;
    +.
    +<#TargetDump2> a rmlt:LogicalTarget;
    +  rmlt:target <#VoIDDump2>;
    +  rmlt:serialization formats:N-Triples;
    +.
    <#VoIDDump1> a void:Dataset ;
    +  void:dataDump <file:///data/dump1.nt>;
    +.
    +<#VoIDDump2> a void:Dataset ;
    +  void:dataDump <file:///data/dump2.nt>;
    +.
    # file:///data/dump1.nt
    +<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    +
    +# file:///data/dump2.nt
    +<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    + + + +

    A. References

    +

    A.1 Normative references

    +
    [CSVW]
    CSV on the Web: A Primer. W3C. 25 February 2016. W3C Working Group Note. URL: https://www.w3.org/TR/tabular-data-primer/
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [R2RML]
    R2RML: RDB to RDF Mapping Language. Souripriya Das; Seema Sundara; Richard Cyganiak. W3C. 27 September 2012. W3C Recommendation. URL: https://www.w3.org/TR/r2rml/
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [VoID]
    Describing Linked Datasets with the VoID Vocabulary. Keith Alexander; Richard Cyganiak; Michael Hausenblas; Jun Zhao. W3C. 3 March 2011. W3C Note. URL: https://www.w3.org/TR/void/
    +
    +

    A.2 Informative references

    +
    [DataIO]
    DataIO. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/dataio
    +
    \ No newline at end of file From a08d2a6da3d19fe777076cd8ae29a34ddca66ce5 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Wed, 9 Mar 2022 14:21:50 +0100 Subject: [PATCH 37/39] docs: correct path --- docs/{dist => }/20210518/DBPedia.csv | 0 docs/{dist => }/20210518/Friends.json | 0 docs/{dist => }/20210518/Leverage.csv | 0 docs/{dist => }/20210518/Supergirl.xml | 0 docs/{dist => }/20210518/index.html | 0 docs/{dist => }/DBPedia.csv | 0 docs/{dist => }/Friends.json | 0 docs/{dist => }/Leverage.csv | 0 docs/{dist => }/Supergirl.xml | 0 docs/{dist => }/index.html | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename docs/{dist => }/20210518/DBPedia.csv (100%) rename docs/{dist => }/20210518/Friends.json (100%) rename docs/{dist => }/20210518/Leverage.csv (100%) rename docs/{dist => }/20210518/Supergirl.xml (100%) rename docs/{dist => }/20210518/index.html (100%) rename docs/{dist => }/DBPedia.csv (100%) rename docs/{dist => }/Friends.json (100%) rename docs/{dist => }/Leverage.csv (100%) rename docs/{dist => }/Supergirl.xml (100%) rename docs/{dist => }/index.html (100%) diff --git a/docs/dist/20210518/DBPedia.csv b/docs/20210518/DBPedia.csv similarity index 100% rename from docs/dist/20210518/DBPedia.csv rename to docs/20210518/DBPedia.csv diff --git a/docs/dist/20210518/Friends.json b/docs/20210518/Friends.json similarity index 100% rename from docs/dist/20210518/Friends.json rename to docs/20210518/Friends.json diff --git a/docs/dist/20210518/Leverage.csv b/docs/20210518/Leverage.csv similarity index 100% rename from docs/dist/20210518/Leverage.csv rename to docs/20210518/Leverage.csv diff --git a/docs/dist/20210518/Supergirl.xml b/docs/20210518/Supergirl.xml similarity index 100% rename from docs/dist/20210518/Supergirl.xml rename to docs/20210518/Supergirl.xml diff --git a/docs/dist/20210518/index.html b/docs/20210518/index.html similarity index 100% rename from docs/dist/20210518/index.html rename to docs/20210518/index.html diff --git a/docs/dist/DBPedia.csv b/docs/DBPedia.csv similarity index 100% rename from docs/dist/DBPedia.csv rename to docs/DBPedia.csv diff --git a/docs/dist/Friends.json b/docs/Friends.json similarity index 100% rename from docs/dist/Friends.json rename to docs/Friends.json diff --git a/docs/dist/Leverage.csv b/docs/Leverage.csv similarity index 100% rename from docs/dist/Leverage.csv rename to docs/Leverage.csv diff --git a/docs/dist/Supergirl.xml b/docs/Supergirl.xml similarity index 100% rename from docs/dist/Supergirl.xml rename to docs/Supergirl.xml diff --git a/docs/dist/index.html b/docs/index.html similarity index 100% rename from docs/dist/index.html rename to docs/index.html From 11a01b80007cfdb895b63c8a5345e0519fbd4ca9 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Wed, 9 Mar 2022 14:22:45 +0100 Subject: [PATCH 38/39] publish: use docs dir --- dist/20210518/DBPedia.csv | 10 - dist/20210518/Friends.json | 27 - dist/20210518/Leverage.csv | 6 - dist/20210518/Supergirl.xml | 18 - dist/20210518/index.html | 2531 ----------------------------------- dist/DBPedia.csv | 10 - dist/Friends.json | 27 - dist/Leverage.csv | 6 - dist/Supergirl.xml | 18 - dist/index.html | 2531 ----------------------------------- publish.js | 30 +- 11 files changed, 15 insertions(+), 5199 deletions(-) delete mode 100644 dist/20210518/DBPedia.csv delete mode 100644 dist/20210518/Friends.json delete mode 100644 dist/20210518/Leverage.csv delete mode 100644 dist/20210518/Supergirl.xml delete mode 100644 dist/20210518/index.html delete mode 100644 dist/DBPedia.csv delete mode 100644 dist/Friends.json delete mode 100644 dist/Leverage.csv delete mode 100644 dist/Supergirl.xml delete mode 100644 dist/index.html diff --git a/dist/20210518/DBPedia.csv b/dist/20210518/DBPedia.csv deleted file mode 100644 index c043bf3..0000000 --- a/dist/20210518/DBPedia.csv +++ /dev/null @@ -1,10 +0,0 @@ -http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman -http://dbpedia.org/resource/Jim_Parsons,Jim Parsons -http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco -http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert -http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar -http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer -http://dbpedia.org/resource/Simon_Helberg,Simon Helberg -http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki -http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik -http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch diff --git a/dist/20210518/Friends.json b/dist/20210518/Friends.json deleted file mode 100644 index 8e55449..0000000 --- a/dist/20210518/Friends.json +++ /dev/null @@ -1,27 +0,0 @@ -[ - { - "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/dist/20210518/Leverage.csv b/dist/20210518/Leverage.csv deleted file mode 100644 index 024b34b..0000000 --- a/dist/20210518/Leverage.csv +++ /dev/null @@ -1,6 +0,0 @@ -id;name;nickname -0;Nathan Ford;Mastermind -1;Sophie Devereaux;Grifter -2;Eliot Spender;Hitter -3;Parker;Thief -4;Alec Hardison;Hacker diff --git a/dist/20210518/Supergirl.xml b/dist/20210518/Supergirl.xml deleted file mode 100644 index 1e70bb4..0000000 --- a/dist/20210518/Supergirl.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - Kara Danvers - Supergirl - - - Alex Danvers - Sentinel - - - J'onn J'onzz - Martian Manhunter - - - Nia Nal - Dreamer - - diff --git a/dist/20210518/index.html b/dist/20210518/index.html deleted file mode 100644 index 5066254..0000000 --- a/dist/20210518/index.html +++ /dev/null @@ -1,2531 +0,0 @@ - - - - - - -Target in RML - - - - - - - - - - - - - - - - - - -
    -

    Target in RML

    - -

    - Unofficial Draft - -

    -
    - -
    Latest editor's draft:
    https://rml.io/specs/target-in-rml
    - - - - - -
    Editors:
    -
    - (Ghent University – imec – IDLab) -
    - (Ghent University – imec – IDLab) -
    - - -
    This Version
    - https://rml.io/specs/target-in-rml/20210518/ -
    Previous Version
    - https://rml.io/specs/target-in-rml/20210518/ -
    Website
    - https://rml.io/target-in-rml -
    -
    - - - - -
    -
    -

    Abstract

    This document describes a formal representation to align the -RDF Mapping Language [RML] with Target [DataIO] -to describe in RML mapping rules how a generated Knowledge Graph -should be directed and exported. -The current document describes how Target is integrated -with RML through definitions and examples.

    The version of this document is v1.0.0.

    - -

    Status of This Document

    - This document is a draft of a potential specification. It has no official - standing of any kind and does not represent the support or consensus of - any standards organization. -

    -

    This is an early draft, -yet efforts are made to keep things stable.

    -
    - -

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    - The key word MAY in this document - is to be interpreted as described in - BCP 14 - [RFC2119] [RFC8174] - when, and only when, they appear in all capitals, as shown here. -

    - -

    2. Overview

    This section is non-normative.

    This document describes the alignment of Target specification with RML -to define how a generated RDF knowledge graph must be exported -in the RML mapping rules. -Target and RML are self-standing specifications -which are aligned through this specification.

    In this document, examples assume -the following namespace prefix bindings unless otherwise stated:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    PrefixNamespace
    rmlhttp://semweb.mmlab.be/ns/rml#
    rmlthttp://semweb.mmlab.be/ns/rml-target#
    comphttp://semweb.mmlab.be/ns/rml-compression#
    rrhttp://www.w3.org/ns/r2rml#
    formatshttps://www.w3.org/ns/formats/
    comphttp://semweb.mmlab.be/ns/rml-compression#
    csvwhttp://www.w3.org/ns/csvw#
    foafhttp://xmlns.com/foaf/0.1/
    fnmlhttp://semweb.mmlab.be/ns/fnml#
    idlab-fnhttp://example.com/idlab/function/
    voidhttp://rdfs.org/ns/void#
    exhttp://example.org/ns#
    schemahttp://schema.org/

    Examples are divided in several boxes, each box has its own color. -Blue boxes contain the input RDF data of the example:

    # This box contains the example's input RDF data.

    The Target description is contained in a pink box:

    # This box contains the example's Target description.

    The data access description is contained in a grey box:

    # This box contains the data access description of the example.

    The RML mapping is contained in a yellow box:

    # This box contains the example's RML mapping.

    The generated output RDF is contained in a green box:

    # This box contains the example's generated output RDF.
    - -

    3. Target in RML

    RML does not specify where generated triples are exported to, -each RML processor has its own way to describe this information -through configuration files or command line parameters. -To incorporate this information in the RML mapping rules, -RML is aligned with the -Target vocabulary -which describes how the generated triples are exported. -RML is aligned with the Target vocabulary -by extending rr:TermMap with the rml:logicalTarget property -to describe on Term Map [RML] level where each triple must be directed to. -A Term Map is a function that generates an RDF term -from a logical reference [RML]. -The result of that function is known as the term map's generated -RDF term [RDF-Concepts] -such as subjects, predicates, objects, named graphs and language tags.

    A Term Map MAY also contain zero or more rml:logicalTarget properties -to export all triples containing the generated term to different targets. -The same Term Map can have multiple targets by specifying -multiple rml:logicalTarget properties in the Term Map.

    Multiple Targets MAY be combined by specifying multiple Targets -in the same Term Map or multiple Term Maps of the same RDF triple -(Section § 5. Combining multiple Targets). -Targets MAY be overriden by using a separate Triples Map -or conditions [FnO] (Section § 6. Overriding Targets).

    If the mapping document contains no Targets, -the processor falls back to the default target, -as it is specified through the processor's -specific configuration file or command line parameters. -If a mapping document contains at least one Target, -the processor will export the triples to these Targets, -triples which do not have one or more Target(s) assigned, -are exported to the default target of the processor.

    - - - - - - - - - - - - -
    PropertyDomainRange
    rml:logicalTargetrr:TermMaprmlt:LogicalTarget

    In the example below, a CSV file is transformed into a knowledge graph. -The CSV file is accessed using the [CSVW] vocabulary, -transformed into a knowledge graph using [RML] mappings, -and exported to two Targets, which are accessed through the [VoID] vocabulary. -The knowledge graph is exported as N-Quads to the first Target, -and as Turtle to the second Target. -The Turtle file of the second Target is also compressed using the Zip -compression algorithm.

    id;name;nickname
    -0;Nathan Ford;Mastermind
    -1;Sophie Devereaux;Grifter
    -2;Eliot Spender;Hitter
    -3;Parker;Thief
    -4;Alec Hardison;Hacker
    <#CSVSourceAccess> a csvw:Table;
    -  csvw:url "https://rml.io/specs/rml-target/Leverage.csv";
    -  csvw:dialect [ a csvw:Dialect;
    -    csvw:delimiter ";";
    -    csvw:encoding "UTF-8";
    -    csvw:header "1"^^xsd:boolean;
    -  ];
    -.
    @base <http://example.com/ns#> .
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#CSVSourceAccess>;
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.com/{id}";
    -    rml:logicalTarget <#TargetDump1>;
    -    rr:class foaf:Person;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:Turtle;
    -  rmlt:compression comp:zip;
    -.
    <#VoIDDump1> a void:Dataset;
    -    void:dataDump <file:///data/dump1.nt>;
    -.
    -
    -<#VoIDDump2> a void:Dataset;
    -    void:dataDump <file:///data/dump2.ttl.zip>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Nathan Ford" _b0 .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Mastermind" _b0 .
    -<http://example.org/1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Sophie Devereaux" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Grifter" _b0 .
    -<http://example.org/2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Eliot Spencer" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Hitter" _b0 .
    -<http://example.org/3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Parker" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Thief" _b0 .
    -<http://example.org/4> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Alec Hardison" _b0 .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/nickname> "Hacker" _b0 .
    -
    -# file:///data/dump2.ttl.zip
    -@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    -
    -<http://example.org/0>
    -  foaf:name "Nathan Ford";
    -.
    -<http://example.org/1>
    -  foaf:name "Sophie Devereaux";
    -.
    -<http://example.org/2>
    -  foaf:name "Eliot Spencer";
    -.
    -<http://example.org/3>
    -  foaf:name "Parker";
    -.
    -<http://example.org/4>
    -  foaf:name "Alec Hardison";
    -.
    - -

    4. Single targets

    In the following examples, the RDF triples are exported to a single Target. -In some examples, not all RDF triples have a dedicated Target assigned, -therefore, they will be exported to the default Target of the processor.

    4.1 Subject Map

    All triples containing the generated subject are exported -to the specified targets in the Subject Map [RML].

    The following example exports all triples containing -the generated subject http://example.org/{id} -to an RDF dump with N-Quads as serialization format and GZip compression:

    [
    -  { 
    -    "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
    -  }
    -]
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:age;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Quads;
    -  rmlt:compression comp:gzip;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq.gz>;
    -.
    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.2 Predicate Map

    All triples containing the generated predicate are exported -to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing -the generated predicate foaf:name to an RDF dump -with Turtle as serialization format and Zip compression:

    [
    -  { 
    -    "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
    -  }
    -]
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:age;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:Turtle;
    -  rmlt:compression comp:zip;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.ttl.zip>;
    -.
    # file:///data/dump1.ttl.zip
    -@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    -@base <http://example.com/ns#> .
    -
    -<http://example.org/0>
    -  foaf:name "Monica Geller";
    -.
    -<http://example.org/1>
    -  foaf:name "Rachel Green";
    -.
    -<http://example.org/2>
    -  foaf:name "Joey Tribbiani";
    -.
    -<http://example.org/3>
    -  foaf:name "Chandler Bing";
    -.
    -<http://example.org/4>
    -  foaf:name "Ross Geller";
    -.
    -
    -# default target of the processor
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.3 Object Map

    All triples containing the generated object are exported -to the specified targets in the Object Map [RML].

    The following example exports all triples containing -the generated object from the reference name to an RDF dump -with N-Triples as serialization format:

    [
    -  { 
    -    "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
    -  }
    -]
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:age;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    -
    -# default target of the processor
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.4 Graph Map

    All triples within a named graph are exported to the specified targets -in the Graph Map [RML]. -The named graph influences to where the named graph's triples -may be exported to as the Target's serialization format must -support named graphs such as N-Quads, JSON-LD or TriG. -When a Target contains a serialization format -which does not support named graphs and a Graph Map is used, -the mapping is considered invalid. -If a named graph is spread over multiple targets, -all targets must be combined to access the complete named graph. -In case RDF triples are not within a specific named graph, -they are added to the default graph as specified -by the [R2RML] specification.

    The following example exports all triples in the named graph ex:Friends -to an RDF dump with N-Quads as serialization format:

    [
    -  { 
    -    "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
    -  }
    -]
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{id}";
    -    rr:graphMap [
    -      rml:logicalTarget <#TargetDump1>;
    -      rr:constant ex:Friends;
    -    ];
    -   ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:age;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .

    4.5 Language Map

    All triples with a language tag are exported to the specified targets -in the Language Map [RML].

    The following examples export all triples with a language tag -to a RDF dump with N-Triples as serialization format:

    [
    -  { 
    -    "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
    -  }
    -]
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{id}";
    -   ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -      rml:languageMap [
    -        rml:logicalTarget <#TargetDump1>;
    -        rr:constant "en";
    -      ];
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:age;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller"@en .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green"@en .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani"@en .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing"@en .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller"@en .
    -
    -# default target of the processor
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .
    - -

    5. Combining multiple Targets

    Multiple Targets MAY be specified for the same triple -in the same or multiple Term Maps. -If multiple Targets are defined in the same Term Map, -all triples containing the generated Term are exported -to all the specified Targets. -In case multiple Term Maps of the same RDF triple contain more than one Target, -the generated triples are exported to all the specified Targets. -If multiple Term Maps of an RDF triple refer multiple times to the same Target, -the RDF triple is written only once to the target to avoid duplicates.

    5.1 Multiple Targets in the same Term Map

    All triples are exported to all Targets, if the Term Map contains multiple -Targets. In the example a Subject Map has three specified Targets, -all triples with the subject http://example.org/{@id} are exported -to the three specified Targets:

      -
    • Target 1: /data/dump.nt.zip, N-Triples serialization, Zip compression
    • -
    • Target 2: /data/dump.jsonld.tar.xz, JSON-LD serialization, TarXz compression
    • -
    • Target 3: /data/dump.rdf.tar.gzip, RDF/XML serialization, TarGZip compression
    • -
    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -    rml:logicalTarget <#TargetDump1>;
    -    rml:logicalTarget <#TargetDump2>;
    -    rml:logicalTarget <#TargetDump3>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -  rmlt:compression comp:zip;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:JSON-LD;
    -  rmlt:compression comp:tarxz;
    -.
    -<#TargetDump3> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:RDF_XML;
    -  rmlt:compression comp:targzip;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt.zip>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.jsonld.tar.xz>;
    -.
    -<#VoIDDump3> a void:Dataset ;
    -  void:dataDump <file:///data/dump3.rdf.tar.gz>;
    -.
    # file:///data/dump1.nt.zip
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -
    -# file:///data/dump2.jsonld.tar.xz
    -[
    -  {
    -    "@id": "http://example.org/0",
    -    "http://xmlns.com/foaf/0.1/name": [
    -      {
    -        "@value": "Kara Danvers"
    -      }
    -    ]
    -  },
    -  {
    -    "@id": "http://example.org/1",
    -    "http://xmlns.com/foaf/0.1/name": [
    -      {
    -        "@value": "Alex Danvers"
    -      }
    -    ]
    -  },
    -  {
    -    "@id": "http://example.org/2",
    -    "http://xmlns.com/foaf/0.1/name": [
    -      {
    -        "@value": "J'onn J'onzz"
    -      }
    -    ]
    -  },
    -  {
    -    "@id": "http://example.org/3",
    -    "http://xmlns.com/foaf/0.1/name": [
    -      {
    -        "@value": "Nia Nal"
    -      }
    -    ]
    -  }
    -]
    -
    -# file:///data/dump3.rdf.tar.gz
    -<?xml version="1.0" encoding="utf-8" ?>
    -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    -    xmlns:foaf="http://xmlns.com/foaf/0.1/">
    -  <rdf:Description rdf:about="http://example.org/0">
    -    <foaf:name>Kara Danvers</foaf:name>
    -  </rdf:Description>
    -  <rdf:Description rdf:about="http://example.org/1">
    -    <foaf:name>Alex Danvers</foaf:name>
    -  </rdf:Description>
    -  <rdf:Description rdf:about="http://example.org/2">
    -    <foaf:name>J'onn J'onzz</foaf:name>
    -  </rdf:Description>
    -  <rdf:Description rdf:about="http://example.org/3">
    -    <foaf:name>Nia Nal</foaf:name>
    -  </rdf:Description>
    -</rdf:RDF>

    5.2 Subject Map and Predicate Map

    All triples containing the subject http://example.org/{id} -are exported to TargetDump1 -and all triples containing the predicate foaf:name -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -    rml:logicalTarget <#TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.3 Subject Map and Object Map

    All triples containing the subject http://example.org/{id} -are exported to TargetDump1 -and all triples containing the object reference name/text() -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -    rml:logicalTarget <#TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.4 Predicate Map and Object Map

    All triples containing the predicate foaf:name -are exported to TargetDump1 -and all triples containing the object reference nickname/text() -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.5 Subject Map, Predicate Map and Object Map

    All triples containing the subject http://example.org/{@id} -are exported to TargetDump1 -and all triples containing the object reference nickname/text() or -predicate foaf:nickname are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -    rml:logicalTarget <#TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.6 Subject Map and Graph Map

    All triples containing the subject http://example.org/{@id} -are exported to TargetDump1 -and all triples within the named graph ex:Characters -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -    rml:logicalTarget <#TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump2>;
    -      rr:constant ex:Characters;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nq>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    -
    -# file:///data/dump2.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Map and Graph Map

    All triples containing the predicate foaf:nickname -are exported to TargetDump1 -and all triples within the named graph ex:Characters -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump2>;
    -      rr:constant ex:Characters;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nq>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    -
    -# file:///data/dump2.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Object Map and Graph Map

    All triples containing the object reference nickname/text() -are exported to TargetDump1 -and all triples within the named graph ex:Characters -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump2>;
    -      rr:constant ex:Characters;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nq>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    -
    -# file:///data/dump2.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.9 Language Map and Graph Map

    All triples containing the language tag en -are exported to TargetDump1 -and all triples within the named graph ex:Characters -are exported to TargetDump2. -The other triples are exported to the default target of the processor -as there is no dedicated Target assigned to triples containing -foaf:nickname as predicate.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump2>;
    -      rr:constant ex:Characters;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -      rml:languageMap [
    -        rml:logicalTarget <#TargetDump1>;
    -        rr:constant "en";
    -      ];
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    -
    -# default target of processor
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.10 Language Map and Object Map

    All triples containing the language tag en -are exported to TargetDump1 -and all triples containing the object reference nickname/text() -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -      rml:languageMap [
    -        rml:logicalTarget <#TargetDump1>;
    -        rr:constant "en";
    -      ];
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Predicate Maps

    All triples containing the predicate foaf:name -are exported to TargetDump1 -and all triples containing the predicate foaf:nickname -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Object Maps

    All triples containing the object reference name/text() -are exported to TargetDump1 -and all triples containing the object reference nickname/text() -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.13 Multiple Graph Maps

    All triples within the named graph ex:Characters -are exported to TargetDump1 -and all triples within the named graph ex:NickNames -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump1>;
    -      rr:constant ex:Characters;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump2>;
    -      rr:constant ex:NickNames;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nq>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    -
    -# file:///data/dump2.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" <http://example.org/Nicknames> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" <http://example.org/Nicknames> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" <http://example.org/Nicknames> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" <http://example.org/Nicknames> .
    - -

    6. Overriding Targets

    In some cases exporting all triples to a target is not desired, -therefore Targets can be overridden when needed -by either using a separate Triples Map which isolates certain triples or -by using FnO functions [FnO] as conditions.

    6.1 Separate Triples Map

    Triples can be exported to a specific Target while not to other Targets -by isolating these triples in a separate Triples Map.

    In this example, the same subject and object are used in both Triples Maps, -but with a diffent predicate. The triples with the first predicate foaf:name -are exported to the first Target and the triples with the second predicate -schema:name to the second Target.

    # Results of DBPedia SPARQL query
    -actor,name,nickname
    -http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    -http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    -http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    -http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    -http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    -http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    -http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    -http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    -http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    -http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    -  sd:endpoint ;
    -  sd:supportedLanguage sd:SPARQL11Query;
    -  sd:resultFormat formats:SPARQL_Results_CSV;
    -.
    -
    <#TriplesMap1> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#SDSourceAccess>;
    -    rml:query """
    -      PREFIX dbo: 
    -      PREFIX rdf: 
    -      PREFIX rdfs: 
    -      SELECT DISTINCT ?actor ?name WHERE {
    -        ?tvshow rdf:type dbo:TelevisionShow .
    -        ?tvshow rdfs:label "The Big Bang Theory"@en .
    -        ?tvshow dbo:starring ?actor .
    -        ?actor foaf:name ?name .
    -      }
    -    """;
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rml:reference "actor";
    -    rr:termType rr:IRI;
    -    rmlt:logicalTarget <TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -
    -<#TriplesMap2> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#SDSourceAccess>;
    -    rml:query """
    -      PREFIX dbo: 
    -      PREFIX rdf: 
    -      PREFIX rdfs: 
    -      SELECT DISTINCT ?actor ?name WHERE {
    -        ?tvshow rdf:type dbo:TelevisionShow .
    -        ?tvshow rdfs:label "The Big Bang Theory"@en .
    -        ?tvshow dbo:starring ?actor .
    -        ?actor foaf:name ?name .
    -      }
    -    """;
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rml:reference "actor";
    -    rr:termType rr:IRI;
    -    rmlt:logicalTarget <TargetDump2>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant schema:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -.
    -
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nq>;
    -.
    # file:///data/dump1.nt
    -<http://dbpedia.org/resource/Kevin_Sussman> <http://xmlns.com/foaf/0.1/name> "Kevin Sussman" .
    -<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    -<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    -<http://dbpedia.org/resource/Sara_Gilbert> <http://xmlns.com/foaf/0.1/name> "Sara Gilbert" .
    -<http://dbpedia.org/resource/Kunal_Nayyar> <http://xmlns.com/foaf/0.1/name> "Kunal Nayyar" .
    -<http://dbpedia.org/resource/Laura_Spencer> <http://xmlns.com/foaf/0.1/name> "Laura Spencer" .
    -<http://dbpedia.org/resource/Simon_Helberg> <http://xmlns.com/foaf/0.1/name> "Simon Helberg" .
    -<http://dbpedia.org/resource/Johnny_Galecki> <http://xmlns.com/foaf/0.1/name> "Johnny Galecki" .
    -<http://dbpedia.org/resource/Mayim_Bialik> <http://xmlns.com/foaf/0.1/name> "Mayim Bialik" .
    -<http://dbpedia.org/resource/Melissa_Rauch> <http://xmlns.com/foaf/0.1/name> "Melissa Rauch" .
    -
    -# file:///data/dump2.nt
    -<http://dbpedia.org/resource/Kevin_Sussman> <http://schema.org/name> "Kevin Sussman" .
    -<http://dbpedia.org/resource/Jim_Parsons> <http://schema.org/name> "Jim Parsons" .
    -<http://dbpedia.org/resource/Kaley_Cuoco> <http://schema.org/name> "Kaley Cuoco" .
    -<http://dbpedia.org/resource/Sara_Gilbert> <http://schema.org/name> "Sara Gilbert" .
    -<http://dbpedia.org/resource/Kunal_Nayyar> <http://schema.org/name> "Kunal Nayyar" .
    -<http://dbpedia.org/resource/Laura_Spencer> <http://schema.org/name> "Laura Spencer" .
    -<http://dbpedia.org/resource/Simon_Helberg> <http://schema.org/name> "Simon Helberg" .
    -<http://dbpedia.org/resource/Johnny_Galecki> <http://schema.org/name> "Johnny Galecki" .
    -<http://dbpedia.org/resource/Mayim_Bialik> <http://schema.org/name> "Mayim Bialik" .
    -<http://dbpedia.org/resource/Melissa_Rauch> <http://schema.org/name> "Melissa Rauch" .

    6.2 Conditions

    FnO functions MAY be leveraged to export triples -only under certain conditions. -Conditions are already integrated in RML+FnO processors, -thus conditions apply on Targets as well. -Triples are generated and exported based on the FnO condition's evaluation. -Only if the condition is true, the triples are generated and exported.

    In the example, the triples with Jim Parsons as object are exported -to the first Target, triples with Kaley Cuoco as object are exported -to the second Target.

    # Results of DBPedia SPARQL query
    -actor,name,nickname
    -http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    -http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    -http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    -http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    -http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    -http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    -http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    -http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    -http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    -http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    -  sd:endpoint ;
    -  sd:supportedLanguage sd:SPARQL11Query;
    -  sd:resultFormat formats:SPARQL_Results_CSV;
    -.
    -
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#SDSourceAccess>;
    -    rml:query """
    -      PREFIX dbo: 
    -      PREFIX rdf: 
    -      PREFIX rdfs: 
    -      SELECT DISTINCT ?actor ?name WHERE {
    -        ?tvshow rdf:type dbo:TelevisionShow .
    -        ?tvshow rdfs:label "The Big Bang Theory"@en .
    -        ?tvshow dbo:starring ?actor .
    -        ?actor foaf:name ?name .
    -      }
    -    """;
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rml:reference "actor";
    -    rr:termType rr:IRI;
    -    rmlt:logicalTarget <TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [
    -      fnml:functionValue [
    -        rr:predicateObjectMap [
    -          rr:predicate fno:executes ;
    -          rr:objectMap [ rr:constant idlab-fn:decide ]
    -        ];
    -        rr:predicateObjectMap [
    -          rr:predicate idlab-fn:expectedStr ;
    -          rr:objectMap [ rr:constant "Jim Parsons"]
    -        ];
    -        rr:predicateObjectMap [
    -          rr:predicate idlab-fn:str ;
    -          rr:objectMap [ 
    -            rml:reference "name";
    -            rml:logicalTarget <#TargetDump1>;
    -          ];
    -        ];
    -      ];
    -    ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [
    -      fnml:functionValue [
    -        rr:predicateObjectMap [
    -          rr:predicate fno:executes ;
    -          rr:objectMap [ rr:constant idlab-fn:decide ]
    -        ];
    -        rr:predicateObjectMap [
    -          rr:predicate idlab-fn:expectedStr ;
    -          rr:objectMap [ rr:constant "Kaley Cuoco"]
    -        ];
    -        rr:predicateObjectMap [
    -          rr:predicate idlab-fn:str ;
    -          rr:objectMap [ 
    -            rml:reference "name";
    -            rml:logicalTarget <#TargetDump2>;
    -          ];
    -        ];
    -      ];
    -    ];
    -  ];
    -
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    -
    -# file:///data/dump2.nt
    -<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    - - - -

    A. References

    -

    A.1 Normative references

    -
    [CSVW]
    CSV on the Web: A Primer. W3C. 25 February 2016. W3C Working Group Note. URL: https://www.w3.org/TR/tabular-data-primer/
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [R2RML]
    R2RML: RDB to RDF Mapping Language. Souripriya Das; Seema Sundara; Richard Cyganiak. W3C. 27 September 2012. W3C Recommendation. URL: https://www.w3.org/TR/r2rml/
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [VoID]
    Describing Linked Datasets with the VoID Vocabulary. Keith Alexander; Richard Cyganiak; Michael Hausenblas; Jun Zhao. W3C. 3 March 2011. W3C Note. URL: https://www.w3.org/TR/void/
    -
    -

    A.2 Informative references

    -
    [DataIO]
    DataIO. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/dataio
    -
    \ No newline at end of file diff --git a/dist/DBPedia.csv b/dist/DBPedia.csv deleted file mode 100644 index c043bf3..0000000 --- a/dist/DBPedia.csv +++ /dev/null @@ -1,10 +0,0 @@ -http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman -http://dbpedia.org/resource/Jim_Parsons,Jim Parsons -http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco -http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert -http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar -http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer -http://dbpedia.org/resource/Simon_Helberg,Simon Helberg -http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki -http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik -http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch diff --git a/dist/Friends.json b/dist/Friends.json deleted file mode 100644 index 8e55449..0000000 --- a/dist/Friends.json +++ /dev/null @@ -1,27 +0,0 @@ -[ - { - "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/dist/Leverage.csv b/dist/Leverage.csv deleted file mode 100644 index 024b34b..0000000 --- a/dist/Leverage.csv +++ /dev/null @@ -1,6 +0,0 @@ -id;name;nickname -0;Nathan Ford;Mastermind -1;Sophie Devereaux;Grifter -2;Eliot Spender;Hitter -3;Parker;Thief -4;Alec Hardison;Hacker diff --git a/dist/Supergirl.xml b/dist/Supergirl.xml deleted file mode 100644 index 1e70bb4..0000000 --- a/dist/Supergirl.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - Kara Danvers - Supergirl - - - Alex Danvers - Sentinel - - - J'onn J'onzz - Martian Manhunter - - - Nia Nal - Dreamer - - diff --git a/dist/index.html b/dist/index.html deleted file mode 100644 index adfc9f6..0000000 --- a/dist/index.html +++ /dev/null @@ -1,2531 +0,0 @@ - - - - - - -Target in RML - - - - - - - - - - - - - - - - - - -
    -

    Target in RML

    - -

    - Unofficial Draft - -

    -
    - -
    Latest editor's draft:
    https://rml.io/specs/target-in-rml
    - - - - - -
    Editors:
    -
    - (Ghent University – imec – IDLab) -
    - (Ghent University – imec – IDLab) -
    - - -
    This Version
    - https://rml.io/specs/target-in-rml/20210518/ -
    Previous Version
    - https://rml.io/specs/target-in-rml/20210518/ -
    Website
    - https://rml.io/target-in-rml -
    -
    - - - - -
    -
    -

    Abstract

    This document describes a formal representation to align the -RDF Mapping Language [RML] with Target [DataIO] -to describe in RML mapping rules how a generated Knowledge Graph -should be directed and exported. -The current document describes how Target is integrated -with RML through definitions and examples.

    The version of this document is v1.0.0.

    - -

    Status of This Document

    - This document is a draft of a potential specification. It has no official - standing of any kind and does not represent the support or consensus of - any standards organization. -

    -

    This is an early draft, -yet efforts are made to keep things stable.

    -
    - -

    1. Conformance

    As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

    - The key word MAY in this document - is to be interpreted as described in - BCP 14 - [RFC2119] [RFC8174] - when, and only when, they appear in all capitals, as shown here. -

    - -

    2. Overview

    This section is non-normative.

    This document describes the alignment of Target specification with RML -to define how a generated RDF knowledge graph must be exported -in the RML mapping rules. -Target and RML are self-standing specifications -which are aligned through this specification.

    In this document, examples assume -the following namespace prefix bindings unless otherwise stated:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    PrefixNamespace
    rmlhttp://semweb.mmlab.be/ns/rml#
    rmlthttp://semweb.mmlab.be/ns/rml-target#
    comphttp://semweb.mmlab.be/ns/rml-compression#
    rrhttp://www.w3.org/ns/r2rml#
    formatshttps://www.w3.org/ns/formats/
    comphttp://semweb.mmlab.be/ns/rml-compression#
    csvwhttp://www.w3.org/ns/csvw#
    foafhttp://xmlns.com/foaf/0.1/
    fnmlhttp://semweb.mmlab.be/ns/fnml#
    idlab-fnhttp://example.com/idlab/function/
    voidhttp://rdfs.org/ns/void#
    exhttp://example.org/ns#
    schemahttp://schema.org/

    Examples are divided in several boxes, each box has its own color. -Blue boxes contain the input RDF data of the example:

    # This box contains the example's input RDF data.

    The Target description is contained in a pink box:

    # This box contains the example's Target description.

    The data access description is contained in a grey box:

    # This box contains the data access description of the example.

    The RML mapping is contained in a yellow box:

    # This box contains the example's RML mapping.

    The generated output RDF is contained in a green box:

    # This box contains the example's generated output RDF.
    - -

    3. Target in RML

    RML does not specify where generated triples are exported to, -each RML processor has its own way to describe this information -through configuration files or command line parameters. -To incorporate this information in the RML mapping rules, -RML is aligned with the -Target vocabulary -which describes how the generated triples are exported. -RML is aligned with the Target vocabulary -by extending rr:TermMap with the rml:logicalTarget property -to describe on Term Map [RML] level where each triple must be directed to. -A Term Map is a function that generates an RDF term -from a logical reference [RML]. -The result of that function is known as the term map's generated -RDF term [RDF-Concepts] -such as subjects, predicates, objects, named graphs and language tags.

    A Term Map MAY also contain zero or more rml:logicalTarget properties -to export all triples containing the generated term to different targets. -The same Term Map can have multiple targets by specifying -multiple rml:logicalTarget properties in the Term Map.

    Multiple Targets MAY be combined by specifying multiple Targets -in the same Term Map or multiple Term Maps of the same RDF triple -(Section § 5. Combining multiple Targets). -Targets MAY be overriden by using a separate Triples Map -or conditions [FnO] (Section § 6. Overriding Targets).

    If the mapping document contains no Targets, -the processor falls back to the default target, -as it is specified through the processor's -specific configuration file or command line parameters. -If a mapping document contains at least one Target, -the processor will export the triples to these Targets, -triples which do not have one or more Target(s) assigned, -are exported to the default target of the processor.

    - - - - - - - - - - - - -
    PropertyDomainRange
    rml:logicalTargetrr:TermMaprmlt:LogicalTarget

    In the example below, a CSV file is transformed into a knowledge graph. -The CSV file is accessed using the [CSVW] vocabulary, -transformed into a knowledge graph using [RML] mappings, -and exported to two Targets, which are accessed through the [VoID] vocabulary. -The knowledge graph is exported as N-Quads to the first Target, -and as Turtle to the second Target. -The Turtle file of the second Target is also compressed using the Zip -compression algorithm.

    id;name;nickname
    -0;Nathan Ford;Mastermind
    -1;Sophie Devereaux;Grifter
    -2;Eliot Spender;Hitter
    -3;Parker;Thief
    -4;Alec Hardison;Hacker
    <#CSVSourceAccess> a csvw:Table;
    -  csvw:url "https://rml.io/specs/rml-target/Leverage.csv";
    -  csvw:dialect [ a csvw:Dialect;
    -    csvw:delimiter ";";
    -    csvw:encoding "UTF-8";
    -    csvw:header "1"^^xsd:boolean;
    -  ];
    -.
    @base <http://example.com/ns#> .
    -
    -<#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#CSVSourceAccess>;
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.com/{id}";
    -    rml:logicalTarget <#TargetDump1>;
    -    rr:class foaf:Person;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:Turtle;
    -  rmlt:compression comp:zip;
    -.
    <#VoIDDump1> a void:Dataset;
    -    void:dataDump <file:///data/dump1.nt>;
    -.
    -
    -<#VoIDDump2> a void:Dataset;
    -    void:dataDump <file:///data/dump2.ttl.zip>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Nathan Ford" _b0 .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Mastermind" _b0 .
    -<http://example.org/1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Sophie Devereaux" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Grifter" _b0 .
    -<http://example.org/2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Eliot Spencer" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Hitter" _b0 .
    -<http://example.org/3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Parker" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Thief" _b0 .
    -<http://example.org/4> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> _b0 .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Alec Hardison" _b0 .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/nickname> "Hacker" _b0 .
    -
    -# file:///data/dump2.ttl.zip
    -@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    -
    -<http://example.org/0>
    -  foaf:name "Nathan Ford";
    -.
    -<http://example.org/1>
    -  foaf:name "Sophie Devereaux";
    -.
    -<http://example.org/2>
    -  foaf:name "Eliot Spencer";
    -.
    -<http://example.org/3>
    -  foaf:name "Parker";
    -.
    -<http://example.org/4>
    -  foaf:name "Alec Hardison";
    -.
    - -

    4. Single targets

    In the following examples, the RDF triples are exported to a single Target. -In some examples, not all RDF triples have a dedicated Target assigned, -therefore, they will be exported to the default Target of the processor.

    4.1 Subject Map

    All triples containing the generated subject are exported -to the specified targets in the Subject Map [RML].

    The following example exports all triples containing -the generated subject http://example.org/{id} -to an RDF dump with N-Quads as serialization format and GZip compression:

    [
    -  { 
    -    "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
    -  }
    -]
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{id}";
    -    rml:logicalTarget <#TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:age;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Quads;
    -  rmlt:compression comp:gzip;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq.gz>;
    -.
    <http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.2 Predicate Map

    All triples containing the generated predicate are exported -to the specified targets in the Predicate Map [RML].

    The following example exports all triples containing -the generated predicate foaf:name to an RDF dump -with Turtle as serialization format and Zip compression:

    [
    -  { 
    -    "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
    -  }
    -]
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:age;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:Turtle;
    -  rmlt:compression comp:zip;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.ttl.zip>;
    -.
    # file:///data/dump1.ttl.zip
    -@prefix foaf: <http://xmlns.com/foaf/0.1/> .
    -@base <http://example.com/ns#> .
    -
    -<http://example.org/0>
    -  foaf:name "Monica Geller";
    -.
    -<http://example.org/1>
    -  foaf:name "Rachel Green";
    -.
    -<http://example.org/2>
    -  foaf:name "Joey Tribbiani";
    -.
    -<http://example.org/3>
    -  foaf:name "Chandler Bing";
    -.
    -<http://example.org/4>
    -  foaf:name "Ross Geller";
    -.
    -
    -# default target of the processor
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.3 Object Map

    All triples containing the generated object are exported -to the specified targets in the Object Map [RML].

    The following example exports all triples containing -the generated object from the reference name to an RDF dump -with N-Triples as serialization format:

    [
    -  { 
    -    "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
    -  }
    -]
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:age;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller" .
    -
    -# default target of the processor
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .

    4.4 Graph Map

    All triples within a named graph are exported to the specified targets -in the Graph Map [RML]. -The named graph influences to where the named graph's triples -may be exported to as the Target's serialization format must -support named graphs such as N-Quads, JSON-LD or TriG. -When a Target contains a serialization format -which does not support named graphs and a Graph Map is used, -the mapping is considered invalid. -If a named graph is spread over multiple targets, -all targets must be combined to access the complete named graph. -In case RDF triples are not within a specific named graph, -they are added to the default graph as specified -by the [R2RML] specification.

    The following example exports all triples in the named graph ex:Friends -to an RDF dump with N-Quads as serialization format:

    [
    -  { 
    -    "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
    -  }
    -]
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{id}";
    -    rr:graphMap [
    -      rml:logicalTarget <#TargetDump1>;
    -      rr:constant ex:Friends;
    -    ];
    -   ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:age;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" <http://example.org/Friends> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" <http://example.org/Friends> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" <http://example.org/Friends> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" <http://example.org/Friends> .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" <http://example.org/Friends> .

    4.5 Language Map

    All triples with a language tag are exported to the specified targets -in the Language Map [RML].

    The following examples export all triples with a language tag -to a RDF dump with N-Triples as serialization format:

    [
    -  { 
    -    "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
    -  }
    -]
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Friends.json";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{id}";
    -   ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -      rml:languageMap [
    -        rml:logicalTarget <#TargetDump1>;
    -        rr:constant "en";
    -      ];
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:age;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "age";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Monica Geller"@en .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Rachel Green"@en .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "Joey Tribbiani"@en .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Chandler Bing"@en .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/name> "Ross Geller"@en .
    -
    -# default target of the processor
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/age> "33" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/age> "34" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/age> "35" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/age> "36" .
    -<http://example.org/4> <http://xmlns.com/foaf/0.1/age> "37" .
    - -

    5. Combining multiple Targets

    Multiple Targets MAY be specified for the same triple -in the same or multiple Term Maps. -If multiple Targets are defined in the same Term Map, -all triples containing the generated Term are exported -to all the specified Targets. -In case multiple Term Maps of the same RDF triple contain more than one Target, -the generated triples are exported to all the specified Targets. -If multiple Term Maps of an RDF triple refer multiple times to the same Target, -the RDF triple is written only once to the target to avoid duplicates.

    5.1 Multiple Targets in the same Term Map

    All triples are exported to all Targets, if the Term Map contains multiple -Targets. In the example a Subject Map has three specified Targets, -all triples with the subject http://example.org/{@id} are exported -to the three specified Targets:

      -
    • Target 1: /data/dump.nt.zip, N-Triples serialization, Zip compression
    • -
    • Target 2: /data/dump.jsonld.tar.xz, JSON-LD serialization, TarXz compression
    • -
    • Target 3: /data/dump.rdf.tar.gzip, RDF/XML serialization, TarGZip compression
    • -
    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -    rml:logicalTarget <#TargetDump1>;
    -    rml:logicalTarget <#TargetDump2>;
    -    rml:logicalTarget <#TargetDump3>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -  rmlt:compression comp:zip;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:JSON-LD;
    -  rmlt:compression comp:tarxz;
    -.
    -<#TargetDump3> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:RDF_XML;
    -  rmlt:compression comp:targzip;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt.zip>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.jsonld.tar.xz>;
    -.
    -<#VoIDDump3> a void:Dataset ;
    -  void:dataDump <file:///data/dump3.rdf.tar.gz>;
    -.
    # file:///data/dump1.nt.zip
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -
    -# file:///data/dump2.jsonld.tar.xz
    -[
    -  {
    -    "@id": "http://example.org/0",
    -    "http://xmlns.com/foaf/0.1/name": [
    -      {
    -        "@value": "Kara Danvers"
    -      }
    -    ]
    -  },
    -  {
    -    "@id": "http://example.org/1",
    -    "http://xmlns.com/foaf/0.1/name": [
    -      {
    -        "@value": "Alex Danvers"
    -      }
    -    ]
    -  },
    -  {
    -    "@id": "http://example.org/2",
    -    "http://xmlns.com/foaf/0.1/name": [
    -      {
    -        "@value": "J'onn J'onzz"
    -      }
    -    ]
    -  },
    -  {
    -    "@id": "http://example.org/3",
    -    "http://xmlns.com/foaf/0.1/name": [
    -      {
    -        "@value": "Nia Nal"
    -      }
    -    ]
    -  }
    -]
    -
    -# file:///data/dump3.rdf.tar.gz
    -<?xml version="1.0" encoding="utf-8" ?>
    -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    -    xmlns:foaf="http://xmlns.com/foaf/0.1/">
    -  <rdf:Description rdf:about="http://example.org/0">
    -    <foaf:name>Kara Danvers</foaf:name>
    -  </rdf:Description>
    -  <rdf:Description rdf:about="http://example.org/1">
    -    <foaf:name>Alex Danvers</foaf:name>
    -  </rdf:Description>
    -  <rdf:Description rdf:about="http://example.org/2">
    -    <foaf:name>J'onn J'onzz</foaf:name>
    -  </rdf:Description>
    -  <rdf:Description rdf:about="http://example.org/3">
    -    <foaf:name>Nia Nal</foaf:name>
    -  </rdf:Description>
    -</rdf:RDF>

    5.2 Subject Map and Predicate Map

    All triples containing the subject http://example.org/{id} -are exported to TargetDump1 -and all triples containing the predicate foaf:name -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -    rml:logicalTarget <#TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.3 Subject Map and Object Map

    All triples containing the subject http://example.org/{id} -are exported to TargetDump1 -and all triples containing the object reference name/text() -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -    rml:logicalTarget <#TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.4 Predicate Map and Object Map

    All triples containing the predicate foaf:name -are exported to TargetDump1 -and all triples containing the object reference nickname/text() -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.5 Subject Map, Predicate Map and Object Map

    All triples containing the subject http://example.org/{@id} -are exported to TargetDump1 -and all triples containing the object reference nickname/text() or -predicate foaf:nickname are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -    rml:logicalTarget <#TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .

    5.6 Subject Map and Graph Map

    All triples containing the subject http://example.org/{@id} -are exported to TargetDump1 -and all triples within the named graph ex:Characters -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -    rml:logicalTarget <#TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump2>;
    -      rr:constant ex:Characters;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nq>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    -
    -# file:///data/dump2.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.7 Predicate Map and Graph Map

    All triples containing the predicate foaf:nickname -are exported to TargetDump1 -and all triples within the named graph ex:Characters -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump2>;
    -      rr:constant ex:Characters;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nq>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    -
    -# file:///data/dump2.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.8 Object Map and Graph Map

    All triples containing the object reference nickname/text() -are exported to TargetDump1 -and all triples within the named graph ex:Characters -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump2>;
    -      rr:constant ex:Characters;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nq>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .
    -
    -# file:///data/dump2.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .

    5.9 Language Map and Graph Map

    All triples containing the language tag en -are exported to TargetDump1 -and all triples within the named graph ex:Characters -are exported to TargetDump2. -The other triples are exported to the default target of the processor -as there is no dedicated Target assigned to triples containing -foaf:nickname as predicate.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump2>;
    -      rr:constant ex:Characters;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -      rml:languageMap [
    -        rml:logicalTarget <#TargetDump1>;
    -        rr:constant "en";
    -      ];
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en <http://example.org/Characters> .
    -
    -# default target of processor
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" _b0 .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" _b0 .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" _b0 .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" _b0 .

    5.10 Language Map and Object Map

    All triples containing the language tag en -are exported to TargetDump1 -and all triples containing the object reference nickname/text() -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -      rml:languageMap [
    -        rml:logicalTarget <#TargetDump1>;
    -        rr:constant "en";
    -      ];
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers"@en .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers"@en .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz"@en .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal"@en .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.11 Multiple Predicate Maps

    All triples containing the predicate foaf:name -are exported to TargetDump1 -and all triples containing the predicate foaf:nickname -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.12 Multiple Object Maps

    All triples containing the object reference name/text() -are exported to TargetDump1 -and all triples containing the object reference nickname/text() -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -      rml:logicalTarget <#TargetDump1>;
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -      rml:logicalTarget <#TargetDump2>;
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" .
    -
    -# file:///data/dump2.nt
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" .

    5.13 Multiple Graph Maps

    All triples within the named graph ex:Characters -are exported to TargetDump1 -and all triples within the named graph ex:NickNames -are exported to TargetDump2.

    <Supergirl>
    -  <Character id="0">
    -    <name>Kara Danvers</name>
    -    <nickname>Supergirl</nickname>
    -  </Character>
    -  <Character id="1">
    -    <name>Alex Danvers</name>
    -    <nickname>Sentinel</nickname>
    -  </Character>
    -  <Character id="2">
    -    <name>J'onn J'onzz</name>
    -    <nickname>Martian Manhunter</nickname>
    -  </Character>
    -  <Character id="3">
    -    <name>Nia Nal</name>
    -    <nickname>Dreamer</nickname>
    -  </Character> 
    -</Supergirl>
    <#DCATSourceAccess> a dcat:Dataset;
    -  dcat:distribution [ a dcat:Distribution;
    -    dcat:downloadURL "https://rml.io/specs/rml-target/Supergirl.xml";
    -  ];
    -.
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#DCATSourceAccess>;
    -    rml:referenceFormulation ql:JSONPath;
    -    rml:iterator "$.[*]";
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rr:template "http://example.org/{@id}";
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump1>;
    -      rr:constant ex:Characters;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name/text()";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:graphMap [ a rr:GraphMap;
    -      rml:logicalTarget <#TargetDump2>;
    -      rr:constant ex:NickNames;
    -    ];
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:nickname;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "nickname/text()";
    -    ];
    -  ];
    -.
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nq>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nq>;
    -.
    # file:///data/dump1.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/name> "Kara Danvers" <http://example.org/Characters> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/name> "Alex Danvers" <http://example.org/Characters> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/name> "J'onn J'onzz" <http://example.org/Characters> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/name> "Nia Nal" <http://example.org/Characters> .
    -
    -# file:///data/dump2.nq
    -<http://example.org/0> <http://xmlns.com/foaf/0.1/nickname> "Supergirl" <http://example.org/Nicknames> .
    -<http://example.org/1> <http://xmlns.com/foaf/0.1/nickname> "Sentinel" <http://example.org/Nicknames> .
    -<http://example.org/2> <http://xmlns.com/foaf/0.1/nickname> "Martian Manhunter" <http://example.org/Nicknames> .
    -<http://example.org/3> <http://xmlns.com/foaf/0.1/nickname> "Dreamer" <http://example.org/Nicknames> .
    - -

    6. Overriding Targets

    In some cases exporting all triples to a target is not desired, -therefore Targets can be overridden when needed -by either using a separate Triples Map which isolates certain triples or -by using FnO functions [FnO] as conditions.

    6.1 Separate Triples Map

    Triples can be exported to a specific Target while not to other Targets -by isolating these triples in a separate Triples Map.

    In this example, the same subject and object are used in both Triples Maps, -but with a diffent predicate. The triples with the first predicate foaf:name -are exported to the first Target and the triples with the second predicate -schema:name to the second Target.

    # Results of DBPedia SPARQL query
    -actor,name,nickname
    -http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    -http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    -http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    -http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    -http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    -http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    -http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    -http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    -http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    -http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    -  sd:endpoint ;
    -  sd:supportedLanguage sd:SPARQL11Query;
    -  sd:resultFormat formats:SPARQL_Results_CSV;
    -.
    -
    <#TriplesMap1> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#SDSourceAccess>;
    -    rml:query """
    -      PREFIX dbo: 
    -      PREFIX rdf: 
    -      PREFIX rdfs: 
    -      SELECT DISTINCT ?actor ?name WHERE {
    -        ?tvshow rdf:type dbo:TelevisionShow .
    -        ?tvshow rdfs:label "The Big Bang Theory"@en .
    -        ?tvshow dbo:starring ?actor .
    -        ?actor foaf:name ?name .
    -      }
    -    """;
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rml:reference "actor";
    -    rr:termType rr:IRI;
    -    rmlt:logicalTarget <TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -
    -<#TriplesMap2> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#SDSourceAccess>;
    -    rml:query """
    -      PREFIX dbo: 
    -      PREFIX rdf: 
    -      PREFIX rdfs: 
    -      SELECT DISTINCT ?actor ?name WHERE {
    -        ?tvshow rdf:type dbo:TelevisionShow .
    -        ?tvshow rdfs:label "The Big Bang Theory"@en .
    -        ?tvshow dbo:starring ?actor .
    -        ?actor foaf:name ?name .
    -      }
    -    """;
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rml:reference "actor";
    -    rr:termType rr:IRI;
    -    rmlt:logicalTarget <TargetDump2>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant schema:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -.
    -
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nq>;
    -.
    # file:///data/dump1.nt
    -<http://dbpedia.org/resource/Kevin_Sussman> <http://xmlns.com/foaf/0.1/name> "Kevin Sussman" .
    -<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    -<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    -<http://dbpedia.org/resource/Sara_Gilbert> <http://xmlns.com/foaf/0.1/name> "Sara Gilbert" .
    -<http://dbpedia.org/resource/Kunal_Nayyar> <http://xmlns.com/foaf/0.1/name> "Kunal Nayyar" .
    -<http://dbpedia.org/resource/Laura_Spencer> <http://xmlns.com/foaf/0.1/name> "Laura Spencer" .
    -<http://dbpedia.org/resource/Simon_Helberg> <http://xmlns.com/foaf/0.1/name> "Simon Helberg" .
    -<http://dbpedia.org/resource/Johnny_Galecki> <http://xmlns.com/foaf/0.1/name> "Johnny Galecki" .
    -<http://dbpedia.org/resource/Mayim_Bialik> <http://xmlns.com/foaf/0.1/name> "Mayim Bialik" .
    -<http://dbpedia.org/resource/Melissa_Rauch> <http://xmlns.com/foaf/0.1/name> "Melissa Rauch" .
    -
    -# file:///data/dump2.nt
    -<http://dbpedia.org/resource/Kevin_Sussman> <http://schema.org/name> "Kevin Sussman" .
    -<http://dbpedia.org/resource/Jim_Parsons> <http://schema.org/name> "Jim Parsons" .
    -<http://dbpedia.org/resource/Kaley_Cuoco> <http://schema.org/name> "Kaley Cuoco" .
    -<http://dbpedia.org/resource/Sara_Gilbert> <http://schema.org/name> "Sara Gilbert" .
    -<http://dbpedia.org/resource/Kunal_Nayyar> <http://schema.org/name> "Kunal Nayyar" .
    -<http://dbpedia.org/resource/Laura_Spencer> <http://schema.org/name> "Laura Spencer" .
    -<http://dbpedia.org/resource/Simon_Helberg> <http://schema.org/name> "Simon Helberg" .
    -<http://dbpedia.org/resource/Johnny_Galecki> <http://schema.org/name> "Johnny Galecki" .
    -<http://dbpedia.org/resource/Mayim_Bialik> <http://schema.org/name> "Mayim Bialik" .
    -<http://dbpedia.org/resource/Melissa_Rauch> <http://schema.org/name> "Melissa Rauch" .

    6.2 Conditions

    FnO functions MAY be leveraged to export triples -only under certain conditions. -Conditions are already integrated in RML+FnO processors, -thus conditions apply on Targets as well. -Triples are generated and exported based on the FnO condition's evaluation. -Only if the condition is true, the triples are generated and exported.

    In the example, the triples with Jim Parsons as object are exported -to the first Target, triples with Kaley Cuoco as object are exported -to the second Target.

    # Results of DBPedia SPARQL query
    -actor,name,nickname
    -http://dbpedia.org/resource/Kevin_Sussman,Kevin Sussman
    -http://dbpedia.org/resource/Jim_Parsons,Jim Parsons
    -http://dbpedia.org/resource/Kaley_Cuoco,Kaley Cuoco
    -http://dbpedia.org/resource/Sara_Gilbert,Sara Gilbert
    -http://dbpedia.org/resource/Kunal_Nayyar,Kunal Nayyar
    -http://dbpedia.org/resource/Laura_Spencer_(actress),Laura Spencer
    -http://dbpedia.org/resource/Simon_Helberg,Simon Helberg
    -http://dbpedia.org/resource/Johnny_Galecki,Johnny Galecki
    -http://dbpedia.org/resource/Mayim_Bialik,Mayim Bialik
    -http://dbpedia.org/resource/Melissa_Rauch,Melissa Rauch
    <#SDSourceAccess> a sd:Service;
    -  sd:endpoint ;
    -  sd:supportedLanguage sd:SPARQL11Query;
    -  sd:resultFormat formats:SPARQL_Results_CSV;
    -.
    -
    <#TriplesMap> a rr:TriplesMap;
    -  rml:logicalSource [ a rml:LogicalSource;
    -    rml:source <#SDSourceAccess>;
    -    rml:query """
    -      PREFIX dbo: 
    -      PREFIX rdf: 
    -      PREFIX rdfs: 
    -      SELECT DISTINCT ?actor ?name WHERE {
    -        ?tvshow rdf:type dbo:TelevisionShow .
    -        ?tvshow rdfs:label "The Big Bang Theory"@en .
    -        ?tvshow dbo:starring ?actor .
    -        ?actor foaf:name ?name .
    -      }
    -    """;
    -  ];
    -  rr:subjectMap [ a rr:SubjectMap;
    -    rml:reference "actor";
    -    rr:termType rr:IRI;
    -    rmlt:logicalTarget <TargetDump1>;
    -  ];
    -  rr:predicateObjectMap [ a rr:PredicateObjectMap;
    -    rr:predicateMap [ a rr:PredicateMap;
    -      rr:constant foaf:name;
    -    ];
    -    rr:objectMap [ a rr:ObjectMap;
    -      rml:reference "name";
    -    ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [
    -      fnml:functionValue [
    -        rr:predicateObjectMap [
    -          rr:predicate fno:executes ;
    -          rr:objectMap [ rr:constant idlab-fn:decide ]
    -        ];
    -        rr:predicateObjectMap [
    -          rr:predicate idlab-fn:expectedStr ;
    -          rr:objectMap [ rr:constant "Jim Parsons"]
    -        ];
    -        rr:predicateObjectMap [
    -          rr:predicate idlab-fn:str ;
    -          rr:objectMap [ 
    -            rml:reference "name";
    -            rml:logicalTarget <#TargetDump1>;
    -          ];
    -        ];
    -      ];
    -    ];
    -  ];
    -  rr:predicateObjectMap [ 
    -    rr:predicateMap [ rr:constant foaf:name ];
    -    rr:objectMap [
    -      fnml:functionValue [
    -        rr:predicateObjectMap [
    -          rr:predicate fno:executes ;
    -          rr:objectMap [ rr:constant idlab-fn:decide ]
    -        ];
    -        rr:predicateObjectMap [
    -          rr:predicate idlab-fn:expectedStr ;
    -          rr:objectMap [ rr:constant "Kaley Cuoco"]
    -        ];
    -        rr:predicateObjectMap [
    -          rr:predicate idlab-fn:str ;
    -          rr:objectMap [ 
    -            rml:reference "name";
    -            rml:logicalTarget <#TargetDump2>;
    -          ];
    -        ];
    -      ];
    -    ];
    -  ];
    -
    <#TargetDump1> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump1>;
    -  rmlt:serialization formats:N-Triples;
    -.
    -<#TargetDump2> a rmlt:LogicalTarget;
    -  rmlt:target <#VoIDDump2>;
    -  rmlt:serialization formats:N-Triples;
    -.
    <#VoIDDump1> a void:Dataset ;
    -  void:dataDump <file:///data/dump1.nt>;
    -.
    -<#VoIDDump2> a void:Dataset ;
    -  void:dataDump <file:///data/dump2.nt>;
    -.
    # file:///data/dump1.nt
    -<http://dbpedia.org/resource/Jim_Parsons> <http://xmlns.com/foaf/0.1/name> "Jim Parsons" .
    -
    -# file:///data/dump2.nt
    -<http://dbpedia.org/resource/Kaley_Cuoco> <http://xmlns.com/foaf/0.1/name> "Kaley Cuoco" .
    - - - -

    A. References

    -

    A.1 Normative references

    -
    [CSVW]
    CSV on the Web: A Primer. W3C. 25 February 2016. W3C Working Group Note. URL: https://www.w3.org/TR/tabular-data-primer/
    [FnO]
    The Function Ontology. FnO team. 05 January 2021. Unofficial Draft. URL: https://fno.io/spec
    [R2RML]
    R2RML: RDB to RDF Mapping Language. Souripriya Das; Seema Sundara; Richard Cyganiak. W3C. 27 September 2012. W3C Recommendation. URL: https://www.w3.org/TR/r2rml/
    [RDF-Concepts]
    Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 10 February 2004. W3C Recommendation. URL: https://www.w3.org/TR/rdf-concepts/
    [RFC2119]
    Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
    [RFC8174]
    Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
    [RML]
    RDF Mapping Language (RML). RML team. 06 October 2020. Unofficial Draft. URL: https://rml.io/specs/rml
    [VoID]
    Describing Linked Datasets with the VoID Vocabulary. Keith Alexander; Richard Cyganiak; Michael Hausenblas; Jun Zhao. W3C. 3 March 2011. W3C Note. URL: https://www.w3.org/TR/void/
    -
    -

    A.2 Informative references

    -
    [DataIO]
    DataIO. Dylan Van Assche; Anastasia Dimou. RML team. 24 March 2021. Unofficial Draft. URL: https://rml.io/specs/dataio
    -
    \ No newline at end of file diff --git a/publish.js b/publish.js index 08708f3..3d686d8 100644 --- a/publish.js +++ b/publish.js @@ -9,18 +9,18 @@ var path = require('path'); var dateString = (new Date()).toISOString().split('T')[0].replace(/-/g, ''); try { - if (!fs.existsSync (path.resolve(__dirname, 'dist'))) { - fs.mkdirSync (path.resolve(__dirname, 'dist')); + if (!fs.existsSync (path.resolve(__dirname, 'docs'))) { + fs.mkdirSync (path.resolve(__dirname, 'docs')); } - fs.mkdirSync (path.resolve(__dirname, 'dist', dateString)); + fs.mkdirSync (path.resolve(__dirname, 'docs', dateString)); } catch (e) { } -var files = fs.readdirSync (path.resolve(__dirname, 'dist')); +var files = fs.readdirSync (path.resolve(__dirname, 'docs')); var dirs = []; for (var i = 0; i < files.length; i++) { - if (fs.lstatSync (path.resolve(__dirname, 'dist', files[i])).isDirectory()) { + if (fs.lstatSync (path.resolve(__dirname, 'docs', files[i])).isDirectory()) { dirs.push(files[i]); } } @@ -44,16 +44,16 @@ if (dirs.length == 0) { var html = fs.readFileSync ('./rendered.html', 'utf8'); html = html.replace (/%thisDate%/g, dateString); html = html.replace (/%prevDate%/g, dirs[0]); -fs.writeFileSync (path.resolve (__dirname, 'dist', 'index.html'), html); +fs.writeFileSync (path.resolve (__dirname, 'docs', 'index.html'), html); html = html.replace (/\.\/resources/g, '../resources'); -fs.writeFileSync (path.resolve(__dirname, 'dist', dateString, 'index.html'), html); +fs.writeFileSync (path.resolve(__dirname, 'docs', dateString, 'index.html'), html); // Copy assets -fs.copyFileSync('Supergirl.xml', path.resolve(__dirname, 'dist', dateString, 'Supergirl.xml')) -fs.copyFileSync('Supergirl.xml', path.resolve(__dirname, 'dist', 'Supergirl.xml')) -fs.copyFileSync('Leverage.csv', path.resolve(__dirname, 'dist', dateString, 'Leverage.csv')) -fs.copyFileSync('Leverage.csv', path.resolve(__dirname, 'dist', 'Leverage.csv')) -fs.copyFileSync('Friends.json', path.resolve(__dirname, 'dist', dateString, 'Friends.json')) -fs.copyFileSync('Friends.json', path.resolve(__dirname, 'dist', 'Friends.json')) -fs.copyFileSync('DBPedia.csv', path.resolve(__dirname, 'dist', dateString, 'DBPedia.csv')) -fs.copyFileSync('DBPedia.csv', path.resolve(__dirname, 'dist', 'DBPedia.csv')) +fs.copyFileSync('Supergirl.xml', path.resolve(__dirname, 'docs', dateString, 'Supergirl.xml')) +fs.copyFileSync('Supergirl.xml', path.resolve(__dirname, 'docs', 'Supergirl.xml')) +fs.copyFileSync('Leverage.csv', path.resolve(__dirname, 'docs', dateString, 'Leverage.csv')) +fs.copyFileSync('Leverage.csv', path.resolve(__dirname, 'docs', 'Leverage.csv')) +fs.copyFileSync('Friends.json', path.resolve(__dirname, 'docs', dateString, 'Friends.json')) +fs.copyFileSync('Friends.json', path.resolve(__dirname, 'docs', 'Friends.json')) +fs.copyFileSync('DBPedia.csv', path.resolve(__dirname, 'docs', dateString, 'DBPedia.csv')) +fs.copyFileSync('DBPedia.csv', path.resolve(__dirname, 'docs', 'DBPedia.csv')) From 19cb883582c825c3be7b17e8546dde360244b00f Mon Sep 17 00:00:00 2001 From: David Chaves Date: Mon, 28 Mar 2022 10:17:13 +0200 Subject: [PATCH 39/39] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dfaa058..9774e20 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Target in RML specification -Repository for https://rml.io/specs/rml-target/ +Repository for https://w3id.org/kg-construct/rml-target-source ## Quickstart