如何在XML模式中生成一系列必须按顺序排列的可选项?

Eri*_*ric 5 xml schema xsd sequence

我想要做的是在XML模式中创建一个序列元素,使得内容必须按顺序排列,但可能不会全部存在.例如,架构将是这样的:

<xs:element name="rods" maxOccurs="1" minOccurs="1">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="green" type="xs:positiveInteger" />
   <xs:element name="white" type="xs:positiveInteger" />
   <xs:element name="blue" type="xs:positiveInteger" />
   <xs:element name="yellow" type="xs:positiveInteger" />
   <xs:element name="red" type="xs:positiveInteger" />
   <xs:element name="tan" type="xs:positiveInteger" />
   <xs:element name="gray" type="xs:positiveInteger" />
   <xs:element name="black" type="xs:positiveInteger" />
  </xs:sequence>
 </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

并允许这样的XML:

<rods>
 <green>142</green>
 <white>34</white>
 <gray>65</gray>
</rods>
Run Code Online (Sandbox Code Playgroud)

MSDN对此有这样的说法:

以下示例显示了一个元素(zooAnimals),它可以在sequence元素中包含零个或多个以下元素,elephant,bear,giraffe.

<xs:element name="zooAnimals">
      <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
               <xs:element name="elephant"/>
               <xs:element name="bear"/>
               <xs:element name="giraffe"/>
            </xs:sequence>
      </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

W3Schools建议相同.但是,visual studio和在线验证服务都不喜欢所建议的内容.

这就是我现在所拥有的:

<xs:element name="rods" maxOccurs="1" minOccurs="1">
 <xs:complexType>
  <xs:sequence minOccurs="0" maxOccurs="1">
   <xs:element name="green" type="xs:positiveInteger" />
   <xs:element name="white" type="xs:positiveInteger" />
   <xs:element name="blue" type="xs:positiveInteger" />
   <xs:element name="yellow" type="xs:positiveInteger" />
   <xs:element name="red" type="xs:positiveInteger" />
   <xs:element name="tan" type="xs:positiveInteger" />
   <xs:element name="gray" type="xs:positiveInteger" />
   <xs:element name="black" type="xs:positiveInteger" />
  </xs:sequence>
 </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

这是XML:

<rods>
 <green>142</green>
 <white>34</white>
 <gray>65</gray>
</rods>
Run Code Online (Sandbox Code Playgroud)

Visual Studio 2005声称"灰色"是无效的,"蓝色"是预期的,所以显然它需要所有的孩子

谢谢,

埃里克

13r*_*ren 10

<xs:element name="rods">
    <xs:complexType>
        <xs:sequence>
                <xs:element minOccurs="0" name="green" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="white" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="blue" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="yellow" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="red" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="tan" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="gray" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="black" type="xs:positiveInteger" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)