2016-08-20 4 views
1

Ich muss eine Zuordnung vornehmen, die eine einfache Tabelle enthält, aber mein Prädikat muss basierend auf den Werten, die aus einer Spalte kommen, dynamisch sein.Dynamisches Prädikat in R2RML

Dies ist meine Frage:

SELECT 
    item_id, 
    Concat_WS('@', metadatavalue.text_value, cast(metadatavalue.text_lang as text)) AS textValue, 
    (CASE metadata_field_id 
     WHEN '3' THEN 'creator' 
     WHEN '79' THEN 'docnumber' 
    END) AS Field 
FROM 
    metadatavalue 
ORDER BY 
    item_id, Field, textValue; 

Die Werte aus dem Feld gibt das Prädikat zu verwenden.

Ich möchte Tripel der Form sind

<pub:1234> dc:creator “jean francois”@en 
<pub:1234> dc:docnumber 1345 
<pub:1234> dc:subject “poverty”@en 

Also im Grunde alle meine Prädikat erzeugen, in der Spalte die Werte sind die Kennung des Prädikats metadata_field_id.

Ich bin mir nicht sicher, aber es scheint, dass R2RML das unterstützen soll.

Vielen Dank.

Antwort

2

Ja, das können Sie in R2RML tun.

Es gibt zwei Möglichkeiten:

1) eine rr:template als Prädikat verwenden.

:Map1 
    a rr:TriplesMap ; 
    rr:logicalTable [ rr:sqlQuery "SELECT ..... " ] ; 
    rr:predicateObjectMap [ 
     rr:objectMap [ rr:column "COLUMNNAME" ] ; 
     rr:predicateMap [ rr:template "http://purl.org/dc/elements/1.1/{Field}" ] ; 
    ] ; 
    rr:subjectMap [ rr:template "http://www.example.com/data/{id}" ] . 

2) ein rr:column als Prädikat verwendet werden. In diesem Fall erstellen Sie den tatsächlichen URI in der SQL-Abfrage:

:Map1 
    a rr:TriplesMap ; 
    rr:logicalTable [ rr:sqlQuery "SELECT ..... " ] ; 
    rr:predicateObjectMap [ 
     rr:objectMap [ rr:column "COLUMNNAME" ] ; 
     rr:predicateMap [ rr:column "Field" ] ; 
    ] ; 
    rr:subjectMap [ rr:template "http://www.example.com/data/{id}" ] .