Skip to content

WIP: added nested function (fixes #2) #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions nested/data.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
ID,otherID,name
1,ben,Ben
2,ben,NotBen
3,pieter,Pieter
4,pieter,NotPieter
3 changes: 3 additions & 0 deletions nested/data2.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ID,name,friendID,friendName
batman,Batman,ben,Ben
super,Superman,pieter,Pieter
188 changes: 188 additions & 0 deletions nested/mapping.rml.ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
@prefix rr: <http://www.w3.org/ns/r2rml#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix fnml: <http://semweb.mmlab.be/ns/fnml#> .
@prefix fno: <https://w3id.org/function/ontology#> .
@prefix d2rq: <http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#> .
@prefix void: <http://rdfs.org/ns/void#> .
@prefix dc: <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rml: <http://semweb.mmlab.be/ns/rml#> .
@prefix ql: <http://semweb.mmlab.be/ns/ql#> .
@prefix : <http://mapping.example.com/> .
@prefix ex: <http://example.com#> .
@prefix grel: <http://users.ugent.be/~bjdmeest/function/grel.ttl#> .
@prefix idlab-fn: <http://example.com/idlab/function/> .

:rules_000 rdf:type void:Dataset ;
void:exampleResource :map_myMapping_000, :map_myOtherMapping_000 .

:map_myMapping_000 rml:logicalSource :source_000 ;
rdf:type rr:TriplesMap ;
rdfs:label "myMapping" ;
rr:subjectMap :s_000 ;
rr:predicateObjectMap :pom_000, :pom_001, :pom_002 .

:source_000 rdf:type rml:LogicalSource ;
rml:source "data.csv" ;
rml:referenceFormulation ql:CSV .

:s_000 rdf:type rr:SubjectMap ;
rr:template "http://example.com#{ID}" .

:pom_000 rdf:type rr:PredicateObjectMap ;
rr:predicateMap :pm_000 ;
rr:objectMap :om_000 .

:pm_000 rdf:type rr:PredicateMap ;
rr:constant rdf:type .

:om_000 rdf:type rr:ObjectMap ;
rr:constant "http://example.com#Person" ;
rr:termType rr:IRI .

:pom_001 rdf:type rr:PredicateObjectMap ;
rr:predicateMap :pm_001 ;
rr:objectMap :om_001 .

:pm_001 rdf:type rr:PredicateMap ;
rr:constant ex:label .

:om_001 rdf:type rr:ObjectMap ;
rml:reference "name" ;
rr:termType rr:Literal .

:pom_002 rdf:type rr:PredicateObjectMap ;
rr:predicateMap :pm_002 ;
rr:objectMap :om_002 .

:pm_002 rdf:type rr:PredicateMap ;
rr:constant ex:isFriendsWith .

:map_myOtherMapping_000 rml:logicalSource :source_001 ;
rdf:type rr:TriplesMap ;
rdfs:label "myOtherMapping" ;
rr:subjectMap :s_001 ;
rr:predicateObjectMap :pom_003 .

:source_001 rdf:type rml:LogicalSource ;
rml:source "data2.csv" ;
rml:referenceFormulation ql:CSV .

:s_001 rdf:type rr:SubjectMap ;
rr:template "http://example.com#heroes_{ID}" .

:pom_003 rdf:type rr:PredicateObjectMap ;
rr:predicateMap :pm_003 ;
rr:objectMap :om_003 .

:pm_003 rdf:type rr:PredicateMap ;
rr:constant rdf:type .

:om_003 rdf:type rr:ObjectMap ;
rr:constant "http://example.com#Hero" ;
rr:termType rr:IRI .

:om_002 rdf:type rr:ObjectMap ;
rr:parentTriplesMap :map_myOtherMapping_000 ;
rml:joinCondition :jc_000 .

:jc_000 rdf:type fnml:FunctionTermMap ;
fnml:functionValue :fn_000 .

:fn_000 rr:predicateObjectMap :pomexec_000, :pom_004, :pom_007 .

:pomexec_000 rr:predicateMap :pmexec_000 ;
rr:objectMap :omexec_000 .

:pmexec_000 rr:constant fno:executes .

:omexec_000 rr:constant "http://users.ugent.be/~bjdmeest/function/grel.ttl#boolean_and" ;
rr:termType rr:IRI .

:pom_004 rdf:type rr:PredicateObjectMap ;
rr:predicateMap :pm_004 ;
rr:objectMap :om_004 .

:pm_004 rdf:type rr:PredicateMap ;
rr:constant grel:param_rep_b .

:om_004 rdf:type rr:ObjectMap, fnml:FunctionTermMap ;
fnml:functionValue :fn_001 .

:fn_001 rr:predicateObjectMap :pomexec_001, :pom_005, :pom_006 .

:pomexec_001 rr:predicateMap :pmexec_001 ;
rr:objectMap :omexec_001 .

:pmexec_001 rr:constant fno:executes .

:omexec_001 rr:constant "http://example.com/idlab/function/equal" ;
rr:termType rr:IRI .

:pom_005 rdf:type rr:PredicateObjectMap ;
rr:predicateMap :pm_005 ;
rr:objectMap :om_005 .

:pm_005 rdf:type rr:PredicateMap ;
rr:constant grel:valueParameter .

:om_005 rdf:type rr:ObjectMap ;
rml:reference "otherID" ;
rr:termType rr:Literal .

:pom_006 rdf:type rr:PredicateObjectMap ;
rr:predicateMap :pm_006 ;
rr:objectMap :om_006 .

:pm_006 rdf:type rr:PredicateMap ;
rr:constant grel:valueParameter2 .

:om_006 rdf:type rr:ObjectMap ;
rml:parentTermMap :ptm_000 .

:ptm_000 rml:reference "friendID" .

:pom_007 rdf:type rr:PredicateObjectMap ;
rr:predicateMap :pm_007 ;
rr:objectMap :om_007 .

:pm_007 rdf:type rr:PredicateMap ;
rr:constant grel:param_rep_b .

:om_007 rdf:type rr:ObjectMap, fnml:FunctionTermMap ;
fnml:functionValue :fn_002 .

:fn_002 rr:predicateObjectMap :pomexec_002, :pom_008, :pom_009 .

:pomexec_002 rr:predicateMap :pmexec_002 ;
rr:objectMap :omexec_002 .

:pmexec_002 rr:constant fno:executes .

:omexec_002 rr:constant "http://example.com/idlab/function/equal" ;
rr:termType rr:IRI .

:pom_008 rdf:type rr:PredicateObjectMap ;
rr:predicateMap :pm_008 ;
rr:objectMap :om_008 .

:pm_008 rdf:type rr:PredicateMap ;
rr:constant grel:valueParameter .

:om_008 rdf:type rr:ObjectMap ;
rml:reference "name" ;
rr:termType rr:Literal .

:pom_009 rdf:type rr:PredicateObjectMap ;
rr:predicateMap :pm_009 ;
rr:objectMap :om_009 .

:pm_009 rdf:type rr:PredicateMap ;
rr:constant grel:valueParameter2 .

:om_009 rdf:type rr:ObjectMap ;
rml:parentTermMap :ptm_001 .

:ptm_001 rml:reference "friendName" .

37 changes: 37 additions & 0 deletions nested/mapping.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
prefixes:
ex: http://example.com#
grel: http://users.ugent.be/~bjdmeest/function/grel.ttl#
idlab-fn: "http://example.com/idlab/function/"

mappings:
myMapping:
sources:
- ["data.csv~csv"]
s: ex:$(ID)
po:
- [a, ex:Person]
- [ex:label, $(name)]
- p: ex:isFriendsWith
o:
- mapping: myOtherMapping
condition:
function: grel:boolean_and
parameters:
- parameter: grel:param_rep_b
value:
function: idlab-fn:equal
parameters:
- [grel:valueParameter, "$(otherID)", s]
- [grel:valueParameter2, "$(friendID)", o]
- parameter: grel:param_rep_b
value:
function: idlab-fn:equal
parameters:
- [grel:valueParameter, "$(name)", s]
- [grel:valueParameter2, "$(friendName)", o]
myOtherMapping:
sources:
- ["data2.csv~csv"]
s: http://example.com#heroes_$(ID)
po:
- [a, ex:Hero]
19 changes: 19 additions & 0 deletions nested/output.ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix ex: <http://example.com#>.
@prefix grel: <http://users.ugent.be/~bjdmeest/function/grel.ttl#>.
@prefix idlab-fn: <http://example.com/idlab/function/>.

<http://example.com#1> a ex:Person;
ex:label "Ben";
ex:isFriendsWith ex:heroes_batman.
<http://example.com#2> a ex:Person;
ex:label "NotBen".
<http://example.com#3> a ex:Person;
ex:label "Pieter";
ex:isFriendsWith ex:heroes_super.
<http://example.com#4> a ex:Person;
ex:label "NotPieter".
ex:heroes_batman a ex:Hero;
ex:label "Batman".
ex:heroes_super a ex:Hero;
ex:label "Superman".