如何解决加入多个2+节点/ RMLRDF映射语言中的多跳映射
我正在尝试将XML源映射到RDF,但似乎无法使多跳映射或多联接条件起作用。在经历了documentation,examples和test cases之后,我不确定这是否可能。
感谢您为解决该问题提供的帮助。
下面是一个简化的示例XML,我到目前为止创建的rml映射,使用RMLMapper生成的当前RDF输出以及我期望的RDF输出。
数据<Root>
<MainNode>
<name>main1</name>
</MainNode>
<OtherNode>
<name>other1</name>
<otherCondition>main1</otherCondition>
</OtherNode>
<OtherNode>
<name>other2</name>
<otherCondition>otherCond2</otherCondition>
</OtherNode>
<AnotherNode>
<name>another1</name>
<description>anotherDesc1</description>
<anotherCondition>other1</anotherCondition>
</AnotherNode>
<AnotherNode>
<name>another2</name>
<description>anotherDesc2</description>
<anotherCondition>anotherCond2</anotherCondition>
</AnotherNode>
</Root>
制图
@prefix rml: <http://semweb.mmlab.be/ns/rml#> .
@prefix rr: <http://www.w3.org/ns/r2rml#> .
@prefix ql: <http://semweb.mmlab.be/ns/ql#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-Syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix testont: <http://www.example.com/ontology/> .
@prefix : <http://www.example.com/rules/> .
@base <http://www.example.com/instance/> .
:TriplesMapAnotherNode a rr:TriplesMap;
rml:logicalSource [
rml:source "multihop_data.xml";
rml:referenceFormulation ql:XPath;
rml:iterator "//AnotherNode"
].
:TriplesMapAnotherNode rr:subjectMap [
rr:template "{description}"
].
:TriplesMapOtherNode a rr:TriplesMap;
rml:logicalSource [
rml:source "multihop_data.xml";
rml:referenceFormulation ql:XPath;
rml:iterator "//OtherNode"
].
:TriplesMapOtherNode rr:subjectMap [
rr:template "{name}"
].
:TriplesMapMainNode a rr:TriplesMap;
rml:logicalSource [
rml:source "multihop_data.xml";
rml:referenceFormulation ql:XPath;
rml:iterator "//MainNode"
].
:TriplesMapMainNode rr:subjectMap [
rr:template "{name}"
].
:TriplesMapMainNode rr:predicateObjectMap [
rr:predicate rdf:type;
rr:object testont:MainClass
].
:TriplesMapOtherNode rr:predicateObjectMap [
rr:predicate testont:dummypredicate;
rr:objectMap [
a rr:RefObjectMap;
rr:parentTriplesMap :TriplesMapAnotherNode;
rr:joinCondition [
rr:child "name";
rr:parent "anotherCondition";
]
]
].
:TriplesMapMainNode rr:predicateObjectMap [
rr:predicate testont:hasDescription;
rr:objectMap [
a rr:RefObjectMap;
rr:parentTriplesMap :TriplesMapOtherNode;
rr:joinCondition [
rr:child "name";
rr:parent "otherCondition";
]
]
].
当前的RDF
<http://www.example.com/instance/other1> <http://www.example.com/ontology/dummypredicate> <anotherDesc1>.
<http://www.example.com/instance/main1> <http://www.example.com/ontology/hasDescription> <other1>.
<http://www.example.com/instance/main1> <http://www.w3.org/1999/02/22-rdf-Syntax-ns#type> <http://www.example.com/ontology/MainClass>.
预期的RDF
<http://www.example.com/instance/main1> <http://www.example.com/ontology/hasDescription> <anotherDesc1>.
<http://www.example.com/instance/main1> <http://www.w3.org/1999/02/22-rdf-Syntax-ns#type> <http://www.example.com/ontology/MainClass>.
简而言之,
- 如何基于2个加入条件加入3个节点?
- 如何跳过或避免创建三元组?
- 我可以根据2个以上的加入条件将其扩展为加入3个以上的节点吗?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。