我无法为以下需求用<xsd:all>定义元素,
我收到了maxOccursv should be 0 or 1 under schemaall`的错误。
以下是我的要求,能请任何人尽快帮助我吗?
A & B)可以在xml中按任何顺序排列(所以我使用的是xsd:all,但是gettting错误),我不想使用序列。A是强制性的,它应该总是出现在xml中,但是元素B是可选的。A & 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>发布于 2014-11-20 23:48:53
在XSD1.1中,您可以使用xs:所有的maxOccurs值都不是0或1。
在XSD1.0中,你能得到的最接近的是模型(A_~**,但是你不能对A和B施加不同的maxOccurs值。
发布于 2014-11-23 01:36:53
正如凯博士所说,在XSD1.0中,您不能使用<xsd:all>来解决这样的问题。相反,您需要修改您的答案,以使用序列和选择。
这个XSD1.0代码应该符合您的三项要求: order是免费的,<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>发布于 2014-11-25 02:37:08
如果我正确理解这个问题,您需要A和B元素的混合;A必须至少出现一次,B根本不需要出现;两者都没有最大值。(如果迈克尔·凯( Michael )认为你确实想把最大数量的数量强加于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"/>
  </
</https://stackoverflow.com/questions/27043465
复制相似问题