Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
Java 如何为没有id的XML节点创建RML映射语言?_Java_Xml_Rdf_Jena - Fatal编程技术网

Java 如何为没有id的XML节点创建RML映射语言?

Java 如何为没有id的XML节点创建RML映射语言?,java,xml,rdf,jena,Java,Xml,Rdf,Jena,我想用迭代来迭代XML节点,而不使用id属性,因为在我的代码中,这是可能的吗?。 我是RML映射语言的初学者。 我正在使用RML映射工具,它的链接在这里 我已经成功地使用“ID”进行了迭代,但我不想使用ID进行迭代,因为我的XML数据不包含ID,所以可以在没有ID属性的情况下进行迭代,或者必须使用ID在RML映射中进行迭代。请给你一些建议 这是我的XML文件数据 <MainNode> <Header> <code>404</code&g

我想用迭代来迭代XML节点,而不使用id属性,因为在我的代码中,这是可能的吗?。 我是RML映射语言的初学者。 我正在使用RML映射工具,它的链接在这里

我已经成功地使用“ID”进行了迭代,但我不想使用ID进行迭代,因为我的XML数据不包含ID,所以可以在没有ID属性的情况下进行迭代,或者必须使用ID在RML映射中进行迭代。请给你一些建议

这是我的XML文件数据

<MainNode>
   <Header>
      <code>404</code>
      <title>demoxml1</title>
   </Header>
   <Employees>
      <Employee **id="1"**>
         <EmpNo>1</EmpNo>
         <EmpSex>2</EmpSex>
         <BirthYear>1991</BirthYear>
         <Postcode>12345</Postcode>         
         <Indications>
            <Indication id="2">
               <IndicationNo>1</IndicationNo>
               <StartDate>11-12-2016</StartDate>               
            </Indication>
         </Indications>
      </Employee>
      <Employee id="2">
         <EmpNo>2</EmpNo>
         <EmpSex>2</EmpSex>
         <BirthYear>1992</BirthYear>
         <Postcode>12345</Postcode>
         <Indications>
            <Indication id="2">
               <IndicationNo>1</IndicationNo>
               <StartDate>11-12-2016</StartDate>               
            </Indication>
         </Indications>
      </Employee>
   </Employees>
</MainNode>
这是我的RML映射文件:

@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix rml: <http://semweb.mmlab.be/ns/rml#> .
@prefix ql: <http://semweb.mmlab.be/ns/ql#> .
@prefix test: <http://www.example.com/organization>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
@prefix ex: <http://www.example.com/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix ns1: <http://www.example.com/organization/DataProperty/Employee/> .
@prefix ns2: <http://www.example.com/organization/DataProperty/Employee/Indication/> .

<#EmployeeMapping>
rml:logicalSource [ 
    rml:source "src/test/rmlmapping/test_example.xml";
    rml:iterator "/MainNode/Employees/Employee";
    rml:referenceFormulation ql:XPath;
];
rr:subjectMap [
        rr:template "http://www.example.com/Employee#{@id}"; 
        rr:class test:Employee;
            ];


    rr:predicateObjectMap [

        rr:predicate ns1:EmpNo;
        rr:objectMap [ rml:reference "EmpNo" ];
    ];

        rr:predicateObjectMap [
        rr:predicate ns1:EmpSex;
        rr:objectMap [ rml:reference "EmpSex" ];
    ];

    rr:predicateObjectMap [
        rr:predicate ns1:BirthYear;
        rr:objectMap [ rml:reference "BirthYear" ];
    ];
    rr:predicateObjectMap [
        rr:predicate ns1:Postcode;
        rr:objectMap [ rml:reference "Postcode" ];
    ];

    rr:predicateObjectMap [
        rr:predicate ns1:Indication;
        rr:objectMap [ 
            rr:parentTriplesMap <#IndicatieMapping>;            
        ];
    ].
<#IndicatieMapping>
  rml:logicalSource [
    rml:source "src/test/rmlmapping/test_example.xml" ;
    rml:iterator "/MainNode/Employees/Employee/Indications/Indication";
    rml:referenceFormulation ql:XPath;
  ];

  rr:subjectMap [ 
    rr:template "http://www.example.com/Employee/Indication#{@id}";
    rr:class test:Indication;   
  ];

  rr:predicateObjectMap [
    rr:predicate ns2:IndicationNo;
    rr:objectMap [
      rml:reference "IndicationNo";
    ]; 
  ];

  rr:predicateObjectMap [
    rr:predicate ns2:StartDate;
    rr:objectMap [
      rml:reference "StartDate";
    ]; 
  ].
@前缀rr:。
@前缀rml:。
@前缀ql:。
@前缀测试:。
@前缀xsd:。
@前缀ex:。
@前缀rdf:。
@前缀rdfs:。
@前缀ns1:。
@前缀ns2:。
rml:logicalSource[
rml:source“src/test/rmlmapping/test_example.xml”;
rml:iterator“/MainNode/Employees/Employees”;
rml:referenceFormulation ql:XPath;
];
主题图[
rr:模板“http://www.example.com/Employee#{@id}”;
rr:等级测试:员工;
];
rr:谓词对象映射[
rr:谓词ns1:EmpNo;
rr:objectMap[rml:reference“EmpNo”];
];
rr:谓词对象映射[
rr:谓词ns1:EmpSex;
rr:objectMap[rml:reference“EmpSex”];
];
rr:谓词对象映射[
rr:谓词ns1:生日;
rr:objectMap[rml:参考“生日”];
];
rr:谓词对象映射[
rr:谓词ns1:邮政编码;
rr:objectMap[rml:参考“邮政编码”];
];
rr:谓词对象映射[
rr:谓词ns1:指示;
rr:objectMap[
rr:ParentTripleMap;
];
].
rml:逻辑源[
rml:source“src/test/rmlmapping/test_example.xml”;
rml:iterator“/MainNode/Employees/Employees/Indications/Indications”;
rml:referenceFormulation ql:XPath;
];
rr:subjectMap[
rr:模板“http://www.example.com/Employee/Indication#{@id}”;
rr:等级测试:指示;
];
rr:谓词对象映射[
rr:谓词ns2:表示否;
rr:objectMap[
rml:参考“指示号”;
]; 
];
rr:谓词对象映射[
rr:谓词ns2:起始日期;
rr:objectMap[
rml:参考“起始日期”;
]; 
].
以下是我的RML映射输出:

<http://www.example.com/Employee#1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.example.com/organizationEmployee> .
<http://www.example.com/Employee#1> <http://www.example.com/organization/DataProperty/Employee/Indication> <http://www.example.com/Employee/Indication#2> .
<http://www.example.com/Employee/Indication#2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.example.com/organizationIndication> .
<http://www.example.com/Employee/Indication#2> <http://www.example.com/organization/DataProperty/Employee/Indication/StartDate> "11-12-2016" .
<http://www.example.com/Employee/Indication#2> <http://www.example.com/organization/DataProperty/Employee/Indication/IndicationNo> "1" .
<http://www.example.com/Employee#1> <http://www.example.com/organization/DataProperty/Employee/BirthYear> "1991" .
<http://www.example.com/Employee#1> <http://www.example.com/organization/DataProperty/Employee/EmpNo> "1" .
<http://www.example.com/Employee#1> <http://www.example.com/organization/DataProperty/Employee/EmpSex> "2" .
<http://www.example.com/Employee#1> <http://www.example.com/organization/DataProperty/Employee/Postcode> "12345" .
<http://www.example.com/Employee#2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.example.com/organizationEmployee> .
<http://www.example.com/Employee#2> <http://www.example.com/organization/DataProperty/Employee/Indication> <http://www.example.com/Employee/Indication#2> .
<http://www.example.com/Employee/Indication#2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.example.com/organizationIndication> .
<http://www.example.com/Employee/Indication#2> <http://www.example.com/organization/DataProperty/Employee/Indication/StartDate> "11-12-2016" .
<http://www.example.com/Employee/Indication#2> <http://www.example.com/organization/DataProperty/Employee/Indication/IndicationNo> "1" .
<http://www.example.com/Employee#2> <http://www.example.com/organization/DataProperty/Employee/BirthYear> "1992" .
<http://www.example.com/Employee#2> <http://www.example.com/organization/DataProperty/Employee/EmpNo> "2" .
<http://www.example.com/Employee#2> <http://www.example.com/organization/DataProperty/Employee/EmpSex> "2" .
<http://www.example.com/Employee#2> <http://www.example.com/organization/DataProperty/Employee/Postcode> "12345" .
。
.
.
"11-12-2016" .
"1" .
"1991" .
"1" .
"2" .
"12345" .
.
.
.
"11-12-2016" .
"1" .
"1992" .
"2" .
"2" .
"12345" .

例如,我想在RMl映射中迭代雇员节点和指示节点。您能提供您的意见吗?我必须使我的XML文档节点与示例雇员节点、指示节点类似,使用属性id等,也可以不使用属性id。

在当前映射中,您没有使用id属性进行迭代。因为你的迭代器是

rml:iterator "/MainNode/Employees/Employee";

请注意,没有id属性

您似乎只使用id属性生成主题IRI:

  rr:subjectMap [
    rr:template "http://www.example.com/Employee#{@id}"; 
    rr:class test:Employee;
  ];


例如,您可以分别基于“EmpNo”和“IndicationNo”创建主题。但是,如果仅这些属性就足以用于IRI生成,这取决于您的源数据。

是的,请理解。谢谢@帕诺
  rr:subjectMap [
    rr:template "http://www.example.com/Employee#{@id}"; 
    rr:class test:Employee;
  ];
  rr:subjectMap [ 
    rr:template "http://www.example.com/Employee/Indication#{@id}";
    rr:class test:Indication;   
  ];