如何创建Xsd,以便父和子的XML具有相同的xmlns定义

时间:2015-06-09 23:02:31

标签: java xml xsd

我有一个场景,我们需要在标签上有一个带有命名空间的父xml标签。可以重复n次的子标记也应该具有命名空间,如下所示。我如何在XSD中定义它以强制孩子的命名空间。

<nfx:Employees xmlns:nfx="www.example.org/employeeDept/2.0/">
   <Employee xmlns="www.example.org/employeeDept/2.0/">
   .....
   .....
   </Employee>
   <Employee xmlns="www.example.org/employeeDept/2.0/">
   .....
   .....
   </Employee>
</Employees>

2 个答案:

答案 0 :(得分:0)

此XSD,

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:nfx="www.example.org/employeeDept/2.0/"
           targetNamespace="www.example.org/employeeDept/2.0/">

  <xs:element name="Employees">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="nfx:Employee" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="Employee"/>
</xs:schema>

验证您的XML

<?xml version="1.0" encoding="UTF-8"?>
<nfx:Employees xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="www.example.org/employeeDept/2.0/ employees.xsd"
               xmlns:nfx="www.example.org/employeeDept/2.0/">
  <Employee xmlns="www.example.org/employeeDept/2.0/"/>
  <Employee xmlns="www.example.org/employeeDept/2.0/"/>
</nfx:Employees>
根据要求

答案 1 :(得分:0)

XSD可以控制元素所在的命名空间,但它不能约束命名空间前缀的选择或命名空间声明的位置。此文档有效的任何架构:

<nfx:Employees xmlns:nfx="www.example.org/employeeDept/2.0/">
   <Employee xmlns="www.example.org/employeeDept/2.0/">
   .....
   .....
   </Employee>
   <Employee xmlns="www.example.org/employeeDept/2.0/">
   .....
   .....
   </Employee>
</Employees>

也将允许此文件:

<nfx:Employees xmlns:nfx="www.example.org/employeeDept/2.0/">
   <nfx:Employee>
   .....
   .....
   </nfx:Employee>
   <nfx:Employee>
   .....
   .....
   </nfx:Employee>
</Employees>

这是合理的,因为这两个文档在语义上是等价的,任何接受应用程序的接收应该接受另一个。