我无法使用<xsd:all>
为以下要求定义元素
我收到的错误是maxOccursv should be 0 or 1 under schema
全部。
以下是我的要求,有人可以尽快帮助我。
A
&amp; B
)可以在xml中以任何顺序出现(所以我使用xsd:all
,但是gettting错误),我不想顺序A
是必需的,它应始终显示在xml中,但元素B
是可选的。A
&amp; B
可以出现任意次,例如我可以将元素A
提取10次,将元素B
提取20次。<?xml version="1.0" encoding="utf-8"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="InvoiceData">
<xsd:complexType>
<xsd:all>
<xsd:element name="A" minOccurs="1" maxOccurs="unbounded" >
<xsd:element name="B" minOccurs="0" maxOccurs="unbounded" >
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:schema>
答案 0 :(得分:1)
在XSD 1.1中,你可以使用xs:all,其maxOccurs值不是0或1。
在XSD 1.0中,你可以得到的最近的是模型(A | B)*,但是你不能为A和B强加不同的maxOccurs值。
答案 1 :(得分:1)
凯博士说,你不能在XSD 1.0中使用<xsd:all>
来解决这个问题。相反,您需要修改您的答案以使用序列和选择。
此XSD 1.0代码应符合您的三个要求:订单是免费的,<A>
是强制性的,最大出现次数都是无限制的。
<xsd:element name="InvoiceData" >
<xsd:complexType>
<xsd:choice>
<xsd:sequence>
<xsd:element name="B" minOccurs="0"/>
<xsd:element name="A"/>
</xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="A"/>
<xsd:element name="B"/>
</xsd:choice>
</xsd:choice>
</xsd:complexType>
</xsd:element>
答案 2 :(得分:0)
如果我正确理解了这个问题,你想要混合A和B元素; A必须至少出现一次,B根本不需要出现;没有最大值。 (如果Michael Kay认为你确实想要对A和B强加最大出现次数是对的,那么情况会变得更复杂。)
在DTD表示法中,(a*, (b, a*)+)
可以解决问题。在XSD表示法中:
<xsd:sequence>
<xsd:element ref="A"
minOccurs="0"
maxOccurs="unbounded"/>
<xsd:sequence maxOccurs="unbounded">
<xsd:element ref="B"/>
<xsd:element ref="A"
minOccurs="0"
maxOccur="unbounded"/>
</
</