1

我需要制作一个涉及一个简单表的映射,但是我的谓词需要根据来自一列的值是动态的。

这是我的查询:

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 应该支持这一点。

谢谢你。

4

1 回答 1

3

是的,您可以在 R2RML 中做到这一点。

有两种方法:

1) 使用 anrr: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) 使用 anrr: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}" ] .
于 2016-08-31T08:05:04.653 回答