Share
Embed
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
Transcript
37 slides
-
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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