RML/SPARQL映射中rr:template定义是否支持使用命名空间前缀?
RML映射rr:template使用前缀的问题解答
结论
该功能本身就不被RML以及它遵循的R2RML基础规范支持,没有对应的标准语法能实现你预想的缩写写法。
为什么你试的写法不行
rr:template的属性值本质是普通字符串,解析时只会做一件事:把字符串里{列名}格式的占位符替换成对应行的列值,直接拼出最终结果,全程不会处理Turtle里定义的命名空间前缀,自然不会做前缀展开。- 你写的
rr:template ex:"{some_column}"本身就不符合Turtle语法:带前缀的IRI必须是前缀名:本地名的连续格式,中间不能插引号包起来的字符串,解析器读映射文件的时候第一步就会报语法错,根本跑不到模板处理的环节。 - 就算你把前缀写到字符串里面,写成
rr:template "ex:{some_column}"也没用,最后生成的IRI就是带ex:开头的字符串,不会自动转成http://example.org/开头的合法IRI,结果完全不对。
正确写法
直接把前缀对应的完整命名空间URI写在模板字符串里就行,这是所有RML实现都兼容的标准写法:
@prefix rr: <http://www.w3.org/ns/r2rml#>. @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. @prefix ex: <http://example.org/>. :map_001 rr:predicateObjectMap [ rr:predicate ex:myPredicate; rr:objectMap [ rr:template "http://example.org/{some_column}" ] ].
要是觉得每次写全长URI麻烦,可以给自己用的代码编辑器配自动补全、自定义代码片段来减少重复输入,但映射文件本身得按规范写全模板里的URI前缀部分。
内容的提问来源于stack exchange,提问作者gaspanic
相关产品推荐
相关产品推荐

