sommaire - gauche -rendu réaliste

Transcription

sommaire - gauche -rendu réaliste
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
[email protected]
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é)
<body><p>..........
.............................
</body></p>
●
bon exemple (bien formé)
<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>[email protected]</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
<!ELEMENT
<!ELEMENT
<!ELEMENT
date (jour, mois, année)>
jour (#PCDATA)>
mois (#PCDATA)>
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
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
bouquins (livre+)>
livre (numero, titre, auteur+, editeur, prix?)>
numero (#PCDATA)>
titre (#PCDATA)>
auteur (#PCDATA)>
editeur (#PCDATA)>
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)>
<!ATTLIST message longueur CDATA "20">
<message longueur="20">.........</message>
<!ELEMENT paiement (#PCDATA)>
<!ATTLIST paiement mode (chèque|espèces|carte) "espèces">
<paiement mode="espèces">........</paiement>
<!ELEMENT utilisateur (#PCDATA)>
<!ATTLIST utilisateur username CDATA #REQUIRED>
<!ATTLIST utilisateur password CDATA #REQUIRED>
<utilisateur username="dupont"
password="azerty567">......</utilisateur>
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
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
message(de, vers, objet, corps)>
de (#PCDATA)>
vers (#PCDATA)>
objet (#PCDATA)>
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
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
pour les chaînes de caractères
pour les nombres rationnels
pour les nombres entiers
pour les booléens
pour les dates
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
<!ELEMENT
<!ELEMENT
<!ELEMENT
truc (alpha, beta, gamma)>
alpha (#PCDATA)>
beta (#PCDATA)>
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
<!ELEMENT
<!ELEMENT
<!ELEMENT
truc (alpha*, beta+, gamma?)>
alpha (#PCDATA)>
beta (#PCDATA)>
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
<!ELEMENT
<!ELEMENT
<!ELEMENT
truc ((alpha+, beta?)|gamma*)>
alpha (#PCDATA)>
beta (#PCDATA)>
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
déclaration relative : ~cochard/sim
Pour interpréter les URI relatives, on utilise XMLBase :
(adresse complète)
<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:[email protected]">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:[email protected]">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
l'image est
répétée
régulièrement
mais seulement
sur l'élément
bouquins.
bouquins {font-family : Arial,
Helvetica, sans-serif;
background-image:
url(photo.gif)}
numero {display: block; fontsize : 12pt; color=green;}
titre {display: block; fontsize: 14pt; color: red; fontstyle: bold }
auteur {display: block; fontsize: 12pt}
editeur { display: inline; fontsize : 12pt;}
prix {display: inline; fontsize :12pt; font-style:
italic;}
l'image est
répétée
régulièrement
mais seulement
sur l'élément
éditeur
bouquins {font-family : Arial,
Helvetica, sans-serif; }
numero {display: block; fontsize : 12pt; color=green;}
titre {display: block; fontsize: 14pt; color: red; fontstyle: bold }
auteur {display: block; fontsize: 12pt}
editeur { display: inline; fontsize : 12pt; background-image:
url(photo.gif)}
prix {display: inline; fontsize :12pt; font-style:
italic;}
l'image n'est
pas répétée et
est positionnée
en haut à
gauche sur
l'élément
bouquins
bouquins {font-family : Arial,
Helvetica, sans-serif;
background-image:
url(photo.gif);
background-repeat: no-repeat}
numero {display: block; fontsize : 12pt; color=green;}
titre {display: block; fontsize: 14pt; color: red; fontstyle: bold }
auteur {display: block; fontsize: 12pt}
editeur { display: inline; fontsize : 12pt;}
prix {display: inline; fontsize :12pt; font-style:
italic;}
L'image est
centrée
horizontalement
et
verticalement
sur l'élément
bouquins
bouquins {font-family : Arial,
Helvetica, sans-serif;
background-image:
url(photo.gif);
background-repeat: no-repeat ;
background-position: center
center}
numero {display: block; fontsize : 12pt; color=green;}
titre {display: block; fontsize: 14pt; color: red; fontstyle: bold }
auteur {display: block; fontsize: 12pt}
editeur { display: inline; fontsize : 12pt;}
prix {display: inline; fontsize :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>[email protected]</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
@param
sélection de l'attribut "param" du noeud
courant (s'il existe)
../truc
sélection des éléments <truc> du parent du
noeud courant
//truc
sélection de tous les éléments <truc> du
document
truc[3]/machin[5]
sélection du 5ème éléments fils du troisième
é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
sélection de tous les enfants <beta> de <delta>
exemple : /alpha/gamma/delta/*
<alpha>
<beta/>
<gamma/>
<beta/>
<delta>
<beta/>
</delta>
<gamma>
<delta>
<beta/>
<beta/>
</delta>
</gamma>
</alpha>
<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/>
<beta/>
<beta/>
<beta/>
/alpha/beta[1]
sélection du premier fils <beta> de <alpha>
</alpha>
/alpha/beta[last()]
<alpha>
<beta/>
<beta/>
<beta/>
<beta/>
sélection du dernier fils <beta> de <alpha>
</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
ceiling(arg)
renvoie le plus petit entier supérieur ou
égal à la valeur de arg (qui doit être un
nombre)
count(arg)
arg désigne un ensemble de noeud ; la
fonction renvoie le nombre de noeuds de
cet ensemble
current()
utilisée par XSLT, cette fonction
renvoie un ensemble de noeuds
contenant le noeud courant
floor(arg)
renvoie le plus grand entier inférieur ou
égal à la valeur de arg (qui doit être un
nombre)
last()
renvoie la valeur de la taille contextuelle
en nombre de noeuds ; c'est aussi le
numéro du dernier noeud.
name([arg])
renvoie le nom du premier noeud
rencontré dans la liste de noeud indiquée
par arg. Si arg est omis, c'est le nom du
noeud contextuel qui est renvoyé.
position()
renvoie la valeur de la position
contextuelle, c'est à dire le numéro du
noeud courant
exemple :
//beta[@truc]
tous les éléments "beta" qui possède un attribut "truc" sont
sélectionnés
//beta[not(@*)]
tous les éléments "beta" qui ne possèdent pas d'attribut sont
sélectionnés
exemple : //*[string-length(name())=5]
On recherche tous les éléments dont le nom a une longueur de
5 caractères.
<alpha>
<beta id="beta1"/>
<beta id="beta2"/>
<beta truc="beta3"/>
<beta/>
</alpha>
<alpha>
<beta id="beta1"/>
<beta id="beta2"/>
<beta truc="beta3"/>
<beta/>
</alpha>
<alpha>
<omega89/>
<tau/>
<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
descendant
définit les fils du noeud courant, les petits-fils,
etc....
following
définit les noeuds qui suivent le noeud courant (dans
l'ordre de la déclaration)
parent
définit le noeud parent du noeud courant
preceding
définit tous les noeuds précédant le noeud courant
(dans l'ordre de la déclaration)
self
définit le noeud courant
exemple : child::personne[child::adresseville[child::pays="Australie"]]
(le noeud courant est "liste").
<liste>
<personne>dupont
<adresse_ville>Paris</adresse_ville>
<pays>France</pays>
</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
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
onRequest
apparition du document cible sur clic
undefined
le choix du moment de l'affichage est différé
xlink:show
xlink:actuate
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
"http://www.w3.org/1999/xlink"
xlink:type
xlink:href
xlink:title
xlink:show
xlink:actuate
CDATA
#FIXED
(simple)
CDATA
CDATA
(new|replace|embed|undefined)
(onLoad|onRequest|undefined)
#FIXED
#FIXED
#FIXED
#FIXED
#FIXED
"simple"
"images0/logoupjv.gif"
"logo université"
"new"
"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
nomaut
VARCHAR(32),
pnomaut VARCHAR(32),
PRIMARY KEY(numaut));
NOT NULL,
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 ;
Intégrez XML dans vos
architectures
A.Boukhors, A. Kaszycki,
J. Laplace, S. Munerot,
L. Poublan
Dunod
XML, le guide de
l'utilisateur
E. Rusty Harold
Osmann Eyrolles
Multimédia
XML et les bases de
données
K. Williams et al.
Eyrolles

Documents pareils