Schémas XML - cours 2 Éric Laporte Institut Gaspard-Monge

Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

Le Nom L’adjectif Le verbe Objectif: Orthogram
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
LES NOMBRES PREMIERS ET COMPOSÉS
Ma surprise du Zoo.
[number 1-100].
Qualité du Premier Billot. 2 3 Défauts reliés à labattage.
Vocabulaire 6.2 Français II Bon voyage ! 1.
Licence pro MPCQ : Cours
Additions soustractions
Distance inter-locuteur
1. ami 2. compagnon 3. amant 4. frère 5. père 6. maître 7. éducateur 8
Réseau ATB du CClin Paris-Nord – résultats 2011 LL, 22/11/ Réseau antibiotiques du CClin Paris-Nord : Résultats 2011 Coordination: Dr François LHÉRITEAU.
DTD Sylvain Salvati
Les numéros 70 –
Les numéros
Les identités remarquables
Introduction à XSLT Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée.
1 Cours 5 Introduction aux schémas XML Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée.
Introduction à XSLT - cours 4
Les espaces de nommage XML par Philippe Poulard 1
XML schema Objectifs Valider un doc. XML pour des contraintes syntaxiques Documenter un type de documents XML caractérisé par des contraintes Encadrer.
Sirop de Liège « industriel »
La diapo suivante pour faire des algorithmes (colorier les ampoules …à varier pour éviter le « copiage ») et dénombrer (Entoure dans la bande numérique.
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
1 7 Langues niveaux débutant à avancé. 2 Allemand.
Le Concours de Conaissance II Francais I decembre 2012.
COTE DIVOIRE IMAGES DES ATROCITES COMMISES PAR ALASSANE DRAMANE OUATARA, SORO GUILAUMES ET LEURS HOMMES 1.
ORTH 1 CE2 Je sais écrire sans erreur les pluriels des noms se terminant par s, x, z.
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
SERABEC Simulation sauvetage aérien avec un Hercule C130. Départ de St-Honoré le 4 octobre Durée de vol 3 heures. Premier vol en Hercule pour les.
1 5 octobre 2011 / paw Présentation du 7 octobre 2011.
Le Concours de Conaissance III Francais I fevrier 2013.
1 Cours numéro 3 Graphes et informatique Définitions Exemple de modélisation Utilisation de ce document strictement réservée aux étudiants de l IFSIC.
Écrit, animé et illustré par Sheila CartwrightTraduit par
Le soccer & les turbans Sondage mené par lAssociation détudes canadiennes 14 juin 2013.
1 Choisir une catégorie. Vous recevrez la réponse, vous devez donner la question. Cliquez pour commencer.
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
GRAM 1 CE2 Je sais transformer une phrase affirmative en phrase négative.
Le Concours de Conaissance Francais I novembre 2012.
Si le Diaporama ne s'ouvre pas en plein écran Faites F5 sur votre clavier.
Titre : Implémentation des éléments finis sous Matlab
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
LES NOMBRES PREMIERS ET COMPOSÉS
Comment rendre une femme heureuse…
Logiciel gratuit à télécharger à cette adresse :
1 INETOP
RACINES CARREES Définition Développer avec la distributivité Produit 1
Représentation des systèmes dynamiques dans l’espace d’état
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
1 Licence dinformatique Algorithmique des graphes Problèmes dordonnancement. Utilisation de ce document strictement réservée aux étudiants de l IFSIC dans.
Année universitaire Réalisé par: Dr. Aymen Ayari Cours Réseaux étendus LATRI 3 1.
1 10 pt 15 pt 20 pt 25 pt 5 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Les fonctions.
Titre : Implémentation des éléments finis en Matlab
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1 INETOP
Aire d’une figure par encadrement
Comment rendre une femme heureuse…
P.A. MARQUES S.A.S Z.I. de la Moussière F DROUE Tél.: + 33 (0) Fax + 33 (0)
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Formation des commissaires sportifs
Nom:____________ Prénom: ___________
Exercice de vérification 1 p
Commission paritaire de suivi des opérations de reclassement repositionnement dans le cadre du droit d’option Statistiques novembre 2010.
Les Chiffres Prêts?
1 Schémas XML - cours 1 Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée.
Modélisation des documents: DTD et Schéma
Transcription de la présentation:

Schémas XML - cours 2 Éric Laporte Institut Gaspard-Monge Université Paris-Est Marne-la-Vallée

Sommaire Valider un seul élément 4 Déclarations locales 7 Identifiants et références 13 Modularisation 41

Valider un élément (1/2) Valider un élément (2/2) Schéma pour plusieurs types de documents Contraindre l'élément racine (1/2) Contraindre l'élément racine (2/2) Éléments déclarés en local (1/3) Éléments déclarés en local (2/3) Éléments déclarés en local (3/3) Déclarations locales ou globales Identifiants Déclarer des identifiants Le type simple s:ID (1/2) Le type simple s:ID (2/2) Références à des identifiants (1/2) Références à des identifiants (2/2) Listes de références à des identifiants (1/2) Listes de références à des identifiants (2/2) Identifiants et références s:unique (1/6) s:unique (2/6) s:unique (3/6) s:unique (4/6) s:unique (5/6) s:unique (6/6) Expressions Xpath (1/6) Expressions Xpath (2/6) Expressions Xpath (3/6) Expressions Xpath (4/6) Expressions Xpath (5/6) Expressions Xpath (6/6) s:key Déclarer des références à des identifiants (1/5) Déclarer des références à des identifiants (2/5) Déclarer des références à des identifiants (3/5) Déclarer des références à des identifiants (4/5) Déclarer des références à des identifiants (5/5) s:ID ou s:unique Une grammaire en plusieurs schémas Solution 1 : s:include (1/2) Solution 1 : s:include (2/2) s:include Coexistence de plusieurs espaces de noms Solution 2 : s:import (1/2) Solution 2 : s:import (2/2) s:import Solution 3 : s:any (1/2) Solution 3 : s:any (2/2) Référence à plusieurs schémas XML Espaces de noms acceptés Contrôle de la validation <s:anyAttribute> Schéma d'un document cible sans espace de noms (1/2) Schéma d'un document cible sans espace de noms (2/2) Schémas caméléons

Valider un élément (1/2) On peut valider un document contenant seulement un élément Il suffit qu'il ait été déclaré en global dans le schéma <?xml version="1.0" encoding="utf-8"?> <Track xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://igm.univ-mlv.fr/~laporte/audio http://igm.univ-mlv.fr/~laporte/xml/schema/collectionGenres.xsd" xmlns="http://igm.univ-mlv.fr/~laporte/audio"> <Track_ID>37</Track_ID> <Name>American Beauty - Theme</Name> <Artist>Air</Artist> <Album>american beauty soundtrack</Album>

Valider un élément (2/2) L'élément Track a été déclaré en global <?xml version="1.0" encoding="UTF-8"?> <!-- collectionGenres.xsd --> <s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio"> <s:element name="Tracks"> (...) </s:element> <s:element name="Track"> <s:complexType> <s:sequence> <s:element ref="aud:Track_ID"/>

Schéma pour plusieurs types de documents Un schéma unique pour plusieurs types de documents <s:element name="CATALOG"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" ref="jr:PLANT"/> </s:sequence> </s:complexType> </s:element> <s:element name="INVOICE"> <s:element minOccurs="0" maxOccurs="unbounded" ref="jr:ITEM"/> (...)

Contraindre l'élément racine (1/2) On veut imposer aud:iTunes comme seul élément racine possible Déclarer tous les autres éléments en local <?xml version="1.0" encoding="UTF-8"?> <!-- imposer-racine.xsd --> <s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio" elementFormDefault="qualified"> <s:element name="iTunes"> <s:complexType> <s:sequence> <s:element name="Major_Version" type="s:integer"/> <s:element name="Minor_Version" type="s:integer"/> <s:element name="Application_Version" type="s:decimal"/> <s:element name="Music_Folder" type="s:string"/> <s:element name="Library_Persistent_ID" type="s:NCName"/> <s:element name="Tracks">

Contraindre l'élément racine (2/2) Déclarer un élément en local : à l'intérieur de la spécification du type dont il fait partie <s:element name="iTunes"> <s:complexType> <s:sequence> <s:element name="Major_Version" type="s:integer"/> <s:element name="Minor_Version" type="s:integer"/> <s:element name="Application_Version" type="s:decimal"/> <s:element name="Music_Folder" type="s:string"/> <s:element name="Library_Persistent_ID" type="s:NCName"/> <s:element name="Tracks"> <s:element minOccurs="0" maxOccurs="unbounded" name="Track">

Éléments déclarés en local (1/3) Si l'élément est utilisé dans plusieurs contextes, il faut le déclarer plusieurs fois Cela peut être avec des types différents <s:element name="iTunes"> <s:complexType> <s:sequence> <s:element name="Major_Version" type="s:integer"/> (...) <s:element name="Tracks"> <s:element minOccurs="0" maxOccurs="unbounded" name="Track">

Éléments déclarés en local (2/3) Si tous les éléments sont déclarés en local, sauf l'élément racine : schéma en poupées russes <s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio" elementFormDefault="qualified"> <s:element name="iTunes"> <s:complexType> <s:sequence> <s:element name="Major_Version" type="s:integer"/> <s:element name="Minor_Version" type="s:integer"/> <s:element name="Application_Version" type="s:decimal"/> <s:element name="Music_Folder" type="s:string"/> <s:element name="Library_Persistent_ID" type="s:NCName"/> <s:element name="Tracks"> <s:element minOccurs="0" maxOccurs="unbounded" name="Track"> <s:element name="Track_ID" type="s:integer"/> <s:element name="Name" type="s:token"/> <s:element name="Artist" type="s:token"/> <s:element minOccurs="0" name="Composer" type="s:token"/> <s:element minOccurs="0" name="Album" type="s:token"/> <s:element minOccurs="0" name="Genre"> <s:simpleType> <s:restriction base="s:token"> <s:enumeration value="Pop"/> <s:enumeration value="Rock"/> <s:enumeration value="Rock/Pop"/> <s:enumeration value="Rap"/>

Éléments déclarés en local (3/3) Pour qu'ils aient l'espace de noms cible, déclarer elementFormDefault="qualified" à la racine ou form="qualified" dans chaque déclaration Sinon, ils n'ont pas d'espace de noms (mauvaise pratique) <?xml version="1.0" encoding="UTF-8"?> <!-- imposer-racine.xsd --> <s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio" elementFormDefault="qualified"> <s:element name="iTunes"> <s:complexType> <s:sequence> <s:element name="Major_Version" type="s:integer"/>

Déclarations locales ou globales Plus strict : les éléments ne peuvent être que là où on les a déclarés Possibilité de surcharge : utiliser le même nom d'élément pour autre chose ailleurs Déclarations globales Plus souple : les éléments peuvent apparaître à la racine Plus de réutilisation Plus lisible : plus faciles à trouver dans le schéma On peut mélanger

Identifiants <!--ligne7.xml --> <td id="crimee" headers="station" class="gauche">Crimée</td> <td headers="pre_dep_sem crimee" class="espace">5:31</td> <td headers="pre_dep_sem crimee">5:37</td> <td headers="pre_dep_sem crimee">5:41</td> <td headers="der_dep_sem crimee" class="espace_2">0:34</td> <td headers="der_dep_sem crimee">0:36</td> <td headers="der_dep_we crimee" class="der_dep_we debut_der_dep_we">1:37*</td> <td headers="der_dep_we crimee" class="der_dep_we fin_der_dep_we"/> Quand le même objet figure plusieurs fois dans un document, cela complique toute modification de l'objet Conserver une seule représentation de l'objet, avec un identifiant, et remplacer les autres par l'identifiant

Déclarer des identifiants Garantir qu'un ensemble de valeurs sont toutes différentes Exemple : dans ligne7.xml, l'attribut id de td <tbody> <tr class="impair"> <td class="f"> <span/> </td> <td class="carte"> <a href="http://www.ratp.info/Proxi/proxi.php" onclick="proxi('605434;2435848'); return false;"> <img src="horaires_metro7.php_fichiers/picto_carte.gif" alt="Plan de quartier"/> </a> <td id="la_courneuve___8_mai_1945" headers="station" class="gauche"> <strong>La Courneuve - 8 Mai 1945</strong>

Le type simple s:ID (1/2) Les s:ID déclarés s:ID d'un document doivent être tous différents Mécanisme issu des DTD <s:element name="td"> <s:complexType mixed="true"> <s:sequence> <s:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/> </s:sequence> <s:attribute name="id" type="s:ID"/> <s:attribute name="class" type="s:token"/> <s:attribute name="headers" type="s:token"/> </s:complexType> </s:element>

Le type simple s:ID (2/2) Valeurs : obligatoirement des identificateurs sans ":" Ne convient pas pour des identifiants numériques ou contenant des espaces element content failed type check: Marsh Marigold does not match pattern [_:A-Za-zÀ-ÖØ-öø-ÿĀ-... <PLANT family="Ranunculaceae"> <COMMON>Columbine</COMMON> <BOTANICAL>Aquilegia canadensis</BOTANICAL> <ZONE>3</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE unit="dollar">9.37</PRICE> <AVAILABILITY>030699</AVAILABILITY> </PLANT> <COMMON>Marsh Marigold</COMMON> <BOTANICAL>Caltha palustris</BOTANICAL>

Références à des identifiants (1/2) Garantir qu'un identificateur est identique à un des identifiants déclarés s:ID Exemple : dans ligne7ref.xml, l'attribut name de a <td class="carte"> <a href="http://www.ratp.info/Proxi/proxi.php" onclick="proxi('605434;2435848'); return false;"> <img src="horaires_metro7.php_fichiers/picto_carte.gif" alt="Plan de quartier"/> </a> </td> <td id="la_courneuve___8_mai_1945" headers="station" class="gauche"> <a name="la_courneuve___8_mai_1945"> <strong>La Courneuve - 8 Mai 1945</strong>

Références à des identifiants (2/2) Spécifie que chaque identificateur déclaré s:IDREF est identique à un des identifiants déclarés s:ID <s:element name="a"> <s:complexType> <s:sequence> <s:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/> </s:sequence> <s:attribute name="name" type="s:IDREF"/> <s:attribute name="href" type="s:token"/> <s:attribute name="onclick" type="s:token"/> </s:complexType> </s:element>

Listes de références à des identifiants (1/2) Références aux plantes de même nom scientifique <PLANT id="p16"> <COMMON>Violet, Dog-Tooth</COMMON> <BOTANICAL same-name="p17 p18"> <GENUS>Erythronium</GENUS> <SPECIES>americanum</SPECIES> </BOTANICAL> (...) </PLANT> <PLANT id="p17"> <COMMON>Trout Lily</COMMON> <BOTANICAL same-name="p16 p18">

Listes de références à des identifiants (2/2) s:IDREFS : liste de références séparées par des espaces <s:element name="PLANT"> <s:complexType> (...) <s:attribute name="id" type="s:ID"/> </s:complexType> </s:element> <s:element name="BOTANICAL"> <s:attribute name="same-name" type="s:IDREFS"/>

Identifiants et références s:ID, s:IDREF, s:IDREFS spécifient à la fois - la forme des identifiants - les propriétés d'unicité Les schémas XML permettent de séparer les deux questions Ils proposent un nouveau mécanisme qui couvre uniquement les propriétés d'unicité La forme des identifiants est déjà couverte par les types simples

s:unique (1/6) Spécifie que les contenus des COMMON dans un même CATALOG sont tous différents et que chaque noeud PLANT en contient au plus un <s:element name="CATALOG"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" ref="jr:PLANT"/> </s:sequence> </s:complexType> <s:unique name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:COMMON"/> </s:unique> </s:element>

s:unique (2/6) N'importe quel type de chaîne de caractères peut servir d'identifiant La déclaration s:unique est rattachée à la déclaration de l'élément CATALOG S'il y a plusieurs CATALOG, il y a plusieurs "domaines" à l'intérieur desquels les identifiants sont tous différents <s:element name="CATALOG"> <s:complexType> (...) </s:complexType> <s:unique name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:COMMON"/> </s:unique> </s:element>

s:unique (3/6) s:selector spécifie les noeuds qui peuvent avoir un identifiant s:field spécifie les identifiants Si on oublie l'espace de noms, il n'y a pas de message d'erreur : <s:field xpath="PLANT"/> Le validateur ne trouve aucun noeud, et donc ne vérifie aucune contrainte <s:element name="CATALOG"> (...) <s:unique name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:COMMON"/> </s:unique> </s:element>

s:unique (4/6) "domaine" pour l'unicité ... noeud à identifier ... CATALOG ... PLANT PLANT noeud à identifier ... COMMON BOTANICAL ZONE LIGHT Bloodroot 4 Sanguinaria Canadensis Mostly Shady identifiant <s:unique name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:COMMON"/> </s:unique>

s:unique (5/6) L'évaluation de s:field xpath doit donner une valeur unique, qui est convertie en chaîne de caractères Expressions Xpath (langage normalisé par le W3C aussi) <s:unique name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:COMMON"/> </s:unique>

s:unique (6/6) S'il y a plusieurs s:field, l'identifiant est le n-uplet des chaînes de caractères correspondantes <s:element name="CATALOG"> (...) <s:unique name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:BOTANICAL"/> <s:field xpath="jr:PRICE"/> </s:unique> </s:element> Spécifie qu'il n'y a pas deux entrées avec à la fois le même nom scientifique et le même prix

Expressions Xpath (1/6) Dans s:selector et s:field, xpath contient une expression Xpath Langage normalisé par le W3C aussi <s:unique name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:COMMON"/> </s:unique> PLANT noeud à identifier COMMON BOTANICAL ZONE Bloodroot 4 Sanguinaria Canadensis identifiant

Expressions Xpath (2/6) Autres expressions Xpath utilisables dans s:unique <s:unique name="common"> <s:selector xpath="jr:PLANT/jr:COMMON"/> <s:field xpath="."/> </s:unique> CATALOG PLANT COMMON BOTANICAL ZONE noeud à identifier Bloodroot 4 Sanguinaria Canadensis identifiant

Expressions Xpath (3/6) Attributs <s:field xpath="@number"/> <s:field xpath="attribute::number"/> ... PLANT noeud à identifier number="27" NAME ZONE LIGHT identifiant COMMON BOTANICAL 4 Mostly Shady normalized= "bloodroot" Bloodroot Sanguinaria Canadensis

Expressions Xpath (4/6) <s:field xpath="jr:NAME/jr:COMMON"/> noeud à identifier PLANT ... number="27" NAME ZONE LIGHT COMMON BOTANICAL 4 Mostly Shady normalized= "bloodroot" Bloodroot Sanguinaria Canadensis identifiant

Expressions Xpath (5/6) <s:field xpath=".//jr:COMMON"/> noeud à identifier PLANT ... number="27" NAME ZONE LIGHT COMMON BOTANICAL 4 Mostly Shady normalized= "bloodroot" Bloodroot Sanguinaria Canadensis identifiant

Expressions Xpath (6/6) <s:field xpath=".//jr:COMMON/@normalized"/> noeud à identifier PLANT ... number="27" NAME ZONE LIGHT COMMON BOTANICAL 4 Mostly Shady normalized= "bloodroot" Bloodroot Sanguinaria Canadensis identifiant

s:key Comme <s:unique> mais spécifie que - les contenus des COMMON présents dans un même CATALOG sont tous distincts - chaque noeud PLANT en contient un et un seul <s:key name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:COMMON"/> </s:key>

Déclarer des références à des identifiants (1/5) Garantir qu'un identificateur est identique à un des identifiants déclarés par s:unique ou s:key Exemple : références aux plantes de même nom scientifique <PLANT id="16"> <COMMON>Violet, Dog-Tooth</COMMON> <BOTANICAL> <GENUS>Erythronium</GENUS> <SPECIES>americanum</SPECIES> </BOTANICAL> (...) <seeAlso>Trout Lily</seeAlso> <seeAlso>Adder's-Tongue</seeAlso> </PLANT> <PLANT id="17"> <COMMON>Trout Lily</COMMON>

Déclarer des références à des identifiants (2/5) Spécifie que le contenu de chaque seeAlso est identique à un des identifiants (même valeur et même type) et que chaque seeAlso en contient au plus un (inutile ici) <s:element name="CATALOG"> <s:complexType> (...) </s:complexType> <s:key name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:COMMON"/> </s:key> <s:keyref name="commonRefs" refer="jr:common"> <s:selector xpath="jr:PLANT/jr:seeAlso"/> <s:field xpath="."/> </s:keyref> </s:element>

Déclarer des références à des identifiants (3/5) "domaine" pour l'unicité CATALOG PLANT PLANT noeud identifié noeud référence BOTANICAL seeAlso COMMON BOTANICAL Erythronium americanum Trout Lily Trout Lily Erythronium americanum référence identifiant <s:keyref name="commonRefs" refer="jr:common"> <s:selector xpath="jr:PLANT/jr:seeAlso"/> <s:field xpath="."/> </s:keyref>

Déclarer des références à des identifiants (4/5) s:keyref fait référence à une déclaration s:unique ou s:key <s:element name="CATALOG"> (...) <s:key name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:COMMON"/> </s:key> <s:keyref name="commonRefs" refer="jr:common"> <s:selector xpath="jr:PLANT/jr:seeAlso"/> <s:field xpath="."/> </s:keyref> </s:element> On peut avoir plusieurs références au même identifiant Les noeuds du s:selector du s:keyref peuvent ne contenir aucune référence

Déclarer des références à des identifiants (5/5) L'élément auquel on attache s:keyref doit être soit l'élément auquel on a attaché s:unique ou s:key, soit un ancêtre de cet élément Si on attache s:keyref à un ancêtre, cela renforce la contrainte d'unicité : pour les références présentes, les identifiants doivent être uniques sur l'ensemble des domaines du s:unique ou du s:key, et non sur chaque domaine séparément

s:ID ou s:unique s:ID Plus simple Type prédéfini s:IDREFS s:unique et s:key Plus puissant : - Type des identifiants libre, y compris numéros et n-uplets - La portée de l'unicité n'est pas nécessairement tout le document - Plusieurs jeux d'identifiants possibles pour un même document

Une grammaire en plusieurs schémas Grammaires complexes Documents complexes Nouvelles variantes de projets existants Objectifs Répartir une grosse grammaire en plusieurs schémas Réutiliser Laisser un schéma ouvert à une évolution future 3 solutions

Solution 1 : s:include (1/2) <s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio"> <s:include schemaLocation="audio-piste.xsd"/> <s:element name="iTunes"> <s:complexType> <s:sequence> <s:element ref="aud:Major_Version"/> <s:element ref="aud:Minor_Version"/> <s:element ref="aud:Application_Version"/> <s:element ref="aud:Music_Folder"/> <s:element ref="aud:Library_Persistent_ID"/>

Solution 1 : s:include (2/2) <?xml version="1.0" encoding="UTF-8"?> <!-- audio-piste.xsd --> <s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/audio" xmlns:aud="http://igm.univ-mlv.fr/~laporte/audio"> <s:element name="Track"> <s:complexType> <s:sequence> <s:element ref="aud:Track_ID"/> <s:element ref="aud:Name"/> <s:element ref="aud:Artist"/> <s:element minOccurs="0" ref="aud:Composer"/>

s:include Un schéma principal coordonne les autres Le schéma principal dépend des autres Il doit être construit et maintenu en tenant compte des autres Les modules inclus doivent avoir le même espace de noms cible Dans chaque module, répéter les déclarations

Coexistence de plusieurs espaces de noms Insérer des parties en XHTML dans le catalogue de plantes <PLANT family="Ranunculaceae"> <COMMON>Anemone</COMMON> ... <AVAILABILITY>122698</AVAILABILITY> <xh:div> <xh:img src="http://.../images/chargimages/121.jpg" alt="Anemone blanda"/> Bulbe rustique de la famille des renonculacées<xh:br/><xh:br/> FEUILLAGE : Feuilles très lobées vert foncé semi érigées<xh:br/> Le document a deux espaces de noms et deux schémas

Solution 2 : s:import (1/2) L'espace de noms principal du document est celui de l'élément racine Le schéma principal est le schéma correspondant Il importe les autres schémas <?xml version="1.0" encoding="UTF-8"?> <!-- plusieursEN.xsd --> <s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://igm.univ-mlv.fr/~laporte/jardinerie" xmlns:jr="http://igm.univ-mlv.fr/~laporte/jardinerie" xmlns:xh="http://www.w3.org/1999/xhtml"> <s:import namespace="http://www.w3.org/1999/xhtml" schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd"/> <s:element name="CATALOG"> <s:complexType>

Solution 2 : s:import (2/2) <s:element name="PLANT"> <s:complexType> <s:sequence> <s:element ref="jr:COMMON"/> (...) <s:element ref="jr:AVAILABILITY"/> <s:element ref="xh:div" minOccurs="0"/> </s:sequence> <s:attribute name="family" type="s:NCName"/> </s:complexType> </s:element> Déclarer des préfixes pour les espaces de noms Exception : l'espace de noms xml, inutile de le déclarer <s:attribute ref="xml:lang"/>

s:import Un schéma principal coordonne les autres Le schéma principal dépend des autres Il doit être construit et maintenu en tenant compte des autres Un schéma importé doit avoir un autre espace de noms cible Le document cible peut contenir des éléments spécifiés dans le schéma importé Ces éléments ont l'espace de noms importé

Solution 3 : s:any (1/2) Le document cible fait référence aux deux schémas Celui qui correspond à l'élément racine et à son espace de noms s'applique en premier <?xml version="1.0" encoding="ISO-8859-1"?> <!-- plantCatalogTextAny.xml --> <CATALOG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://igm.univ-mlv.fr/~laporte/jardinerie http://igm.univ-mlv.fr/~laporte/xml/schema/plusieursEN-any.xsd http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd" xmlns="http://igm.univ-mlv.fr/~laporte/jardinerie" xmlns:xh="http://www.w3.org/1999/xhtml"> <PLANT family="Papaveraceae">

Solution 3 : s:any (2/2) Le schéma qui s'applique en premier appelle l'autre par s:any s:any ne spécifie pas quel élément peut apparaître <s:element name="PLANT"> <s:complexType> <s:sequence> <s:element ref="jr:COMMON"/> (...) <s:element ref="jr:AVAILABILITY"/> <s:any namespace="http://www.w3.org/1999/xhtml" minOccurs="0"/> </s:sequence> <s:attribute name="family" type="s:NCName"/> </s:complexType> </s:element>

Référence à plusieurs schémas XML On peut faire référence à n schémas indépendants La valeur d'attribut contient 2n chaînes séparées par des espaces Le document cible doit être valide par rapport à chaque schéma indépendamment xsi:schemaLocation="espace-de-noms-1 URL-1.xsd espace-de-noms-2 URL-2.xsd" xmlns="espace-de-noms-1" xmlns:en2="espace-de-noms-2">

Espaces de noms acceptés <s:any namespace="http://www.w3.org/1999/xhtml"/> Le validateur accepte un espace de noms spécifique <s:any namespace="##any"/> ou <s:any/> Le validateur accepte n'importe quel espace de noms (défaut) <s:any namespace="##other"/> Le validateur accepte tout espace de noms autre que l'espace de noms cible, et valide par rapport au schéma correspondant

Contrôle de la validation <s:any namespace="http://www.w3.org/1999/xhtml" process-contents="strict"/> Le validateur vérifie la validité par rapport au schéma (défaut) process-contents="lax"/> Le validateur vérifie la validité seulement si le schéma correspondant à l'espace de noms est disponible <s:any process-contents="skip"/> Le validateur saute cette partie

<s:anyAttribute> Permettre n'importe quels attributs <s:element name="PLANT"> <s:complexType> <s:sequence> <s:element ref="jr:COMMON"/> (...) <s:element ref="jr:AVAILABILITY"/> </s:sequence> <s:anyAttribute processContents="skip"/> </s:complexType> </s:element>

Schéma d'un document cible sans espace de noms (1/2) L'élément racine du document cible n'a pas d'espace de noms Le schéma ne peut valider que des documents sans espace de noms ("schéma caméléon") Ce n'est pas une bonne pratique <?xml version="1.0" encoding="ISO-8859-1"?> <Tracks> <Track> <?xml version="1.0" encoding="UTF-8"?> <!-- collection-chameleon.xsd --> <s:schema xmlns:s="http://www.w3.org/2001/XMLSchema"> <s:element name="Tracks"> <s:complexType>

Schéma d'un document cible sans espace de noms (2/2) Le document cible peut faire référence au schéma <?xml version="1.0" encoding="utf-8"?> <Tracks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://igm.univ-mlv.fr/~laporte/xml/schema/collection-chameleon.xsd"> <Track>

Schémas caméléons Les schémas inclus (s:include) doivent avoir le même espace de noms cible que le schéma principal Si le schéma inclus n'a pas d'espace de noms cible, les noms déclarés dedans passent automatiquement dans l'espace de noms cible du schéma principal