Sie sind auf Seite 1von 74

Module D229

Gestion de l'information multimédia


Introduction à XML

1 - Quelques définitions
2 - Balises, éléments, entités
3 - Définition de Type de Document (DTD)
4 - Espace de noms, HTML dans XML, XML dans HTML
5 - Mise en page : CSS
6 - Mise en page : XSL
7 - Chemins et liens XML : XPath, XPointer, XLink
8 - XML et bases de données

Bibliographie

Gérard-Michel Cochard

cochard@u-picardie.fr
Introduction à XML
date de dernière mise à jour : 19 octobre 2002

Quelques définitions

SGML

SGML (Standard Generalized Markup Language) est un métalangage dont l'objectif est la description de
langages utilisant des balises (par exemple HTML est un langage Markup). SGML a été inventé pour afficher
un document quelle que soit la plate-forme de lecture. SGML prévoit qu'un document possède une structure
définie par un fichier spécifique appelé DTD (Définition de Type de Document ou Document Type
Definition). Dans un langage décrit par SGML, il faut donc produire

1) le document (dont la structure est décrite par des balises)

2) la DTD (qui définit les balises)

ce qui peut représenter un mode opératoire assez lourd.

Pour plus d'informations consulter : http://www.oasis-open.org/cover/general.html

HTML

HTML, inventé par Tim Berners Lee, est basé sur une DTD particulière, comprise par les navigateurs et
qu'il n'est pas besoin de transmettre. HTLM est un langage de présentation de document multimédia ayant
une double fonctionnalité :

● définition de la structure du document (par exemple balise <p>)


● mise en page du document (par exemple balise <font>)

HTML utilise un certain nombre de balises prédéfinies, bien connues des développeurs sur Internet.

XML
XML (Extensible Markup Language) est une
simplification de SGML. C'est donc toujours un
métalangage et il peut décrire HTML par exemple. Son
objectif essentiel, comme celui de SGML, est la
description de la structure d'un document.

Un document XML est un document créé avec les spécifications de XML. Il possède des balises qui sont
décrites dans une DTD. Il n'y a donc plus, comme dans HTML, des balises prédéfinies : XML créé des
balises à volonté.
La mise en page n'est( pas du ressort de XML ; elle est définie par des fichiers annexes : CSS ou XSL.

Documentation : http://www.w3.org/XML/ ; www.w3schools.com/xml/default.asp

Document valide

Il s'agit d'un document utilisant des balises définies dans une DTD.

Document bien formé

Il s'agit d'un document HTML compatible avec XML, c'est à dire respectant un certain nombre de règles
dont les principales sont :

● l'imbrication des balises : le début et la fin d'une balise ne peut être que dans une zone limitée par
le début et la fin d'une autre balise.

mauvais exemple (mal formé)


bon exemple (bien formé)
<body><p>..........
............................. <body><p>..............
</body></p> .................................
</p></body>

● les noms de balise doivent respecter la casse

<coucou>.......................</Coucou> ne respecte pas la casse car la balise de début et la balise de


fin n'ont pas la même écriture.

En règle générale, depuis quelque temps, toutes les balises de XML doivent être formulées en
minuscules.

● Les noms de balise peuvent contenir des lettres, des chiffres, des "soulignés", des ":". Comme on le
verra plus loin, le ":" est utilisé dans le cas des espaces de noms. Les noms de balise ne peuvent
commencer par xml, XML. Le nom d'une balise ne peut commencer par un chiffre.

● toutes les balises doivent être fermées.

Les balises qui n'ont pas de "fin" doivent être terminées par un "/". Ainsi la balise de HTML
qui définit l'affichage d'une image doit être formulée comme suit :

<img ............................................................................ />

● Le balises peuvent comporter des attributs (c'est à dire des propriétés). Un attribut est défini sou
la forme xyz = "tratala" ; tous les attributs doivent être définis entre guillemets (comme
"tralala")..Ils doivent obéir aux règles concernant les noms de balise.

A noter qu'un document bien formé peut ne pas être valide s'il n'y a pas de DTD associée.

XHTML

Ce sigle désigne du HTML respectant les règles relatives à un document bien formé.

MathML, SMIL et Cie

XML permet de définir des langages Markup spécialisés à certains usages :

● MathML (Mathematical Markup Language) : langage adapté à la description des formules de


mathématiques
● SMIL (Synchronized Multimedia Integration Language) : langage permettant l'intégration de
données multimédias (images animées, sons,...).
● CML ( Chemical Markup Language) : langage de description de molécules
● VML (Vectorial Markup Language) : langage pour le dessin vectoriel
● MusicML : définition de partitions musicales
● VoxML : application pour le langage parlé (http://www.voxml.com )
● HRML (Human Resources Markup Language) : application de présentation d'offres d'emploi
● WML (WAP Markup Language) : langage destiné aux mobiles pour l'accès Internet

Tests
1) Où sont les erreurs dans le code XML suivant :

<liste>
<machin>Car</mahin>
<machin>Plane</MACHIN>
<machin>Train</machin>
</liste>

2) Où sont les erreurs dans le code XML suivant :

<blabla>
<gras><italique>XML </gras> </italique>
</blabla>

3) Où sont les erreurs dans le code XML suivant

<description>
Il y a <couleur>des <couleur> pommes <couleur>à </couleur> manger.
</description>

4) Où sont les erreurs dans le code XML suivant


<NomsErronés>
<Z;nom/>
<pre@nom>
<$%^(%+)@#?=/>
<Z*8/>
<1pomme/>
</NomsErronés>

5) Où sont les erreurs dans le code XML suivant :

<NomsErronés>
<xmlchose/>
<XMLchose/>
<XmLchose/>
<xMlchose/>
<xmLchose/>
</NomsErronés>

6) Où sont les erreurs dans le code XML suivant :

<erreurs>
<mauvais_caractère tra*lala = "123456"/>
<mauvais_separateur value = "54'/>
<mauvais_separateur_type value="zozo"tagada"/>
<mauvais_separateur_type value='bibi'fricotin'/>
<mauvais_début XML-numéro = "xmlchéri"/>
</erreurs>
solution 1)

Deuxième ligne : mahin au lieu de machin


Troisième ligne : balise d'entrée en minuscule, balise de sortie en majuscule

solution 2)

Chevauchement des éléments "gras" et "italique"

solution 3)

Deux balises "couleur" de suite

solution 4)

Les signes suivants ne sont pas admis dans les noms de balise : ; @ # $ % ^ ( ) % + ? = *
Un nom de balise ne peut commencer par un chiffre.

solution 5)

les balises commencent par les letres de XML (en minuscules ou en majuscules).
solution 6)

Deuxième ligne : l'attribut comporte un "*"


Troisième ligne : la valeur de l'attribut commence par un " et finit par un '.
Quatrième ligne : un " au milieu de la valeur de l'attribut.
Cinquième ligne : un ' au milieu de la valeur de l'attribut.
Sixième ligne : l'attribut commence par XML.
Introduction à XML
date de dernière mise à jour : 19 octobre 2002

Balises, éléments, entités

Un exemple de document bien formé est donné ci-dessous :

<?xml version="1.0" encoding="ISO-8859-1" ?>


<document>
<question>Bonjour</question>
<reponse>Salut</reponse>
</document>

Ce fichier constitué avec n'importe quel éditeur de texte est enregistré sous le nom de salutations.xml. La première ligne (prologue) indique
qu'il s'agit d'un document XML dont la version est 1.0 et dont le jeu de caractères est Latin 1.

jeu de caractères code

Unicode sur 8 bits UTF-8

Latin 1 (Europe Ouest, Amérique latine) ISO-8859-1

Latin 2 (Europe Centrale et de l'Est) ISO-8859-2

Latin 3 (Europe du Sud-Est) ISO-8859-3

Latin 4 (Nord de l'Europe) ISO-8859-4

Latin et Cyrillique ISO-8859-5

Latin et Arabe ISO-8859-6

Latin et Grec ISO-8859-7

Latin et Hébreu ISO-8859-8

Latin et Turc ISO-8859-9

Latin et Lapon, Esquimau ISO-8859-10

Japonais EUC-JP

<document> est la première balise rencontrée. Elle correspond à l'élément "racine". Un document XML a toujours un élément racine et un seul.
Les autres balises, utilisées dans le document, sont <questions> et <reponse>.

Si on affiche ce fichier (auquel, pour l'instant, on n'a pas affecté de DTD) dans un navigateur, on obtiendra des résultats très différents :

● avec Netscape 6, on obtient bien ce qu'on attend (la mise en page n'étant pas notre préoccupation pour l'instant) :
● avec Internet Explorer 5 ou 6, on obtient une présentation structurée :

Nous voyons donc que IE5 et IE6 permettent de visualiser la structure d'un document XML.

Imaginons maintenant un document incorrect comme le suivant (pourquoi n'est-il pas bien formé ?) :

<?xml version="1.0" encoding="ISO-8859-1" ?>


<document>
<question>Bonjour</question>
<reponse>Salut</Reponse>
</document>

L'affichage dans un navigateur permet la détection de l'erreur :


On constate qu'un code XML est composé exclusivement d'éléments, c'est à dire de blocs constitué d'une balise d'ouverture, d'un contenu et
d'une balise de fermeture : <tagada>............</tagada>. Les éléments peuvent être

● simples :

<tagada>tsoinstsoin</tagada>

● composés :

<tagada>il y a des éléments fils


<tsoin>en voici un</tsoin>
<tsoin>en voici un autre</tsoin>
</tagada>

● vides :

<tagada></tagada> ou <tagada/>

D'un certain point de vue, on peut considérer que XML est une description d'arbre. Le code suivant
<coordonnees>
<adresse>
<rue>Jules Verne</rue>
<numero>200</numero>
<code_postal>80000<code_postal>
<ville>Amiens</ville>
</adresse>
<telephone>03 22 80 81 39</telephone>
<email>dep@u-picardie.fr</email>
</coordonnees>

correspond à l'arbre suivant :

Les balises qui délimitent les éléments obéissent à des règles d'écriture quant à leur nom :

● les noms de balises ne doivent contenir que des chiffres, des lettres, des signes particuliers (il faut éviter les signes ":", ">", "<",
""","'","-")
● les noms de balise balises doivent commencer par une lettre, le signe "_", ou le signe ":" à l'exclusion de tout autre signe.
● les noms de balise ne doivent pas comporter d'espace
● les noms de balise ne peuvent commencer par les lettres xml (mot réservé).

Quelles sont, ci-dessous, les balises incorrectes et pourquoi ?

<nabuchodonosor >
<joseph dupont>
<1erprix>
<joseph_dupont>

Comme en HTML, il est possible d'ajouter des commentaires dans un code XML (la syntaxe est la même que pour HTML) :

<!--ceci est un commentaire-->

Les entités sont des variables qui représentent des chaînes de caractères (ce qu'on trouve généralement entre une paire de balises). Elles se
représentent par un nom précédé du signe "&". Par exemple &rage est une entité qui référence la chaîne de caractères : "O rage, O désespoir,
O vieillesse ennemie, N'ai-je donc tant vécu que pour cette infamie et ne suis-je blanchi dans les travaux guerriers que pour voir en un jour
flétrir tant de lauriers"

Ainsi

<don_diegue>&rage</don_diegue>

remplace avantageusement
<don_diegue>O rage, O désespoir, O vieillesse ennemie, N'ai-je donc tant vécu que pour cette infamie et ne
suis-je blanchi dans les travaux guerriers que pour voir en un jour flétrir tant de lauriers</don_diegue>

Nous verrons que les entités se définissent dans les DTD (Document Type Definition).

il peut arriver que l'on veuille insérer dans du code XML des signes "interdits". On peut alors signaler à l'analyseur XML d'ignorer certains
passges du code avec une section CDATA :

<comparaison><![CDATA[huit > trois]]></comparaison

permet d'afficher "huit > trois". Sans section CDATA, le signe ">" aurait provoqué une erreur car aurait été analysé comme une fermeture de
balise.

Les attributs complètent les balises en apportant des informations complémentaires ou indispensables. Dans HTML, les attributs étaient déjà
connus ; exemples : src, href,...

<img src="photo.gif">
<a href="http://www.ici.fr">

Tests
1) Utilisez le parser (analyseur) de Microsoft pour valide le fichier XML suivant (vous pouvez coller le vôtre !)

Laurel
<a>Hardy</a>
Rappel
N'oublie pas la partie de pêche de dimanche !

Validate

2) Quelle est l'arborescence décrite par le fichier XML ci-dessous ?

<?xml version="1.0"?>
<commerce>
<boutique>
<quantité>
100
</quantité>
<boss>
Mike Hammer
</boss>
</boutique>
<produit>
<nom>
tomates
</nom>
<montant>
50
</montant>
</produit>
</commerce>

3) On souhaite utiliser XML pour enregistrer des recettes de cuisine. Proposez une solution en se basant sur un exemple de recette :
Gratin de navets aux herbes de Provence

Pour 4 personnes

préparation : 25 min

Cuisson : 25 min

Ingrédients : 1 kg de navets ; 40 g de beurre + 15 g pour le plat ; 40 g de farine ; 50 cl de lait ; 200 g


de comté ; 1 cuillère à soupe d'herbes de Provence ; sel ; poivre .

1- Epluchez les navets et coupez les en rondelles d'environ 1 cm d'épaisseur. Faites les cuire à la vapeur
pendant environ 15 min. Râpez le fromage.

2 - Faites fondre le beurre dans une casserole, ajoutez la farine et laissez cuire 2 min jusqu'à ce que le
mélange devienne mousseux. Ajoutez progressivement le lait préalablement chauffé en remuant. Salez,
poivrez.

3 - Portez la sauce à ébullition en mélangeant sans arrêt jusqu'à épaississement. Eteignez le feu,
ajoutez les trois quarts du comté et mélangez de nouveau.

4 - Disposez une première couche de rondelles de navets dans le fond d'un plat à gratin beurré et
nappez-le de sauce. Recommencez cette opération jusqu'à épuisement des ingrédients en terminant par
une dernière couche de sauce.

5 - Parsemez avec le reste de fromage râpé et les herbes de Provence. Faites dorer sous le gril du four
et servez aussitôt.

solution 2)

L'arbre représenté par le fichier XML est le suivant :

solution 3)
<?xml version="1.0"?>
<livre_cuisine>
<recette>
<titre>Gratin de navets aux herbes de Provence </titre>
<nombre>Pour 4 personnes </nombre>
<durée-preparation>25 min </durée_preparation>
<durée_cuisson>25 min</durée_cuisson>
<ingredients>
<ingredient>1 kg de navets</ingredient>
<ingredient>40 g de beurre + 15 g pour le plat</ingredient>
<ingredient>40 g de farine</ingredient>
<ingredient>50 cl de lait</ingredient>
<ingredient>200 g de comté</ingredient>
<ingredient>1 cuillère à soupe d'herbes de Provence</ingredient>
<ingredient>sel</ingredient>
<ingredient>poivre</ingredient>
</ingredients>
<phases>
<phase>1- Epluchez les navets et coupez les en rondelles d'environ 1 cm d'épaisseur. Faites les cuire à la vapeur pendant environ 15
min. Râpez le fromage. </phase>
<phase>2 - Faites fondre le beurre dans une casserole, ajoutez la farine et laissez cuire 2 min jusqu'à ce que le mélange devienne
mousseux. Ajoutez progressivement le lait préalablement chauffé en remuant. Salez, poivrez. </phase>
<phase>3 - Portez la sauce à ébullition en mélangeant sans arrêt jusqu'à épaississement. Eteignez le feu, ajoutez les trois quarts
du comté et mélangez de nouveau. </phase>
<phase>4 - Disposez une première couche de rondelles de navets dans le fond d'un plat à gratin beurré et nappez-le de sauce.
Recommencez cette opération jusqu'à épuisement des ingrédients en terminant par une dernière couche de sauce. </phase>
<phase>5 - Parsemez avec le reste de fromage râpé et les herbes de Provence. Faites dorer sous le gril du four et servez
aussitôt.</phase>
</phases>
</recette>
</livre_cuisine>
Introduction à XML
date de dernière mise à jour : 19 octobre 2002

Définition de Type de Document (DTD)

Eléments

Dans une DTD, on définit principalement les éléments intervenant dans un fichier XML. La définition d'un élément possède la syntaxe suivante :
<!ELEMENT nom_élément (modèle_contenu)>

nom_élément est le nom de la balise qui sera utilisée ; modèle_contenu renseigne sur ce qui est compris entre <nom_élément> et </nom_élément>.

Ainsi

<!ELEMENT date (jour, mois, année)>


<!ELEMENT jour (#PCDATA)>
<!ELEMENT mois (#PCDATA)>
<!ELEMENT année (#PCDATA)>

définit un élément composé, date, contenant trois éléments simples, jour, mois, année. Ces trois éléments ont un contenu de caractères (PCDATA signifie
Parsed Character Data ou chaîne de caractères analysée).

un élément vide, comme la balise <hr/> par exemple se définira par emploi du mot réservé EMPTY :

<!ELEMENT hr EMPTY>
Prenons maintenant un exemple plus complet. Imaginons une bibliothèque composés d'ouvrages. Chaque ouvrage est décrit par un numéro d'inventaire, un
titre, un ou plusieurs auteurs, une maison d'édition, un prix d'achat.

Nous avons à construire le fichier XML et la DTD qui définira les balises employées..

Le document XML (enregistré dans le fichier livres.xml) est :

<?xml version="1.0" encoding="ISO-8859-1" ?>


<bouquins>
<livre>
<numero>123</numero>
<titre>Les Trois Mousquetaires</titre>
<auteur>A.Dumas</auteur>
<editeur>Gallimard</editeur>
<prix>246FF</prix>
</livre>
<livre>
<numero>124</numero>
<titre>Les Diaboliques</titre>
<auteur>Boileau</auteur>
<auteur>Narcejac</auteur>
<editeur>Duchnok</editeur>
<prix>210FF</prix>
</livre>
</bouquins>

Les figures suivantes donnent la visualisation du fichier livres.xml dans les navigateurs Netscape6 et Internet Explorer 5 :
Il nous faut maintenant établir la DTD qui définit les balises utilisées. Elle correspondra au fichier suivant enregistré sous le nom de livres.dtd :

<!ELEMENT bouquins (livre+)>


<!ELEMENT livre (numero, titre, auteur+, editeur, prix?)>
<!ELEMENT numero (#PCDATA)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT editeur (#PCDATA)>
<!ELEMENT prix (#PCDATA)>
Dans une DTD chaque définition de balise est introduite avec la balise <!ELEMENT>. Quelques explications sont nécessaires à la compréhension de ce qui précède :

"livre+" indique que plusieurs occurrences de "livre" vont intervenir. Autrement dit "bouquins" possède plusieurs "livres".
"prix?" indique que le champ "prix" est facultatif : il peut être absent.

Les signes "+", "?" indiquent des contraintes d'occurrence. Il y en a en fait trois :

contrainte signification

? 0 ou 1 (optionnel)

* 0 ou plus

+ au moins 1

Il faut évidemment indiquer dans le fichier livres.xml quelle DTD il faut utiliser. Pour cela, on rajoute une ligne (en rouge) :

<?xml version="1.0" encoding="ISO-8859-1" ?>


<!DOCTYPE bouquins SYSTEM "livres.dtd">
<bouquins>
<livre>
<numero>123</numero>
<titre>Les Trois Mousquetaires</titre>
<auteur>A.Dumas</auteur>
<editeur>Gallimard</editeur>
<prix>246FF</prix>
</livre>
<livre>
<numero>124</numero>
<titre>Les Diaboliques</titre>
<auteur>Boileau</auteur>
<auteur>Narcejac</auteur>
<editeur>Duchnok</editeur>
<prix>210FF</prix>
</livre>
</bouquins>

Attributs
Les composants d'un fichier XML ne comportent pas que des balises ; celles-ci peuvent contenir des attributs. Il faut donc que la DTD puisse expliciter les
attributs de balises. Ceci est effectué avec la syntaxe suivante :

<!ATTLIST nom_élément nom_attribut type_attribut valeur_par_défaut>

nom_élément est le nom de l'élement auquel est attaché l'attribut ; nom_attribut est le nom de l'attribut ; type_attribut est le type de l'attribut ; les
différents types sont donnés dans le tableau ci-dessous :

type signification

CDATA la valeur est une chaîne de caractères

(val1|val2|......) la valeur est l'une des possibilités de l'énumération

ID la valeur est un identifiant unique

IDREF la valeur est l'identifiant d'un autre élément

IDREFS la valeur est une liste d'identifiants

NMTOKEN la valeur est un nom valide XML

NMTOKENS la valeur est une liste de noms valides XML

ENTITY la valeur est une entité

ENTITIES la valeur est une liste d'entités

NOTATION la valeur est un nom de notation

xml: la valeur est une valeur prédéfinie XML

valeur_par_défaut peut prendre les valeurs suivantes :

valeur signification

#DEFAULT valeur par défaut de l'attribut

#REQUIRED saisie obligatoire

#IMPLIED saisie facultative


#FIXED valeur constante prédéfinie

exemples :

dans la DTD dans le fichier XML

<!ELEMENT message (#PCDATA)>


<message longueur="20">.........</message>
<!ATTLIST message longueur CDATA "20">

<!ELEMENT paiement (#PCDATA)>


<paiement mode="espèces">........</paiement>
<!ATTLIST paiement mode (chèque|espèces|carte) "espèces">

<!ELEMENT utilisateur (#PCDATA)>


<utilisateur username="dupont"
<!ATTLIST utilisateur username CDATA #REQUIRED>
password="azerty567">......</utilisateur>
<!ATTLIST utilisateur password CDATA #REQUIRED>

Entités

Une entité est une variable remplaçant du texte. Elle est définie dans une DTD par la syntaxe

<!ENTITY nom_entité valeur_entité>

exemples :

<!ENTITY souris "mickey mouse">


<!ENTITY texte "il était une fois une marchande de foie qui vendait du foie dans la ville de Foix. Elle me dit, 'ma foi,
c'est la première fois que je vends du foie dans la ville de Foix.'">

Les entités s'utiliseront dans le document XML sous la forme &souris, &texte.

Les entités précédentes sont des entités internes. On peut aussi définir des entités externes. Leur définition se situe dans un autre document. La syntaxe
est alors :

<!ENTITY nom_entité SYSTEM "URI">

exemple :
<!ENTITY Noe SYSTEM "http://www.bible.fr/arche.dtd">

On peut aussi définir des entités paramètres. Leur syntaxe est

<!ENTITY %nom_entité "type_entité">

exemple

<!ENTITY %car "(#PCDATA)">


<!ELEMENT titre %car>
<!ELEMENT sous_titre %car>

%car remplace, dans l'exemple précédent (#PCDATA) dans toute la DTD.

Nous avons vu qu'Internet Explorer 5 pouvait agir comme afficheur de structure, mais il ne tient pas compte du contenu de la DTD. Internet Explorer 5 est
un "analyseur non validant". Existe-t-il des analyseurs "validants", c'est à dire faisant le lien entre le fichier XML et la DTD ? La réponse est oui. Il en existe
un, gratuit, offert par Microsoft (Si ! Ca existe !), appelé msxml.

Pour activer cet analyseur validant, il faut ajouter le code Javascript suivant (que l'on peut placer dans un document HTML) :

xmldoc= new ActiveXObject("msxml2.DOMDocument");


xmldoc.validateOnParse = true;
xmldoc.load(url);

Information : http://www.xmlwriter.net/msxml.shtml#UseMSXML

XML Schema

XML Schema vise à remplacer les DTD. C'est une technologie encore en développement.

Avec les DTD, on avait par exemple un couple (fichier XML, fichier DTD) :

fichier XML
<?xml version="1.0"?>
<!DOCTYPE bouquins SYSTEM "livres.dtd">
<message>
<de>Marius</de>
<vers>Olive</vers>
<objet> anniversaire</objet>
<corps>Bon anniversaire, Olive!</corps>
</message>

fichier DTD

<!ELEMENT message(de, vers, objet, corps)>


<!ELEMENT de (#PCDATA)>
<!ELEMENT vers (#PCDATA)>
<!ELEMENT objet (#PCDATA)>
<!ELEMENT corps (#PCDATA)>

Avec XML Schema, le fichier XML s'écrit :

<?xml version="1.0"?>
<message xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.w3schools.com/schema/message.xsd">
<de>Marius</de>
<vers>Olive</vers>
<objet> anniversaire</objet>
<corps>Bon anniversaire, Olive!</corps>
</message>

et le fichier DTD est remplacé par un fichier XSD :


<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="message">
<xs:complexType>
<xs:sequence>
<xs:element name="de" type="xs:string"/>
<xs:element name="vers" type="xs:string"/>
<xs:element name="objet" type="xs:string"/>
<xs:element name="corps" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Les schémas jouent le même rôle que les DTD.


Toutefois,

● XMLSchema est écrit en XML ce qui permet une simplification, l'utilisation d'un éditeur XML, la transformation du schéma avec XSLT
● XMLSchema définit des types de données ce qui permet de simplifier la description, de travailler avec des bases de données
● XMLSchema est extensible on peut définir ses propres types de données à partir des types de base

Comme on peut le voir sur l'exemple précédent, les éléments peuvent être

● simples : <xs:element name="<nom-élément>" type="<type-de-données>">


● complexes : <xs:complexType>

Les types de données pour les éléments simples sont :

● xs:string pour les chaînes de caractères


● xs:decimal pour les nombres rationnels
● xs:integer pour les nombres entiers
● xs:boolean pour les booléens
● xs:date pour les dates
● xs:time pour les mesures de temps

Comme dans les DTD, les éléments peuvent avoir des attributs déclarés comme suit :

<xs:attribute name="<nom_attribut>" type="<type_attribut>" default="<valeur_par_defaut>"/>


Tests
1) Voici une DTD truc.dtd,

<!ELEMENT truc (alpha, beta, gamma)>


<!ELEMENT alpha (#PCDATA)>
<!ELEMENT beta (#PCDATA)>
<!ELEMENT gamma (#PCDATA)>

Les fichiers XML suivants sont-ils corrects ?

truc1.xml

<?xml version="1.0" standalone="no"?>


<!DOCTYPE truc SYSTEM "truc.dtd">
<truc>
<alpha>Tagada</alpha>
<beta>Tsoin</beta>
</truc>

truc2.xml

<?xml version="1.0" standalone="no"?>


<!DOCTYPE truc SYSTEM "truc.dtd">
<truc>
<beta>Tsoin</beta>
<alpha>Tagada</alpha>
<gamma>tsoin</gamma>
</truc>

truc3.xml
<?xml version="1.0" standalone="no"?>
<!DOCTYPE truc SYSTEM "truc.dtd">
<truc>
<alpha>Tagada</alpha>
<beta>Tsoin</beta>
<gamma>tsoin</gamma>
</truc>

truc4.xml

<?xml version="1.0" standalone="no"?>


<!DOCTYPE truc SYSTEM "truc.dtd">
<truc>
<alpha>Tagada</alpha>
<alpha>Tagada</alpha>
<beta>Tsoin</beta>
<gamma>tsoin</gamma>
</truc>

2) Voici une DTD truc.dtd,

<!ELEMENT truc (alpha*, beta+, gamma?)>


<!ELEMENT alpha (#PCDATA)>
<!ELEMENT beta (#PCDATA)>
<!ELEMENT gamma (#PCDATA)>

Que peut-on dire des fichiers XML suivants :

truc1.xml
<?xml version="1.0" standalone="no"?>
<!DOCTYPE truc SYSTEM "truc.dtd">
<truc>
<alpha>Tagada</alpha>
<beta>Tsoin Tsoin</beta>
</truc>

truc2.xml

<?xml version="1.0" standalone="no"?>


<!DOCTYPE truc SYSTEM "truc.dtd">
<truc>
<beta>Tsoin</beta>
<beta>Tsoin Tsoin</beta>
<beta>Tsoin Tsoin Tsoin</beta>
</truc>

truc3.xml

<?xml version="1.0" standalone="no"?>


<!DOCTYPE truc SYSTEM "truc.dtd">
<truc>
<alpha>Tagada</alpha>
<alpha>et Tagada</alpha>
<beta>Tsoin</beta>
<gamma>tsoin</gamma>
</truc>

3) Voici une DTD truc.dtd,


<!ELEMENT truc ((alpha+, beta?)|gamma*)>
<!ELEMENT alpha (#PCDATA)>
<!ELEMENT beta (#PCDATA)>
<!ELEMENT gamma (#PCDATA)>

Que peut-on dire des fichiers XML suivants :

truc1.xml

<?xml version="1.0" standalone="no"?>


<!DOCTYPE truc SYSTEM "truc.dtd">
<truc>
<alpha>Tagada</alpha>
<alpha>Tagada</alpha>
<alpha>Tagada</alpha>
</truc>

truc2.xml

<?xml version="1.0" standalone="no"?>


<!DOCTYPE truc SYSTEM "truc.dtd">
<truc>
<alpha>Tagada</alpha>
<beta>Tsoin Tsoin</beta>
</truc>

truc3.xml

<?xml version="1.0" standalone="no"?>


<!DOCTYPE truc SYSTEM "truc.dtd">
<truc>
<gamma>tsoin</gamma>
<gamma>tsoin</gamma>
<gamma>tsoin</gamma>

</truc>
solution 1)

truc1.xml : il manque un éléments (gamma)

truc2.xml : les éléments sont dans le désordre

truc3.xml : correct

truc4.xml : trop d'alpha

solution 2)

Tous les fichiers sont valides.

solution 3)

Ils sont tous valides


Introduction à XML
date de dernière mise à jour : 23 février 2002

Espaces de noms, HTML dans XML, XML dans


HTML
Espaces de noms

Etant donné que les balises sont d'une utilisation libre en XML, il doit fatalement arriver qu'un même nom
de balise peut correspondre à des significations différentes. Par exemple la balise <table>, bien connue en
HTML, et qui sert à désigner un tableau, pourrait être utilisée en XML, par exemple :

<table>
<tr>
<td>Athos</td>
<td>Porthos</td>
<td>Aramis</td>
</tr>
</table>

Par ailleurs, on pourrait utiliser une balise <table> pour désigner.....une table tout simplement :

<table>
<style>Louis XV</style>
<forme>rectangulaire</forme>
<hauteur>1 m</hauteur>
<largeur>1,50 m</largeur>
<longueur>2,50 m</longueur>
</table>

Imaginons que dans un même document XML, on utilise les deux types de balise <table>. Une confusion est
inévitable. Pour l'éviter, on peut utiliser un préfixe qui évite cette confusion (le nom de la balise n'est alors
plus le même : h:table est différent de m:table) :
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Athos</h:td>
<h:td>Porthos</h:td>
<h:td>Aramis</h:td>
</h:tr>
</h:table>
<m:table xmlns:m="http://www.u-picardie.fr">
<m:style>Louis XV</m:style>
<m:forme>rectangulaire</m:forme>
<m:hauteur>1 m</m:hauteur>
<m:largeur>1,50 m</m:largeur>
<m:longueur>2,50 m</m:longueur>
</m:table>

Dans l'exemple ci-dessous, un attribut xmlns (xml name space) a été ajouté aux balises <h:table> et
<m:table> ; cet attribut définit un espace de noms (name space) unique par l'intermédiaire d'une URI
(Uniform Resource Identifier) qui identifie une ressource Internet de manière unique.

Dans la pratique, on peut utiliser comme URI, une URL (Uniform Resource Locator) désignant un domaine
Internet ; c'est ce qui a été utilisé dans l'exemple précédent.

Peu importe sur quoi pointe l'URL (elle n'est pas censée pointer sur quelque chose de particulier), l'intérêt
est de définir de manière unique un espace de noms (évidemment l'URL doit correspondre à un domaine
existant).

Il est aussi possible de définir un espace de noms par défaut ; dans ce cas le préfixe est absent :

<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Athos</td>
<td>Porthos</td>
<td>Aramis</td>
</tr>
</table>
<m:table xmlns:m="http://www.u-picardie.fr">
<m:style>Louis XV</m:style>
<m:forme>rectangulaire</m:forme>
<m:hauteur>1 m</m:hauteur>
<m:largeur>1,50 m</m:largeur>
<m:longueur>2,50 m</m:longueur>
</m:table>

Les URI peuvent être déclarées de manière absolue ou relative :

déclaration absolue : http://www.u-picardie.fr/~cochard/sim (adresse complète)

déclaration relative : ~cochard/sim

Pour interpréter les URI relatives, on utilise XMLBase :


<tagada xml:base="http://www.u-picardie.fr/">
<...........href="~cochard/sim"......../>
</tagada>

Dans l'exemple ci-dessus, la valeur de l'attribut href est http://www.u-picardie.fr/~cochard/sim

Il est possible d'intégrer du code HTML dans un document XML et réciproquement.

Intégration de HTML dans XML

Supposons que l'on souhaite intégrer dans un fichier XML le code HTML suivant :

<hr/>
<h1>Attention</h1>
<p>Ce texte est issu d'un fichier en code HTML</p>
<hr/>

Dans le document XML, par exemple celui du début de ce chapitre, on définit un espace de noms :

<?xml version="1.0" encoding="ISO-8859-1" ?>


<document xmlns:html="http://www.w3.org/TR/REC-html40">
<question>Bonjour</question>
<html:hr/>
<html:h1>Attention</html:h1>
<html:p>Ce texte est issu d'un fichier en code HTML</html:p>
<html:hr/>
<reponse>Salut</reponse>
</document>
Cette méthode est très générale et permet d'intégrer au sein de XML, des codes relevant de divers
langages à balises.

Intégration de XML dans HTML

La procédure inverse existe aussi. Il faut créer dans le document HTML un ilot de données XML compris
entre les balises <xml id=nom_de_l'_ilot> et </xml>. Par exemple, soit le fichier HTML suivant :

<html>
<head>
<titre>code XML imbriqué dans du code HTML</titre>
</head>
<body>
<p>ceci est du code HTML</p>
<hr/>
<hr/>
</body>
</html>

Intercalons du code XML :

<tagada>
<tsoin>coucou></tsoin>
<tralala>voici du code XML</tralala>
</tagada>
ce qui donne :

<html>
<head>
<titre>code XML imbriqué dans du code HTML</titre>
</head>
<body>
<p>ceci est du code HTML</p>
<hr/>
<xml id="ilotXml">
<tagada>
<tsoin>coucou</tsoin>
<tralala>voici du code XML</tralala>
</tagada>
</xml>
<hr/>
</body>
</html>

On peut aussi imbriquer du texte XML provenant d'un fichier externe dans un document HTML. Supposons
que l'on ait le fichier XML suivant enregistré quelque part (pour la simplicité on supposera que ce fichier
est dans le même répertoire que le présent document) : bibliotheque.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<bouquins>
<livre>
<numero>123</numero>
<titre>Les Trois Mousquetaires</titre>
<auteur>A.Dumas</auteur>
<editeur>Gallimard</editeur>
<prix>246FF</prix>
</livre>
<livre>
<numero>124</numero>
<titre>Les Diaboliques</titre>
<auteur>Boileau</auteur>
<auteur>Narcejac</auteur>
<editeur>Duchnok</editeur>
<prix>210FF</prix>
</livre>
</bouquins>

Réalisons le fichier HTML suivant : voir_biblio.htm

<html>
<body>

<xml id="catalogue" src="bibliotheque.xml"></xml>

<table border="1" datasrc="#catalogue">


<tr>
<td><span datafld="titre"></span></td>
<td><span datafld="editeur"></span></td>
</tr>
</table>

</body>
</html>

Ce fichier, par la balise xml, mentionne l'insertion d'un fichier XML appelé par l'ID "catalogue". Les balises
span permettent d'afficher des données de ce fichier (ici sous forme d'un tableau). Essayez en cliquant sur
le nom du fichier voir_biblio.htm

Une autre possibilité consiste à utiliser du code javascript. Examinons cette possibilité sur un exemple :
soit le fichier XML

note.xml
<note>
<a>Dupont</a>
<de>Secrétariat</de>
<heading>rappel</heading>
<body>Votre carte d'étudiant est à retirer au secrétariat!</body>
</note>

On écrit un fichier HTML pour appeler, via du code javascript le fichier note.xml et afficher les données :

affiche.htm

<html>
<head>
<script type="text/javascript" for="window" event="onload">
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("note.xml")
nodes=xmlDoc.documentElement.childNodes
a1.innerText=nodes.item(0).text
a2.innerText=nodes.item(1).text
a3.innerText=nodes.item(2).text
a4.innerText=nodes.item(3).text
</script>
</head>
<body bgcolor="yellow">
<h1>Note aux étudiants</h1>
<b>A:</b>
<span id="a1"></span>
<br/>
<b>De:</b>
<span id="a2"></span>
<hr/><b><span id="a3"></span></b><hr/>
<span id="a4"></span>
</body>
</html>

Le résultat à l'affichage de affiche.htm est :


Introduction à XML
date de dernière mise à jour : 19 octobre 2002

Mise en page : CSS

Comme nous l'avons vu, XML ne se préoccupe que de la structure des documents, pas de la mise en page.
Pour mettre en page un document XML, deux possibilités sont offertes : CSS et XSL. Nous étudions ici la
première possibilité.

Cascading Style Sheets (CSS) permet de définir des feuilles de style qui accompagnent un document (HTML
ou XML). Une feuille de style, comme indique son nom, définit les styles qui sont utilisés dans un document.
Elle correspond elle-même à un document reconnaissable à son suffixe .css.

Pour faire comprendre leur utilisation, nous utiliserons un exemple en HTML . Soit le document HTML
suivant :

<html>
<head><title>Bonjour</title></head>
<body>
<h1>Bonjour les petits enfants</h1>
<p>Une <b>grande nouvelle</b> :</p>
<img border="0" src="joueur.gif" width="156" height="157" align="right">
<p>à partir d'aujourd'hui vous pourrez consulter les résultats des
compétitions sportives
en cliquant sur les liens suivants :</p>
<ul>
<li>le <a href="tennis.htm"> tennis</a></li>
<li>le <a href="foot.htm"> foot-ball</a></li>
<li>le <a href="velo.htm"> cyclisme</a></li>
<li>la <a href="cochonnet.htm"> pétanque</a></li>
</ul>
<p>Vous pouvez aussi faire du sport.</p>
<p>Inscrivez-vous au plus vite au club en cliquant sur
<a href="mailto:zidane@u-picardie.fr">contact</a></p>
<p>A très bientôt</p>
</body>
</html>

Le résultat dans Internet Explorer est donné ci-dessous :


Nous allons joindre une feuille de style que nous appellerons style1.css à cette page. Tout d'abord, il faut
indiquer dans le document HTML où se trouve la feuille de style. Cela se fait simplement en ajoutant la ligne

<link rel="stylesheet" type="text/css" href="style1.css"/>

dans la section <head></head>

Ensuite il faut rédiger la feuille de style sous forme d'un document texte (style1.css) :
body {margin: 1.0cm;}
h1 {font-family: Comic Sans MS, Helvetica, sans-serif; font-size:
30pt;}
p {font-family: Arial, Helvetica, sans-serif; font-size: 15pt;}
b {color: red;}
ul {font-family: Times New Roman, Helvetica, sans-serif; font-size :
18pt;}
a:link {color: blue;}
a:hover {color: red;}
a:active {color: green;}

où l'on peut constater que, pour chaque balise, le style est défini. En particulier, on remarquera que pour les
polices de caractères, il est utile d'en définir plusieurs car l'utilisateur ne possède pas forcément sur sa
machine les polices que vous utilisez.

Avec l'ajout de la feuille de style, le résultat est donné ci-dessous :


Imaginons maintenant une autre feuille de style, style2.css

body {margin: 1.0cm;}


h1 {font-family: Verdana, Helvetica, sans-serif; font-size: 20pt;}
p {font-family: Comic Sans MS, Helvetica, sans-serif; font-size: 20pt;}
b {color: green;}
ul {font-family: Arial, Helvetica, sans-serif; font-size : 18pt;}
a:link {color: blue;}
a:hover {color: red;}
a:active {color: green;}

Cette feuille peut être ajoutée en déclaration dans le fichier HTML, en plus de la feuille de style,
style1.css.

<html>
<head><title>Bonjour</title>
<link rel="stylesheet" type="text/css" href="style1.css"/>
<link rel="stylesheet" type="text/css" href="style2.css"/>
</head>
<body>
<h1>Bonjour les petits enfants</h1>
<p>Une <b>grande nouvelle</b> :</p>
<img border="0" src="joueur.gif" width="156" height="157" align="right">
<p>à partir d'aujourd'hui vous pourrez consulter les résultats des
compétitions sportives
en cliquant sur les liens suivants :</p>
<ul>
<li>le <a href="tennis.htm"> tennis</a></li>
<li>le <a href="foot.htm"> foot-ball</a></li>
<li>le <a href="velo.htm"> cyclisme</a></li>
<li>la <a href="cochonnet.htm"> pétanque</a></li>
</ul>
<p>Vous pouvez aussi faire du sport.</p>
<p>Inscrivez-vous au plus vite au club en cliquant sur
<a href="mailto:zidane@u-picardie.fr">contact</a></p>
<p>A très bientôt</p>
</body>
</html>

On obtient le résultat suivant :


Cet exemple nous apprend que l'on peut superposer les feuilles de style css, d'où le nom "cascading", les
dernières directives d'affichage prenant le pas sur les directives plus anciennes.

Qu'en est-il pour un document XML. C'est à peu près la même chose. Reprenons l'exemple des livres
(livres.xml) donné plus haut. Intercalons le lien avec la feuille de style appelée livres.css (en rouge en
deuxième ligne) ; soit livres2.xml, le fichier correspondant :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="livres.css" type="text/css"?>
<bouquins>
<livre>
<numero>123</numero>
<titre>Les Trois Mousquetaires</titre>
<auteur>A.Dumas</auteur>
<editeur>Gallimard</editeur>
<prix>246FF</prix>
</livre>
<livre>
<numero>124</numero>
<titre>Les Diaboliques</titre>
<auteur>Boileau</auteur>
<auteur>Narcejac</auteur>
<editeur>Duchnok</editeur>
<prix>210FF</prix>
</livre>
</bouquins>

La feuille de style doit maintenant être établie suivant un mode opératoire assez similaire à celui utilisé plus
haut : pour chaque balise on définit le style :

bouquins {font-family : Arial, Helvetica, sans-serif;}


numero {display: block; font-size : 12pt; color=green;}
titre {display: block; font-size: 14pt; color: red; font-style: bold }
auteur {display: block; font-size: 12pt}
editeur { display: inline; font-size : 12pt;}
prix {display: inline; font-size :12pt; font-style: italic;}

L'attribut display est particulièrement utile. Il permet d'afficher quelque chose, puis, soit de passer à la
ligne suivante ("block" - en fait l'affichage correspond à un bloc), soit de continuer sur la même ligne
("inline"). On notera aussi que la police de caractère étant définie dans "bouquins" est commune aux
éléments "intérieurs". Le résultat est donné ci-dessous dans Internet Explorer :
Un aspect intéressant de CSS concerne les images d'arrière plan. Imaginons que l'on souhaite ajouter une
image d'arrière-plan à l'affichage précédent. Voici quelques possibilités

bouquins {font-family : Arial,


Helvetica, sans-serif;
background-image:
url(photo.gif)}
numero {display: block; font-
l'image est size : 12pt; color=green;}
répétée titre {display: block; font-
régulièrement size: 14pt; color: red; font-
mais seulement style: bold }
sur l'élément auteur {display: block; font-
bouquins. size: 12pt}
editeur { display: inline; font-
size : 12pt;}
prix {display: inline; font-
size :12pt; font-style:
italic;}
bouquins {font-family : Arial,
Helvetica, sans-serif; }
numero {display: block; font-
size : 12pt; color=green;}
titre {display: block; font-
l'image est size: 14pt; color: red; font-
répétée style: bold }
régulièrement auteur {display: block; font-
mais seulement size: 12pt}
sur l'élément editeur { display: inline; font-
éditeur size : 12pt; background-image:
url(photo.gif)}
prix {display: inline; font-
size :12pt; font-style:
italic;}

bouquins {font-family : Arial,


Helvetica, sans-serif;
background-image:
url(photo.gif);
background-repeat: no-repeat}
l'image n'est numero {display: block; font-
pas répétée et size : 12pt; color=green;}
est positionnée titre {display: block; font-
en haut à size: 14pt; color: red; font-
gauche sur style: bold }
l'élément auteur {display: block; font-
bouquins size: 12pt}
editeur { display: inline; font-
size : 12pt;}
prix {display: inline; font-
size :12pt; font-style:
italic;}

bouquins {font-family : Arial,


Helvetica, sans-serif;
background-image:
url(photo.gif);
background-repeat: no-repeat ;
background-position: center
L'image est center}
centrée numero {display: block; font-
horizontalement size : 12pt; color=green;}
et titre {display: block; font-
verticalement size: 14pt; color: red; font-
sur l'élément style: bold }
bouquins auteur {display: block; font-
size: 12pt}
editeur { display: inline; font-
size : 12pt;}
prix {display: inline; font-
size :12pt; font-style:
italic;}

CSS a fait l'objet d'une standardisation en 1996 sous le nom CSS1. Depuis une nouvelle version CSS2 a vu le
jour en 1998 et encore une autre, CSS3, est en préparation. Mais les navigateurs usuels ne reconnaissant
encore que CSS1 !
Introduction à XML
date de dernière mise à jour : 23 février 2002

Mise en page : XSL

XSL signifie Extensible Style Sheet Language. Dans sa version de base, il exploite les balises de HTML (qui
ne sont pas si mauvaises que cela après tout !) mais au bénéfice de XML. Il peut aussi utiliser une mise en
forme spécifique basée sur les FO (Formatting Objects ou Objets de formatage). En fait XSL est bien plus
qu'un langage de feuille de style car il peut

● transformer les documents XML (le plus souvent en XHTML) : cette partie s'appelle XSLT
● filtrer et trier les données XML : cette partie s'appelle XPath
● formater les données XML pour une restitution à l'écran, sur papier,... : cette partie est basée sur
les FO

XSL est un standard défini et recommandé par le W3 Consortium. Pour voir les résultats de XSL, il faut
employer un navigateur compatible XSL. Internet Explorer 5 n'est pas totalement compatible avec XSL ;
par contre Internet Explorer 6 l'est ; on supposera donc dans la suite que l'on utilise Internet Explorer 6.

Contrairement à CSS, XSL correspond à un fichier qui doit être "inséré" dans un document XML ; c'est
pourquoi, on peut considérer le contenu d'un fichier XSL comme un espace de noms. Pour expliquer
l'utilisation de XSL, reprenons l'exemple du début du chapitre :

<?xml version="1.0" encoding="ISO-8859-1" ?>


<document>
<question>Bonjour</question>
<reponse>Salut</reponse>
</document>

et ajoutons en deuxième ligne :

<?xml-stylesheet href="bonjour.xsl" type="text/xsl"?>

Le fichier bonjour.xsl aura la physionomie suivante :


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<h1>
<xsl:value-of select="document/question"/>
</h1>
<h2>
<xsl:value-of select="document/reponse"/>
</h2>
</xsl:template>
</xsl:stylesheet>

La première ligne correspond à la définition correcte (au sens de la conformité avec la recommandation du
W3C) d'une feuille de style XML, donc utilisable avec Internet explorer 6. Si on utilise Internet Explorer
5, il faut mettre la ligne suivante :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

Dans l'exemple ci-dessus, nous voyons que les balises de HTML sont ici réutilisées pour des portions de
document. Le résultat sera le suivant :

On peut changer la présentation en utilisant le même fichier xml, mais un fichier xsl différents, par
exemple bonjour2.xml :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="1">
<tr>
<td><font color="green">
<xsl:value-of select="document/question"/>
</font>
</td>
<td><font color="red">
<xsl:value-of select="document/reponse"/>
</font>
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>

Bien entendu, on placera dans le fichier bonjour.xml la ligne suivante :

<?xml-stylesheet href="bonjour2.xsl" type="text/xsl"?>

Le résultat sera alors :

Contrairement à CSS, XSL utilise des modèles (templates) associés à des éléments d'un fichier XML.
L'association d'un modèle à un élément s'opère avec la balise <xsl:template> et avec l'attribut "match".
Dans l'exemple ci-dessus, la ligne

<xsl:template match="/">

indique que le modèle défini entre les balises "template" s'applique à l'élément racine "/". Les éléments à
présenter sont définis à l'aide de la balise <xsl:value-of>

<xsl:value-of select="document/question"/>
L'attribut "select" indique la position de l'élément dans la structure.

L'utilisation de XSL permet de faire un véritable traitement du texte contenu dans un fichier XML. Pour
illustrer ces possibilités, reprenons l'exemple des livres vu au chapitre sur CSS et appelons biblio.htm le
fichier suivant qui comprend la description de trois ouvrages :

<?xml version="1.0"?>
<?xml-stylesheet href="biblio.xsl" type="text/xsl"?>
<bouquins>
<livre>
<numero>123</numero>
<titre>Les Trois Mousquetaires</titre>
<auteur>A.Dumas</auteur>
<editeur>Gallimard</editeur>
<prix>60 Euros</prix>
</livre>
<livre>
<numero>124</numero>
<titre>Les Diaboliques</titre>
<auteur>Boileau</auteur>
<auteur>Narcejac</auteur>
<editeur>Duchnok</editeur>
<prix>78 Euros</prix>
</livre>
<livre>
<numero>125</numero>
<titre>Cinq semaines en ballon</titre>
<auteur>Jules Verne</auteur>
<editeur>Hetzel</editeur>
<prix>inestimable</prix>
</livre>
</bouquins>

Imaginons que nous souhaitions faire la liste des livres avec mention du numéro, des auteurs, du titre, de
l'éditeur.

Le fichier XSL, biblio.xsl pourra s'écrire ainsi :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


<xsl:template match="/">
<table border="1">
<xsl:for-each select="bouquins/livre">
<tr>
<td><xsl:value-of select="numero"/></td>
<td>
<xsl:for-each select="auteur">
<table border="0">
<tr>
<td><xsl:value-of select="."/></td>
</tr>
</table>
</xsl:for-each>
</td>
<td><xsl:value-of select="titre"/></td>
<td><xsl:value-of select="editeur"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

Le résultat, affiché avec Internet Explorer 6 sera :

On utilise dans l'exemple ci-dessus des boucles, définies par la balise "for-each" :

<xsl:for-each select="nom_de_noeud">

et on notera en particulier l'imbrication des boucles de ce type (qui permet de faire afficher plusieurs
auteurs pour le même livre).

Tests
1) On donne le fichier suivant décrivant une personne :
<?xml version="1.0" ?>
<?xml-stylesheet href="carte.xsl" type="text/xsl"?>
<card>
<name>Jean Dupont</name>
<title>PDG, Papeteries du Limousin.</title>
<email>jean.dupont@paplim.com</email>
<phone>(33)5 45 67 89</phone>
<logo url="photo.gif"/>
</card>

Ecrire un fichier XSL permettant d'en déduire une carte de visite :

solution 1)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="card">
<html>
<head>
<title> <xsl:value-of select="name/text()"/> </title>
</head>
<body bgcolor="#ffffff">
<table border="3">
<tr> <td><xsl:if test="logo"><img src="{logo/@url}"/></xsl:if></td>
<td> <xsl:apply-templates select="name"/><br/>
<xsl:apply-templates select="title"/><p/>
<xsl:apply-templates select="email"/><br/>
<xsl:if test="phone"> Téléphone:
<xsl:apply-templates select="phone"/><br/>
</xsl:if>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="name"><xsl:value-of select="text()"/></xsl:template>
<xsl:template match="title"><xsl:value-of select="text()"/></xsl:template>
<xsl:template match="email"><xsl:value-of select="text()"/></xsl:template>
<xsl:template match="phone"><xsl:value-of select="text()"/></xsl:template>
</xsl:stylesheet>
Introduction à XML
date de dernière mise à jour : 19 octobre 2002

Chemins et Liens XML : XPath, XPointer, XLink

XPath
XPath est un moyen de désigner un élément d'un fichier XML en se basant sur la structure arborescente d'un tel document. Il
emploie une notation relativement parlante (on l'espère !).

Le tableau ci-dessous donne quelques éléments de XPath à titre d'illustration

format signification

truc sélection des éléments <truc> du noeud courant

sélection de l'attribut "param" du noeud


@param
courant (s'il existe)

sélection des éléments <truc> du parent du


../truc
noeud courant

sélection de tous les éléments <truc> du


//truc
document

sélection du 5ème éléments fils du troisième


truc[3]/machin[5]
élément <truc> du noeud courant

Dans les exemples suivants, nous mettons en rouge, les éléments ou attributs sélectionnés par le langage XPath.

exemple : /alpha/delta/beta <alpha>


<beta/>
<gamma/>
<beta/>
<beta/>
<delta>
<beta/>
</delta>
<gamma/>
</alpha>
exemple : //delta/beta <alpha>
<beta/>
<gamma/>
sélection de tous les enfants <beta> de <delta> <beta/>
<delta>
<beta/>
</delta>
<gamma>
<delta>
<beta/>
<beta/>
</delta>
</gamma>
</alpha>

exemple : /alpha/gamma/delta/* <alpha>


<xi>
<delta>
<beta/>
<beta/>
<epsilon/>
<phi/>
</delta>
</xi>
<gamma>
<delta>
<beta/>
<beta/>
<epsilon/>
<phi/>
</delta>
</gamma>
<gamma>
<beta>
<beta>
<beta/>
</beta>
</beta>
</gamma>
</alpha>

exemple : <alpha>
<beta/>
/alpha/beta[1] <beta/>
<beta/>
<beta/>
sélection du premier fils <beta> de <alpha>
</alpha>

/alpha/beta[last()] <alpha>
<beta/>
<beta/>
sélection du dernier fils <beta> de <alpha>
<beta/>
<beta/>
</alpha>

Dans l'exemple précédent la fonction last() renvoie le numéro du dernier noeud de la liste. Il s'agit d'une fonction XPath. Il existe
un grand nombre de fonctions XPath. Nous en donnons ci-dessous quelques échantillons :
fonction signification

renvoie le plus petit entier supérieur ou


ceiling(arg) égal à la valeur de arg (qui doit être un
nombre)

arg désigne un ensemble de noeud ; la


count(arg) fonction renvoie le nombre de noeuds de
cet ensemble

utilisée par XSLT, cette fonction


current() renvoie un ensemble de noeuds
contenant le noeud courant

renvoie le plus grand entier inférieur ou


floor(arg) égal à la valeur de arg (qui doit être un
nombre)

renvoie la valeur de la taille contextuelle


last() en nombre de noeuds ; c'est aussi le
numéro du dernier noeud.

renvoie le nom du premier noeud


rencontré dans la liste de noeud indiquée
name([arg])
par arg. Si arg est omis, c'est le nom du
noeud contextuel qui est renvoyé.

renvoie la valeur de la position


position() contextuelle, c'est à dire le numéro du
noeud courant

exemple :
<alpha>
<beta id="beta1"/>
//beta[@truc]
<beta id="beta2"/>
<beta truc="beta3"/>
tous les éléments "beta" qui possède un attribut "truc" sont <beta/>
sélectionnés </alpha>

//beta[not(@*)] <alpha>
<beta id="beta1"/>
<beta id="beta2"/>
tous les éléments "beta" qui ne possèdent pas d'attribut sont <beta truc="beta3"/>
sélectionnés
<beta/>
</alpha>

exemple : //*[string-length(name())=5] <alpha>


<omega89/>
On recherche tous les éléments dont le nom a une longueur de <tau/>
5 caractères. <beta/>
<gamma/>
<delta565/>
<rho/>
</alpha>

L'expression entre crochets dans l'exemple précédent constitue un prédicat qui est soit vrai, soit faux. Ce prédicat opère comme
un filtre, c'est à dire qu'il permet de ne sélectionner que les éléments pour lesquels l'expression est vraie.
Autre caractéristique intéressante de XPath, les axes de sélection. Ces axes permettent de définir le domaine dans lequel une
sélection peut s'opérer. La syntaxe est très simple :

nom_axe::<conditions de sélection>

Les principaux axes de sélection sont résumés dans le tableau ci-dessous

axe définition

ancestor définit le noeud parent, le grand-père, etc....

attribute définit les attributs du noeud courant

child définit les fils directs du noeud courant

définit les fils du noeud courant, les petits-fils,


descendant
etc....

définit les noeuds qui suivent le noeud courant (dans


following
l'ordre de la déclaration)

parent définit le noeud parent du noeud courant

définit tous les noeuds précédant le noeud courant


preceding
(dans l'ordre de la déclaration)

self définit le noeud courant

exemple : child::personne[child::adresse- <liste>


<personne>dupont
ville[child::pays="Australie"]]
<adresse_ville>Paris</adresse_ville>
<pays>France</pays>
(le noeud courant est "liste"). </personne>
<personne>dubois
<adresse_ville>Berlin</adresse_ville>
<pays>Allemagne</pays>
</personne>
<personne>Smith
<adresse_ville>Sydney</adresse_ville>
<pays>Australie</pays>
</personne>
<personne> Kelly
<adresse_ville>Melbourne</adresse_ville>
<pays>Australie</pays>
</personne>
</liste>

XPointer
IL s'agit d'un mode de désignation d'une cible en employant XPointer qui n'est autre qu'une extension de XPath.

Imaginons que dans un fichier xml, on fasse référence, par exemple pour sélectionner, à un élément d'un autre fichier xml dont un
attribut possède une certaine valeur. Il est alors possible d'identifier cet élément avec la notation XPointer.
exemple : xlink:href="http://www.site_machin.fr/trucmuche/cefichier.xml#xpointer(chose("285"))"

sélectionnera dans le fichier "cefichier.xml" les éléments possédant un attribut chose dont la valeur est 285 :

-----
<bidule chose="285"/>
-----

On peut aussi utiliser une forme simplifiée dès lors que l'attribut est défini comme un ID

exemple : xlink:href="http://www.site_machin.fr/trucmuche/cefichier.xml#285"

De manière courante, XPointer est utilisé sous la forme : adresse_URI_de_document#xpointer(chemin_indiqué_en_Xpath). Nous


enverrons quelques exemples plus loin.

Les insuffisances des liens HTML


En HTML, les liens sont définis par des balises bien définies, comme la balise <a> ou la balise <img> ; par exemple pour atteindre un
endroit précis d'un document :

dans le document cible (ancre ou signet) : <a name="machin">


dans le document source (lien) : <a
href="http://tagada/truc.htm#machin">

La méthode est simple mais atteint vite des limites dont on peut dresser la liste :

● les liens sont désignés par des noms d'éléments précis : "a", "img" par exemple
● la sémantique d'un lien est définie dans les spécifications HTML
● Une ancre doit être placée effectivement à chaque destination (la liaison est donc prédéfinie)
● La définition du lien doit être effective à chaque source du lien
● les liens sont 1-1 : un lien possède une seule source et une seule destination.
● Aucune historique des liens utilisés n'est disponible (à part les navigateurs qui sont des applications)
● On ne peut connaître la source d'un lien quand on est sur la cible
● On doit pouvoir accéder à un document cible pour y placer une ancre <a> servant d'index (problème de possibilité
d'écriture).

XML propose d'autres méthodes de constituer des liens : XLink et XPointer qui permettent

● de rendre les liens multidirectionnels (et non plus monodirectionnels)


● de définir les liens dans un document externe
● d'indexer des positons arbitraires d'un document (XPointer)
● de définir un lien à partir de n'importe quel élément (pas de balises prédéfinies)

XLink, liens simples


XLink est un raccourcis pour XML Linking Language. Cette technologie est définie par le W3C. Deux types de liens peuvent être
définis :

● les liens simples (analogues aux liens HTML)


● les liens étendus

Un lien simple est un lien unique entre une source et une destination.

Reprenons l'exemple des livres et supposons que les adresses des éditeurs soient dans un fichier XML, adresses.xml, distinct du
fichier livres.xml :
Pour réaliser le lien, l'élément "éditeur" comprendra alors la définition du lien :

<editeur xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="http://www.truc/adresses.xml#xpointer(child::coordonnées)
xlink:title="adresse">
Gallimard
</editeur>

Dans cet exemple, la source est locale (le lien est défini dans l'élément source) et la cible est distante. Les attributs qui peuvent
être utilisés dans un lien simple permettent de spécifier le type de lien (xlink:type), la source (xlink:href), les caractéristiques du
lien (xlink:title), l'endroit où on affiche le document cible (xlink:show), le moment où on affiche le document cible (xlink:actuate).

attribut valeur explication

xlink:type simple type de lien

xlink:href une URL adresse cible

xlink:title chaîne caractérise le lien

new affichage du document cible dans une nouvelle fenêtre

replace affichage du document cible dans la même fenêtre


xlink:show
embed affichage du document cible à l'endroit de l'élément source

undefined le choix du lieu d'affichage est différé

onLoad apparition du document cible au chargement du document source

xlink:actuate onRequest apparition du document cible sur clic

undefined le choix du moment de l'affichage est différé

exemple : un document appelle une image :

<?xml version="1.0" encoding="ISO-8859-1" ?>


<logo
xmlns:xlink = "http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="images0/logoupjv.gif"
xlink:title="logo université"
xlink:show="new"
xlink="onRequest">
logo de l'UPJV
</logo>
Essayez de visualiser ce fichier XML avec Mozilla (par exemple Netscape 6) après avoir placé les fichiers aux bons endroits.

On peut aussi définir le lien simple dan sune DTD au lieu de le faire figurer dans le fichier source XML :

exemple : reprenons l'exemple précédent avec une DTD (nous ne donnons ci-dessous que l'extrait correspondant de la DTD)

<!ELEMENT logo>
<!ATTLIST logo
xmlns:xlink CDATA #FIXED
"http://www.w3.org/1999/xlink"
xlink:type (simple) #FIXED "simple"
xlink:href CDATA #FIXED "images0/logoupjv.gif"
xlink:title CDATA #FIXED "logo université"
xlink:show (new|replace|embed|undefined) #FIXED "new"
xlink:actuate (onLoad|onRequest|undefined) #FIXED "onRequest">

XLink, Liens étendus


Les liens étendus sont de véritables nouveautés par rapport aux liens HTML. En effet,

● un lien étendu peut pointer sur plusieurs cibles


● un lien étendu peut permettre à plusieurs sources de pointer sur la même cible
● un lien étendu peut être défini dans un fichier différent des fichiers source et cible
● un lien étendu comprend la description des ressources participantes au lien et aussi la nature de la relation (arc) entre les
ressources

Ceci nous amène à employer le vocabulaire suivant :

● resource : ressource locale : la ressource est dan sle document où figure la définition du lien
● locator : ressource distante : la resource est extérieure au document où figure la définition du lien
● arc : relation entre ressources indiquant le sens (point de départ et point d'arrivée) du lien.

Imaginons , dans l'exemple des livres que l'éditeur possède une adresse administrative (siège social par exemple) et une adresse
pour les livraisons.

Dasn un premier temps, on définira le lien dans le fichier livres.xml. L'élément "editeur" sera alors une ressource locale et les
adresses des ressources distantes. On aura donc dans le fichier livres.xml :
<editeur
xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="extended"
xlink:title="adresse_editeur">
<nomediteur
xlink:type="resource"
xlink:label="nom">
Gallimard
</nomediteur>
<adressead
xlink:type="locator"
xlink:href="http:/www.carnet1/adresse.xml#xpointer(/child::adressead/child::ville)"
xlink:label="adresse_adm" />
<adresseliv
xlink:type="locator"

xlink:href="http:/www.carnet2/adresse.xml#xpointer(/child::adresseliv/child::ville)"
xlink:label="adresse_liv" />
<arc_adm
xlink:type="arc"
xlink:from="nom"
xlink:to="adresse_adm" />
<arc_liv
xlink:type="arc"
xlink:from="nom"
xlink:to="adresse_liv" />
</editeur>

Le code ci-dessus est assez explicite. Tout d'abord, on constate que le lien étendu "editeur" est un élément composite comprenant
plusieurs éléments : la ressource locale "nom" (avec l'attribut "ressource", les ressources distances (avec l'attribut "locator")
adress_adm" et "adresse_liv" et deux arcs "arc_adm" et "arc_liv" qui précisent chacun la source et la cible à l'aide de l'attribut
label. On notera que

● l'élément "editeur" possède l'attribut type avec la valeur "extended"


● l'attribut xmlns:xlink est conféré par héritage aux éléments enfants de "editeur"
● l'attribut xlink:href est obligatoire pour les ressources distantes (de type "locator")
● les attributs "label" sont obligatoires si l'on veut que les ressources participent à des liens
● au minimum, un lien étendu doit posséder trois enfants : deux ressources et un arc.

Supposons maintenant que l'on souhaite définir les mêmes liens dans un document particulier différent des documents livres.xml,
http:/www.carnet1/adresse.xml et http:/www.carnet2/adresse.xml. On créera alors un fichier XML spécifique, relations.xml dont
le contenu est le suivant :

<?xml version="1.0" ?>


<liens xmlns:xlink="http://www.w3.org/1999/xlink">
<lienssuperbes
xlink:type="extended">
<ancre
xlink:type="locator"
xlink:label="ancreA"
xlink:href="livres.xml#xpointer(/bouquins/livre[position()=1]/child::editeur") />
<ancre
xlink:type="locator"
xlink:label="ancreB"
xlink:href="http://www.carnet1/adresse.xml#xpointer(/child::adressead/child::ville") />
<ancre
xlink:type="locator"
xlink:label="ancreC"
xlink:href="http://www.carnet2/adresse.xml#xpointer(/child::adresseliv/child::ville")
/>
<lienadhoc
xlink:arc
xlink:from="ancreA"
xlink:to="ancreB" />
<lienadhoc
xlink:arc
xlink:from="ancreA"
xlink:to="ancreC" />
</lienssuperbes>
</liens>
Introduction à XML
date de dernière mise à jour : 8 mai 2003

XML et les bases de données relationnelles

Rappel sur la structure des bases de données relationnelles


Considérons l'exemple d'un fichier XML permettant de décrire des livres d'une bibliothèque.

exemple :

<?xml version="1.0"?>
<?xml-stylesheet href="biblio.xsl" type="text/xsl"?>
<bouquins>
<livre>
<numero>123</numero>
<titre>Les Trois Mousquetaires</titre>
<auteur>A.Dumas</auteur>
<editeur>Gallimard</editeur>
<prix>60</prix>
</livre>
<livre>
<numero>124</numero>
<titre>Les Diaboliques</titre>
<auteur>Boileau</auteur>
<auteur>Narcejac</auteur>
<editeur>Duchnok</editeur>
<prix>78</prix>
</livre>
<livre>
<numero>125</numero>
<titre>Cinq semaines en ballon</titre>
<auteur>Jules Verne</auteur>
<editeur>Hetzel</editeur>
<prix>inestimable</prix>
</livre>
</bouquins>

Cet exemple illustre bien, même avec le nombre réduit de données, que cette solution est loin d'être satisfaisante, notamment du fait des nombreuses
répétitions. En fait, nous souhaiterions décrire une base de données.

Une base de données relationnelle est un ensemble de tables possédant des lignes (enregistrements) et des colonnes (attributs). La normalisation
impose que chaque table possède une clé "primaire", identifiant unique de chaque enregistrement de la table.

Les associations entre les tables s'effectuent, pour les jointures, par utilisation de clés étrangères.

En résumé, les caractéristiques du modèle relationnel sont les suivantes :

● une base de données est décrite par un schéma qui doit être physiquement séparé des données et qui décrit la structure ;
● les schéma comprend la description des tables (relations)
● une table est caractérisée par son nom, les noms de ses attributs, la déclaration d'un attribut (ou plusieurs) comme clé primaire, le type de
chaque attribut (chaîne de caractères, numérique, booléen, ...), la mention NOT NULL pour certains attributs (dont la clé primaire), des
contraintes d'appartenance des valeurs des attributs à des domaines ;
● une table peut avoir comme attributs des clés étrangères qui sont des clés primaires pour d'autres tables et permettent effectuer des
opérations de jointure.
exemple : base de données "biblio"

Elle peut être composée des tables suivantes :

● la table LIVRE dont le schéma relationnel est

LIVRE (numero, titre, #editeur, prix)

● la table AUTEUR dont le schéma relationnel est

AUTEUR (numaut, nomaut, pnomaut)

● la table LIV_AUT dont le schéma relationnel est

LIV_AUT (numliv, numaut)

● la table EDITEUR dont le schéma relationnel est

EDITEUR (numedit, nomedit, adedit)

Le schéma de la base "biblio" est défini par son implémentation initiale :

CREATE TABLE LIVRE (


numliv INTEGER NOT NULL,
titre VARCHAR(64),
numedit INTEGER,
prix VARCHAR(20),
PRIMARY KEY(numliv),
FOREIGN KEY(numedit) REFERENCES EDITEUR);
CREATE TABLE EDITEUR (
numedit INTEGER NOT NULL,
nomedit VARCHAR(40),
adedit VARCHAR(64),
PRIMARY KEY (numedit));
CREATE TABLE AUTEUR (
numaut INTEGER NOT NULL,
nomaut VARCHAR(32),
pnomaut VARCHAR(32),
PRIMARY KEY(numaut));
CREATE TABLE LIV_AUT (
numliv INTEGER NOT NULL,
numaut INTEGER NOT NULL,
PRIMARY KEY(numliv, numaut));

modèle relationnel
Le modèle conceptuel des données (avec les cardinalités suivant le formalisme "entité-association") et le graphe des dépendances fonctionnelles
explicitent cette structure.

graphe des dépendances fonctionnelles

Dans ce schéma, on admet qu'un livre peut être écrit par plusieurs auteurs, qu'un auteur peut avoir écrit plusieurs livres, qu'un livre ne correspond
qu'à un seul éditeur.

Représentation des attributs par des éléments


La première idée qui vient à l'esprit est de remplacer brutalement les tables et leurs attributs par des éléments. On aboutit alors à une structure xml
arborescente classique.
exemple : avec l'exemple ci-dessus, la structure du fichier XML correspondant à la base de données est relativement simple, quoique semblant plus
longue :

<?xml version="1.0"?>
<biblio>
<livre>
<numliv>123</numliv>
<titre>Les Trois Mousquetaires</titre>
<numedit>521</numedit>
<prix>60</prix>
</livre>
<livre>
<numliv>124</numliv>
<titre>Les Diaboliques</titre>
<numedit>522</numedit>
<prix>78</prix>
</livre>
<livre>
<numliv>125</numliv>
<titre>Cinq semaines en ballon</titre>
<numedit>523</numedit>
<prix>inestimable</prix>
</livre>
<auteur>
<numaut>321</numaut>
<nomaut>Dumas</nomaut>
<pnomaut>Alexandre</pnomaut>
</auteur>
<auteur>
<numaut>322</numaut>
<nomaut>Boileau</nomaut>
<pnomaut></pnomaut>
</auteur>
<auteur>
<numaut>323</numaut>
<nomaut>Narcejac</nomaut>
<pnomaut></pnomaut>
</auteur>
<auteur>
<numaut>324</numaut>
<nomaut>Verne</nomaut>
<pnomaut>Jules</pnomaut>
</auteur>
<editeur>
<numedit>521</numedit>
<nomedit>Gallimard</nomedit>
<adedit></adedit>
</editeur>
<editeur>
<numedit>522</numedit>
<nomedit>Duchnok</nomedit>
<adedit></adedit>
</editeur>
<editeur>
<numedit>523</numedit>
<nomedit>Hetzel</nomedit>
<adedit></adedit>
</editeur>
<liv_aut>
<numliv>123
<numaut>321
</liv_aut>
<liv_aut>
<numliv>124
<numaut>322
</liv_aut>
<liv_aut>
<numliv>125
<numaut>324
</liv_aut>
<liv_aut>
<numliv>124
<numaut>323
</liv_aut>
</biblio>

Représentation des attributs par des attributs


On peut maintenant considérer que les attributs (modèle relationnel) peuvent être représentés par des attributs (XML) contrairement au cas
précédent où tous les attributs de la base de données étaient représentées par des éléments XML.
On peut, en effet, pour chaque table, considérer que la table est un élément mais que ses attributs sont des attributs XML :

<?xml version="1.0"?>
<biblio>
<livre numero="123",titre="Les Trois Mousquetaires",numedit="521",prix="60" />
<livre numero="124",titre="Les Diaboliques",numedit="522", prix="78"/>
<livre numero="125",titre="Cinq semaines en ballon",numedit="523", prix="inestimable" />
<auteur numaut="321", nomaut="Dumas",pnomaut="Alexandre" />
<auteur numaut="322",nomaut="Boileau",pnomaut="" />
<auteur numaut="323",nomaut="Narcejac",pnomaut="" />
<auteur numaut="324",nomaut="Verne",pnomaut="Jules" />
<editeur numedit="521",nomedit="Gallimard",adedit="" />
<editeur numedit="522",nomedit="Duchnok",adedit="" />
<editeur numedit="523",nomedit="Hetzel",adedit="" />
<liv_aut numliv="123",numaut="321" />
<liv_aut numliv="124",numaut="322" />
<liv_aut numliv="125",numaut="324" />
<liv_aut numliv="124",numaut="323"/>
</biblio>

Cette représentation possède plusieurs avantages :

● elle est proche du schéma relationnel : le mot attribut correspond à la même signification dans la base et dans XML ;
● on ne peut avoir qu'un attribut unique par table
● on peut renvoyer à une DTD les plages de valeurs prises par les valeurs des attributs XML
● le fichier XML est moins volumineux

Pour ces raisons, nous adopterons cette représentation par la suite.

Requête sur une base de données


On peut maintenant se poser la question s'il est aussi aisé de faire des requêtes sur un fichier de données XML que sur une base de données
relationnelle. Dans ce dernier cas, le langage SQL permet de formuler les requêtes.
exemple : recherche des auteurs dont le prénom est "Alexandre".

SELECT nomaut FROM AUTEUR WHERE pnomaut="Alexandre" ;

Dans la version XML, les recherches sont des filtres qui sont définis dans un fichier XSLT.

exemple : avec la représentation XML précédente :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


<xsl:template match="/">
<table border="1">
<tr>
<xsl:for-each select="biblio/auteur[@pnomaut='Alexandre']"/>
<td>
<xsl:value-of select="@nomaut"/>
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
Bibliographie

Voici une liste de sites proposant des cours ou tutoriels sur XML :

● articles et chroniques sur XML

Langages XML : une nébuleuse en expansion


Les hyperliens de demain
XML expliqué aux débutants, (un peu ancien)

● les sites du W3C :

groupes de travail :http://www.w3.org/XML/


recommandations : http://www.xml.com/axml/target.html

● tutoriels divers sur XML :

Zvon Tutorials
XML Seminars, Tutorials, and Presentations
XML Revolution: XML Tutorial Slides
Doing It with XML partie 1 et partie 2
On Display: XML Web Pages with Opera 4.0
On Display: XML Web Pages with Mozilla
Next Generation HTML: The Big Picture
Frequently Asked Questions about the Extensible Markup
Language
xml-zone.com
Ask The XML Pro
XML Namespaces
Extensible Markup Language (XML) 1.0 (Second Edition)
Introduction technique à XML
Server-side XML

● tutoriels divers sur XHTML :

Introduction to XHTML
DTD de XHTML, syntaxe stricte

● tutoriels sur CSS :

Liste de ressources de xml.about.com sur l'utilisation de CSS


avec XML
Cascading Style Sheets, level 2
Les Cahiers Technique (sic): Les feuilles de styles

● tutoriels divers sur XSL :

XSL Tutorial,
Zvon Tutorials
eXtensible Stylesheet Language
XSL Transformations
site feuilles de style
Understanding XSL
XSL Developer's Guide
XSL Considered Harmful partie 1 et partie 2
Liste de ressources de xml.about.com sur l'utilisation de XSL
avec XML
Introduction technique à XSLT
Introduction à XSL/FO

● tutoriels sur les autres technologies XML :

XML Schema Part 0: Primer


XML Schema Part 1: Structures
XML Schema Part 2: Datatypes
XML Linking Language
XML Base
XML Pointer Language
XML Path Language
Introduction à XML et DOM

Quelques livres :

titre auteurs éditeur

XML, la synthèse ; A.Boukhors, A. Kaszycki,


Intégrez XML dans vos J. Laplace, S. Munerot, Dunod
architectures L. Poublan

XML, le guide de Osmann Eyrolles


E. Rusty Harold
l'utilisateur Multimédia

XML et les bases de


K. Williams et al. Eyrolles
données