Langages de description et modélisation Mickaël BARON – 2009 (Rév. Août 2009) mailto:[email protected] ou mailto:[email protected] Schema XML
May 25, 2015
Langages de description et modélisation
Mickaël BARON – 2009 (Rév. Août 2009)mailto:[email protected] ou mailto:[email protected]
Schema XML
2Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
Creative Commons
Contrat Paternité
Partage des Conditions Initiales à l'Identique
2.0 France
http://creativecommons.org/licenses/by-sa/2.0/fr
Licence
3Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comOrganisation 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
4Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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, …)
5Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comSchema 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
6Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comSchema 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/InfoP ersoSchema"xmlns:tns="http://mbaron.developpez.com/InfoPersoSc hema" 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" minOccu rs="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
7Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comSchema 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
8Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comSchema 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-instanc e" xsi:schemaLocation="http://mbaron.developpez.com/In foPersoSchema 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-instanc e" xsi:schemaLocation="http://mbaron.developpez.com/In foPersoSchema 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
nomL’âge ne doit pas dépasser 100
L’adresse ne contient pas le caractère @
Instance XML qui ne respecte pas le Schema XML
9Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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
10Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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/InfoP ersoSchema"xmlns:as="http://mbaron.developpez.com/InfoPersoSch ema"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
11Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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/Prefi xedInfoPersoSchema"xmlns:tns="http://keulkeul.blogspot.com/PrefixedInf oPersoSchema"
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
12Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comSchema 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/InfoPersoSc hema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc e"
xsi:schemaLocation="http://mbaron.developpez.com/In foPersoSchema 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}"
13Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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 simpleset 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
14Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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 namede type string
Du côté XML, la balise firstName contient un corps avec une valeur de type chaîne de caractères
15Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comTypes 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, …
16Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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
17Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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 remarkde type string et qui est optionnel<child remark="He's too much" ... />
Du côté XML, la balise child contient un attribut remarkde type string
Précise le caractère obligatoire (required ou optional)
18Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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
19Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comTypes 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
20Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comTypes 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, …)
21Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comTypes 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
22Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comTypes 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/Prefi xedInfoPersoSchema"xmlns:tns="http://keulkeul.blogspot.com/PrefixedInf oPersoSchema"
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
23Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comTypes 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
24Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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>
25Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.comTypes 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="homm e" />
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>
26Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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:ch ild>
La balise childcontient 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
27Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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>
28Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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 personcontient 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)
29Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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 personcontient 4 éléments utilisables dans
n'importe quel ordre
30Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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é
31Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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" max Occurs="unbounded"/><element name="firstName" type="string" /><element name="old" type="tns:ageType" minOccurs="0" /><element name="email" type="tns:ageType" />
</sequence></complexType>
</element>
32Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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
33Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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>BabyMonitor</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
34Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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 USAddresspropose une extension avec deux nouveaux sous éléments en séquence
35Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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
36Schema XML - M. Baron - Page
keul
keul
.blo
gspo
t.com
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'enf ant</documentation><appinfo><refAction>other</refAction></appinfo>
</annotation></attribute><attribute name="old" type="tns:ageTypeChild">
<annotation><documentation>Age de l'enfant compris entre 1 et 5 0 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