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

如何在XML模式中创建一系列必须按顺序排列的可选项?,xml,schema,xsd,sequence,Xml,Schema,Xsd,Sequence,我想做的是在XML模式中创建一个sequence元素,这样内容必须是有序的,但不能全部存在。例如,模式如下所示: <xs:element name="rods" maxOccurs="1" minOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="green" type="xs:positiveInteger" /> <xs:element name="w

我想做的是在XML模式中创建一个sequence元素,这样内容必须是有序的,但不能全部存在。例如,模式如下所示:

<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>
<rods>
 <green>142</green>
 <white>34</white>
 <gray>65</gray>
</rods>

允许使用如下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>
<rods>
 <green>142</green>
 <white>34</white>
 <gray>65</gray>
</rods>

142
34
65
MSDN对此有这样的说法:

下面的示例显示了一个元素(zooAnimals),该元素在sequence元素中可以包含以下元素中的零个或多个:大象、熊、长颈鹿

<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>

这些学校也提出了同样的建议。 然而,VisualStudio和在线验证服务都不喜欢所建议的内容

以下是我目前的情况:

<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>

下面是XML:

<rods>
 <green>142</green>
 <white>34</white>
 <gray>65</gray>
</rods>

142
34
65
VisualStudio2005声称“灰色”是无效的,“蓝色”是预期的,所以很明显它想要所有的孩子

谢谢

埃里克



我觉得您的架构定义不错。想分享Visual Studio和在线验证器的结果/反馈吗?我已将结果添加到postThanks中,这就完成了。没有办法避免键入大量minOccurs=“0”,是吗?我想知道为什么W3Schools和MSDN说其他代码可以工作,而实际上不行?@Eric它们都是序列,但在您想要的重要细节上有所不同。它们意味着小组中的零次或多次重复,但你希望每个人都是零次或一次。你熟悉正则表达式吗?XML模式非常相似。他们的方法像(e g b)*,但你想要的是像e?Gb?啊。。。一定是误解了MSDN的意思