XSD - Indicadores Complexos
Os indicadores controlam a maneira como os elementos devem ser organizados em um documento XML. Existem sete tipos de indicadores, divididos em três grandes categorias.
Indicadores de pedido
All - Os elementos filhos podem ocorrer em qualquer ordem.
Choice - Apenas um dos elementos filho pode ocorrer.
Sequence - O elemento filho pode ocorrer apenas na ordem especificada.
Indicadores de ocorrência
maxOccurs - O elemento filho pode ocorrer apenas um número maxOccurs de vezes.
minOccurs - O elemento filho deve ocorrer minOccurs várias vezes.
Indicadores de Grupo
Group - Define o conjunto de elementos relacionados.
attributeGroup - Define o conjunto de atributos relacionados.
Indicadores de pedido
Usando <all>, um elemento aluno pode ter nome, sobrenome, apelido e marca o elemento filho em qualquer ordem no 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>, um elemento de aluno pode ter apenas um elemento de primeiro nome, sobrenome, apelido e marcas filho no 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' />
Usando <sequence>, um elemento de aluno pode ter nome, sobrenome, apelido e marca o elemento filho na ordem especificada apenas no 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' />
Indicadores de ocorrência
Usando <maxOccurs>, um elemento de aluno pode ter no máximo dois apelidos no 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>, um elemento de aluno deve ter dois apelidos no 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' />
Indicadores de Grupo
<grupo> é usado para agrupar um conjunto relacionado de elementos. Aqui nós criamos um grupo de parte de nome e então usamos este grupo para definir umstudent 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> é usado para agrupar um conjunto relacionado de atributos. Aqui nós criamos um grupo de parte de nome e então usamos este grupo para definir atributos parastudent 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>