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