XSD:将Unknown与必需元素组合在一起

问题描述 投票:0回答: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>

但是我还没有找到解决方案。

有没有人有解决方案如何将必需元素与未知元素结合起来?

xml xsd
1个回答
0
投票

答案非常简单:使用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中:tools - > options - > Always v1.1)

© www.soinside.com 2019 - 2024. All rights reserved.