1 Schémas XML - cours 2 Éric Laporte Institut Gaspard-Monge Université Paris-Est...

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

Transcript of 1 Schémas XML - cours 2 Éric Laporte Institut Gaspard-Monge Université Paris-Est...

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

1

Schémas XML - cours 2

Éric Laporte

Institut Gaspard-Monge

Université Paris-Est Marne-la-Vallée

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

2

Sommaire

Valider un seul élément 4

Déclarations locales 7

Identifiants et références 13

Modularisation 41

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

3

4. Valider un élément (1/2)

5. Valider un élément (2/2)

6. Schéma pour plusieurs types de documents

7. Contraindre l'élément racine (1/2)

8. Contraindre l'élément racine (2/2)

9. Éléments déclarés en local (1/3)

10. Éléments déclarés en local (2/3)

11. Éléments déclarés en local (3/3)

12. Déclarations locales ou globales

13. Identifiants

14. Déclarer des identifiants

15. Le type simple s:ID (1/2)

16. Le type simple s:ID (2/2)

17. Références à des identifiants (1/2)

18. Références à des identifiants (2/2)

19. Listes de références à des identifiants (1/2)

20. Listes de références à des identifiants (2/2)

21. Identifiants et références

22. s:unique (1/6)

23. s:unique (2/6)

24. s:unique (3/6)

25. s:unique (4/6)

26. s:unique (5/6)

27. s:unique (6/6)

28. Expressions Xpath (1/6)

29. Expressions Xpath (2/6)

30. Expressions Xpath (3/6)

31. Expressions Xpath (4/6)

32. Expressions Xpath (5/6)

33. Expressions Xpath (6/6)

34. s:key

35. Déclarer des références à des identifiants (1/5)

36. Déclarer des références à des identifiants (2/5)

37. Déclarer des références à des identifiants (3/5)

38. Déclarer des références à des identifiants (4/5)

39. Déclarer des références à des identifiants (5/5)

40. s:ID ou s:unique

41. Une grammaire en plusieurs schémas

42. Solution 1 : s:include (1/2)

43. Solution 1 : s:include (2/2)

44. s:include

45. Coexistence de plusieurs espaces de noms

46. Solution 2 : s:import (1/2)

47. Solution 2 : s:import (2/2)

48. s:import

49. Solution 3 : s:any (1/2)

50. Solution 3 : s:any (2/2)

51. Référence à plusieurs schémas XML

52. Espaces de noms acceptés

53. Contrôle de la validation

54. <s:anyAttribute>

55. Schéma d'un document cible sans espace de noms (1/2)

56. Schéma d'un document cible sans espace de noms (2/2)

57. Schémas caméléons

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

4

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>

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

5

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"/>

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

6

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:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" ref="jr:ITEM"/> </s:sequence> </s:complexType> </s:element>(...)

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

7

Contraindre l'élément racine (1/2)

On veut imposer aud:iTunes comme seul élément racine possibleDé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">

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

8

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:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="Track"> <s:complexType> <s:sequence>

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

9

É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:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="Track">

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

10

É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:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="unbounded" name="Track"> <s:complexType> <s:sequence> <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"/>

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

11

É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"/>

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

12

Déclarations locales ou globales

Déclarations localesPlus strict : les éléments ne peuvent être que là où on les a

déclarésPossibilité de surcharge : utiliser le même nom d'élément

pour autre chose ailleurs

Déclarations globalesPlus souple : les éléments peuvent apparaître à la racinePlus de réutilisationPlus lisible : plus faciles à trouver dans le schéma

On peut mélanger

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

13

Identifiants

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

<!--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"/>

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

14

Déclarer des identifiants

Garantir qu'un ensemble de valeurs sont toutes différentesExemple : 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> <td id="la_courneuve___8_mai_1945" headers="station" class="gauche"> <strong>La Courneuve - 8 Mai 1945</strong> </td>

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

15

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>

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

16

Le type simple s:ID (2/2)

Valeurs : obligatoirement des identificateurs sans ":"Ne convient pas pour des identifiants numériques ou

contenant des espaceselement 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> <PLANT family="Ranunculaceae">

<COMMON>Marsh Marigold</COMMON> <BOTANICAL>Caltha palustris</BOTANICAL>

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

17

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> </a> </td>

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

18

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>

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

19

Listesde 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"> <GENUS>Erythronium</GENUS> <SPECIES>americanum</SPECIES>

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

20

Listesde 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:complexType>(...) <s:attribute name="same-name" type="s:IDREFS"/> </s:complexType> </s:element>

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

21

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

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

22

s:unique (1/6)Spécifie que les contenus des COMMON dans un même

CATALOG sont tous différentset 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>

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

23

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>

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

24

s:unique (3/6)

s:selector spécifie les noeuds qui peuvent avoir un identifiant

s:field spécifie les identifiantsSi 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>

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

25

s:unique (4/6)

CATALOG

PLANT

BOTANICALCOMMON

BloodrootSanguinaria Canadensis

PLANT

...

ZONE LIGHT

4Mostly Shady

...

noeud à identifier

identifiant

<s:unique name="common"> <s:selector xpath="jr:PLANT"/> <s:field xpath="jr:COMMON"/> </s:unique>

"domaine"pour l'unicité

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

26

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>

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

27

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

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

28

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

BOTANICALCOMMON

BloodrootSanguinaria Canadensis

ZONE

4

noeud à identifier

identifiant

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

29

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>

PLANT

BOTANICALCOMMON

BloodrootSanguinaria Canadensis

ZONE

4

noeud à identifier

identifiant

CATALOG

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

30

Expressions Xpath (3/6)

Attributs <s:field xpath="@number"/><s:field xpath="attribute::number"/>

PLANT

NAME

BOTANICALCOMMON

BloodrootSanguinaria Canadensis

ZONE

...

LIGHT

4Mostly Shady

noeud à identifier

identifiantnumber="27"

normalized="bloodroot"

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

31

Expressions Xpath (4/6)

<s:field xpath="jr:NAME/jr:COMMON"/>

PLANT

NAME

BOTANICALCOMMON

BloodrootSanguinaria Canadensis

ZONE

...

LIGHT

4Mostly Shady

noeud à identifier

identifiant

number="27"

normalized="bloodroot"

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

32

Expressions Xpath (5/6)

<s:field xpath=".//jr:COMMON"/>

PLANT

NAME

BOTANICALCOMMON

BloodrootSanguinaria Canadensis

ZONE

...

LIGHT

4 Mostly Shady

noeud à identifier

identifiant

number="27"

normalized="bloodroot"

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

33

Expressions Xpath (6/6)

<s:field xpath=".//jr:COMMON/@normalized"/>

PLANT

NAME

BOTANICALCOMMON

BloodrootSanguinaria Canadensis

ZONE

...

LIGHT

4 Mostly Shady

noeud à identifier

identifiant

number="27"

normalized="bloodroot"

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

34

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>

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

35

Déclarerdes 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>

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

36

Déclarerdes 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>

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

37

Déclarerdes références à des identifiants (3/5)

CATALOG

PLANT

BOTANICALCOMMON

Trout Lily Erythroniumamericanum

PLANT

seeAlso

Trout Lily

noeud identifié

identifiant

<s:keyref name="commonRefs" refer="jr:common"> <s:selector xpath="jr:PLANT/jr:seeAlso"/> <s:field xpath="."/> </s:keyref>

"domaine"pour l'unicité

BOTANICAL

Erythroniumamericanum

noeudréférence

référence

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

38

Déclarerdes 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

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

39

Déclarerdes 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

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

40

s:ID ou s:unique

s:IDPlus simpleType prédéfini s:IDREFS

s:unique et s:keyPlus 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

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

41

Une grammaire en plusieurs schémas

Grammaires complexesDocuments complexesNouvelles variantes de projets existants

ObjectifsRépartir une grosse grammaire en plusieurs schémasRéutiliserLaisser un schéma ouvert à une évolution future

3 solutions

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

42

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"/>

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

43

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"/>

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

44

s:include

Un schéma principal coordonne les autresLe schéma principal dépend des autresIl 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

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

45

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

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

46

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 correspondantIl 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>

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

47

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 nomsException : l'espace de noms xml, inutile de le déclarer

<s:attribute ref="xml:lang"/>

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

48

s:import

Un schéma principal coordonne les autresLe schéma principal dépend des autresIl doit être construit et maintenu en tenant compte des autres

Un schéma importé doit avoir un autre espace de noms cibleLe document cible peut contenir des éléments spécifiés dans

le schéma importéCes éléments ont l'espace de noms importé

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

49

Solution 3 : s:any (1/2)

Le document cible fait référence aux deux schémasCelui 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">

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

50

Solution 3 : s:any (2/2)

Le schéma qui s'applique en premier appelle l'autre par s:anys: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>

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

51

Référence à plusieurs schémas XML

On peut faire référence à n schémas indépendantsLa valeur d'attribut contient 2n chaînes séparées par des

espacesLe document cible doit être valide par rapport à chaque

schéma indépendamment

xsi:schemaLocation="espace-de-noms-1 URL-1.xsdespace-de-noms-2URL-2.xsd"

xmlns="espace-de-noms-1" xmlns:en2="espace-de-noms-2">

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

52

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

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

53

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)

<s:any namespace="http://www.w3.org/1999/xhtml" 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

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

54

<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>

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

55

Schéma d'un document ciblesans 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>

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

56

Schéma d'un document ciblesans 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>

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

57

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