Динамический предикат в 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 ответ

Да, вы можете сделать это в 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 как предикат. В этом случае создайте фактический URI в запросе SQL:

: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}" ] .
Другие вопросы по тегам