XSD - Indicateurs complexes

Les indicateurs contrôlent la manière dont les éléments doivent être organisés dans un document XML. Il existe sept types d'indicateurs, répartis en trois grandes catégories.

Indicateurs de commande

  • All - Les éléments enfants peuvent apparaître dans n'importe quel ordre.

  • Choice - Un seul élément enfant peut apparaître.

  • Sequence - L'élément enfant ne peut apparaître que dans l'ordre spécifié.

Indicateurs d'occurrence

  • maxOccurs - L'élément enfant ne peut apparaître que le nombre maxOccurs de fois.

  • minOccurs - L'élément enfant doit apparaître au minimum un nombre de fois.

Indicateurs de groupe

  • Group - Définit l'ensemble d'éléments connexes.

  • attributeGroup - Définit un ensemble d'attributs associés.

Indicateurs de commande

En utilisant <all>, un élément étudiant peut avoir un prénom, un nom, un surnom et marque un élément enfant dans n'importe quel ordre dans le document 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' />

En utilisant <choice>, un élément étudiant ne peut avoir qu'un seul élément enfant, prénom, nom, surnom et marque dans le document 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' />

En utilisant <séquence>, un élément étudiant peut avoir le prénom, le nom, le surnom et marque l'élément enfant dans l'ordre spécifié uniquement dans le document 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' />

Indicateurs d'occurrence

En utilisant <maxOccurs>, un élément étudiant peut avoir au maximum deux surnoms dans le document 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' />

En utilisant <minOccurs>, un élément étudiant doit avoir deux surnoms dans le document 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' />

Indicateurs de groupe

<group> est utilisé pour regrouper un ensemble d'éléments liés. Ici, nous avons créé un groupe de partie de nom, puis utilisé ce groupe pour définir unstudent élément.

<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> est utilisé pour regrouper un ensemble d'attributs associé. Ici, nous avons créé un groupe de partie du nom, puis utilisé ce groupe pour définir des attributs pourstudent élément.

<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>