R2RML中的动态谓词

时间:2016-08-20 22:44:26

标签: rdf semantic-web semantics 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应该支持它。

谢谢。

1 个答案:

答案 0 :(得分:3)

是的,您可以在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}" ] .