如何创建主语和宾语均为常量的R2RML映射?
问题:RDFizer基于R2RML生成常量三元组无输出
我使用RDFizer工具基于R2RML生成三元组,先尝试创建主语和宾语均为常量的溯源节点,用于在自动化R2RML生成服务的数据导入前置入顶部。当前R2RML运行无报错,但未生成任何三元组。
现有R2RML代码
@prefix rr: <http://www.w3.org/ns/r2rml#> . @prefix ex: <http://example.org/> . <#TestMapping> a rr:TriplesMap; rr:subjectMap [ rr:constant ex:testSubject ; ] ; rr:predicateObjectMap [ rr:predicate ex:testPredicate ; rr:objectMap [ rr:constant ex:testObject ; ] ] .
预期生成的三元组
<http://example.org/testSubject> <http://example.org/testPredicate> <http://example.org/testObject>
解决方案
问题核心是你的TriplesMap缺少rr:logicalTable定义。R2RML规范要求每个TriplesMap必须关联一个逻辑表,工具需要通过它确定生成三元组的行数(这里你需要生成1条)。即使不需要从数据库读取实际数据,也得指定一个返回单行的逻辑表。
修改后的R2RML代码如下:
@prefix rr: <http://www.w3.org/ns/r2rml#> . @prefix ex: <http://example.org/> . <#TestMapping> a rr:TriplesMap; rr:logicalTable [ rr:sqlQuery "SELECT 1" ]; # 添加返回单行的SQL查询 rr:subjectMap [ rr:constant ex:testSubject ; ] ; rr:predicateObjectMap [ rr:predicate ex:testPredicate ; rr:objectMap [ rr:constant ex:testObject ; ] ] .
解释:添加rr:logicalTable并指定返回单行的SQL查询(如SELECT 1)后,RDFizer会基于这一行数据生成对应的常量三元组。由于主语和宾语都是常量,无论SQL返回内容是什么,都会生成你预期的那条三元组。
内容的提问来源于stack exchange,提问作者Lindsay Goldberg-Custer
相关产品推荐
相关产品推荐

