2016-08-20 9 views
1

1つの単純なテーブルを含むマッピングを作成する必要がありますが、私の述語は1つの列からの値に基づいて動的である必要があります。R2RMLの動的述語

これは私のクエリです:

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; 

フィールドの値は、使用する述語を返します。

私は基本的にすべての私の述語は列にあるフォーム

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

のトリプル生成したいの値は述語の識別子ですmetadata_field_id。

私は確信していますが、R2RMLがそれをサポートしているようです。

ありがとうございます。

答えて

2

はい、これはR2RMLで行うことができます。

1)述語としてrr:templateを使用します。

は、2つの方法があります。

: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)述語としてrr:columnを使用します。この場合、SQLクエリに実際のURIを作成します。

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