描述任意数量相同子元素的XSD - xs:all / xs:sequence / xs:choice和基数

4 浏览
0 Comments

描述任意数量相同子元素的XSD - xs:all / xs:sequence / xs:choice和基数

我正在尝试在XSD中描述类似以下XML的内容:


   
   

还有一些额外的约束条件:

  • 只有一个componentDefinition
  • componentDefinition块可以为空,或者包含任意数量的component元素
  • component元素可以以任意顺序出现

我对此的解决方案是以下XSD:


   
      
         
            
               
            
         
      
   

然而,这感觉不正确,因为我使用了xs:choice,同时又声明可以"选择"所有xs:choice的内容。

相反,我认为使用xs:all是正确的解决方案,但是不允许设置maxOccurs="unbounded"

xs:sequence似乎也不正确,因为component元素可以以任意顺序出现。

所以我的问题是:还有没有其他更简单的解决方案?

0
0 Comments

在这种情况下,由于可能的子元素只有相同名称的元素,所以无序的概念是多余的。(顺便说一句,在实践中,无序通常会带来更多麻烦。)在这种情况下,通常的做法是在子元素xs:element周围使用xs:sequence,并设置maxOccurs="unbounded"

参考资料

谢谢你的答案!我看到我在无序的概念上走错了方向。

0