XSD不允许我在所有指标内部无限制

时间:2010-03-02 10:15:17

标签: xsd language-specifications

我试图使var1中的无序变量列表出现两次,var2出现无限次(我的项目中的用例不同)。该元素不允许我使用maxOccurs。

我正在尝试做什么工作?

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="testcomment">
    <xs:complexType>
      <xs:all>
        <xs:element name="var1" type="xs:string" maxOccurs="2" />
        <xs:element name="var2" type="xs:integer" maxOccurs="unbounded" />
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>

3 个答案:

答案 0 :(得分:11)

我遇到了同样的问题并且有一个解决方案!看看这个答案:

https://stackoverflow.com/a/3827606/637142

<xs:element name="A">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="B"/>
      <xs:element ref="C"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

答案 1 :(得分:3)

很简单,只需使用<xs:choice maxOccurs="unbounded">代替<xs:all>即可。这将产生您正在寻找的效果。

答案 2 :(得分:2)

你想要做的事情听起来像列表中元素的类型可能是不明确的,没有预读,在这种情况下,由于它可以描述的语言类别,在XSD中没有解决方法。

您可以发布XSD的相关部分吗?


更新:不,你不能用XSD做到这一点。有关您可以放在<xs:all>元素中的内容的规则列在例如here中。此约束具有名称 - UPA或唯一粒子归因约束。这与模糊性有关,微软网站对存在原因here有很好的解释。

您可以更改文档布局以消除对此类声明的需要,也可以使用更具表现力的模式语言,如RelaxNG