2016-08-20 3 views
1

Je dois faire un mappage qui implique une table simple, mais mon prédicat doit être dynamique en fonction des valeurs provenant d'une colonne.Prédicat dynamique dans R2RML

C'est ma requête:

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; 

Les valeurs du champ retourne le prédicat à utiliser.

Je veux produire triple de la forme

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

Donc, fondamentalement, tout mon prédicat sont dans la colonne metadata_field_id les valeurs sont l'identifiant du prédicat.

Je ne suis pas sûr mais il semble que R2RML soit supposé supporter cela.

Merci.

Répondre

2

Oui, vous pouvez le faire dans R2RML.

Il y a deux façons:

1) Utilisez un rr:template comme le prédicat.

: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) Utiliser un rr:column comme le prédicat. Dans ce cas, créez l'URI réel dans la requête SQL:

: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}" ] .