我在玩R2RML,我想知道是否可以根据RDB表单元格的内容创建一个属性。
D2RQ映射语言有能够处理这个问题的d2rq:condition。
例如:
如果列/表单元格'name‘中的值为'abc’,则创建属性'abc‘
rr:predicateObjectMap [
rr:predicate ex:abc
rr:objectMap [
rr:column "name";
rr:datatype xsd:string;
# equivalent for d2rq:condition "name='abc'"
];
]如果列/表单元格“name”中的值为“xyz”,则创建属性“xyz”
rr:predicateObjectMap [
rr:predicate ex:xyz
rr:objectMap [
rr:column "name";
rr:datatype xsd:decimal;
# equivalent for d2rq:condition "name='xyz'"
];
];我在W3C的R2RML推荐中找不到任何建议。
有什么想法吗?:-)
更新:
我有使用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的,而不是rr:template的:至少W3C建议只显示了predicateMap中的常量。
还在寻找解决办法..。:/
我感到失望的是,像d2rq这样的专有语言似乎更强大(在这一点上)。
发布于 2016-03-15 15:58:48
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" ];
].发布于 2016-03-28 19:45:31
在映射Getty语音时,我们通常会这样做,用于依赖键值(标志)的道具。例如
<#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}" ];
].https://stackoverflow.com/questions/35895851
复制相似问题