2016-03-09 2 views
1

Я играю с R2RML, и мне было интересно, могу ли я создать свойство в зависимости от содержимого ячейки таблицы RDB.Условное создание свойства в R2RML

Язык отображения D2RQ имеет d2rq:condition, который может обрабатывать это.

например:

, если значение «имени» столбца/ячейки таблицы является «ABC» создать свойство «а»

rr:predicateObjectMap [ 
    rr:predicate ex:abc 
    rr:objectMap [ 
     rr:column "name"; 
     rr:datatype xsd:string; 
     # equivalent for d2rq:condition "name='abc'" 
    ]; 
] 

, если значение «имени» столбца/ячейку таблицы является «хуг» создать свойство «хуг»

rr:predicateObjectMap [ 
    rr:predicate ex:xyz 
    rr:objectMap [ 
     rr:column "name"; 
     rr:datatype xsd:decimal; 
     # equivalent for d2rq:condition "name='xyz'" 
    ]; 
]; 

Я не мог найти какие-либо предложения в R2RML Рекомендации W3C в.

Любые идеи? :-)


Update:

У меня была идея использования rr:sqlQuery например

rr:SQLQuery """ 
    select (case TABLENAME.COLUMNNAME 
     when 'this' then 'propertyOne' 
     when 'that' then 'propertyTwo' 
     end) as VARIABLE_PREDICATE 
    from TABLENAME """; 

и применить его к rr:predicate или rr:predicateMap с

rr:predicateObjectMap [ 
     rr:predicateMap [ rr:template "ex:{VARIABLE_PREDICATE}" ]; 
     rr:objectMap [ rr:column "COLUMNNAME"; ]; 
]; 

Но это не сработало. Я думаю predicateMaps может быть rr:constant s только и не rr:template S :(По крайней мере, W3C Recommendation просто показывает константы в predicateMap

Тем не менее поиск решения ...:../

PS Я разочарован тем, что собственный язык, такой как d2rq, кажется более мощным (на данный момент).

+0

Этот документ упоминает 'RR: joinCondition' как аналог' d2rq: condition': https://github.com/RMLio/D2RQ_to_R2RML – CaptSolo

+0

Спасибо за ссылку! Но, к сожалению, это неверно. Я проверял страницу рекомендации W3C для R2RML, а также эту страницу https://www.w3.org/ns/r2rml#joinCondition .... Он просто работает для присоединений :( – Kody

+0

Жаль, что это не сработало. Возможно, есть список рассылки, где спросить об этом? – CaptSolo

ответ

1

R2RML не имеет условных свойств (например, в D2RQ). Дизайн был сделан специально, чтобы не усложнять язык. Для «сложного» сопоставления требуется SQL.

Решение состоит в следующем:

@prefix rr: <http://www.w3.org/ns/r2rml#>. 

<#Mapping> a rr:TriplesMap; 
    rr:logicalTable [ rr:SQLQuery """ 
     select id, COLUMNNAME, (case TABLENAME.COLUMNNAME 
     when 'this' then 'http://ex.com/propertyOne' 
     when 'that' then 'http://ex.com/propertyTwo' 
     end) as VARIABLE_PREDICATE 
     from TABLENAME """; ]; 
    rr:subjectMap [ 
     rr:template "http://ex.com/foo/{id}"; 
    ]; 

    rr:predicateObjectMap [ 
     rr:predicateMap [ rr:column "VARIABLE_PREDICATE" ]; 
     rr:objectMap [ rr:column "COLUMNNAME" ]; 
    ]. 
+0

Я пробовал это с помощью «r2rml parser», но он полностью проигнорировал часть sqlQuery и не создал тройку относительно свойства переменной. Какой r2rml процессор/картограф вы используете? :) – Kody

+0

Я использую Ultrawrap от Capsenta , Отказ от ответственности, я работаю в Capsenta. –

+0

Это круто :) ...Не поймите меня неправильно ... но уверены ли вы, что вы можете применить 'rr: column' к' rr: predicate' или 'rr: predicateMap'? Во всех файлах r2rml, которые я видел, есть только «rr: константы», которые применяются к предикатам/предикатам. – Kody

0

Мы обычно делаем, что в картировании Vocabs Гетти, реквизита, которые зависят от значений ключей (флагов). Например

<#ContribTermRelPreferred> 
    a rr:TriplesMap; 
    rr:logicalTable [ rr:sqlQuery """ 
    SELECT ... 
     UDF_LOD_LOOKUP_PROPERTY('contrib_rels_term','preferred',CRT.PREFERRED) CONTRIBPREF 
    """ ]; 
rr:predicateObjectMap [ 
    rr:predicateMap [ rr:column "CONTRIBPREF" ]; 
    rr:objectMap [ rr:template "http://vocab.getty.edu/aat/contrib/{CONTRIB_ID}" ]; 
]. 
+0

Мы используем реализацию Perl r2rml –