Examples of mappings with RML
Mapping data combining XML and JSON sources
Input data
Input data in JSON format
{ ... ,
"Performance" :
{ "Perf_ID": "567",
"Venue": {
"Name": "STAM",
"Venue_ID": "78" }
"Location": {
"lat": "51.043611" ,
"long": "3.717222” }
},
... }
Input data in XML format
<Events> ...
<Exhibition id="398">
<Venue>STAM</Venue>
<Location>
<lat>51.076891</lat>
<long>3.717222</long>
</Location>
</Exhibition> ...
</Events>
Reusing mapping definitions for data of different formats
<#PerformancesMapping>
rml:logicalSource [
rml:source "http://ex.com/performances.json";
rml:referenceFormulation ql:JSONPath;
rml:iterator "$.Performance.[*]" ];
rr:subjectMap [
rr:template “http://ex.com/{Perf_ID}”];
rr:predicateObjectMap [
rr:predicate ex:location;
rr:objectMap [
rr:parentTriplesMap <#LocationMapping> ] ].
<#EventsMapping>
rml:logicalSource [
rml:source "http://ex.com/events.xml";
rml:referenceFormulation ql:XPath;
rml:iterator "/Events/Exhibition" ];
rr:subjectMap [
rr:template "http://ex.com/{@id}" ];
rr:predicateObjectMap [
rr:predicate ex:location;
rr:objectMap [
rr:parentTriplesMap <#LocationMapping> ] ].
<#LocationMapping>
rr:subjectMap [
rr:template "http://ex.com/{lat},{long}"];
rr:predicateObjectMap [
rr:predicate ex:long;
rr:objectMap [ rml:reference "long" ] ];
rr:predicateObjectMap [
rr:predicate ex:lat;
rr:objectMap [ rml:reference "lat" ] ] .
ex:51.043611,3.717222
ex:lat “3.717222”, ex:long “51.043611”.
ex:51.076891,3.717222
ex:lat “3.717222”, ex:long “51.076891”.
Primary interlinking
<#PerformancesMapping>
rr:subjectMap [
rr:template “http://ex.com/{Perf_ID}”];
rr:predicateObjectMap [
rr:predicate ex:venue;
rr:objectMap [
rr:parentTriplesMap <#VenueMapping> ] ].
<#VenueMapping>
rml:logicalSource [
rml:source "http://ex.com/performances.json";
rml:referenceFormulation ql:JSONPath;
rml:iterator "$.Performance.Venue.[*]" ];
rr:subjectMap [
rr:template "http://ex.com/{Venue_ID}";
rr:class ex:Venue ].
<#EventsMapping>
rr:subjectMap [
rr:template "http://ex.com/{@id}" ];
rr:predicateObjectMap [
rr:predicate ex:venue;
rr:objectMap [
rr:parentTriplesMap <#VenueMapping>;
rr:joinCondition [
rr:child "$.Performance.Venue.Name";
rr:parent "/Events/Exhibition/Venue" ]
] ] .
Without interlinking while mapping:
ex:567 ex:venue ex:78.
ex:398 ex:venue ex:STAM.
ex:78 owl:sameAs ex:STAM
Interlinking while mapping:
ex:567 ex:venue ex:78.
ex:398 ex:venue ex:78.