In generale i vincoli di occorrenza (minOccurs
o maxOccurs
) sui gruppi di elementi (sequenze o scelte) significano che l'intero gruppo può essere ripetuto d mentre i vincoli di occorrenza sugli elementi significano che l'elemento può essere ripetuto prima che appaia l'elemento successivo nel gruppo.
Se la sequenza contiene solo un elemento, non c'è differenza.
<xs:sequence>
<xs:element maxOccurs="unbounded" name="MyType2">...</xs:element>
</xs:sequence>
è uguale
<xs:sequence maxOccurs="unbounded">
<xs:element name="MyType2">...</xs:element>
</xs:sequence>
ed entrambi permettono ripetendo l'elemento <MyType2>
. Ci sarà una differenza non appena la sequenza contiene più di una definizione di elemento.
<xs:sequence>
<xs:element maxOccurs="unbounded" name="MyType">...</xs:element>
<xs:element maxOccurs="unbounded" name="foobar">...</xs:element>
</xs:sequence>
è non uguale
<xs:sequence maxOccurs="unbounded">
<xs:element name="MyType">...</xs:element>
<xs:element name="foobar">...</xs:element>
</xs:sequence>
Il primo permette strutture come
<MyType/>
<MyType/>
<foobar/>
<foobar/>
ma il secondo non consente una tale struttura. Invece consente strutture come
<MyType/>
<foobar/>
<MyType/>
<foobar/>
che d'altra parte non sono consentiti dalla prima definizione.