Académique Documents
Professionnel Documents
Culture Documents
2018-2019 XML 1
Objectif
2018-2019 XML 2
Objectif
2018-2019 XML 3
Exemple de schéma XML
<?xml version="1.0"?> <!ELEMENT note (to,from,heading,body)>
<xs:schema <!ELEMENT to (#PCDATA)>
xmlns:xsd="http://www.w3.org/2001/XMLSche <!ELEMENT from (#PCDATA)>
ma"> <!ELEMENT heading (#PCDATA)>
<xsd:element name="note"> <!ELEMENT body (#PCDATA)>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="to" type="xsd:string"/>
<xsd:element name="from"
type="xsd:string"/>
<xsd:element name="heading"
type="xsd:string"/>
<xsd:element name="body"
type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
2018-2019 XML 4
Structure générique
<xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
2018-2019 XML 5
Schéma XML : déclarations d'éléments
2018-2019 XML 6
Déclarations d'éléments
2018-2019 XML 7
Déclarations d'éléments
2018-2019 XML 8
Déclarations d'éléments
2018-2019 XML 9
Déclarations d'éléments : valeur
par défaut (resp. fixe)
2018-2019 XML 10
Déclarations d'éléments sans
référence explicite à un type
2018-2019 XML 11
Schéma XML : définitions de types
2018-2019 XML 12
Définitions de types
2018-2019 XML 13
Définitions de types : les types
prédéfinis
2018-2019 XML 14
2018-2019 XML 15
Nombres et booléens
2018-2019 XML 16
Nombres et booléens
2018-2019 XML 17
Les chaînes de caractères
xsd:ID : nom xml utilisé pour un attribut servant à identifier un élément dans un
document XML
xsd:IDREF : nom XML qui fait référence à une valeur de type xsd:ID existant dans le
document
xsd:IDREFS : liste de noms XML (références à des identifiants) séparés par des
espaces
xsd:NMTOKEN : jeton
xsd:NMTOKENS : liste de jetons séparés par des espaces
2018-2019 XML 18
Les dates et heures
2018-2019 XML 19
Les types simples non-prédéfinis
2018-2019 XML 20
Les types simples non-prédéfinis
<xsd:simpleType name="majeur">
<xsd:restriction base="xsd:unsignedByte">
<xsd:minInclusive value="18"/>
</xsd:restriction>
</xsd:simpleType>
2018-2019 XML 21
Les types complexes
2018-2019 XML 22
Les types complexes
2018-2019 XML 23
Les types complexes
2018-2019 XML 24
Les contenu mixtes
2018-2019 XML 25
Les contenu mixtes
2018-2019 XML 26
Schéma XML : construction de types
simples (non prédéfinis) ou complexes
2018-2019 XML 27
Constructions de
types complexes : élément vide
Un élément (à contenu) vide est considéré comme un type complexe.
Exemple de déclaration :
Schéma DTD
Un élément vide peut éventuellement avoir des attributs : la déclaration d'attributs sera
abordée plus loin
2018-2019 XML 28
Constructions de types
complexes : opérateur de
séquence
Schéma DTD
<xsd:element name="personne"> <!ELEMENT personne
<xsd:complexType> (nom, prénom, âge,
<xsd:sequence> nationalité)>
<xsd:element name="nom"
type="xsd:string"/>
<xsd:element name="prénom"
type="xsd:string"/>
<xsd:element name="âge"
type="xsd:string"/>
<xsd:element name="nationalité"
type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
2018-2019 XML 29
Constructions de types
complexes : opérateur de choix
Schéma DTD
<xsd:element name="couleur"> <!ELEMENT couleur (rouge | bleu |
<xsd:complexType> jaune)>
<xsd:choice>
<xsd:element ref="rouge"/>
<xsd:element ref="bleu"/>
<xsd:element ref="jaune"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
2018-2019 XML 30
Constructions de
types complexes : élément vide
L'attribut ref de l'élément xsd:element permet de faire référence un élément défini uniquement
globalement (i.e., qui est fils de l'élément xsd:schema). Un exemple plus complet est donc le suivant
:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="rouge">
<xsd:complexType/>
</xsd:element>
<xsd:element name="bleu">
<xsd:complexType/>
</xsd:element>
<xsd:element name="jaune">
<xsd:complexType/></xsd:element>
<xsd:element name="couleur">
<xsd:complexType>
<xsd:choice>
<xsd:element ref="rouge"/>
<xsd:element ref="bleu"/>
<xsd:element ref="jaune"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
2018-2019 XML 31
Constructions de types
complexes : opérateur d'ensemble
L'opérateur xsd:all permet de spécifier que chacun des éléments
enfants peut apparaître dans n'importe quel ordre.
<xsd:element name="couleurs">
<xsd:complexType>
<xsd:all>
<xsd:element ref="rouge"/>
<xsd:element ref="bleu" />
<xsd:element ref="jaune"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
2018-2019 XML 32
Constructions de types : opérateur
d'ensemble
Restrictions d'usage :
– xsd:all ne peut pas être le père ou le fils d'un élément
xsd:sequence, xsd:choice ou d'un autre élément xsd:all
– Les indications d'occurrences minOccurs et maxOccurs
apparaissant en attribut de xsd:all ou dans ses fils ne peut
pas avoir n'importe quelle valeur. L'attribut minOccurs (resp.
maxOccurs) vaut forcément 0 ou 1 (resp. forcément 1).
2018-2019 XML 33
Constructions de types : opérateur
d'ensemble
Dans l'exemple de gauche, les fils de l'élément couleurs peuvent
apparaître 0 ou 1 fois dans un ordre quelconque. Dans l'exemple de
droite, les fils de couleurs doivent apparaître exactement 1 fois (sauf
rouge qui peut ne pas apparaître), et ce dans n'importe quel ordre.
<xsd:element name="couleurs"> <xsd:element name="couleurs">
<xsd:complexType> <xsd:complexType>
<xsd:all minOccurs='0'> <xsd:all>
<xsd:element ref="rouge"/> <xsd:element ref="rouge"
<xsd:element ref="bleu"/> minOccurs='0'/>
<xsd:element ref="jaune"/> <xsd:element ref="bleu"/>
</xsd:all> <xsd:element ref="jaune"/>
</xsd:complexType> </xsd:all>
</xsd:element> </xsd:complexType>
</xsd:element>
2018-2019 XML 34
Constructions de types simples (non-
prédéfinis) : opérateur d'union
Le constructeur xsd:union permet de définir un nouveau type simple
via l'union d'autres types simples.
Dans l'exemple ci-dessous, l'élément limite peut avoir comme contenu
un entier, la chaîne +infini ou la chaîne -infini.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="limite" type="EntierOuInfini"/>
<xsd:simpleType name="EntierOuInfini">
<xsd:union memberTypes="xsd:integer Infini"/>
</xsd:simpleType>
<xsd:simpleType name="Infini">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="+infini"/>
<xsd:enumeration value="-infini"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
2018-2019 XML 35
Constructions de types simples :
opérateur d'union
Les types simples composant l'union n'ont pas nécessairement besoin
d'être référencés explicitement via l'attribut memberTypes : dans ce
cas ils doivent être défini directement dans l'élément xsd :union.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="limite" type="EntierOuInfini"/>
<xsd:simpleType name="EntierOuInfini">
<xsd:union memberTypes="xsd:integer">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="+infini"/>
<xsd:enumeration value="-infini"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
</xsd:schema>
2018-2019 XML 36
Constructions de types : opérateur
de liste
L'opérateur xsd:list permet de définir un nouveau type simple qui sera
une liste de valeur dont le type est renseigné via l'attribut itemType de
xsd:list.
Pour limiter la longueur d'une liste, on passera par l'intermédiaire
d'une restriction de type (cf. plus loin).
Schéma Exemple valide
<xsd:schema <intvalues>100 34 56 -23</intvalues>
xmlns:xsd="http://www.w3.org/2001/XMLSchem
a">
<xsd:element name="intvalues"
type="valuelist"/>
<xsd:simpleType name="valuelist">
<xsd:list itemType="xsd:integer"/>
</xsd:simpleType>
</xsd:schema>
2018-2019 XML 37
Les indicateurs d'occurrences.
2018-2019 XML 38
Les répétitions : exemples
Schéma Equivalent DTD
<xsd:element name="items"> <!ELEMENT items (item1, item2+, item3?)>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="item1"/>
<xsd:element ref="item2" minOccurs="1"
maxOccurs="unbounded"/>
<xsd:element ref="item3" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
2018-2019 XML 39
Schéma XML : déclarations d'attributs
2018-2019 XML 40
Déclarations d'attributs
<xsd:attribute name="listeEntiers">
<xsd:attribute name="entier" <xsd:simpleType>
type="xsd:integer"/> <xsd:list itemType="xsd:integer"/>
</xsd:simpleType>
</xsd:attribute>
2018-2019 XML 41
Déclarations d'attributs
2018-2019 XML 42
Déclarations d'attributs
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="Section">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="chapitre" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
2018-2019 XML 43
Déclarations d'attributs
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="Section">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="chapitre" type="xsd:string"/>
</xsd:sequence>
</xsd:schema>
2018-2019 XML 44
Déclarations d'attributs
Via l'attribut use on peut rendre un attribut obligatoire (use= ''required''), optionnel
(use=''optional'') ou interdit (use=''prohibited''). Par défaut, un attribut est optionnel.
L'attribut use ne peut pas apparaître dans un attribut défini globalement.
Les valeurs prohibited et optional sont utilisées principalement lors de restrictions de
type (cf. plus loin).
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="Section">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="chapitre" type="xsd:string"/>
</xsd:sequence>
</xsd:schema>
2018-2019 XML 45
Déclarations d'attributs
A tout attribut, on peut aussi donner une valeur par défaut via l'attribut
default (utile uniquement quand l'attribut est optionnel) ou alors une
valeur fixe via l'attribut fixed (équivalent de #FIXED dans les DTD).
2018-2019 XML 46
Schéma XML : dérivation de types
2018-2019 XML 47
Dérivation de types : extension
Le principe d'une extension de type est de définir un type à partir d'un autre en rajoutant du contenu
et/ou des attributs.
L'extension peut se faire à partir d'un type simple ou complexe. Par contre, le résultat est toujours un
type complexe.
L'opérateur central d'une extension est l'élément xsd:extension : son attribut base spécifie le type à
partir duquel va s'effectuer l'extension. C'est à l'intérieur de l'élément xsd:extension que l'on spécifie
les ajouts par rapport au type désigné par l'attribut base.
Pour étendre un type simple ou un type complexe à contenu simple il faut utiliser la syntaxe
générique de gauche ci-dessous. Dans le cas contraire, il faut utiliser la syntaxe de droite.
2018-2019 XML 48
A partir d'un type simple
2018-2019 XML 49
A partir d'un type prédéfini :
exemple
Schéma XML
<xsd:schema <objet
xmlns:xsd="http://www.w3.org/2001/XMLSchema prix="15.35">chemise</o
"> bjet>
<xsd:complexType name="Objet">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<!-- Attribut ajouté -->
<xsd:attribute name="prix"
type="xsd:decimal"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="objet" type="Objet"/>
</xsd:schema>
2018-2019 XML 50
A partir d'un type complexe à
contenu simple
2018-2019 XML 51
A partir d'un type complexe à
contenu simple : exemple
<?xml version="1.0" encoding="iso-8859-1"?> <!-- Extension du type de base -->
<xsd:schema <xsd:complexType name="ObjetComplexe">
xmlns:xsd="http://www.w3.org/2001/XMLSchema" <xsd:simpleContent>
> <xsd:extension base="Objet">
<!-- Type de base complexe à contenu simple --> <!-- Attribut ajouté au type Objet -->
<xsd:attribute name="matière"
type="xsd:string" use='required'/>
<xsd:complexType name="Objet"> <xsd:attribute name="forme"
<xsd:simpleContent> type="xsd:string"/>
<xsd:extension base="xsd:string"> </xsd:extension>
<!-- Attribut ajouté --> </xsd:simpleContent>
<xsd:attribute name="prix" </xsd:complexType>
type="xsd:decimal"/>
</xsd:extension> <xsd:element name="objet"
</xsd:simpleContent> type="ObjetComplexe"/>
</xsd:complexType>
</xsd:schema>
2018-2019 XML 52
A partir d'un type complexe à
contenu complexe
Etendre un type complexe à contenu complexe revient à ajouter soit
du contenu soit des attributs (ou les deux à la fois).
Le contenu et/ou les attributs supplémentaires doivent simplement
être décrits dans la balise xsd:extension. Dans le type complexe
résultat, le contenu viendra à la suite du contenu de base.
2018-2019 XML 53
A partir d'un type complexe à
contenu complexe : exemple
<xsd:schema <!-- Extension du type complexe de base -->
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="LivrePlus">
<xsd:complexContent>
<xsd:element name="livre" type="LivrePlus"/> <xsd:extension base="Livre">
<!-- Ajout de l'élément contenu qui viendra
<!-- Type complexe de base --> après l'élément titre -->
<xsd:complexType name="Livre"> <xsd:sequence>
<xsd:sequence> <xsd:element name="contenu"
<xsd:element name="titre" type="xsd:string"/> type="xsd:string"/>
</xsd:sequence> </xsd:sequence>
</xsd:complexType> <!-- Ajout de l'attribut nbpage -->
<xsd:attribute name="nbpage"
type="xsd:nonNegativeInteger"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
2018-2019 XML 54
A partir d'un type complexe à
contenu complexe : exemple
(suite)
Ci-dessous, un document xml valide pour le schéma précédent.
<livre nbpage="1">
<titre>N'importe quoi</titre>
<contenu>Vraiment n'importe quoi</contenu>
</livre>
2018-2019 XML 55
Dérivation de types : restriction
2018-2019 XML 56
Dérivation de types : restriction
2018-2019 XML 57
A partir d'un type simple
2018-2019 XML 58
A partir d'un type simple
<xsd:element name="voiture">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Audi"/>
<xsd:enumeration value="Golf"/>
<xsd:enumeration value="BMW"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
2018-2019 XML 59
A partir d'un type simple
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
2018-2019 XML 60
A partir d'un type simple
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="6"/>
<xs:maxLength value="12"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
2018-2019 XML 61
A partir d'un type complexe à
contenu simple
La restriction d'un type complexe à contenu simple peut porter sur le contenu ou/et
sur les attributs.
Le résultat d'une restriction d'un type complexe à contenu simple est toujours un type
complexe à contenu simple.
Le principe est toujours le même : ce qui est valide pour le type restreint à partir d'un
type de base, doit être également valide pour le type de base.
Pour restreindre le contenu, l'élément xsd:restriction doit contenir l'élément fils
xsd:simpleType qui va décrire explicitement le nouveau type du contenu : ce dernier
devra être obtenu via une restriction du type définissant le contenu du type de base.
Pour restreindre un attribut, il faut réécrire sa définition : il peut alors avoir un nouveau
type plus restreint, une option qui devient obligatoire, etc. Cette nouvelle définition est
également un fils de l'élément xsd:restriction et apparaît après l'élément
xsd:simpleType, s'il existe.
Pour garder un attribut inchangé, il suffit de ne pas le mentionner dans la définition du
type restreint.
2018-2019 XML 62
A partir d'un type complexe à
contenu simple : exemple
On change le type de contenu mais on ne touche pas aux attributs
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <chaîne format="blabla">cette chaîne n'est
<!-- Type de base --> pas un spam car elle est longue</chaîne>
<xsd:complexType name="Chaîne">
<xsd:simpleContent>
<xsd:extension base="xsd:string"> <spam format="blabla">un spam</spam>
<xsd:attribute name="format" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="Spam">
<xsd:simpleContent>
<xsd:restriction base="Chaîne">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="25"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:restriction>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="chaîne" type="Chaîne"/>
<xsd:element name="spam" type="Spam"/>
</xsd:schema>
2018-2019 XML 63
A partir d'un type complexe à
contenu simple : exemple
On change le type de contenu et le type des attributs
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <chaîne format="bla bla"> bla bla bla</chaîne>
<!-- Type de base --> <spam format="blabla"> bla bla bla</spam>
<xsd:complexType name="Chaîne">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="format" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="Spam">
<xsd:simpleContent>
<xsd:restriction base="Chaîne">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="25"/>
</xsd:restriction>
</xsd:simpleType>
<!-- réécriture de l'attribut format -->
<xsd:attribute name="format" type="xsd:Name"/>
</xsd:restriction>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="chaîne" type="Chaîne"/>
<xsd:element name="spam" type="Spam"/>
</xsd:schema> 2018-2019 XML 64
On change le type de contenu et le type des attributs
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <chaîne format="bla bla"> bla bla
<!-- Type de base --> bla</chaîne>
<xsd:complexType name="Chaîne"> <spam format="format1"> bla bla
<xsd:simpleContent> bla</spam>
<xsd:extension base="xsd:string">
<xsd:attribute name="format" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="Spam">
<xsd:simpleContent>
<xsd:restriction base="Chaîne">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="25"/>
</xsd:restriction>
</xsd:simpleType>
<!-- réécriture de l'attribut format -->
<xsd:attribute name="format">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="format1"/>
<xsd:enumeration value="format2"/>
<xsd:enumeration value="format3"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:restriction>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="chaîne" type="Chaîne"/>
<xsd:element name="spam"
2018-2019type="Spam"/> XML 65
</xsd:schema>
A partir d'un type complexe à
contenu complexe
Le principe est similaire à celui utilisé pour les types complexes à
contenu simple.
En particulier, quand on veut restreindre un contenu complexe, il faut
décrire explicitement le nouveau contenu : ce dernier doit être un fils
direct de xsd:restriction (et non pas un petit fils comme c'est le cas
dans les types complexes à contenu simple) qui est lui-même un fils
de xsd:complexContent.
Les attributs à modifier sont également fils direct de xsd:restriction et
viennent après la description du nouveau contenu, s'il existe.
Comme d'habitude, un élément valide pour un type restreint devra être
valide pour le type de base ayant servi à faire la restriction.
2018-2019 XML 66
A partir d'un type complexe à
contenu complexe : exemple
<xsd:complexType name="type_A"> <A valeur='-5'><B> bla bla bla</B><B/><B/><B/></A>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="B" type="xsd:string"/> <A2 valeur='8'><B>blabla</B></A2>
<xsd:element name="C" type="xsd:string"/>
<xsd:element name="D" type="xsd:string"/>
</xsd:choice>
<xsd:attribute name="valeur" type="xsd:integer"/>
</xsd:complexType>
<xsd:complexType name="type_A2">
<xsd:complexContent>
<xsd:restriction base="type_A">
<xsd:choice minOccurs="1" maxOccurs="2">
<xsd:element name="B" type="xsd:token"/>
<xsd:element name="D" type="xsd:string"/>
</xsd:choice>
<xsd:attribute name="valeur"
type="xsd:nonNegativeInteger"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
2018-2019 XML 67
Schéma XML : contraintes d'existence et
d'unicité
2018-2019 XML 68
Contraintes d'unicité
On sait appliquer des contraintes d'unicité sur des attributs en utilisant le type
simple xsd:ID.
Via l'opérateur xsd:key on peut appliquer des contraintes d'unicité beaucoup
plus générales (sur les attributs et les éléments).
Au sein d'un schéma XML, l'élément xsd:key est toujours fils d'un élément
xsd:element et est composé :
– d'un élément xsd :selector pour indiquer sur quels éléments porte
la contrainte.
– d'un élément xsd :field pour indiquer ce qui doit être unique.
Pour les deux éléments xsd:selector et xsd:field les informations sont
données via une expression XPath (voir cours suivant).
A haut niveau, xsd:key permet de spécifier ce qui serait équivalent à une
contrainte de clé primaire dans une BD
2018-2019 XML 69
Contraintes d'unicité
<xsd:element name="bibliothèque"
type="Bibliothèque">
<xsd:key name="unicité">
<xsd:selector xpath="livre"/>
<xsd:field xpath="@titre"/>
</xsd:key>
</xsd:element>
2018-2019 XML 70
Contraintes d'unicité
<xsd:element name="bibliothèque">
<xsd:complextype>
…..
</xsd:complextype>
<xsd:key name="unicité">
<xsd:selector xpath="livre"/>
<xsd:field xpath="@titre"/>
</xsd:key>
</xsd:element>
2018-2019 XML 71
Contraintes d'unicité
2018-2019 XML 72
Contraintes d'existence
On a vu que l'élément xsd:key possède un attribut name (qui est obligatoire). Ce dernier sert
principalement à y faire référence via l'élément xsd:keyref qui généralise la fonction qu'ont
les attributs de types IDREF et IDREFS dans les doctypes.
L'élément xsd:keyref possède deux attributs : xsd :name et xsd:ref. Le premier donne le nom
de la contrainte et le second donne le nom de l'élément xsd :key (ou xsd:unique) auquel
xsd:keyref fait référence.
Comme pour xsd:key, l'élément xsd:keyref est composé :
– d'un élément xsd :selector pour indiquer sur quels éléments porte la contrainte.
– d'un ou plusieur élément xsd :field pour indiquer ce qui devra correspondre à une
clé existante (celle renseignée via l'attribut xsd:ref).
A haut niveau, xsd:keyref permet de spécifier ce qui serait équivalent à une contrainte de
clé étrangère dans une BD.
Attention : la contrainte key pointée par l'attribut refer de keyref doit être un descendant
de l'élément dans lequel se trouve ce même keyref.
Comme pour l'élément key, une contrainte de type keyref ne peut apparaître qu'à la fin de
la description d'un élément (i.e., après la description éventuelle de son type).
2018-2019 XML 73
Contraintes d'existence : exemple
<xsd:key name="unicité">
<xsd:selector xpath="livre"/>
<xsd:field xpath="@titre"/>
</xsd:key>
2018-2019 XML 74
Avant de finir : référence à un
schéma XML
Bien que les schémas XML soient écrits avec un langage de type
XML, le fichier n'a pas cette extension. Un fichier dans lequel est écrit
un schéma XML porte l'extension ".xsd".
Pour faire référence à un schéma dans un document XML nous
utiliserons la syntaxe générique suivante :
<?xml version="1.0" encoding="UTF-8"?>
<racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:noNamespaceSchemaLocation="chemin_vers_fichier.xsd">
</racine>
2018-2019 XML 75