Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Langage de description Schema XML

Langage de description Schema XML

Ce support cours est une courte introduction au langage de description Schema XML. Nous étudions les aspects suivants : définition de types simples (`Element`, `Attributs` et `Restrictions`), définition de types complexes (attributs, à partir de types simples, sous éléments et mixe) puis annotations.

Mickael BARON

August 06, 2009
Tweet

More Decks by Mickael BARON

Other Decks in Programming

Transcript

  1. Langages de description et modélisation Mickaël BARON – 2009 (Rév.

    Août 2009) mailto:[email protected] ou mailto:[email protected] mickael-baron.fr mickaelbaron Schema XML
  2. 2 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Creative Commons Contrat Paternité Partage des Conditions Initiales à l'Identique 2.0 France http://creativecommons.org/licenses/by-sa/2.0/fr Licence
  3. 3 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    À propos de l’auteur … 3 † Mickaël BARON † Ingénieur de Recherche au LIAS † https://www.lias-lab.fr † Equipe : Ingénierie des Données et des Modèles † Responsable des plateformes logicielles, « coach » technique † Ancien responsable Java de Developpez.com (2011-2021) † Communauté Francophone dédiée au développement informatique † https://java.developpez.com † 4 millions de visiteurs uniques et 12 millions de pages vues par mois † 750 00 membres, 2000 forums et jusqu'à 5000 messages par jour mickael-baron.fr mickaelbaron
  4. 4 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Organisation du cours sur Schema XML † Généralités † Types simples † Elements † Attributs † Restrictions † Types complexes † Uniquement attributs † A partir de types simples † Sous éléments † Mixe † Annotations Tous les exemples du cours sont disponibles directement à l’adresse mbaron.developpez.com/divers/schemaxml
  5. 5 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Schema XML : généralités † Schema XML porte également les acronymes de XSD (XML Schema Document) ou WXS (W3C XML Schemas) † Il s’agit d’une norme définie par W3C (www.w3.org/XML/Schema) † Un Schema XML permet de décrire la structure XML d’un document en XML † Principaux avantages du Schema XML par rapport à la DTD † Comme le Schema XML est un document XML, les langages d’interrogation utilisés pour manipuler l’XML sont également utilisables (XSLT, XPath, XQuery, …) † Les outils qui manipulent du XML peuvent exploiter le Schema XML † Contraintes plus fortes (typage fort, ordre des éléments, cardinalité sur les éléments, expressions régulières, …)
  6. 6 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Schema XML : Schema XML Versus DTD † Partons d’un exemple simple d’XML qui montre les avantages d’employer le Schema XML au lieu d’une DTD † L’exemple simple XML est utilisé pour décrire une personne † Soit les contraintes suivantes qui devront être respectées † Une personne doit définir un nom puis un prénom puis un age et peut définir un email puis des renseignements sur ces enfants † L’age est un entier compris entre 1 et 100 † L’email est une chaîne de caractères qui doit contenir le caractère @ † Les renseignements concernant les enfants portent sur l’age (obligatoire), le sexe (obligatoire) et une remarque (facultative) † L’age de l’enfant est une restriction de l’age de la personne dont la valeur maxi est modifiée à 50 † Le sexe est un énuméré (homme, femme et indéterminé) † Il ne peut y avoir plus de 3 enfants
  7. 7 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Schema XML : Schema XML Versus DTD † Schema XML qui décrit les besoins précédents <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://mbaron.developpez.com/InfoPersoSchema" xmlns:tns="http://mbaron.developpez.com/InfoPersoSchema" elementFormDefault="qualified" attributeFormDefault="qualified"> <element name="person"> <complexType> <sequence> <element name="name" type="string" /> <element name="firstName" type="string" /> <element name="old" type="tns:ageType" /> <element name="email" type="tns:ageType" minOccurs="0" /> <element name="childs" type="tns:childsType" minOccurs="0" maxOccurs="1"/> </sequence> </complexType> </element> <simpleType name="ageType"> <restriction base="integer"> <minInclusive value="1" /> <maxInclusive value="100" /> </restriction> </simpleType> <simpleType name="emailType"> <restriction base="string"> <pattern value=".*@.*" /> </restriction> </simpleType> ... InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample Email optionnel L’ordre des éléments doit être respecté Type simple défini sur la base d’un entier avec une restriction Type simple défini sur la base d’une chaîne de caractères avec une restriction sur le contenu
  8. 8 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Schema XML : Schema XML Versus DTD † Schema XML qui décrit les besoins précédents (suite) <simpleType name="sexeTypeChild" > <restriction base="string"> <enumeration value="homme" /> <enumeration value="femme" /> <enumeration value="indéterminé" /> </restriction> </simpleType> <simpleType name="ageTypeChild"> <restriction base="tns:ageType"> <maxInclusive value="50" /> </restriction> </simpleType> <complexType name="childsType"> <sequence> <element name="child" minOccurs="1" maxOccurs="3"> <complexType> <attribute name="remark" type="string" use="required" /> <attribute name="old" type="tns:ageTypeChild" /> <attribute name="sexe" type="tns:sexeTypeChild" /> </complexType> </element> </sequence> </complexType> </schema> InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample Type simple défini sur la base d’un type simple défini précédemment Type complexe définissant la structure des informations concernant les enfants L’élément child définit trois attributs
  9. 9 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Schema XML : Schema XML Versus DTD † Deux instances XML qui décrivent une personne <?xml version="1.0" encoding="UTF-8"?> <tns:person xmlns:tns="http://mbaron.developpez.com/InfoPersoSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mbaron.developpez.com/InfoPersoSchema InfoPersoSchema.xsd "> <tns:name>BARON</tns:name> <tns:firstName>Mickael</tns:firstName> <tns:old>30</tns:old> <tns:email>[email protected]</tns:email> <tns:childs> <tns:child tns:remark="He's too much" tns:old="3" tns:sexe="homme"/> </tns:childs> </tns:person> InfoPersoInstance.xml du projet divers.xml.schemaXMLExample <?xml version="1.0" encoding="UTF-8"?> <tns:person xmlns:tns="http://mbaron.developpez.com/InfoPersoSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mbaron.developpez.com/InfoPersoSchema InfoPersoSchema.xsd "> <tns:firstName>John</tns:firstName> <tns:name>BAD</tns:name> <tns:old>110</tns:old> <tns:email>toto.fr</tns:email> </tns:person> BadInfoPersoInstance.xml du projet divers.xml.schemaXMLExample Le prénom doit être positionné après le nom L’âge ne doit pas dépasser 100 L’adresse ne contient pas le caractère @ Instance XML qui ne respecte pas le Schema XML
  10. 10 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Schema XML : en-tête † Un document Schema XML est défini dans un fichier dont l’extension est *.xsd (monSchema.xsd) † La balise <schema> est la balise racine de tous documents Schema XML † Le corps de la balise <schema> décrit le contenu de la grammaire <?xml version="1.0" encoding="UTF-8" ?> <schema> ... // Contenu du Schema XML </schema> Balise racine Précise la version XML et l’encodage utilisés InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample
  11. 11 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Schema XML : en-tête † La configuration du document Schema XML est effectuée par l’intermédiaire des attributs de la balise <schema> <?xml version="1.0" encoding="UTF-8" ?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://mbaron.developpez.com/InfoPersoSchema" xmlns:as="http://mbaron.developpez.com/InfoPersoSchema" elementFormDefault="qualified" attributeFormDefault="qualified" ... // Contenu du Schema XML </schema> InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample Précise que les éléments et les types utilisés dans le Schema XML proviennent de l’espace de nommage W3C Précise que les éléments définis dans le Schema XML sont issus dans un autre espace de nommage Précise que pour cet espace de nommage les éléments sont préfixés par as
  12. 12 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Schema XML : en-tête † Possibilité de préfixer les éléments et les attributs qui proviennent d’un espace de nommage <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://keulkeul.blogspot.com/PrefixedInfoPersoSchema" xmlns:tns="http://keulkeul.blogspot.com/PrefixedInfoPersoSchema" elementFormDefault="qualified" attributeFormDefault="qualified"> <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string" /> <xs:element name="firstName" type="xs:string" /> <xs:element name="old" type="tns:ageType" /> <xs:element name="email" type="xs:string" /> <xs:element name="childs" type="tns:childsType" /> </xs:sequence> </xs:complexType> </xs:element> <xs:simpleType name="ageType"> <xs:restriction base="xs:integer"> <xs:minInclusive value="10" /> <xs:maxInclusive value="100" /> </xs:restriction> </xs:simpleType> ... </xs:schema> PrefixedInfoPersoSchema.xsd du projet divers.xml.schemaXMLExample Tous les éléments de l’espace de nommage (W3C) sont préfixés par xs Tous les éléments de l’espace de nommage (PrefixedInfoPersoSchema) sont préfixés par tns
  13. 13 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Schema XML : référencer un Schema XML † Pour référencer un document XML à un Schema XML plusieurs informations sont à renseigner <?xml version="1.0" encoding="UTF-8"?> <tns:person xmlns:tns="http://mbaron.developpez.com/InfoPersoSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mbaron.developpez.com/InfoPersoSchema InfoPersoSchema.xsd "> ... </tns:person> L'espace de nommage par défaut où tous les éléments seront préfixés par tns L'espace de nommage des éléments définis par la norme W3C (ex : schemaLocation) L'espace de nommage du Schema XML utilisé et la localisation de sa définition schemaLocation="{namespace} {location}"
  14. 14 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Schema XML : types simples et types complexes † Un élément dans un Schema XML se déclare avec la balise <element> † Un élément est typé, il doit donc respecter une structure de données † Deux types de données sont à distinguer : types simples et types complexes † Types simples † un élément de type simple ne peut comporter ni attributs, ni de sous éléments † possibilité d’utiliser des types prédéfinis issus de la norme W3C ou de dériver de nouveaux à partir de types déjà existant † Types complexes † un élément de type complexe permet d’exprimer des sous éléments et permet également d’y associer des attributs
  15. 15 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types simples : Eléments † Un élément de type simple est un élément qui ne contient pas d’attribut ni de sous éléments † Un élément se base sur un type simple prédéfini par la norme ou sur un type simple dérivé (voir dans Restrictions) † Syntaxe d’un élément de type simple † Si le type n’est pas défini, le type anyType est utilisé par défaut (aucune contrainte sur le contenu) † Exemples <element name="theName" type="theType" /> Le nom de l’élément Le type simple de l’élément <element name="firstName" type="string" /> <firstName>BARON Mickael</firstName> Définition d’un élément name de type string Du côté XML, la balise firstName contient un corps avec une valeur de type chaîne de caractères
  16. 16 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types simples : principaux types simples † anyType : BARON 123 (super type) † string : BARON Mickael † normalizedString : BARON Mickael † token : BARON Mickael † base64Binary : GpM7 † hexBinary : 0FB7 † integer : …, -1, 0, 1, … † positiveInteger : 1, 2, … † negativeInteger : …, -2, -1 † nonNegativeInteger : 0, 1, 2, … † nonPositiveInteger : …, -2, -1, 0 † long : -9223372036854775808, -1, 0, 1, 92… † unsignedLong : 0, 1, … 18446744073709… † int : -2147483648, …, -1, 0, 1, 2147483647 † La définition de l’ensemble des types simples est disponible à www.w3.org/TR/xmlschema-0/#CreatDt † unsignedInt : 0, 1, … 4294967295 † byte : -128, …, -1, 0, 1, …, 127 † unsignedByte : 0, 1, …, 255 † decimal : -1.23, 0, 123.4, 1000.00 † float : -INF, -1E4, -0, 0, 12.78E-2, … † double : -INF, -1E4, -0, 0, 12.78E-2, … † boolean : true, false, 1, 0 † duration : P1Y2M 1 année, 2 mois † dateTime : 1999-05-21T12:20:00.000 … † date : 1999-05-31 † time : 13:20:00.000 † gYear : 1999 (Gregorian Year) † gMonth : --05 (Gregorian Month) † language : en-GB, fr, …
  17. 17 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types simples : Eléments (valeur par défaut ou fixée) † Les éléments de types simples peuvent avoir une valeur par défaut ou une valeur fixée † Une valeur par défaut est automatiquement assignée quand la valeur de l’élément n’est pas explicitement donnée † Une valeur fixée est automatiquement assignée, aucune autre valeur ne peut être donnée à l’élément <element name="firstName" type="string" default="Mickael" /> L’attribut default de l’élément firstName précise une valeur au cas où elle serait absente <element name="firstName" type="string" fixed="Mickael" /> L’attribut fixed de l’élément firstName précise une valeur et ne peut être modifiée
  18. 18 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types simples : Attributs † Même si un élément de type simple ne peut avoir d’attribut (voir type complexe) l’attribut est toujours déclaré comme un type simple † Un attribut est optionnel par défaut, pour préciser qu’il est obligatoire, il faut utiliser l’attribut use † Syntaxe d’un attribut de type simple † Exemple <attribut name="theName" type="theType" use="required" /> Le nom de l’attribut Le type simple de l’attribut <attribut name="remark" type="string" /> Définition d’un attribut remark de type string et qui est optionnel <child remark="He's too much" ... /> Du côté XML, la balise child contient un attribut remark de type string Précise le caractère obligatoire (required ou optional)
  19. 19 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types simples : Attributs (valeur par défaut ou fixée) † Les attributs peuvent avoir une valeur par défaut ou une valeur fixée tout comme les éléments simples † Une valeur par défaut est automatiquement assignée quand la valeur de l’attribut n’est pas explicitement donnée † Une valeur fixée est automatiquement assignée, aucune autre valeur ne peut être donnée à l’attribut <attribut name="remark" type="string" default="Remarque à préciser" /> L’attribut default de l’attribut remark précise une valeur au cas où elle serait absente <attribut name="remark" type="string" fixed="Remarque à préciser" /> L’attribut fixed de l’attribut remark précise une valeur et ne peut être modifiée
  20. 20 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types simples : Restrictions « Facets » † Les restrictions sur les types simples (Facets) permettent de dériver de nouveaux types à partir de types existants † La création de nouveaux types simples est réalisée au travers de la balise <simpleType> † La restriction de type permet de définir des contraintes sur le nouveau type à créer † La restriction est exprimée à partir de la balise <restriction> <simpleType name="newType" > ... </simpleType> Définition d’un nouveau type nameType <simpleType name="newType" > <restriction base="type" > ... </restriction> </simpleType> La restriction précise sur quel type elle doit être appliquée Les différentes restrictions sont précisées dans la suite
  21. 21 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types simples : Restrictions « Facets » † La définition de l’ensemble des restrictions est disponible à www.w3.org/TR/xmlschema-0/#SimpleTypeFacets † maxExclusive : limite supérieure (exclue) † maxInclusive : limite supérieure (incluse) † minExclusive : limite inférieure (exclue) † minInclusive : limite inférieure (incluse) † enumeration : liste de valeurs autorisée † length : nombre de caractères ou d’élément d’une liste autorisé † minLength : nombre minimum de caractères ou d’élément d’une liste † pattern : expression régulière à respecter † fractionDigits : nombre maxi de digits autorisé † totalDigits : nombre exact de digits autorisé † whiteSpace : politique de gestion des espaces blancs (tab, retour ligne, fin de ligne, …)
  22. 22 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types simples : Restrictions « Facets » † Exemple : restriction sur des valeurs <simpleType name="ageType"> <restriction base="integer"> <minInclusive value="1" /> <maxInclusive value="100" /> </restriction> </simpleType> † Exemple : restriction sur une liste de valeur autorisée † Exemple : restriction à partir d’une expression régulière <simpleType name="sexeTypeChild" > <restriction base="string"> <enumeration value="homme" /> <enumeration value="femme" /> <enumeration value="indéterminé" /> </restriction> </simpleType> <simpleType name="emailType"> <restriction base="string"> <pattern value=".*@.*" /> </restriction> </simpleType> Restriction du type integer Les valeurs de type ageType ne doivent pas dépasser 100 et doivent être supérieures à 1 Restriction du type string Trois valeurs sont autorisées Restriction du type string Toutes chaînes de caractères de type emailType doit respecter ce pattern
  23. 23 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types simples : Restrictions « Facets » † L'utilisation d'un nouveau type impose d'exploiter l'espace de nommage du Schema XML en cours <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://keulkeul.blogspot.com/PrefixedInfoPersoSchema" xmlns:tns="http://keulkeul.blogspot.com/PrefixedInfoPersoSchema" elementFormDefault="qualified" attributeFormDefault="qualified"> <xs:element name="person"> <xs:complexType> <xs:sequence> ... <xs:element name="old" type="tns:ageType" /> ... </xs:sequence> </xs:complexType> </xs:element> <xs:simpleType name="ageType"> <xs:restriction base="xs:integer"> <xs:minInclusive value="10" /> <xs:maxInclusive value="100" /> </xs:restriction> </xs:simpleType> ... </xs:schema> InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample Utilisation du nouveau type ageType défini dans l'espace de nommage tns Nous verrons l'utilisation des attributs lors de la présentation des types complexes
  24. 24 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types simples : Restrictions « Facets » † La création d’un nouveau type peut être anonyme, de ce fait aucune valeur n’est précisée dans l’attribut name de la balise simpleType † Une déclaration d’un type anonyme doit se faire dans le corps d’un élément ou d’un attribut simple † L'utilisation de types anonymes ne permet pas de réutiliser les nouveaux types définis, ils ne sont utilisables qu'une seule fois <element name="old" /> <simpleType> <restriction base="integer"> <minInclusive value="1" /> <maxInclusive value="100" /> </restriction> </simpleType> </element> Le type utilisé pour l'élément old ne peut être ré-utilisé par un autre élément ou attribut
  25. 25 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : généralités † Un élément de type complexe peut contenir d'autres éléments et / ou des attributs † Un attribut ne peut être de type complexe † Quatre combinaisons d'éléments complexes sont à distinguer † Eléments vides qui ne contiennent que des attributs † Eléments de type simple qui contiennent des attributs † Eléments qui peuvent contenir des sous éléments et des attributs † Eléments qui contiennent des attributs, des sous éléments et du texte † La création d'un éléments de type complexe est réalisée au travers de la balise <complexType>
  26. 26 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : Uniquement attributs † Il s'agit d'un élément de type complexe ne contenant que des attributs, appelé également élément vide † Exemple † Lister l'ensemble des attributs (comme défini précédemment) dans la balise <complexType> <tns:child tns:remark="He's too much" tns:old="3" tns:sexe="homme"/> Dans une instance XML, la balise child contient 3 attributs Le corps de l'élément child est vide <xs:element name="child"> <xs:complexType> <attribute name="remark" type="string" use="required" /> <attribute name="old" type="tns:ageTypeChild" /> <attribute name="sexe" type="tns:sexeTypeChild" /> </xs:complexType> </xs:element>
  27. 27 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : A partir de types simples † Il s'agit d'un élément de type complexe qui peut contenir une simple valeur dans son corps et des attributs † Exemple † Pour restreindre l'utilisation de types simples dans un type complexe il faut employer la balise <simpleContent> <tns:child tns:old="3" tns:sexe="homme" >Tom</tns:child> La balise child contient 2 attributs Le corps de l'élément child est défini par une simple valeur de type string <xs:element name="child"> <xs:complexType> <xs:simpleContent> ... </xs:simpleContent> </xs:complexType> </xs:element> Le contenu de la balise simpleContent précise qu'il ne peut y avoir que des attributs et une simple valeur
  28. 28 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : A partir de types simples † Une extension (restriction a été vue précédemment) permet d'employer un type sans définition de contraintes † Deux écritures selon si vous souhaitez une restriction ou une extension <xs:element name=""> <xs:complexType> <xs:simpleContent> <xs:extension base="baseType"> ... </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="person"> <xs:complexType> <xs:simpleContent> <xs:restriction base="baseType"> ... </xs:restriction> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="child"> <xs:complexType> <xs:simpleContent> <xs:extension base="string"> <attribute name="old" type="tns:ageTypeChild" /> <attribute name="sexe" type="tns:sexeTypeChild" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
  29. 29 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : Sous éléments † Il s'agit d'un élément de type complexe qui peut contenir des sous éléments (simples ou complexes) et des attributs † Exemple † Une balise indicateur d'ordre est utilisée pour spécifier la logique de placement des sous balises entre elles <tns:person> <tns:name>BARON</tns:name> <tns:firstName>Mickael</tns:firstName> <tns:old>30</tns:old> <tns:email>[email protected]</tns:email> </tns:person> La balise person contient 4 éléments L'ordre des sous éléments est fixé <element name="person"> <complexType> <sequence> <element name="name" type="string" /> <element name="firstName" type="string" /> <element name="old" type="tns:ageType" /> <element name="email" type="tns:ageType" /> </sequence> </complexType> </element> sequence exprime que les sous éléments doivent apparaître dans un ordre spécifique (name, firstName, old puis email)
  30. 30 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : Sous éléments - Indicateurs d’ordre † Schema XML permet d'exprimer trois sortes d'indicateurs d'ordre désignées par les balises : all, choice et sequence † La balise all spécifie que tous les sous éléments peuvent apparaître dans n'importe quel ordre <element name="person"> <complexType> <all> <element name="name" type="string" /> <element name="firstName" type="string" /> <element name="old" type="tns:ageType" /> <element name="email" type="tns:ageType" /> </all> </complexType> </element> <tns:person> <tns:firstName>Mickael</tns:firstName> <tns:email>[email protected]</tns:email> <tns:old>30</tns:old> <tns:name>BARON</tns:name> </tns:person> La balise person contient 4 éléments utilisables dans n'importe quel ordre
  31. 31 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : Sous éléments - Indicateurs d’ordre † La balise choice exprime qu'un seul élément parmi tous les sous éléments peut apparaître † La balise sequence spécifie que les sous éléments doivent apparaître dans un ordre spécifique <element name="person"> <complexType> <choice> <element name="name" type="string" /> <element name="firstName" type="string" /> <element name="old" type="tns:ageType" /> <element name="email" type="tns:ageType" /> </choice> </complexType> </element> <tns:person> <tns:old>30</tns:old> </tns:person> La balise person contient 4 éléments dont 1 seul peut être utilisé <element name="person"> <complexType> <sequence> <element name="name" type="string" /> <element name="firstName" type="string" /> <element name="old" type="tns:ageType" /> <element name="email" type="tns:ageType" /> </sequence> </complexType> </element> <tns:person> <tns:name>BARON</tns:name> <tns:firstName>Mickael</tns:firstName> <tns:old>30</tns:old> <tns:email>[email protected]</tns:email> </tns:person> La balise person contient 4 éléments qui doivent apparaître dans un ordre donné
  32. 32 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : Sous éléments - Indicat. d'occurrence † Les indicateurs d'occurrence sont utilisés pour exprimer le nombre de fois qu'un sous élément peut apparaître † Ils sont exprimés sous la forme d'attributs d'un sous élément † maxOccurs : précise le nombre d'occurrence maximum † minOccurs : précise le nombre d'occurrence minimum † Si les valeurs de maxOccurs ou minOccurs ne sont pas explicitement précisées, la valeur par défaut est de 1 † Pour définir une valeur infinie, fixer la valeur à unbounded <element name="person"> <complexType> <sequence> <element name="name" type="string" minOccurs="2" maxOccurs="unbounded"/> <element name="firstName" type="string" /> <element name="old" type="tns:ageType" minOccurs="0" /> <element name="email" type="tns:ageType" /> </sequence> </complexType> </element>
  33. 33 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : Sous éléments † Un élément de type complexe contenant des sous éléments peut également contenir des attributs <tns:person userId="123456" > <tns:name>BARON</tns:name> <tns:firstName>Mickael</tns:firstName> <tns:old>30</tns:old> <tns:email>[email protected]</tns:email> </tns:person> † Les attributs sont exprimés à la suite de l'indicateur d'ordre <element name="person"> <complexType> <sequence> <element name="name" type="string" /> <element name="firstName" type="string" /> <element name="old" type="tns:ageType" /> <element name="email" type="tns:ageType" /> </sequence> <attribute name="userId" type="string" /> </complexType> </element> L'élément de type complexe contient un attribut La liste des attributs doit être placée obligatoirement à la suite de l'indicateur d'ordre
  34. 34 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : Mixe (attributs, éléments et textes) † Il s'agit d'un élément de type complexe qui peut contenir un mélange de sous éléments, d'attributs et de textes † Pour utiliser du texte libre entre les différents éléments, l'attribut mixed de la balise complexType doît être à true <letterBody> <salutation>Dear Mr.<name>Robert Smith</name>.</salutation> Your order of <quantity>1</quantity> <productName>Baby Monitor</productName> shipped from our warehouse on <shipDate>1999-05-21</shipDate>. .... </letterBody> <element name="letterBody"> <complexType mixed="true"> <sequence> <element name="salutation"> <complexType mixed="true"> <sequence> <element name="name" type="xsd:string"/> </sequence> </complexType> </element> <element name="quantity" type="positiveInteger"/> ... </xsd:sequence> </xsd:complexType> </xsd:element> Du texte est défini entre les éléments et les sous éléments
  35. 35 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Types complexes : complexContent † Possibilité de définir un nouveau type complexe sur la base d'un type complexe existant de manière à étendre ou à restreindre les éléments † Utilisation de la balise complexContent † Exemple <complexType name="Address"> <sequence> <element name="name" type="string" /> <element name="street" type="string" /> <element name="city" type="string" /> </sequence> </complexType> <complexType name="USAddress"> <complexContent> <extension base="tns:Address"> <sequence> <element name="state" type="string" /> <element name="zip" type="string" /> </sequence> </extension> </complexContent> </complexType> Le type Address définit trois sous éléments en séquence Le type USAddress propose une extension avec deux nouveaux sous éléments en séquence
  36. 36 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Annotations † L'annotation permet d'enrichir la description d'un Schema XML pour les bénéfices des utilisateurs et d'outils d'analyse † L'annotation est réalisée au travers de la balise annotation et propose deux sous éléments (occurrences multiples) † documentation : contient généralement une description relative à un élément du Schema XML † appinfo : est généralement utilisée pour enrichir la description du Schema XML et exploitable par exemple par des outils de génération † Le type de documentation et appinfo est anyType ce qui permet de ne pas imposer de contraintes sur le contenu
  37. 37 Schema XML - M. Baron - Page mickael-baron.fr mickaelbaron

    Annotations † Exemple : utilisation de la balise annotation <xs:element name="child"> <xs:complexType> <attribute name="remark" type="string" use="required"> <annotation> <documentation>Remarque pertinente concernant l'enfant</documentation> <appinfo><refAction>other</refAction></appinfo> </annotation> </attribute> <attribute name="old" type="tns:ageTypeChild"> <annotation> <documentation>Age de l'enfant compris entre 1 et 50 ans</documentation> <appinfo><refAction>age</refAction></appinfo> </annotation> <attribute name="sexe" type="tns:sexeTypeChild"> <annotation> <documentation>Sexe de l'enfant : homme, femme ou indéterminé</documentation> <appinfo><refAction>sexe</refAction></appinfo> </annotation> </xs:complexType> </xs:element> Chaque attribut de l'élément child est décoré d'une annotation La balise appinfo donne des renseignements supplémentaires