【发布时间】:2021-10-05 16:02:32
【问题描述】:
我正在尝试使用 maxOccurs='unbound' 修改包含 xsd 选项的旧版 xsd 文件。我需要将子 xsd:element 更改为仅出现一次。
现有代码示例:我需要将元素“B”限制为仅出现一次,其余部分照常运行。
<xsd:complexType name="test">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="A"/>
<xsd:element name="B"/>
<xsd:element name="C"/>
<xsd:element name="D"/>
<xsd:element name="E"/>
</xsd:choice>
</xsd:complexType>
以下是我的方法:
一)
<xsd:complexType name="test">
<xsd:choice>
<xsd:element name="A" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="B" minOccurs="0" maxOccurs="1"/>
<xsd:element name="C" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="E" minOccurs="0" maxOccurs="unbounded"/>
</xsd:choice>
</xsd:complexType>
b)
<xsd:complexType name="test">
<xsd:choice>
<xsd:element name="A" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="B" minOccurs="0" maxOccurs="1"/>
<xsd:element name="C" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="D" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="E" minOccurs="0" maxOccurs="unbounded"/>
</xsd:choice>
</xsd:complexType>
这些都不起作用。请在这里给任何建议,
【问题讨论】:
-
您需要使用一些示例来解释您的要求 - 至少一个有效的 XML 和一个无效的 XML。
-
另外...a) 和 b) 在我看来是一样的。
-
如果
A需要一次,您可以将其置于包含其余元素的两个xsd:choice[@maxOccurs="unbounded"]s 之间的序列中。如果A是可选的,您需要使用 XSD 1.1 断言来管理它,否则您将违反唯一粒子属性约束。