Rdf R2RML中的动态谓词

Rdf R2RML中的动态谓词,rdf,semantic-web,semantics,r2rml,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' THE

我需要创建一个涉及一个简单表的映射,但是我的谓词需要基于来自一列的值是动态的

这是我的疑问:

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
dc:creator“jean francois”@en
跟单信用证号码:1345
dc:主题为“贫困”@en
所以基本上我所有的谓词都在metadata\u字段\u id列中,值是谓词的标识符

: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}" ] .
我不确定,但似乎R2RML应该支持这一点


谢谢。

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