如何在XML模式中创建一系列必须按顺序排列的可选项?
我想做的是在XML模式中创建一个sequence元素,这样内容必须是有序的,但不能全部存在。例如,模式如下所示:如何在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
<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的意思