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

问题描述 投票:14回答:3

我试图使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>
xsd language-specifications
3个回答
2
投票

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

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


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

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


12
投票

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

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>

4
投票

简单,只需使用<xs:choice maxOccurs="unbounded">而不是<xs:all>。这将产生您正在寻找的效果。

© www.soinside.com 2019 - 2024. All rights reserved.