2009-05-19 9 views
5

schema XML specifica "indicatori di occorrenza" (maxOccurrence, minOccurrence). Esiste una "best practice" in cui gli elementi (xsd: element, xsd: sequence o xsd: all) dovrebbero essere utilizzati?Uso di XSD indicatori di occorrenza

Esempio:

sia

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="X" type="xsd:token" minOccurs="1" maxOccurs="unbounded" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

o

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence minOccurs="1" maxOccurs="unbounded"> 
      <xsd:element name="X" type="xsd:token" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

Voglio arrivare a:

 

<XList> 
    <X>First</X> 
    <X>Second</X> 
    <X>Third</X> 
    <X>Fourth</X> 
    <X>Fifth</X> 
... 
</XList> 
 

risposta

6

Ho scoperto me stesso.

La differenza tra i miei esempi non è molto evidente al primo sguardo, ma se l'esempio fosse stato un po 'più complesso che avrebbe avuto senso.

L'estensione seguente chiarisce le differenze:

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="X" type="xsd:token" 
         minOccurs="1" maxOccurs="1"/> 
      <xsd:element name="Y" type="xsd:token" 
         minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

conduce a

 

<XList> 
    <X>Only X</X> 
    <Y>Only Y</Y> 
</XList> 
 

che

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="X" type="xsd:token" 
         minOccurs="1" maxOccurs="unbounded"/> 
      <xsd:element name="Y" type="xsd:token" 
         minOccurs="1" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

porta a

 

<XList> 
    <X>First X</X> 
    <X>Second X</X> 
    <X>Third X</X> 
    ... 
    <Y>First Y</Y> 
    <Y>Second Y</Y> 
    ... 
</XList> 
 

e

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence minOccurs="1" maxOccurs="unbounded" > 
      <xsd:element name="X" type="xsd:token" 
         minOccurs="2" maxOccurs="2"/> 
      <xsd:element name="Y" type="xsd:token" 
         minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

porta a

 

<XList> 
    <X>First X</X> 
    <X>Second X</X> 
    <Y>First Y</Y> 
    <X>Third X</X> 
    <X>Fourth X</X> 
    <Y>Second Y</Y> 
    ... 
</XList> 
 

e

 

<xsd:element name="XList"> 
    <xsd:complexType> 
     <xsd:sequence minOccurs="1" maxOccurs="unbounded" > 
      <xsd:element name="X" type="xsd:token" 
         minOccurs="1" maxOccurs="unbounded"/> 
      <xsd:element name="Y" type="xsd:token" 
         minOccurs="1" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
 

porta a

 

<XList> 
    <X>First X</X> 
    <X>Second X</X> 
    <X>Third X</X> 
    ... 
    <Y>First Y</Y> 
    <Y>Second Y</Y> 
    ... 
    <X>Fourth X</X> 
    <X>Fifth X</X> 
    <X>Sixth X</X> 
    ... 
    <Y>Third Y</Y> 
    <Y>Fourth Y</Y> 
    ... 
</XList> 
 
0

Se la sequenza contiene solo un bambino, suppongo non fa molto differenza effettiva Lo metterei sull'elemento xsd: però: è lì che li inserirò normalmente se ci fosse più di un elemento nella sequenza.