将单个元素中所有随机出现的元素处理成 xsd

Handle all random occurring element in single element into xsd

我在 xsd 文件中定义了一个元素,如下所示

<xs:element name="NonTeachingActivity">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="NTCode" type="String10"/>
                <xs:element name="Description" type="String100"/>
                <xs:element name="Type" type="MeetingType"/>
            </xs:sequence>
            <xs:attribute name="RefId" type="GUID" use="required"/>
        </xs:complexType>
    </xs:element>

在这个元素的元素序列中不需要按照顺序, 标签将是

1) NTCode,Description,Type 2) Description,NTCode,Type 3) Type,NTCode,Description

所以可以处理给定(NonTeachingActivity)单个元素中的所有顺序?

使用 XSD 1.0 有两种可能的解决方案:

  1. 在你的 sequence:

    中使用 choice
    <xs:element name="NonTeachingActivity">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="NTCode" type="String10"/>
                    <xs:element name="Description" type="String100"/>
                    <xs:element name="Type" type="MeetingType"/>
                </xs:choice>
            </xs:sequence>
            <xs:attribute name="RefId" type="GUID" use="required"/>
        </xs:complexType>
    </xs:element>
    

    但这不会限制每个子元素的出现次数。

  2. 另一种方法是使用all:

    <xs:element name="NonTeachingActivity">
        <xs:complexType>
            <xs:all>
                <xs:element name="NTCode" type="String10"/>
                <xs:element name="Description" type="String100"/>
                <xs:element name="Type" type="MeetingType"/>
            </xs:all>
            <xs:attribute name="RefId" type="GUID" use="required"/>
        </xs:complexType>
    </xs:element>
    

    但是每个子元素可以出现零次或一次。