我正在开发一个包含3个元素的XML Schema,这些元素可以任意顺序。
在下面的示例中,每个bio都有一个favoriteColor
和一个favoriteNumber
,以及至少一个comment
。我希望他们能以任何顺序被允许(包括交替)。
<xs:element name="bio">
<xs:complexType>
<xs:sequence>
<xs:element name="favoriteColor" maxOccurs="1" minOccurs="1"/>
<xs:element name="favoriteNumber" maxOccurs="1" minOccurs="1"/>
<xs:element name="comment" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
一旦可能,选项为<xs:choice>
,但它只允许其中一个选项。将每个可能的订单组合列为替代序列似乎很笨拙:(abc,acb,bac,bca,cab,cba)......并且它仍然没有考虑到在其他两个之间散布评论的可能性。 (例如&#34;评论,号码,评论,颜色,评论,评论&#34;应该被允许)
<xs:all>
可以正常工作,但它只允许每个最多1个实例。我需要允许多个&#34;评论&#34; s。我可以将<xs:element name="comment" maxOccurs="unbounded" minOccurs="0"/>
放在&#34; all&#34;的上方和下方标签,但这不起作用。见下文:
<xs:element name="bio">
<xs:complexType>
<xs:sequence>
<xs:element ref="comment" maxOccurs="unbounded" minOccurs="0"/>
<xs:all> <!-- not allowed here -->
<xs:element ref="favoriteColor" maxOccurs="1" minOccurs="1"/>
<xs:element ref="favoriteNumber" maxOccurs="1" minOccurs="1"/>
<xs:element ref="comment" maxOccurs="1" minOccurs="1"/>
</xs:all>
<xs:element ref="comment" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
有什么建议吗?这个板上有很多问题与模式中元素的顺序有关,但是我找不到任何能解决我想要做的事情(我只有一次&#34;只有一次& #34;和#34;至少一次)。&#34;
答案 0 :(得分:1)
我认为不可能。甚至
<xs:sequence>
<xs:element ref="comment" maxOccurs="unbounded" minOccurs="0" />
<xs:element ref="comment" maxOccurs="unbounded" minOccurs="0" />
</xs:sequence>
会给你错误。 (cos-nonambig:&#34;测试&#34;:评论和&#34;测试&#34;:评论(或来自其替换组的元素)违反&#34;独特粒子归因&#34;。在对此进行验证期间架构,将为这两个粒子创建歧义。)