Schema XML

3 714 vues

Publié le

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.

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
3 714
Sur SlideShare
0
Issues des intégrations
0
Intégrations
363
Actions
Partages
0
Téléchargements
281
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Schema XML

  1. 1. Langages de description et modélisation Schema XML Mickaël BARON – 2009 (Rév. Août 2009) mailto:baron.mickael@gmail.com ou mailto:baron@ensma.fr
  2. 2. Licence Creative Commons Contrat Paternité Partage des Conditions Initiales à lIdentique 2.0 Francekeulkeul.blogspot.com http://creativecommons.org/licenses/by-sa/2.0/fr Schema XML - M. Baron - Page 2
  3. 3. Organisation du cours sur Schema XML Généralités Types simples Elements Tous les exemples du cours Attributs sont disponibles directement à l’adresse mbaron.developpez.com/divers/schemaxml Restrictions Types complexes Uniquement attributs A partir de types simpleskeulkeul.blogspot.com Sous éléments Mixe Annotations Schema XML - M. Baron - Page 3
  4. 4. 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 utilisableskeulkeul.blogspot.com (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, …) Schema XML - M. Baron - Page 4
  5. 5. 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)keulkeul.blogspot.com 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 Schema XML - M. Baron - Page 5
  6. 6. 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> L’ordre des éléments <sequence> doit être respecté <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> Type simple défini sur Email optionnel </element> la base d’un entier <simpleType name="ageType"> <restriction base="integer"> avec une restriction <minInclusive value="1" /> <maxInclusive value="100" />keulkeul.blogspot.com </restriction> </simpleType> <simpleType name="emailType"> InfoPersoSchema.xsd du projet <restriction base="string"> divers.xml.schemaXMLExample <pattern value=".*@.*" /> </restriction> Type simple défini sur la base d’une </simpleType> chaîne de caractères avec une ... restriction sur le contenu Schema XML - M. Baron - Page 6
  7. 7. 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" /> InfoPersoSchema.xsd du projet <enumeration value="indéterminé" /> divers.xml.schemaXMLExample </restriction> </simpleType> Type simple défini sur la <simpleType name="ageTypeChild"> base d’un type simple défini <restriction base="tns:ageType"> <maxInclusive value="50" /> précédemment </restriction> </simpleType> Type complexe définissant la structure des informations <complexType name="childsType"> <sequence> concernant les enfants <element name="child" minOccurs="1" maxOccurs="3"> <complexType> <attribute name="remark" type="string" use="required" />keulkeul.blogspot.com <attribute name="old" type="tns:ageTypeChild" /> <attribute name="sexe" type="tns:sexeTypeChild" /> </complexType> </element> </sequence> </complexType> L’élément child définit trois </schema> attributs Schema XML - M. Baron - Page 7
  8. 8. 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> InfoPersoInstance.xml du projet <tns:email>baron.mickael@gmail.com</tns:email> divers.xml.schemaXMLExample <tns:childs> <tns:child tns:remark="Hes too much" tns:old="3" tns:sexe="homme"/> </tns:childs> </tns:person> Instance XML qui ne respecte pas le Schema XML <?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 ">keulkeul.blogspot.com <tns:firstName>John</tns:firstName> <tns:name>BAD</tns:name> Le prénom doit être <tns:old>110</tns:old> positionné après le <tns:email>toto.fr</tns:email> L’âge ne doit pas nom </tns:person> dépasser 100 BadInfoPersoInstance.xml du projet L’adresse ne contient divers.xml.schemaXMLExample pas le caractère @ Schema XML - M. Baron - Page 8
  9. 9. 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> Précise la version XML et l’encodagekeulkeul.blogspot.com Balise racine ... // Contenu du Schema XML utilisés </schema> InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample Schema XML - M. Baron - Page 9
  10. 10. Schema XML : en-tête La configuration du document Schema XML est effectuée par l’intermédiaire des attributs de la balise <schema> Précise que les éléments et Précise que pour cet espace Précise que les éléments définis les types utilisés dans le de nommage les éléments dans le Schema XML sont issus Schema XML proviennent de sont préfixés par as dans un autre espace de l’espace de nommage W3C nommage <?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"keulkeul.blogspot.com ... // Contenu du Schema XML </schema> InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample Schema XML - M. Baron - Page 10
  11. 11. 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"> Tous les éléments de l’espace de <xs:complexType> <xs:sequence> nommage (W3C) sont préfixés par xs <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> Tous les éléments de l’espace de nommage (PrefixedInfoPersoSchema)keulkeul.blogspot.com <xs:simpleType name="ageType"> <xs:restriction base="xs:integer"> sont préfixés par tns <xs:minInclusive value="10" /> <xs:maxInclusive value="100" /> </xs:restriction> </xs:simpleType> ... PrefixedInfoPersoSchema.xsd du projet </xs:schema> divers.xml.schemaXMLExample Schema XML - M. Baron - Page 11
  12. 12. Schema XML : référencer un Schema XML Pour référencer un document XML à un Schema XML plusieurs informations sont à renseigner Lespace de nommage par défaut où tous les éléments seront préfixés par tns <?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 ">keulkeul.blogspot.com ... </tns:person> Lespace de nommage du Schema XML utilisé et Lespace de nommage des la localisation de sa définition éléments définis par la norme schemaLocation="{namespace} {location}" W3C (ex : schemaLocation) Schema XML - M. Baron - Page 12
  13. 13. 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 dekeulkeul.blogspot.com 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 Schema XML - M. Baron - Page 13
  14. 14. 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 <element name="theName" type="theType" /> Le nom de l’élément Le type simple de l’élément Si le type n’est pas défini, le type anyType est utilisé par défaut (aucune contrainte sur le contenu) Définition d’unkeulkeul.blogspot.com élément name Exemples de type string <element name="firstName" type="string" /> Du côté XML, la balise firstName contient un <firstName>BARON Mickael</firstName> corps avec une valeur de type chaîne de caractères Schema XML - M. Baron - Page 14
  15. 15. Types simples : principaux types simples La définition de l’ensemble des types simples est disponible à www.w3.org/TR/xmlschema-0/#CreatDt anyType : BARON 123 (super type) unsignedInt : 0, 1, … 4294967295 string : BARON Mickael byte : -128, …, -1, 0, 1, …, 127 normalizedString : BARON Mickael unsignedByte : 0, 1, …, 255 token : BARON Mickael decimal : -1.23, 0, 123.4, 1000.00 base64Binary : GpM7 float : -INF, -1E4, -0, 0, 12.78E-2, … hexBinary : 0FB7 double : -INF, -1E4, -0, 0, 12.78E-2, … integer : …, -1, 0, 1, … boolean : true, false, 1, 0 positiveInteger : 1, 2, … duration : P1Y2M 1 année, 2 mois negativeInteger : …, -2, -1 dateTime : 1999-05-21T12:20:00.000 … nonNegativeInteger : 0, 1, 2, … date : 1999-05-31keulkeul.blogspot.com nonPositiveInteger : …, -2, -1, 0 time : 13:20:00.000 long : -9223372036854775808, -1, 0, 1, 92… gYear : 1999 (Gregorian Year) unsignedLong : 0, 1, … 18446744073709… gMonth : --05 (Gregorian Month) int : -2147483648, …, -1, 0, 1, 2147483647 language : en-GB, fr, … Schema XML - M. Baron - Page 15
  16. 16. 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 <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 Une valeur fixée est automatiquement assignée, aucune autre valeur ne peut être donnée à l’élémentkeulkeul.blogspot.com <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 Schema XML - M. Baron - Page 16
  17. 17. 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 <attribut name="theName" type="theType" use="required" /> Le nom de l’attribut Le type simple de l’attribut Précise le caractère obligatoire (required ou optional)keulkeul.blogspot.com Exemple Définition d’un <attribut name="remark" type="string" /> attribut remark Du côté XML, la de type string balise child contient et qui est un attribut remark <child remark="Hes too much" ... /> optionnel de type string Schema XML - M. Baron - Page 17
  18. 18. 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 <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 Une valeur fixée est automatiquement assignée, aucune autre valeur ne peut être donnée à l’attributkeulkeul.blogspot.com <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 Schema XML - M. Baron - Page 18
  19. 19. 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> <simpleType name="newType" > ... Définition d’un nouveau </simpleType> type nameType 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>keulkeul.blogspot.com <simpleType name="newType" > <restriction base="type" > Les différentes La restriction précise sur ... restrictions sont quel type elle doit être </restriction> précisées dans la suite </simpleType> appliquée Schema XML - M. Baron - Page 19
  20. 20. 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 à respecterkeulkeul.blogspot.com 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, …) Schema XML - M. Baron - Page 20
  21. 21. Types simples : Restrictions « Facets » Exemple : restriction sur des valeurs <simpleType name="ageType"> <restriction base="integer"> Les valeurs de type Restriction du <minInclusive value="1" /> ageType ne doivent type integer <maxInclusive value="100" /> pas dépasser 100 et </restriction> </simpleType> doivent être supérieures à 1 Exemple : restriction sur une liste de valeur autorisée <simpleType name="sexeTypeChild" > <restriction base="string"> <enumeration value="homme" /> Restriction du <enumeration value="femme" /> Trois valeurs sont type string <enumeration value="indéterminé" /> autorisées </restriction> </simpleType>keulkeul.blogspot.com Exemple : restriction à partir d’une expression régulière <simpleType name="emailType"> <restriction base="string"> Toutes chaînes de Restriction du <pattern value=".*@.*" /> caractères de type type string </restriction> emailType doit </simpleType> respecter ce pattern Schema XML - M. Baron - Page 21
  22. 22. Types simples : Restrictions « Facets » Lutilisation dun nouveau type impose dexploiter lespace 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> Utilisation du nouveautype ageType défini dans <xs:simpleType name="ageType"> lespace de nommage tns <xs:restriction base="xs:integer">keulkeul.blogspot.com <xs:minInclusive value="10" /> <xs:maxInclusive value="100" /> Nous verrons lutilisation des </xs:restriction> </xs:simpleType> attributs lors de la présentation ... des types complexes </xs:schema> InfoPersoSchema.xsd du projet divers.xml.schemaXMLExample Schema XML - M. Baron - Page 22
  23. 23. 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 Lutilisation de types anonymes ne permet pas de réutiliser les nouveaux types définis, ils ne sont utilisables quune seule fois <element name="old" />keulkeul.blogspot.com <simpleType> <restriction base="integer"> <minInclusive value="1" /> Le type utilisé pour <maxInclusive value="100" /> lélément old ne </restriction> peut être ré-utilisé </simpleType> </element> par un autre élément ou attribut Schema XML - M. Baron - Page 23
  24. 24. Types complexes : généralités Un élément de type complexe peut contenir dautres é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 attributskeulkeul.blogspot.com Eléments qui contiennent des attributs, des sous éléments et du texte La création dun éléments de type complexe est réalisée au travers de la balise <complexType> Schema XML - M. Baron - Page 24
  25. 25. Types complexes : Uniquement attributs Il sagit dun élément de type complexe ne contenant que des attributs, appelé également élément vide Exemple <tns:child tns:remark="Hes too much" tns:old="3" tns:sexe="homme"/> Dans une instance XML, la balise Le corps de lélément child est vide child contient 3 attributs Lister lensemble des attributs (comme défini précédemment) dans la balise <complexType>keulkeul.blogspot.com <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> Schema XML - M. Baron - Page 25
  26. 26. Types complexes : A partir de types simples Il sagit dun élément de type complexe qui peut contenir une simple valeur dans son corps et des attributs Le corps de lélément child est défini Exemple par une simple valeur de type string <tns:child tns:old="3" tns:sexe="homme" >Tom</tns:child> La balise child contient 2 attributs Pour restreindre lutilisation de types simples dans un type complexe il faut employer la balise <simpleContent>keulkeul.blogspot.com <xs:element name="child"> <xs:complexType> Le contenu de la balise <xs:simpleContent> simpleContent précise ... quil ne peut y avoir que </xs:simpleContent> </xs:complexType> des attributs et une </xs:element> simple valeur Schema XML - M. Baron - Page 26
  27. 27. Types complexes : A partir de types simples Deux écritures selon si vous souhaitez une restriction ou une extension <xs:element name=""> <xs:element name="person"> <xs:complexType> <xs:complexType> <xs:simpleContent> <xs:simpleContent> <xs:extension base="baseType"> <xs:restriction base="baseType"> ... ... </xs:extension> </xs:restriction> </xs:simpleContent> </xs:simpleContent> </xs:complexType> </xs:complexType> </xs:element> </xs:element> Une extension (restriction a été vue précédemment) permet demployer un type sans définition de contraintes <xs:element name="child"> <xs:complexType>keulkeul.blogspot.com <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> Schema XML - M. Baron - Page 27
  28. 28. Types complexes : Sous éléments Il sagit dun élément de type complexe qui peut contenir des sous éléments (simples ou complexes) et des attributs Exemple <tns:person> <tns:name>BARON</tns:name> <tns:firstName>Mickael</tns:firstName> La balise person <tns:old>30</tns:old> Lordre des sous contient 4 éléments <tns:email>baron.mickael@gmail.com</tns:email> éléments est fixé </tns:person> Une balise indicateur dordre est utilisée pour spécifier la logique de placement des sous balises entre elles <element name="person"> <complexType>keulkeul.blogspot.com <sequence> sequence exprime que les <element name="name" type="string" /> sous éléments doivent <element name="firstName" type="string" /> apparaître dans un ordre <element name="old" type="tns:ageType" /> <element name="email" type="tns:ageType" /> spécifique (name, </sequence> firstName, old puis email) </complexType> </element> Schema XML - M. Baron - Page 28
  29. 29. Types complexes : Sous éléments - Indicateurs d’ordre Schema XML permet dexprimer trois sortes dindicateurs dordre 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 nimporte quel ordre <element name="person"> <complexType> <all> <element name="name" type="string" /> La balise person <element name="firstName" type="string" /> contient 4 éléments <element name="old" type="tns:ageType" /> utilisables dans <element name="email" type="tns:ageType" /> </all> nimporte quel ordre </complexType> </element>keulkeul.blogspot.com <tns:person> <tns:firstName>Mickael</tns:firstName> <tns:email>baron.mickael@gmail.com</tns:email> <tns:old>30</tns:old> <tns:name>BARON</tns:name> </tns:person> Schema XML - M. Baron - Page 29
  30. 30. Types complexes : Sous éléments - Indicateurs d’ordre La balise choice exprime quun seul élément parmi tous les sous éléments peut apparaître <element name="person"> La balise person contient 4 <complexType> <choice> éléments dont 1 seul peut <element name="name" type="string" /> être utilisé <element name="firstName" type="string" /> <element name="old" type="tns:ageType" /> <element name="email" type="tns:ageType" /> </choice> <tns:person> </complexType> <tns:old>30</tns:old> </element> </tns:person> La balise sequence spécifie que les sous éléments doivent apparaître dans un ordre spécifique <tns:person> <tns:name>BARON</tns:name> <element name="person">keulkeul.blogspot.com <tns:firstName>Mickael</tns:firstName> <complexType> <tns:old>30</tns:old> <sequence> <tns:email>baron.mickael@gmail.com</tns:email> <element name="name" type="string" /> </tns:person> <element name="firstName" type="string" /> <element name="old" type="tns:ageType" /> La balise person contient 4 <element name="email" type="tns:ageType" /> </sequence> éléments qui doivent apparaître </complexType> dans un ordre donné </element> Schema XML - M. Baron - Page 30
  31. 31. Types complexes : Sous éléments - Indicat. doccurrence Les indicateurs doccurrence sont utilisés pour exprimer le nombre de fois quun sous élément peut apparaître Ils sont exprimés sous la forme dattributs dun sous élément maxOccurs : précise le nombre doccurrence maximum minOccurs : précise le nombre doccurrence 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>keulkeul.blogspot.com <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> Schema XML - M. Baron - Page 31
  32. 32. 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> Lélément de type <tns:firstName>Mickael</tns:firstName> complexe contient <tns:old>30</tns:old> un attribut <tns:email>baron.mickael@gmail.com</tns:email> </tns:person> Les attributs sont exprimés à la suite de lindicateur dordre <element name="person"> <complexType> <sequence> La liste des attributs <element name="name" type="string" />keulkeul.blogspot.com doit être placée <element name="firstName" type="string" /> <element name="old" type="tns:ageType" /> obligatoirement à la <element name="email" type="tns:ageType" /> suite de lindicateur </sequence> dordre <attribute name="userId" type="string" /> </complexType> </element> Schema XML - M. Baron - Page 32
  33. 33. Types complexes : Mixe (attributs, éléments et textes) Il sagit dun élément de type complexe qui peut contenir un mélange de sous éléments, dattributs et de textes <letterBody> <salutation>Dear Mr.<name>Robert Smith</name>.</salutation> Du texte est défini Your order of <quantity>1</quantity> <productName>Baby entre les éléments et Monitor</productName> shipped from our warehouse on <shipDate>1999-05-21</shipDate>. .... les sous éléments </letterBody> Pour utiliser du texte libre entre les différents éléments, lattribut mixed de la balise complexType doît être à true <element name="letterBody"> <complexType mixed="true"> <sequence> <element name="salutation"> <complexType mixed="true"> <sequence>keulkeul.blogspot.com <element name="name" type="xsd:string"/> </sequence> </complexType> </element> <element name="quantity" type="positiveInteger"/> ... </xsd:sequence> </xsd:complexType> </xsd:element> Schema XML - M. Baron - Page 33
  34. 34. Types complexes : complexContent Possibilité de définir un nouveau type complexe sur la base dun 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" /> Le type Address définit <element name="street" type="string" /> trois sous éléments en <element name="city" type="string" /> séquence </sequence> </complexType> <complexType name="USAddress"> <complexContent>keulkeul.blogspot.com <extension base="tns:Address"> <sequence> <element name="state" type="string" /> Le type USAddress <element name="zip" type="string" /> </sequence> propose une extension </extension> avec deux nouveaux </complexContent> </complexType> sous éléments en séquence Schema XML - M. Baron - Page 34
  35. 35. Annotations Lannotation permet denrichir la description dun Schema XML pour les bénéfices des utilisateurs et doutils danalyse Lannotation 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 dukeulkeul.blogspot.com 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 Schema XML - M. Baron - Page 35
  36. 36. Annotations Exemple : utilisation de la balise annotation Chaque attribut de lélément child est décoré dune annotation <xs:element name="child"> <xs:complexType> <attribute name="remark" type="string" use="required"> <annotation> <documentation>Remarque pertinente concernant lenfant</documentation> <appinfo><refAction>other</refAction></appinfo> </annotation> </attribute> <attribute name="old" type="tns:ageTypeChild"> <annotation> <documentation>Age de lenfant compris entre 1 et 50 ans</documentation> <appinfo><refAction>age</refAction></appinfo> </annotation> <attribute name="sexe" type="tns:sexeTypeChild"> <annotation> <documentation>Sexe de lenfant : homme, femme oukeulkeul.blogspot.com indéterminé</documentation> <appinfo><refAction>sexe</refAction></appinfo> </annotation> </xs:complexType> </xs:element> La balise appinfo donne des renseignements supplémentaires Schema XML - M. Baron - Page 36

×