@prefix schema: <http://schema.org/> .
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
@prefix list: <http://www.w3.org/2000/10/swap/list#> .
@prefix string: <http://www.w3.org/2000/10/swap/string#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix rr: <http://www.w3.org/ns/r2rml#> .
@prefix : <http://example.org/> .

<../model/omg-shacl.ttl> :shape 
    schema:Organization, 
    schema:PostalAddress, 
    schema:PropertyValue, 
    geo:SpatialThing .

# collect existing shape data so that query.n3 can distinguish derived data
{ ?file :shape[] ; log:semantics ?semantics } => { ?file :shapeGraph ?semantics } .

# include existing shape data in the current scope
{ ?file :shapeGraph ?semantics } => ?semantics.


{
    ?property :objectMap [ :column ?column ]
}
=>
{
    ?property prov:wasDerivedFrom [ rdfs:label ?column] .
} .

{
    ?property :objectMap ?objectMap .
}
<=
{
    ?property sh:path ?predicate .
    [] rr:predicate ?predicate ; rr:objectMap ?objectMap .
} .


# https://www.w3.org/TR/r2rml/#dfn-referenced-columns

{ ?objectMap :column ?column } <= { ?objectMap rr:column ?column } .


{
    ?objectMap :column ?column 
}
<=
{
    ?objectMap rr:template ?template .
    ( ?template "\\{([^}]+)\\}" ) string:scrapeAll [ list:member ?column ] .
} .