Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用RMLMapper的嵌套XML到Turtle映射_Xml_Rdf_Turtle Rdf_Rml Rdf - Fatal编程技术网

使用RMLMapper的嵌套XML到Turtle映射

使用RMLMapper的嵌套XML到Turtle映射,xml,rdf,turtle-rdf,rml-rdf,Xml,Rdf,Turtle Rdf,Rml Rdf,我试图在XML和Turtle之间创建嵌套映射。为此,我正在使用rmlmapperv4.9.0 下面是我要映射的示例XML文件: <?xml version="1.0" encoding="utf-8"?> <persons> <person> <name>JohnDoe</name> <address> <numbe

我试图在XML和Turtle之间创建嵌套映射。为此,我正在使用rmlmapperv4.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>
我使用了以下地图:

@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" ] ;
                            ] ;
    .
@前缀rml:。
@前缀ql:。
@前缀rr:。
@前缀ex:。
@基地。
_:personMap a rr:TripleMap;
#带有xPath迭代器的XML源文件
rml:逻辑源[
rml:source“example.xml”;
rml:referenceFormulation ql:XPath;
rml:iterator“/*[local-name()='person']”
] ;
主题图[
rml:参考“名称”;
rr:类别ex:个人;
] ;
#地址
rr:PredicateObject映射[
rr:predicateMap[rr:constant ex:has_address];
rr:objectMap[
rr:ParentTripleMap 3;:addressMap;
rr:连接条件[
rr:子“名称”;
rr:parent“祖先::*/name”;
] ;
] ;
] ;
.
_:addressMap a rr:TripleMap;
#带有xPath迭代器的XML源文件
rml:逻辑源[
rml:source“example.xml”;
rml:referenceFormulation ql:XPath;
rml:迭代器“/*[local-name()='address']”
] ; 
rr:subjectMap[
rr:termType rr:BlankNode;
rr:类ex:地址
] ;
#城市
rr:PredicateObject映射[
rr:predicateMap[rr:constant ex:has_city];
rr:objectMap[rml:参考“城市”];
] ;
#街头
rr:PredicateObject映射[
rr:predicateMap[rr:constant ex:has_street];
rr:objectMap[rml:参考“街道”];
] ;
#数
rr:PredicateObject映射[
rr:predicateMap[rr:constant ex:has_number];
rr:objectMap[rml:参考“编号”];
] ;
.

您的“问题”只是序列化的问题,因为两个文档在语义上是等价的。如果您的R2RML处理器不允许更紧凑的处理,那么您必须使用其他一些API作为后处理。例如,使用ApacheJena-RIOT,您可以在这里执行
RIOT--syntax=Turtle--formatted=Turtle您的\u-Turtle\u文件\u.ttl
,它将打印您想要的内容。请注意,对于较大的文件,这可能会占用内存,因为在按主题进行分组之前,您必须跟踪三元组。来自@UninformedUser的注释是正确的(这应该转化为答案)。这两个文档在语义上是等价的。您的“问题”只是序列化的问题,因为这两个文档在语义上是等价的。如果您的R2RML处理器不允许更紧凑的处理,那么您必须使用其他一些API作为后处理。例如,使用ApacheJena-RIOT,您可以在这里执行
RIOT--syntax=Turtle--formatted=Turtle您的\u-Turtle\u文件\u.ttl
,它将打印您想要的内容。请注意,对于较大的文件,这可能会占用内存,因为在按主题进行分组之前,您必须跟踪三元组。来自@UninformedUser的注释是正确的(这应该转化为答案)。这两个文档在语义上是等价的。
@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" ] ;
                            ] ;
    .