XSD:将未知元素与必需元素组合
XSD: Combine Unknown with Required elements
我需要用一些必需和一些未知元素来验证XML。
问题是 xs:any
应该在 xs:sequence
里面
UPA rule 也适用(未知元素属于 xs:any
还是属于可选元素 minOccurs="0"
?)。
XML:
<person>
<name>John</name> <!-- required -->
<address>Lane 1</address> <!-- optional -->
<unknown>someValue</unknown> <!-- unknown -->
<status>1</status> <!-- required -->
</person>
我最好的镜头(实际上:我希望它应该如何工作):
<xs:complexType name="person">
<xs:sequence>
<xs:element name="name" minOccurs="1" maxOccurs="1" />
<xs:element name="address" minOccurs="0" maxOccurs="1" />
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
<xs:element name="status" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
但根据所有文档,这是不允许的。
我也尝试过各种嵌套方式,例如:
<xs:all>
<xs:sequence>
但是我还没有找到解决方案。
有没有人知道如何将必需元素与未知元素结合起来的解决方案?
答案出奇的简单:使用XSD 1.1
那么,下面的就真正生效了。
注意 <xs:all>
:不再需要元素的正确顺序。
<xs:complexType name="person">
<xs:all>
<!-- Required -->
<xs:element name="name"/>
<xs:element name="status"/>
<!-- Optional -->
<xs:element name="address" minOccurs="0"/>
<!-- Unknown-->
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
</xs:all>
</xs:complexType>
(例如,在 XMLSpy 中:工具 -> 选项 -> Always v1.1)
我需要用一些必需和一些未知元素来验证XML。
问题是 xs:any
应该在 xs:sequence
UPA rule 也适用(未知元素属于 xs:any
还是属于可选元素 minOccurs="0"
?)。
XML:
<person>
<name>John</name> <!-- required -->
<address>Lane 1</address> <!-- optional -->
<unknown>someValue</unknown> <!-- unknown -->
<status>1</status> <!-- required -->
</person>
我最好的镜头(实际上:我希望它应该如何工作):
<xs:complexType name="person">
<xs:sequence>
<xs:element name="name" minOccurs="1" maxOccurs="1" />
<xs:element name="address" minOccurs="0" maxOccurs="1" />
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
<xs:element name="status" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
但根据所有文档,这是不允许的。
我也尝试过各种嵌套方式,例如:
<xs:all>
<xs:sequence>
但是我还没有找到解决方案。
有没有人知道如何将必需元素与未知元素结合起来的解决方案?
答案出奇的简单:使用XSD 1.1
那么,下面的就真正生效了。
注意 <xs:all>
:不再需要元素的正确顺序。
<xs:complexType name="person">
<xs:all>
<!-- Required -->
<xs:element name="name"/>
<xs:element name="status"/>
<!-- Optional -->
<xs:element name="address" minOccurs="0"/>
<!-- Unknown-->
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
</xs:all>
</xs:complexType>
(例如,在 XMLSpy 中:工具 -> 选项 -> Always v1.1)