2016-08-20 2 views
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; 

값은 사용하는 술어를 반환

내 쿼리입니다.

나는 열이 값이 술어의 식별자입니다 metadata_field_id에

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

그래서 기본적으로 내 모든 술어가있는 형태의 트리플 생산합니다.

확실하지는 않지만 R2RML이이를 지원한다고 생각됩니다.

감사합니다.

답변

2

예, R2RML에서 그렇게 할 수 있습니다.

1) 술어로서 rr:template을 사용

두 가지 방법이 있습니다.

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