我有一个场景,我们需要在标签上有一个带有命名空间的父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>
答案 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>
这是合理的,因为这两个文档在语义上是等价的,任何接受应用程序的接收应该接受另一个。