XSD - Indicatori complessi
Gli indicatori controllano il modo in cui gli elementi devono essere organizzati in un documento XML. Esistono sette tipi di indicatori, che rientrano in tre grandi categorie.
Indicatori dell'ordine
All - Gli elementi figlio possono essere presenti in qualsiasi ordine.
Choice - Può verificarsi solo uno degli elementi figlio.
Sequence - L'elemento figlio può essere presente solo nell'ordine specificato.
Indicatori di occorrenza
maxOccurs - L'elemento figlio può verificarsi solo maxOccurs il numero di volte.
minOccurs - L'elemento figlio deve verificarsi minOccurs un numero di volte.
Indicatori di gruppo
Group - Definisce il relativo insieme di elementi.
attributeGroup - Definisce il set correlato di attributi.
Indicatori dell'ordine
Utilizzando <all> un elemento studente può avere nome, cognome, nickname e contrassegni elemento figlio in qualsiasi ordine nel documento XML.
<xs:complexType name = "StudentType" mixed = "true">
<xs:all>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:all>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
Usando <choice> un elemento studente può avere solo uno tra nome, cognome, nickname e contrassegni elemento figlio nel documento XML.
<xs:complexType name = "StudentType" mixed = "true">
<xs:choice>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:choice>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
Utilizzando <sequence>, un elemento student può avere nome, cognome, nickname e contrassegni elemento figlio nell'ordine specificato solo nel documento XML.
<xs:complexType name = "StudentType" mixed = "true">
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:sequence>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
Indicatori di occorrenza
Utilizzando <maxOccurs>, un elemento studente può avere un massimo di due nickname nel documento XML.
<xs:complexType name = "StudentType" mixed = "true">
<xs:all>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string" maxOccurs="2"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:all>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
Usando <minOccurs>, un elemento student dovrebbe avere due nickname nel documento XML.
<xs:complexType name = "StudentType" mixed = "true">
<xs:all>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string" minOccurs="2"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:all>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
Indicatori di gruppo
<gruppo> viene utilizzato per raggruppare un insieme correlato di elementi. Qui abbiamo creato un gruppo di parte di nome e quindi abbiamo utilizzato questo gruppo per definire un filestudent elemento.
<xs:group name = "infogroup">
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "birthdate" type = "xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name = "student" type = "studentType"/>
<xs:complexType name = "studentType">
<xs:sequence>
<xs:group ref = "infogroup"/>
<xs:element name = "marks" type = "xs:integer"/>
</xs:sequence>
</xs:complexType>
<attributeGroup> viene utilizzato per raggruppare un insieme correlato di attributi. Qui abbiamo creato un gruppo di parte di nome e quindi abbiamo utilizzato questo gruppo per definire gli attributistudent elemento.
<xs:attributeGroup name = "infogroup">
<xs:sequence>
<xs:attribute name = "firstname" type = "xs:string"/>
<xs:attribute name = "lastname" type = "xs:string"/>
<xs:attribute name = "birthdate" type = "xs:date"/>
</xs:sequence>
</xs:attributeGroup>
<xs:element name = "student" type = "studentType"/>
<xs:complexType name = "studentType">
<xs:sequence>
<xs:attributeGroup ref = "infogroup"/>
<xs:element name = "marks" type = "xs:integer"/>
</xs:sequence>
</xs:complexType>