使用RMLMapper的嵌套XML到Turtle映射

问题描述

我正在尝试在XML和Turtle之间创建嵌套映射。为此,我正在使用rmlMapper v4.9.0。

这是我要映射的示例XML文件

<?xml version="1.0" encoding="utf-8"?>
<persons>
    <person>
        <name>JohnDoe</name>
        <address>
            <number>123</number>
            <street>Main</street>
            <city>Anytown</city>
        </address>
        <address>
            <number>1234</number>
            <street>Second</street>
            <city>Anytown</city>
        </address>
    </person>
    <person>
        <name>JaneDoe</name>
    </person>
</persons>

这是我想生成的Turtle输出

@prefix ex: <http://example.com/> .

<http://example.com/ns#JaneDoe> a ex:Person .

<http://example.com/ns#JohnDoe> a ex:Person;
    ex:has_address [
        a ex:Address ;
        ex:has_city "Anytown";
        ex:has_number "123";
        ex:has_street "Main" .
    ] ;
    ex:has_address [
        a ex:Address ;
        ex:has_city "Anytown";
        ex:has_number "1234";
        ex:has_street "Second" .
    ] ;
.  

如何实现这种嵌套/格式?

通过将地址三元组主题创建为rr:termType rr:BlankNode,我已经获得了类似的输出
但是,我希望不要重复该主题,而应使用方括号而不是BlankNodes输出

@prefix ex: <http://example.com/> .

<http://example.com/ns#JaneDoe> a ex:Person .

<http://example.com/ns#JohnDoe> a ex:Person;
  ex:has_address _:0 .

_:0 a ex:Address;
  ex:has_city "Anytown";
  ex:has_number "123";
  ex:has_street "Main" .

<http://example.com/ns#JohnDoe> ex:has_address _:1 .

_:1 a ex:Address;
  ex:has_city "Anytown";
  ex:has_number "1234";
  ex:has_street "Second" .

我使用了以下地图:

@prefix rml: <http://semweb.mmlab.be/ns/rml#>.
@prefix ql: <http://semweb.mmlab.be/ns/ql#>.
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/> .
@base <http://example.com/ns#> .


_:personMap a rr:TriplesMap ;

    # XML source file with xPath iterator
    rml:logicalSource [
        rml:source "example.xml" ;
        rml:referenceFormulation ql:XPath ;
        rml:iterator "//*[local-name()='person']"
    ] ;

    rr:subjectMap   [
                        rml:reference "name" ;
                        rr:class ex:Person ;
                    ] ;

    # address
    rr:predicateObjectMap   [   
                                rr:predicateMap [ rr:constant ex:has_address ] ;
                                rr:objectMap    [ 
                                                  rr:parentTriplesMap _:addressMap ;
                                                  rr:joinCondition [
                                                    rr:child "name" ;
                                                    rr:parent "ancestor::*/name" ;
                                                  ] ;
                                                ] ;
                            ] ;
    .


_:addressMap a rr:TriplesMap ;

    # XML source file with xPath iterator
    rml:logicalSource [
        rml:source "example.xml" ;
        rml:referenceFormulation ql:XPath ;
        rml:iterator "//*[local-name()='address']"
    ] ; 
    
    rr:subjectMap   [   
                        rr:termType rr:BlankNode ;
                        rr:class ex:Address
                    ] ;
    
    # city
    rr:predicateObjectMap   [   
                                rr:predicateMap [ rr:constant ex:has_city ] ;
                                rr:objectMap    [ rml:reference "city" ] ;
                            ] ;

    # street
    rr:predicateObjectMap   [   
                                rr:predicateMap [ rr:constant ex:has_street ] ;
                                rr:objectMap    [ rml:reference "street" ] ;
                            ] ;

    # number
    rr:predicateObjectMap   [   
                                rr:predicateMap [ rr:constant ex:has_number ] ;
                                rr:objectMap    [ rml:reference "number" ] ;
                            ] ;
    .

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...