maxOccurs="0"

Please can someone help clarify an issue for me regarding the use of
maxOccurs="0", particularly within a type derived by <restriction>.

 >From various places in the Structures recommendation I have gathered the
following information:

1. Where minOccurs=maxOccurs=0, the item "corresponds to no component at
all."
    [repeated]
2. The Particle Schema Component: {max occurs} - "Either a non-negative
integer or unbounded."
    [http://www.w3.org/TR/xmlschema-1/#p-max_occurs]
3. Particle Correct: for all particles "{max occurs} must be greater than or
equal to 1."
    [http://www.w3.org/TR/xmlschema-1/#p-props-correct]

Also, from the Primer:

4. An element with minOccurs="0" and maxOccurs="0" means the element "must
not appear."
    [http://www.w3.org/TR/xmlschema-0/#cardinalityTable]
5. In restriction, minOccurs="0" and maxOcurs="0" means "exclusion of an
optional component."
    [http://www.w3.org/TR/xmlschema-0/#restrictsTable]

It seems to me that (2) & (3) conflict. (2) effectively says that a particle
may have maxOccurs="0" while (3) says this would not be a correct particle.
Is an incorrect particle still a particle??
I'm not sure that (1) excuses this conflict.
Looking at the Errata I cannot see any substantive changes to these
definitions.

The problem I have specifically relates to restriction of a complexType
containing a sequence. As I understand it, the derived restricted sequence
can either simply not mention the element I wish to 'prohibit' or can
explicitly prohibit it by specifying maxOccurs="0" and this should mean the
same thing. However, (3) implies that the latter would not validate.

E.g.

   <complexType name="base">
     <sequence>
       <element name="a" minOccurs="0" maxOccurs="1"/>
       <element name="b" minOccurs="0" maxOccurs="1"/>
       <element name="c" minOccurs="0" maxOccurs="1"/>
     </sequence>
   </complexType>

   <complexType name="deriveByOmission">
     <complexContent>
       <restriction base="base">
         <sequence>
           <element name="a" minOccurs="0" maxOccurs="1"/>
           <!-- prohibit element "b" by omission -->
           <element name="c" minOccurs="0" maxOccurs="1"/>
         </sequence>
       </restriction>
     </complexContent>
   </complexType>

   <complexType name="deriveByZeroOccurrence">
     <complexContent>
       <restriction base="base">
         <sequence>
           <element name="a" minOccurs="0" maxOccurs="1"/>
           <element name="b" minOccurs="0" maxOccurs="0"/> <!-- prohibit
element "b" -->
           <element name="c" minOccurs="0" maxOccurs="1"/>
         </sequence>
       </restriction>
     </complexContent>
   </complexType>

(Helpfully, of the seven schema tools I've tried, 5 accept both derivations
(but given other experiences are maybe just too lax) and 2 refuse both...)

Please can someone suggest which of these 2 derivations are correct and/or
best practice?


Many thanks,
Tim Daplyn



*************************************************************************
The information contained in this message or any of its
attachments may be privileged and confidential and intended
for the exclusive use of the addressee. If you are not the
addressee any disclosure, reproduction, distribution or other
dissemination or use of this communication is strictly prohibited
*************************************************************************

Received on Thursday, 14 August 2003 09:02:41 UTC