Cours XML
Cours XML
Cours XML
¤>>>¤
XML
(eXtensible Markup Language)
¤>>>¤
Abderrazak MKADMI
2002/2003
TABLE DES MATIÈRES
INTRODUCTION GÉNÉRALE 5
1. OBJECTIF ET DÉFINITIONS 5
1.1. DÉFINITION 5
1.2. ORIGINE 6
1.3. HISTORIQUE 7
2. LES LIMITES DE HTML 7
3. LES APPORTS DE XML 8
3.1. EXTENSIBILITÉ ET STRUCTURE : 8
3.2. STRUCTURE TYPE : M ODULARISATION ET RÉUTILISATION 8
1. INTRODUCTION 41
2. XPATH: LE LANGAGE DE NAVIGATION 41
2.1. LA SÉLECTION D'OBJETS 41
2.2 LES AXES NODAUX 42
3. LES LIENS XML: XLINK ET XPOINTER 43
3.1 LES LIENS XLINK 43
3.2. LES POINTEURS XML: XPOINTER 46
1. INTRODUCTION 60
2. LE DOM ET LE W3C 61
3. LA PROGRAMMATION DU DOM 61
4. INTERFACE SAX 62
5. DOM VERSUS SAX 64
1- INTRODUCTION 70
2- CORRESPONDANCES ENTRE SGBDR ET XML 71
2-1 SGBDR 71
2-2 LANGAGE SQL 72
2-3 XML VS SGBDR : STRUCTURE 72
2-4 XML VS SGBDR : RELATIONS 73
3- EXPORTATION DES BASES DE DONNÉES RELATIONNELLES VERS XML 76
4- EXPORTATION DES DONNÉES XML VERS UNE BASE DE DONNÉES RELATIONNELLE 77
5- LE LANGAGE DE REQUÊTE XML : XQUERY 78
5-1 P RÉSENTATION ET OBJECTIF 78
5-2 LES BASES DE XQUERY 79
1. CHAMP D'APPLICATIONS 83
4.1 COMMERCE ÉLECTRONIQUE ET ÉCHANGE DE DONNÉES INFORMATISÉES (EDI) 83
1.2 GESTION ÉLECTRONIQUE DE DOCUMENTS (GED) : 83
1.3 INTEROPÉRABILITÉ DE SYSTÈMES D'INFORMATIONS HÉTÉROGÈNES 83
1.4 P ERSONNALISATION DE LA RELATION CLIENT (CRM): 83
2. LES STANDARDS 83
2.1. INTRODUCTION 83
2.2. MATHML (MATHERNATICAL MARKUP LANGUAGE) 84
2.3. SVG (SCALABLE VERCTOR GRAPHICS) 85
2.4. SMIL (SYNCHRONIZED MULTIMEDIA INTEGRATION LANGAGE) 86
2.5. RDF (RESOURCE DESCRIPTION FRARNEWORK) 88
CONCLUSION 89
BIBLIOGRAPHIE 90
LIVRES 90
SITES INTERNET 90
OUTILS 90
SITE OFFRANT DES DTDS STANDARDS 91
SITES DE LOGICIELS EN LIGNE 91
GLOSSAIRE 92
Introduction générale
INTRODUCTION GÉNÉRALE
1. OBJECTIF ET DÉFINITIONS
1.1. DÉFINITION
XML peut être considéré comme une généralisation de HTML où, au lieu d'avoir un jeu de
balises prédéfinies ayant une signification prédéfinie, l'auteur peut "inventer" à volonté ses
propres balises.
Le but de XML est de faciliter le traitement automatisé de documents et de données. L'idée
est de pouvo ir structurer les informations de telle manière qu'elles puissent être à la fois lues
par des personnes sur le web et traitées par des applications qui exploiteront de manière
automatisée les informations en question.
1
ABRAMATIC, Jean-François (W3C). - Entretien à Décision Micro, le 6 juin 2001
L'objectif majeur de XML donc est d'étendre les fonctionnalités de HTML afin de faciliter les
échanges de documents sur le WEB. Pour cela les acteurs du W3C (World Wide Web
Consortium) souhaitaient définir un langage bénéficiant des principales fonctionnalités de
SGML (Standard Generalized Markup Language) tout en étant plus simple à apprendre et à
utiliser que ce dernier.
Ces évolutions comprennent :
• la définition libre de nouvelles balises et de nouveaux attributs,
• le support de structure complexe de documents,
• la vérification de la structure d'un document par rapport à une grammaire type définie
dans un document appelé DTD (Document Type Definition),
• la séparation entre le contenu (document XML) et la mise en page (feuille de style
CSS ou XSL).
XML peut donc être défini comme étant un langage de description et d'échanges de
données structurés.
Exemple de document XML
Description XML des informations carte de visite
<cartes>
<personne>
<nom>Mkadmi</nom>
<prenom>Abderrazak</prenom>
<bureau>
<laboratoire>PARAGRAPHE</laboratoire>
<adresse>
<rue>2, rue de la Liberté</rue>
<code postal>93526</code postal>
<ville>SAINT-DENIS</ville>
</adresse>
<téléphone>(33) 1 49 40 67 89</téléphone>
</bureau>
</personne>
</cartes>
1.2. ORIGINE
1.3. HISTORIQUE
§ 1996: groupe de travail au sein du W3C
§ 1998 : publication de recommandations pour la version 1.0 de XML
XML est une recommandation du W3C en date du 10 Février 1998, référencée à :
http://www.w3.org/TR/1998/REC-xml-19980210
Quelques standards gérés par le W3C :
• XSL (eXtensible Stylesheet Language) : XSLT + XSLFO : Règles de transformation et de
présentation de documents XML,
• XLL (eXtensible Linking Language Xlink + Xpointer : Liaison et adressage entre
documents,
• XPath (utilisé pour XSLT et XPointer) : Expression de la navigation dans des documents
XML,
• DOM (Document Object Model) : API d'accès et de manipulation de documents XML sous
forme d'objets,
• XML Schema : Définition de la structure des documents XML en XML,
• XQL (eXtensible Query Language) : Requêtes pour la recherche d'information dans un arbre
XML.
En fait HTML est très bien adapté à la création de sites simples. Son apprentissage est aisé et
les sites ainsi développés sont simples à manipuler. Cependant l'évolution des besoins a fait
évoluer les simples documents hypertextes vers des documents dont le contenu est généré
dynamiquement à partir de bases de données. HTML a alors très vite montré ses limites
§ Un balisage prédéfini dans la norme ,
§ Beaucoup de balises de description de formes (br, b, center, etc.) et peu de balises à
caractères sémantiques (title, address, dl, etc.),
§ Une dépendance très forte du contenu et de la forme : Les documents HTML se
voulaient indépendant de toute problématique technologique. Les utilisateurs ont
aujourd'hui besoin d'un langage permettant un affichage utilisant au mieux les
capacités des navigateurs actuels sans que les documents créés ne soient pour autant
liés à leurs évolutions.
Une évolution en 1997 avec l'apparition des CSS (Cascading Style Sheets) et en 1998
avec HTML 4.0 a permis de repousser cette limite mais cela ne repose que sur le bon
Dans XML, il est possible de définir ses propres balises. Ce qui permet d'améliorer la lisibilité
et les possibilités de traitement.
Exemple :
<date>15 novembre 2002</date>
<date>
<annee>2002</annee>
<mois>11</moi>
<jour>15</jour>
</date>
Ce découpage permettra d'affiche r la date sous différents formats sans avoir à effectuer de
traitement complexe. Par contre si l'on désire pouvoir systématiser certains traitements sur les
dates et les rendre opérationnelles sur l'ensemble des navigateurs, cela suppose de définir une
norme sur le format de la date.
Exemple
<date format ="ISO-8601">2000-11-02</date>
La définition de nouvelles balises permettra de structurer l'information sous une forme ou une
autre afin de permettre le traitement et l'échange de données de façon beaucoup plus
importante qu'avec HTML.
Les domaines du commerce électronique, des échanges de données informatisés (EDI), les
transactions financières sont directement concernés par ces nouvelles fonctionnalités.
Cependant, il est important qu'il n'y ait pas d'ambiguïté sur la structure et la sémantique des
différentes données échangées entre des particuliers ou des entreprises. C'est pourquoi XML
propose des structures types de documents (les DTD).
En outre, ces dernières ouvre la porte vers des outils (API ou logiciel) permettant de
manipuler ces différentes structures.
§ Il faut noter que la casse des caractères dans un document XML est importante (la
casse est discriminante), alors que de façon générale les espaces, tabulations et
retours de chariots ne le sont pas.
§ Comme en HTML, les espaces, tabulations, retours et sauts à la ligne sont considérés
comme des séparateurs et sont générés par le parseur sous forme d'espace simple.
§ Il est possible d'insérer des commentaires dans les documents XML, en utilisant la
syntaxe suivante:
<!-- Voici le commentaire -->
§ un commentaire s'écrit entre <!- - et - - > et ne peut contenir le caractère tiret'-'.
§ Les instructions pour les applications sont comprises entre <? et ?> Exemple : <?
XXXXXX ?>
§ Un nom (ou Token) commence par une lettre et peut contenir : Lettre, Chiffre, (point),
(tiret), '_' (tiret souligné), ':' (deux points)
Tous les mots commençant par XML ou xml sont réservés.
2. LA STRUCTURE DU DOCUMENT
Il existe deux types de documents XML : le document bien formé et le document valide.
Un document bien formé est un document respectant la syntaxe XML.
Un document valide est un document bien formé qui respecte une structure type définie dans
une DTD.
Le document XML se compose de :
• un prologue (facultatif mais conseillé),
• un arbre d'éléments qui constitue le contenu du document,
• des commentaires et des instructions de traitement.
Déclaration XML
<?xml version= " 1.0 " encoding= " ISO-8859-1 " standalone = " yes " ?>
<?xml- stylesheet type = " text/xsl " href= " test.xsl " ?>
Instruction de traitement
< !DOCTYPE formation [
PROLOGUE
1. LE PROLOGUE
Si aucun jeu de caractères n'est spécifié, une application XML doit supposer qu'il s'agit du jeu
de caractères Unicode, encodé en UTF-8 ou en UTF-16.
Si aucune DTD n'est identifiée, le document est considéré bien formé. Si une DTD est
spécifiée, le document est alors valide (s'il respecte les règles dictées dans la DTD bien sûr).
< ?xml version= "1.0 " encoding = "ISO-8859-1" standalone = "yes" ?>
Dans cet exemple, il y a trois parties :
Les éléments sont les objets les plus importants des documents XML. En effet,
fondamentalement, les documents XML sont des hiérarchies strictes d'éléments. Ainsi, il
existe toujours un (et un seul) élément supérieur qui contient tous les autres. De plus, un
élément peut contenir d'autres éléménts ou du texte (un type particulier d'élément), et se situe
à l'intérieur d'un seul élément.
Chaque élément est défini de la façon suivante :
<nom> contenu de l'élément </nom>
Le nom indiqué par les balises d'ouverture et de clôture
§ doit commencer par une lettre,
§ peut comporter des chiffres, des lettres, les caractères moins (-), tiret souligné ('_'),
point ('.')
§ la casse est discriminante
§ le nom ne peut commencer par XML que ce soit en minuscule, majuscule ou en
combinaison des deux.
L'arbre d'éléments décrit la structure hiérarchique d'un élément. Les éléments les plus fins
sont dits éléments terminaux.
2-2-1 Élément racine :
Un élément racine est le premier élément déclaré dans un document XML, qui contient tous
les autres éléments. Dans notre exemple, l'élément PRODUIT est l'élément racine de notre
document.
Exemple
< ?xml version='1.0' ?>
<PRODUIT>
<TOPIC>
<TITLE>Création d’un répertoire de schémas XML</TITLE>
<AUTHOR>Abderrazak MKADMI</AUTHOR>
<PUBLISHER>EDIFRANCE</PUBLISHER>
</TOPIC>
<TOPIC>
<TITLE>Les bases de données relationnelles</TITLE>
<AUTHOR>Imad Saleh</AUTHOR>
<PUBLISHER>Eyrolles</PUBLISHER>
</TOPIC>
</PRODUIT>
Comme nous avons vu, un seul élément racine est autorisé par document.
L’exemple ci-dessous par exemple est incorrect car il comporte plusieurs éléments père :
< ?xml version='1.0' ?>
<TOPIC>
<TITLE>Création d’un répertoire de schémas XML</TITLE>
<AUTHOR>Abderrazak MKADMI</AUTHOR>
<PUBLISHER>EDIFRANCE</PUBLISHER> Syntaxe
</TOPIC> incorrecte
<TOPIC>
<TITLE>Les bases de données relationnelles</TITLE>
<AUTHOR>Imad Saleh</AUTHOR>
<PUBLISHER>Eyrolles</PUBLISHER>
</TOPIC>
2.2.2 Élément vide
Un élément vide est un élément dont le contenu entre la balise d'ouverture et la balise de
fermeture est vide (<baliseDOuverture suiteDAttributs></baliseDOuverture
suiteDAttributs>); il peut être abrégé <baliseDOuverture suiteDAttributs /> (il ne faut pas
croire qu'un élément vide ne contient pas d'information; les informations qu'il contient sont
dans ses attributs).
Un élément vide s’écrit sous la forme suivante :
<exemple></exemple> ou <exemple/>
3.1. PRÉSENTATION
§ Des entités : une entité est un objet disposant d'un nom et d'un contenu. Cet objet peut
être interne (une chaîne de caractère), externe en format XML (autre fichier XML) ou
non (fichier WORD par exemple). Une entité pourra être référencée sur un attribut.
§ Des sections littérales : une section littérale est une chaîne de caractères non
interprétée par le parseur XML. Cela permet ainsi d'inclure des caractères spécia ux.
Par exemple pour inclure des exemples de syntaxes XML dans une page XML.
§ Des données : toutes chaînes de caractères ne répondant pas aux éléments ci-dessus.
Les attributs sont toujours associés aux éléments. Ils viennent en quelque sorte les qualifier.
Ils sont toujours spécifiés dans la balise d'ouverture de l'élément.
3-2-1 utilisation
<exemple attribut= 'valeur'>
Le nom d'attribut respecte les mêmes règles que les noms d'éléments. La valeur est exprimée
en des quotes ou des apostrophes et ne peut contenir les caractères ^, % et &.
Exemple :
<?xml version ="1.0" ?>
<article>
<editeur nom ="EYROLLES">
<ed-adresse>
<rue>1, rue Thénard</rue>
<cp>75005</cp>
<ville>Paris</ville>
</ed-adresse>
</editeur>
<editeur=nom="First Interactive">
<ed-adresse>
<rue>13, rue Buffon</rue>
cp>75005</cp>
<ville>Paris</ville>
</ed-adresse>
</editeur>
<topic>
<title>XML : le guide de l’utilisateur</title>
<author>Elliotte Rusty Harold</author>
<editeur nom="EYROLLES"></editeur>
</topic>
<topic>
<title>Moteurs de recherche pour le web</title>
<author>Alfred, Emily Glossbrenner</author>
<editeur nom="First Interactive"></editeur>
</topic>
</article>
Dans l'exemple ci-dessus, l'utilisation des attributs permet de simplifier l'écriture puisqu'elle
n'oblige pas à réécrire les informations complètes sur un éditeur lorsque plusieurs ouvrages y
font référence. Il pourrait être, cependant, nécessaire d'effectuer un traitement supplémentaire
(lors des impressions par exemple) afin de remplacer l'attribut par les informations
correspondantes.
3.2.2. Utilisation des caractères spéciaux
Pour inclure des caractères spéciaux dans les données, il est nécessaire d'utiliser l'une des
écritures suivantes :
• &# suivi du numéro décimal du caractère dans les pages UNICODE
• &#x suivi du numéro hexadécimal du caractère dans les pages UNICODE.
Exemple :
& et & sont équivalents à &
∀ est équivalent à ∀
En outre il existe aussi des entités prédéfinies pour les caractères utilisés par XML:
§ > pour >,
§ < pour <,
§ & pour &
§ &apos pour ',
§ " pour ''
3.2.4. Les attributs prédéfinis
Il existe un certain nombre d'attributs prédéfinis. C'est le cas par exemple de l'attribut
xml:lang qui permet de définir la langue du document.
Exemple
<p xml :lang = 'fr'>Exemple</p>
Cet attribut est hérité par l'ensemble des éléments fils de l'élément sur lequel il est défini.
Autres attributs prédéfinis :
§ xml :space='preserve' ou xml :space='default' permet d'indiquer si les caractères
d'espacement (espace, tabulation, rupture de ligne, ligne blanche) sont préservés ou si
l'application peut appliquer le traitement par défaut.
Servent à définir des symboles qui seront utilisés ailleurs dans la DTD. Ce sont en quelque
sorte des raccourcis d'écriture : partout où une entité est mentionnée, elle peut être remplacée
par la chaîne de caractères qui lui est associée. Ce mécanisme s'apparente à un mécanisme de
"macro"2 .
Exemple tiré de la spécification du langage HTML:
<!ENTITY % heading "H1|H2|H3|H4|H5|H6">
• l'exemple ci-dessus a pour effet d'indiquer au système que toute occurence de
%heading; doit être remplacée par H1|H2|H3|H4|H5|H6
La définition d'une entité peut elle-même faire référence à d'autres entités. La substitution est
alors effectuée récursivement. Par exemple, avec les définitions supplémentaires suivantes:
2
Les entités paramétriques ne peuvent pas être utilisées en dehors d'une DTD
Servent à donner un nom facilement lisible à des caractères qui ne sont peut-être pas
représentables dans l'alphabet utilisé, ou qui ne sont pas disponibles au clavier.
Exemple tiré de la spécification du langage HTML:
<!ENTITY nbsp " ">
<!ENTITY iexcl "¡">
Les entités de caractères définies dans une DTD peuvent être utilisées dans un document
XML référençant cette DTD à l'aide de la notation &NomEntité;
Les entités internes permettent de remplacer une valeur par une abréviation. Cette abréviation
est appelée Entité Interne et doit être déclarée dans la déclaration du document.
Exemple : entité interne
<?xml version ="1.0" ?>
<?xml:stylesheet href=" 3b-EntiteInterne.xsl" type="text/xsl" ?>
<!DOCTYPE catalogue [
<!ENTITY INTER "Internet " >
]>
<catalogue>
<stage>
<intitule>XML et les bases de données</intitule>
<grp-produit>&INTER; </grp-produit>
</stage>
</catalogue>
Lors de la référence à l’entité interne, son nom est préfixé par & et suffixé par ;.
L’ordre de déclaration des entités est sans importance.
Les sections littérales permettent de créer des chaînes contenant des caractères spéciaux.
Exemple
<exemple>contenu :
< ! [CDATA [ <TITLE>l’EDI et l’Internet</TITLE>]]>
</exemple>
C’est l’utilisation des délimiteurs < ! [CDATA [ et ]]> qui détermine le contenu de la section
littérale. Cette dernière ne sera pas interprétée. Cela signifie que l’élément « exemple »
contient :
« contenu : <TITLE>l’EDI et l’Internet</TITLE> ».
3
Format Public Identifier
3.7.2.2. Avantages
L'utilisation de ce mode d'adressage augmente la maintenabilité de l'application en
permettant une réutilisation des liens. Lorsqu'une URL change, il n'y a que le fichier
catalogue à modifier que tous documents XML prennent en compte la modification.
4. CONSEIL D'ÉCRITURE
<catalogue>
<stage id = ''XMLPres''>
<intitule>XML et les bases de données</intitule>
<prerequis>connaître les langages SQL et HTML</prerequis>
</stage>
<stage id = ''XML Prog''>
<intitule>XML programmation</intitule>
<prerequis>avoir suivi le stage de XML et les bases de données</prerequis>
</stage>
</catalogue>
Un document XML peut contenir à la fois une réfé rence à une DTD et une déclaration
interne d’élément.
Dans ce cas si un élément est déclaré dans la DTD et dans le document, c’est toujours la
déclaration interne qui prévaut.
Exemple
< ! ELEMENT livre (titre, editeur ?, auteur, chapitre+, prix, critique*) >
Cet exemple définit l'élément livre suivi de son modèle de contenu :
• titre : information obligatoire présente une seule fois (1, 1),
• editeur? : le ? signifie que cette information est facultative (0, 1),
• chapitre+ : le + signifie que l'élément peut être répété (1,N),
• critique* : * signifie que l'élément est facultatif et qu'il peut être répété (0,N).
Autres exemples
< !ELEMENT livre (titre, editeur ?, auteur, (titre_chapitre, corps_chapitre)+, prix, critique*)
>
(titre_chapitre, corps_chapitre)+ indique que le couple (titre_chapitre, corps_chapitre) est
obligatoire et peut être répété.
<ELEMENT livre (titre, editeur ?, auteur, chapitre+, prix, critique*)>
< !ELEMENT chapitre (titre_chapitre, corps_chapitre)>
indique que l’élément chapitre est obligatoire, peut être répété et que chaque chapitre est
constitué des éléments titre_chapitre et corps_chapitre dans cet ordre.
Comme cela été vu au chapitre sur la syntaxe XML, un attribut est un couple nom=valeur. La
définition des attributs dans une DTD va permettre de spécifier les attributs qui pourront ou
devront être associés à un élément, et éventuellement leurs valeurs par défaut.
Cette déclaration se fait par : < !ATTLIST nom-élément déclaration-attribut>
La déclaration d'attributs peut être répétée et se fait sous la forme suivante :
nom-attribut type valeur-défaut
Six types d'attributs sont reconnus :
CDATA pour indiquer que la valeur de l'attribut est une séquence de caractères (y
compris des entités de caractères)
ID pour indiquer que la valeur de l'attribut est un symbole commençant par
une lettre et ne contenant que des lettres, des chiffres, ou les caractères - _
: et . (la valeur doit être unique sur l'ensemble d'un document)
IDREF pour indiquer que la valeur de l'attribut est un symbole défini comme
valeur de l' attribut ID d'un autre élément de document
IDREFS comme IDREF, mais plusieurs valeurs séparées par des espaces sont
autorisées
ENTITY pour utilisateurs avancés (pas abordés dans le cadre de ce cours)
ENTITIES
NMTOKEN
NMTOKENS
énumération une énumération de valeurs possibles se fait en mettant entre parenthèses
les valeurs séparées par des |. Exemple:
<!ATTLIST TD
valign (top|middle|bottom|baseline) #IMPLIED
... >
Et il existe 4 valeurs par défaut :
indique que l'application traitant le document
Le symbole prédéfini #IMPLIED
fournira la valeur par défaut
indique l'auteur du document doit définir
Le symbole prédéfini #REQUIRED
l'attribut en question
Le symbole prédéfini #FIXED suivi d'une indique que l'attribut ne peut prendre que la
valeur (chaîne de caractères entre guillemets) valeur mentionnée
Les entités paramètres sont identiques sur le principe aux entités internes. Cependant une
entité paramètre n’est référençable qu’à l’intérieur même de la DTD où elle est déclarée.
< !ENTITY % nom 'valeur' >
Exemple
< !ENTITY % Fr 'Franc' >
< !ENTITY % Eu 'Euro' >
< !ATTLIST PRIX unite (% Fr ; | %Eu ;) ''%Eu ; '' >
Un des objectifs de XML est l'interopérabilité. Pour cela on suppose que chacun doit essayer
de s'appuyer sur des DTD standards afin de faciliter la compréhension des structures de
documents.
Il est donc courant d'utiliser plusieurs DTD pour construire un document XML.
Des conflits de noms peuve nt alors survenir si deux éléments portent des noms identiques
dans deux DTD différentes (par exemple fn=fonction dans MathML, fn=foot notes dans
Basic-Text).
Pour éliminer ces conflits de noms, on a recours aux domaines de noms (ou appelés aussi
espaces de nommage). Le principe consiste préfixer chaque nom d'élément par un nom qui
identifie le domaine auquel il fait référence (par exemple math:fn pour l'élément
mathématique fn et text:fn pour l'élément bas de page).
Les avantages de cette structuration :
• Les espaces de noms permettent de lever les ambiguïtés sur des éléments de DTD
différentes qui porteraient le même nom (nom de produit, nom de personne, ..),
• Les espaces de noms favorisent la modularité des documents XML et les sources multiples
de ces derniers,
• Les espaces de nom permettent, indirectement, de rendre plus lisible un document XML
contenant des informations de sources diverses.
Les Namespaces ont un statut de recommandation du 14 Janvier 1999, dont les spécifications
sont disponibles à:
http://www.w3.org/TR/1999/REC-xml- names-19990114
Un espace de noms est déclaré à l'aide de l'attribut xmlns :
Soit en déclarant l'espace de nom dans l'élément :
<ElementDuDocument xmlns=UriDTDaImporter">
Exemple d’utilisation sans préfixe
<seminaire xmlns =«http://www.edifrance.org/seminaire»>
Soit en associant un préfixe pour une utilisation plus fine :
<ElementDuDocument xmlns:Préfixe='UriDTDalmporter">
Exemple d’utilisation avec préfixe
<seminaire xmlns :sem=«http://www.edifrance.org/seminaire»>
….
<sem :date/>
Quand on déclare plusieurs espaces de noms, l'espace de nom par défaut est celui sans
préfixe.
La portée d'une déclaration est limitée au sous-arbre dans lequel la déclaration a été faite.
XML fût pressenti dès son arrivée comme une technologie qui allait révolutionner l'échange
de données. Cependant, les DTD, comme langage de schéma utilisé pour spécifier le contenu
et la structure de documents XML, souffrent de quelques déficiences :
§ Les DTD ne sont pas écrites en XML, ce qui signifie que les technologies existantes
pour manipuler des documents XML telles que DOM ou SAX ne peuvent être utilisées
pour « parser » des schémas de documents.
§ Les DTD ne supportent pas les espaces de nom ce qui rend impossible l’import de
schémas externes afin de réutiliser du code existant.
§ Les DTD n'offrent qu'un typage très limité des données.
Conscient de ces fgrandes limitations, le W3C a proposé un nouveau langage de définition de
schéma de documents qu’est XML Schema.
Conçu pour palier aux déficiences pré-citées des DTD, XML Schema propose, en plus des
fonctionnalités fournies par les DTD, plusieurs nouveautés à savoir :
§ Un grand nombre de types de données intégrées comme les booléens, les entiers, les
intervalles de temps, etc. De plus, il est possible de créer de nouveaux types par ajout
de contraintes sur un type existant.
§ Des types de données utilisateurs qui nous permettent de créer notre propre type de
données nommé.
§ La notion d'héritage : Les éléments peuvent hériter du contenu et des attributs d'un
autre élément. C'est sans aucun doute l'innovation la plus intéressante de XML
Schema.
§ Le support des espaces de nom.
§ Les indicateurs d'occurrences des éléments peuvent être tout nombre non négatif.
§ Une grande facilité de conception modulaire de schémas.
XML Schema a un statut de recommandation du 2 Mai 2001, dont les spécifications sont
disponibles à :
http://www.w3.org/TR/2001/REC-xmlschema-0-20010502/
http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/
http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/
<xs:enumeration value="28-01-2001"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="heure_modif" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN ">
<xs:enumeration value="12:12"/>
<xs:enumeration value="12:14"/>
<xs:enumeration value="14:12"/>
<xs:enumeration value="15:12"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="racine">
<xs:complexType>
<xs:sequence>
<xs:element ref="repertoire" maxOccurs="unbounded"/>
<xs:element ref="fichier"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="repertoire">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="fichier"/>
<xs:element ref="repertoire"/>
</xs:choice>
<xs:attribute name="nom" type="xs:string" use="required"/>
<xs:attribute name="date_modif" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN ">
<xs:enumeration value="19-02-2001"/>
<xs:enumeration value="25-02-2001"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="heure_modif" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN ">
<xs:enumeration value="14:12"/>
<xs:enumeration value="14:14"/>
<xs:enumeration value="15:12"/>
<xs:enumeration value="16:09"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
Comme tout document XML, un schéma XML débute par un prologue et est suivi par le corps
document.
Les déclarations d'éléments et d'attributs se font à l'intérieur de la balise <xsd:schema>, qui
est la racine du document et contient des informations relatives à l'espace de nom du schema
de XML Schema, pour validation du document XML.
Déclaration d’un schéma
<xsd :schema
<xmlns :xsd= http://www.w3.org/2000/10/XMLSchema >
……………………………
</xsd :schema>
Tout élément appartenant aux langage XML Schéma doit être préfixé par "xsd:",
l'espace de nom réservé par le W3C.
Comme nous l'avons vu dans la partie consacrée aux DTD, un document XML est composé
principalement d'éléments (les balises du document) qui peuvent comporter des attributs.
XML Schema va permettre de déclarer ces éléments et ces attributs.
La déclaration d'éléments ou attributs va pouvoir se faire de différentes manières en fonction
de la nature de l'élément et/ou de l'attribut :
• Element ou attribut de type simple prédéfinis par le W3C
• Element ou attribut de type simple prédéfini par l'utilisateur
• Element ou attribut de type complexe
Exemple de déclarations simples
<xsd :element name ="nom" type ="xsd :string "/>
<xsd :attribute name ="taille" type ="xsd :integer "/>
Un élément, au sens d'XML, est en fait une balise. Un élément est déclaré de la façon suivante
dans un schéma :
Déclaration d’éléments
<xml version = «1.0 » encoding = «ISO-8859-1 » ?>
<xsd :schema xmlns :xsd = http://www.w3.org/2000/10/XMLSchema>
<xsd :element name ="nom" type ="typeNom "/>
<xsd :attribute name ="remarque" type ="xsd :integer "/>
……
</xsd :schema>
Chaque élément déclaré est associé à un type de données via l'attribut type. L'élément nom est
de type typeNom, qui est un type complexe défini par l'utilisateur. L'élément remarque est du
type xsd:string qui est un type simple prédéfini de XML Schema.
Les éléments pouvant contenir des sous-éléments ou porter des attributs sont dits de types
complexes, tandis que les éléments ne contenant pas de sous-éléments sont dits de types
simples.
Un attribut est un qualificatif qui s'applique à un élément. À la différence des éléments qui
peuvent être de type complexe ou simple, les attributs peuvent être uniquement de type
simple. En conséquence, les attributs ne peuvent pas contenir d'autres éléments ou attributs.
Les déclarations d'attributs et références à un groupe d'attributs doivent apparaître à la fin des
définitions de types complexes.
Déclaration d’attributs
<xml version = «1.0 » encoding = «ISO-8859-1 » ?>
<xsd :schema xmlns :xsd = http://www.w3.org/2000/10/XMLSchema>
….
<xsd :complexType name = « typeContacts »>
< ! – déclaration du modèle de contenu ici -->
<xsd :attribute name= « maj » type = « xsd :date »/>
</xsd :complexType>
</xsd :scheama>
2.2.1 les contraintes d’occurrence sur attribut
Tout comme dans les DTD, les attributs peuvent avoir des contraintes d'occurrences.
L'élément attribute de XML Schema peut avoir deux attributs optionnels use et value.
Exemple
<xsd :attribute name = « date- modif » type = « xsd :date »
use = « default » value = « 2002-11-15 »/ >
<xsd :attribute name = « numero » type = « xsd :NMTOKEN »
use = « required »/ >
• use permet de définir une contrainte sur l'attribut
required : l'attribut est obligatoire
optional : l'attribut est optionnel
fixed : attribut optionnel mais si présent sa valeur est celle spécifiée par value.
default : attribut optionnel mais valeur par défaut spécifiée par value.
prohibited : attribut ne doit pas apparaître
• value permet de définir une valeur qui doit être conforme au type déclaré dans l'attribut
2.2.2. Les groupe d'attributs
XML Schema permet la définition de groupes d'attributs. L'utilisation d'un groupe d'attributs
permet d'améliorer la lisibilité et facilite la maintenance d'un schéma
• un groupe d'attributs peut être défini à un seul endroit.
• il peut être référencé dans plusieurs déclarations et définitions.
Ces caractéristiques des groupes d'attributs les rendent semblables aux entités paramétriques
des DTD.
Le document XML Schema fournit deux types de définition de type de données : simple et
complexe.
Les types simples incluent les types de base inclus dans la bibliothèque standard des XML
Schema, les listes et les unions.
XML Schema apporte la notion, comme pour les langages, de type de bases prédéfinis et qui
sont assez évolués.
Il s’agit d’une nouveauté importante, puisque les DTD se contentaient de types de données
plutôt limités (PCDATA, CDATA …).
Les types de données simples les plus courants sont représentés : chaînes de caractères,
entiers, dates, réels, etc. Les types de données des DTD ont été repris par XML Schema pour
des raisons de compatibilité ascendante.
Les types listes sont des suites de types atomiques. XML Schema possède 3 types de listes
intégrés qui sont NMTOKENS, ENTITIES et IDREFS. En plus de ces listes intégrées, nous
pouvons créer de nouveaux types de listes par dérivation de types atomiques existants.
Toutefois la création de types de liste à partir de listes ou de types complexes n’est pas
permise, ceci afin d’éviter des schémas trop complexes.
XML Schema permet la définition d’éléments union. Les éléments peuvent avoir des
contenus variables sur des types différents.
Exemple de contenu variable pour l’ISBN
<xsd :simpleType name = « isbnType »>
<xsd :union>
<xsd :simpleType>
<xsd :restriction base = « xsd :string »>
<xsd :pattern value = « [0-9]{10} »/>
</xsd :restriction>
</xsd :simpleType>
<xsd :simpleType>
<xsd :restriction base = « xsd :NMTOKEN »>
<xsd :enumeration value = « TBD »/>
<xsd :enumeration value = « NA »/>
</xsd :restriction>
</xsd :simpleType>
</xsd :union>
</xsd :simpleType>
Les types de données simples ne permettent pas aux éléments de contenir des sous-éléments.
Pour cela, XML Schema définit le type de données complexes, pouvant être créé par un
auteur de schéma.
Un type de données complexe peut être caractérisé par son modèle de contenu ; c'est-à-dire
comment ses sous-éléments sont susceptibles d'apparaître. Un type complexe est défini à
l'aide de l'élément <xsd:complexType name="..."> qui pourra contenir, entre autres, une
séquence d'éléments, une série d'attributs, etc.
XML Schema propose un ensemble de connecteurs permettant de représenter n'importe quel
modèle de contenu exprimable à l'aide d'une DTD :
• Le connecteur de séquence
• Le connecteur de choix
• L'élément All (ANY dans les DTD)
L'élément all représente un connecteur supplémentaire par rapport aux DTD. Il permet à ses
éléments fils d'apparaître une fois (ou pas du tout) et dans n'importe quel ordre.
Définition d’un type contenant le connecteur all
<xsd :complexType name = « typeNom »>
<xsd :all>
<xsd :element name = « nom » type = « xsd :string »/>
<xsd :element name = « prenom » type = « xsd :string »/>
</xsd :all>
</xsd :complexType >
Le connecteur all doit apparaître comme fils unique du plus haut niveau du modèle de
contenu, c’est à dire comme fils unique de l’élément complexType.
Les fils de l’élément peuvent apparaître au plus une fois.
<xsd:element name="internationalPrice">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<xsd:attribute name="currency" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
§ Des éléments ayant des sous éléments et/ou attributs et du texte, c’est à dire le type
mixte des DTD :
xsd :complexType mixed = “true”
<xsd:element name="letterBody">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="salutation">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="quantity" type="xsd:positiveInteger"/>
<xsd:element name="productName" type="xsd:string"/>
<xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
<!-- etc. -->
</xsd:sequence>
</xsd:complexType>
</xsd:element>
§ On peut également, pour l’élément complexType avoir le paramètre content =
« valeur » :
- elementOnly : uniquement des sous éléments
- textOnly : uniquement du texte simple
- mixed : sous éléments combinés avec texte simple
- empty : pas de sous éléments
Les différents types de restrictions sont appelés "facettes", et XML Schema dispose de
nombreuses facettes en standard. Ces facettes permettent de définir des contraintes telles que
longueur, valeurs extrêmes, précision, durée, liste de valeurs possibles, ...
Le mécanisme de dérivation par extension de XML Schema est plus proche conceptuellement
du mécanisme d’héritage des langages orientés objet. Il permet par exemple de rajouter des
éléments ou des attributs au modèle complexe de base. Il permet également de définir des
types d’éléments contenant les données communes (attributs et/ou éléments et/ou texte) à
plusieurs éléments.
< !—Définition d’un type des données communes pour repertoire et fichier-- >
<xsd :complexType name=”typeconteneur” mixed= “true”>
<xsd:attribute name = “nom” type = “xsd:string” use = “required”/>
<xsd:attribute name = “date_modif” type = “xsd:string” use = “required”/>
<xsd:attribute name = “heure_modif” type = “xsd:time” use = “required”/>
</xsd:comlexType>
Depuis l'introduction des espaces de nom, la validation de documents XML utilisant des
espaces de nom est devenue plus compliquée car les DTD ne les supportent pas. XML
Schema comble cette lacune en ayant une intégration complète des espaces de nom.
Le support des espaces de noms est une des motivations qui a conduit au développement de
XML Schema, donc son support est complet. Chaque schéma est lié à un espace de nom
particulier (ou à l'absence d'espace de nom) .
Il faut définir au moins un schéma par espace de nom à spécifier.
à L'attribut targetNamespace permet de spécifier l'espace de nom par défaut
<xsd :schema
xmlns :xsd = http://www.w3.org/2000/10/XMLSchema
targetNamespace = http://www.edifrance.org/formation
>
Il est fortement conseillé d'utiliser l'attribut facultatif targetNamespace.
L'association d'un document XML à un XML Schema se fait grâce à deux attributs de XML
Schema-instance
§ Sans définition d'espace de noms
---> xsi: noNamespaceSchemaLocation=" Nom FichierSchema.xsd"
<racine xmlns :xsi = « http://www.w3.org/2000/10/XMLSchema- instance »
xsi :noNamespaceSchemaLocation = « core_component.xsd »
(Référence qui contient le schéma)
§ avec définition d'un espace de nom
---> xsi:SchemaLocation=" URI EspaceDeNom NomFichierSchema.xsd"
<racine xmlns :xsi = « http://www.w3.org/2000/10/XMLSchema- instance »
xsi :SchemaLocation=http://www.edifrance.org/formation core_component.xsd
1. INTRODUCTION
Il existe une grande variété de spécifications liées à XML, dont XPath et XLL sont deux
composantes connexes :
• XPath qui permet d'exprimer la navigation dans un arbre XML avec des expressions sous
forme de patterns utilisées par XSLT et XPointer.
• XLL (XML Linking Language) qui est un ensemble de deux spécifications :
- XLink pour décrire les liens entre documents
- XPointer pour définir un endroit précis dans un document cible d'un lien, en utilisant
XPath.
XPath a un statut de recommandation du 16 Novembre 1999, dont les spécifications sont
disponibles à : http://www.w3.org/TR/1999/REC-xpath-19991116
XLink a un statut de recommandation du 27 Juin 2001, dont les spécifications sont
disponibles à : http://www.w3.org/TR/2001/REC-xlink-20010627
XPointer a un statut de candidate recommandation du 11 Septembre 2001, dont les
spécifications sont disponibles à : http://www.w3.org/TR/2001/CR-xptr-20010911
Si un document XML contient en même temps des données et des informations permettant
d'identifier la structure et le sens de ces données, il est alors utile de pouvoir s'appuyer sur
cette information pour désigner une partie d'un document XML.
C'est utile lorsque l'on réalise des applications de présentation, par exemple, pour faire une
table des matières où l'on ne veut sélectionner que des titres. C'est également utile lorsqu’on
veut réaliser des hyperliens sur des documents que l'on ne peut pas modifier pour leur ajouter
des ancres et que l'on souhaite pourtant désigner (par exemple, le deuxième alinéa du
troisième chapitre d'un document).
Du coup, il est nécessaire d'avoir un langage de désignation d'objets dans un document ; c’est
l'objectif de XPath. Du point de vue du W3C, l'objectif de XPath est aussi de devenir un
standard de base, réutilisable dans des recommandations de plus haut niveau.
XPath exploite la structure d'un document dans la navigation par :
§ Une écriture de type "chemins d'accès", comme les URL
§ Des axes de parcours
§ Des tests sur les valeurs des objets de l'arbre (élément, attribut,...)
§ Des fonctions prédéfinies sur les nœuds et les chaînes de caractères
Deux choses importantes dans l'utilisation des expressions XPath :
- La recherche d'une correspondance à un motif est contextuelle
- Tous les éléments correspondants sont renvoyés
XPath permet d'exprimer la sélection des différents objets d'un document XML
§ Sélection des éléments
- / racine du document
- . nœud courant
- repertoire tous les éléments <repertoire> enfant du nœud courant
- racine/fichier tous les éléments <fichier> avec <racine> comme parent
- repertoire//fichier tous les éléments <fichier> avec <repertoire> comme ancêtre
- //repertoire tous les éléments <repertoire> avec racine comme ancêtre
- * tous les noeuds de type éléments
- repertoire | fichier tous les éléments <repertoire> ou <fichier>
Ces expressions sont des 'écritures abrégées des écritures directes contenant
la spécification des axes nodaux. Les écritures directes sont plus verbeuses
§ Recherche d'attribut
- @ Nom l'attribut nom du nœud (élément) courant
- fichier/ @Nom l'attribut nom de l'élément <fichier> fils
-@* tous les attributs de l'élément courant
§ Les tests
- repertoire[fichier] les éléments <repertoire> contenant un sous-élément <fichier>
- *[@taille] les éléments contenant un attribut taille
- //repertoire[@nom = "XML"] les éléments <repertoire> de la racine ayant pour
attribut nom = "XML"
XLink est le résultat d’une volonté d’obtenir des outils de liaisons entre deux documents
XML, plus puissants que ceux de HTML.
Xlink définit deux types de liens :
- Liens simples associant deux ressources, donc compatibles HTML : ces liens
sont de type unidirectionnel ;
- Liens étendus, associant plus de deux ressources : ces liens peuvent être bi-
directionnels, multi-directionnels et externes aux ressources liées.
Xlink ne définit pas la façon de traiter ces liens. Ce sont les applications, qui exploitent ces
liens, qui devront en définir le rendu.
3.1.1 Les liens simples
Les liens simples sont des liens associant exactement deux ressources dont l’une est locale et
l’autre est distante.
Xlink permet de décrire le comportement du lien au travers d’attributs facultatifs :
xmlns:xlink=http://www.w3.org/1999/xlink
xlink:type="locator"
xlink:href="mondoc.xml"
xlink:label="label_doc">
</doc>
<base
xmlns:xlink=http://www.w3.org/1999/xlink
xlink:type="locator"
xlink:href="mabase.xml"
xlink:label="label_base">
</base>
<loadbase
xmlns:xlink=http://www.w3.org/1999/xlink
xlink:type="arc"
xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase"
xlink:from="label_doc"
xlink:to="label_base"
</loadbase>
</doc_base>
XSL (eXtended Stylesheet Language) et CSS (Cascading StyleSheets) sont deux outils
apparemment redondants mais en réalité très complémentaires.
CSS est apparu en 1997 et proposait de dissocier la mise en page du contenu du document
HTML. Il introduisait entre autres, dans la version 2, la notion de type de média permettant de
gérer des mises en pages différentes en fonction du média (imprimante, écran, ...). Par contre
elle n'est supportée que par les dernières versions des navigateurs.
XSL est le format de feuille de style défini pour les documents HTML. Il offre des
fonctionnalités similaires à CSS en y ajoutant d'autres fonctionnalités dont la transformation
de données. Malheureusement XSL n'est pas encore totalement supporté par les navigateurs, y
compris les dernières versions.
De fait aujourd'hui, si l'on souhaite malgré tout utiliser les feuilles de styles XSL sans pour
autant être contraint par les limites des navigateurs actuels, il est possible d'opérer la mise en
forme sur le serveur et de générer un document au format HTML qui sera envo yé au
navigateur.
2. XSL
2.1. PRÉSENTATION
XSLT 1.0 et XPATH 1.0 ont un statut de recommandation du 16 Novembre 1999, dont les
spécifications sont disponibles à :
http://www.w3.org/TR/1999/REC-xslt-19991116
http://www.w3.org/TR/1999/REC-xpath-19991116
XSL, qui contient la partie XSL-FO, a un statut de recommandation du 21 Novembre 2000,
dont les spécifications sont disponibles à :
http://www.w3.org/TR/2001/REC-xsl-20011015
La feuille XSL est donc la feuille de style associée au document XML. Elle contient les règles
de transformation, de présentation et de mise en forme des données.
La feuille XSL intègre des fonctionnalités plus puissantes que la feuille de style CSS. Elle
permet en effet de préciser des règles d'enchaînements, des conditions, des calculs, etc. .
3. XSLT: LA TRANSFORMATION
XSLT (XML Stylesheet Language Transformation) a pour objectif de définir un langage pour
effectuer des transformations sur des arbres XML.
La transformation produit en sortie un fichier XML de préférence XHTM, WML, SVG, ...
Elle s'applique sur un arbre XML provenant :
- d'un fichier XML,
- d'un message (flux) XML.
XSLT permet de gérer, a partir d'une source unique d'informations, des fichiers adaptés aux
différents canaux de visualisation (PC, Mobile, WebTV, … )
Feuille Fichier
XSLT HTML
Processeur
XSLT
Fichier
Flux XML
WML
Nous pouvons distinguer, de part leur nature et leur traitement spécifique en XSLT, la notion
de document régulier ou non régulier.
Les documents XML réguliers :
- Leur structure est la répétition d'un élément type
- La profondeur de l'arbre est déterminée
Les documents XML non réguliers
- Leur structure est constituée d'une imbrication arbitraire d'un ensemble d'éléments
- La profondeur de l'arbre est inconnue
3.1.1 Document régulier
Voici un exemple de fichier XSLT produisant en sortie un document HTML 4.0
<laboratoire>PARAGRAPHE</laboratoire>
<adresse>
<rue>2, rue de la Liberté</rue>
<code_postal>93526</code_postal>
<ville>SAINT-DENIS</ville>
<pays>France</pays>
</adresse>
<telephone>(33)149406789</telephone>
<fax>(33)14558787865</fax>
</bureau>
</personne>
</cartes>
Repertoire : XML
ressources XML (exemples, outils,
spécifications, ...)
Repertoire : exemples
exemples de fichie rs XML
Fichier : séminaire.xml
Fichier : XMLSPY.xml
Repertoire : outils
Repertoire : Schema
Repertoire : DTD
Ressources sur les DTD
Repertoire : outils
Fichier : XMLSPY.exe
Fichier : cooktop.msi
Repertoire : XML Schema
Fichier : ebXML.pdf
Une feuille de style XSLT est un document XML qui commence par l'en-tête XML délimitée
par : <xsl:stylesheet> ... </xsl:stylesheet>
Comme IE5 est basé sur le Working Draft de XSL, certaines incompatibilités avec la
recommandation peuvent être rencontrées (pas de règles implicites, extensions propres à
Microsoft) et le référencement en est différent.
- pour MSXML 3 ou 4 (IE6) ou les autres outils répondant à la recommandation
<xsl :stylesheet version = « 1.0 »
xmlns :xsl = « http://www.w3.org/1999/XSL/Transform » >
….
</xsl :stylesheet>
- pour IE5 sans mise à jour de MSXML (1 ou 2)
<xsl :stylesheet xmlns :xsl = « http://www.w3.org/TR/WD-XSL» >
….
</xsl :stylesheet>
Une feuille de style XSLT peut-être associée à un document XML à l'aide d'une instruction de
traitement XML particulière
< ?xml-stylesheet… ?>
Les parseurs XML reconnaissent cette instruction et provoquent, lors du parsing du document
XML, l'appel du processeur de transformation s'il existe.
Exemple de référencement d’une feuille de style :
< ?xml- stylesheet type = « text/xsl » href = « cartes.xslt » ?>
Les parseurs XML reconnaissent cette instruction et provoquent, lors du parsing du document
XML, l’appel du processeur de transformation s’il existe.
Les feuilles de styles XSLT sont fondées sur des structures nommées modèles (templates). Un
template précise ce qui doit être recherché dans l'arbre source, et ce qui doit être placé dans
l'arbre résultat, la transformation.
<xsl:template> définit une règle de transformation
à <xsl:template match= "expression">
instructions XSLT
éléments XML
texte littéral
</xsl: template >
Règles implicites
<xsl :template match = « * | / »>
<xsl :apply-templates/>
</xsl :template>
Pour générer un élément et ses attributs, il faut utiliser les mots suivants :
• <xsl:element name="NomElement"> ... </xsl:eleme nt>
• <xsl:attribute name="NomAttribut">Valeur</xsl: attribut>
Pour générer les objets autres que les éléments XML, il faut utiliser les éléments suivants :
à <xsl:pi> génération d'instruction de traitement
à <xsl:comment> génération de commentaires
à <xsl:text> génération de nœud de type texte
Par défaut, <xsl:text> préserve les espaces en sortie et permet de transformer ou non, en
fonction de l'attribut 'disable-output-escaping', les méta-caractères & et < en '&' et
'<'.
XSLT permet de copier un nœud de l'arbre source vers l'arbre destination par <xsl:copy>. Si
l'on référence un attribut, il y a copie de son nom et sa valeur.
Les attributs de l’élément et ses nœuds fils ne sont pas copiés implicitement.
XSLT permet de traiter, comme pour les DTD et XML Schema, la modularisation des feuilles
de styles par deux techniques
- <xsl:import> pour importer une feuille de styles référencée par l'attribut
à href="NomFeuilleDeStyle.xslt" pour spécifier l’URI de la feuille
<xsl:import> doit être en tête des instructions xsl après <xsl:stylesheet>
- <xsl:include > pour inclure, à l'endroit où cette instruction apparaît, la feuille de style
référencée par l'attribut
à href=" Nom FeuilleDeStyle.xslt" pour spécifier l’URI de la feuille
<xsl:include> peut être n'importe où au premier niveau, mais après <xsl:import>
XSLT permet de spécifier le format de sortie pour le document produit par le processeur
<xsl:output > avec comme attributs :
- method = "xml" | "html" | "text" pour l'interprétation de l'arbre résultat
- version="valeur"
Une feuille de style XSL est un document XML dont l'élément racine est xsl:stylesheet
stipule ce qui doit être produit en sortie pour tout élément du
document XML qui correspondrait au critère indiqué par
l'attribut match. Ce qui se trouve entre la balise d'ouverture
et la balise de fermeture de l'élément xsl:template servira à
Règles "chablon" produire la sortie correspondant l'élément XML qui aura
<xsl:template match="Critère"> satisfait au critère indiqué.
...
Le critère peut être plus ou moins précis et correspond à un sous-
</xsl:template>
ensemble de la spécification XPath.
Si l'élément auquel s'applique ce chablon contient des sous-
éléments qui doivent eux aussi être traités, il faudra imbriquer une
règle xsl:apply-templates à l'intérieur de l'élément xsl:template.
4
Bertrand Ibrahim. – Introduction à XML. - http://cui.unige.ch/eao/www/xml/Plan.html
<xsl:if
exécute les règles imbriquées dans l'élément xsl:if
test="ExpressionBooléenne">
uniquement si l'expression booléenne fournie est évaluée à
...
vrai.
</xsl:if>
<xsl:choose>
<xsl:when test="ExpressionBoo
léenne">
...
</xsl:when>
<xsl:when test="ExpressionBoo fonctionne d'une manière similaire au xsl:if , mais permet de
léenne"> tester plusieures conditions et de prévoir une alternative
... quand toutes les conditions échouent.
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>
<xsl:element
produit en sortie un élément du nom indiqué par l'attribut
name="NomElementSortie">
name. Des éléments xsl:attribute peuvent être imbriqués pour
...
ajouter des attributs à l'élément produit en sortie.
</xsl:element>
</xsl:element>
Dans cet exemple, UneExpression peut être par exemple le nom
d'un sous-élément de l'élément courant ou le signe @ suivi du
nom d'un attribut de l'élément courant.
4. XSL-FO: LE FORMATAGE
Flux XML
XSL-FO
Processeur
XSLT
Feuille
XSLT Feuille
RTF
Processeur
FO Feuille
PDF
Voici un exemple de fichier XSL-FO et la visualisation du fichier PDF résultat, produit par
FOP
Exemple de document XSL-FO produit par une feuille de style XSLT sur un document
XML
<fo :root xmlns :fo=http://www.w3.org/XSL/Format/1.0>
<fo :layout- master-set>
<fo :simple-page- master page- master- name="only">
<fo :region-body/>
Hydrogen
Helium
1. INTRODUCTION
Application
DOM
Parseur XML
< -- >
_____
_____
Document XML
• DOM level 2
- Complète la version Core pour la gestion des espaces de noms
- DOM CSS : prise en charge des feuilles de style
- DOM Events : Modèle d'événements
- DOM Filters and Iterators : filtrage d'éléments et traitements itératifs
- DOM Range : isoler et traiter des fragments de documents.
2. LE DOM ET LE W3C
3. LA PROGRAMMATION DU DOM
DOM représente un document XML comme un arbre d'objets, chaque noeud est un type
dérivé de type Node .
• Offre les méthodes nécessaires au parcours et construction de l'arbre.
Ø La racine de l'arbre est de type Document
• Accès au type de document et sa DTD
• Offre les méthodes nécessaires à la création des différents types d'éléments
• Contient un seul objet fils de type Element qui est la racine du document
Chaque élément est de type Element
• Accès au nom de l'élément
• Offre les méthodes nécessaires au traitement des attributs
• Accès aux éléments fils par leur non
Ø Une liste de nœuds de type NodeList
• Récupération de la taille de la liste et accès à chaque nœud
Les nœuds de type Text, Comment et CDATASection dérive du type CharacterData
• Offre les méthodes nécessaires aux traitements des chaînes de caractères
Ø Les attributs sont du type Attr, qui n'appartiennent pas à l'arbre DOM, mais sont liés aux
éléments
• Récupération du nom et de la valeur
Il existe une interface d'accès à une collection de nœud d'après un nom unique, c'est le type
NamedNodeMap
• Offre les méthodes nécessaires à la lecture, écriture et suppression
Ø Les autres types de nœuds sont :
• Entity pour une entité générale
• EntityReference pour une référence à une entité dans une donnée XML
• Processinglnstruction pour représenter les instructions de traitement.
La spécification DOM ne propose pas de méthode pour :
- charger en un document XML sous forme de représentation mémoire DOM,
- sauvegarder une représentation mémoire DOM sous forme de document XML,
- méthode pour générer un document à partir d’un arbre XML et d’un arbre
XSLT.
Les interfaces des langages et outils en proposent.
Exemple de chargement en mémoire d’un document XML dans IE5
Création mémoire d’un document XML et XSLT dans IE5
var sourceXML = "arboSPY-Deplier.xml" ;
var styleXSLT = "arboSPYdeplie.xslt" ;
4. INTERFACE SAX
SAX (Simple API for XML) est une recommandation de fait (plutôt qu’être une spécification
développée par un organisme de standardisation, il s’agit du fruit de la collaboration de
développeurs de parseurs XML, autour d'un groupe de discussion sur internet (Celle liste de
diffusion est nommée XML-Dev). Son objectif est de fournir une API simple et standard pour
accéder au contenu d'un document.
Contrairement à DOM, elle est basée sur une approche événementielle, et une lecture
séquentielle du document XML :
• On trouve des notions de début et fin de document, d'élément, d'attribut,
• Permet de récupérer les informations lues par le parseur XML.
SAX, contrairement à DOM, n'implémente pas d'arbre en mémoire, donc orienté traitement de
gros document XML.
Les spécifications de SAX, qui ne sont pas gérés par le W3C sont disponibles
http://www.megginson.com///SAX/index.html
Il existe deux versions de SAX :
• SAXI (11 Mai 1998) supportée par tous les parseurs XML en Java, mais sans espaces de
noms,
• SAX2 (05 Mai 2000), ajoute espaces de noms et configuration des parseurs SAX et son
utilisation en Java.
Exemple de programme SAX qui affiche le nom des balises ouvrantes et fermantes lors de
la lecture séquentielle d’un document XML
import org.xml.sax.Parser ;
import org.xml.sax.DocumentHandler ;
import org.xml.sax.helpers.ParserFactory ;
import org.xml.sax.HandlerBase;
import org.xml.sax.AttributeList;
Souvent, les parseurs DOM sont basés sur des parseurs SAX qui sont chargés de
l’implémentation de l’arbre DOM en mémoire.
- SAX est une API de plus bas niveau, orienté évènementielle, donc
parfaitement bien adapté au gros document XML.
- L’approche DOM, voire XSLT, repose sur la manipulation d’arbre, nécessitant
l’instanciation de celui-ci avant tout traitement.
Le problème de SAX est qu’il n’est pas géré par le W3C, et que sur le site des spécifications
SAX, on ne trouve pas des spécifications mais des implémentations : SAX pour JAVA, SAX
pour Python, …
XForms représente la nouvelle génération de formulaires sur le Web, après les formulaires
HTML. L’idée est d’aller au-delà des formulairers HTML, et de séparer l'aspect interface
utilisateur et le modèle de données sous-jacent. En effet, le même composant de formulaire
peut avoir des représentations très différentes suivant le navigateur et la plateforme utilisés
pour "afficher" un document, permettant ainsi d'adapter la représentation aux caractéristiques
de la plateforme, qu’il s’agisse d’une feuille de papier ou d’un périphérique manuel (un
téléphone portable, par exemple).
Pour pouvoir faire cette comparaison, je vais essayer de présenter un formulaire HTML
pour voir à quoi ressemble –t- il et en quoi XForms diffère-t-il ?
<form name="form1" method="post" action="identifier.php">
<table>
<tr><td>Nom :<input name="nom" type="text" size="30"></td></tr>
<tr><td>Prénom :<input name="prenom" type="text" size="30"></td></tr>
<tr><td>Fonction :<input name="fonction" type="text" size="30"></td></tr>
<tr><td>Login :<input name="login" type="text" size="30"></td></tr>
<tr><td>Mot de passe :<input name="passe" type="password" size="30"></td></tr>
</table>
</form>
Selon cet exemple, on voit bien qu’un formulaire HTML respecte en général un schéma
qui contient trois types d’entrées encadrées par une balise FORM. ACTION renvoit au
script de traitement de ce formulaire. Ceci est parfait pour des ordinateurs de bureau, mais
pour des terminaux légers, exemple un portable, il serait impossible de répondre à une
telle question (en l’absence d’une interface texte). C’est seulement en séparant la
présentation du frontal, que ça serait possible de modifier la question selon le type de
terminal utilisé.
La spécification XForms vient répondre à cette question en définissant trois aspects
permettant de séparer clairement le but du formulaire de sa présentation : le modèle de
données, l'interface utilisateur et le protocole d'envoi.
2- XFORMS : COMPOSANTS
Le modèle de données est subdivisé en deux parties: les structures de données, d'une part,
et les extensions (contraintes, dépendances, calculs), de l'autre. Il définit des types de
données de manière très similaire au formalisme de schéma XML : String, Boolean,
Number, Monetary Values, Date, Time of Day, Duration, URI, Binary. Chaque type de
donnée a des "facettes" qui lui sont associées. Ces facettes représentent des détails du type
(p.ex. précision, format, valeur par défaut, masque, etc.) et sont fournies sous la forme soit
d'attributs, soit de sous-éléments. Par exemple:
Contrairement aux schémas XML pour lesquels, les facettes sont statiques, les facettes
XForms peuvent être dynamiques, et correspondre ainsi à des contraintes qui évoluent en
cours d'exécution (par ex. bornes inférieures et supérieures d'un élément de formulaire qui
changent en fonction de ce que l'utilisateur aura tapé dans d'autres champs).
Exemple
<xform:date name="HeureDepart" max="HeureArrivee" />
<xform:date name="HeureArrivee" min="HeureDepart" />
</xform:case>
<xform:case locale="us" condition="property(locale) is 'US'">
<xform:string name="street"/>
<xform:string name="city"/>
<xform:string name="state"/>
<xform:string name="zipCode"/>
</xform:case>
<xform:case locale="default">
<xform:string name="rue"/>
<xform:string name="ville"/>
<xform:string name="pays"/>
<xform:string name="codePostal"/>
</xform:case>
</xform:switch>
Structures homogènes : Permet de répéter une structure en plusieurs exemplaires.
<xform:array name="auteurs" minOccurs="1" maxOccurs="unbounded">
<xform:string name="auteur" />
</xform:array>
2-1-2 Langage de contraintes dynamiques
Les contraintes dynamiques sont définies par des expressions faisant référence à divers
éléments du document. Ces éléments peuvent être référencés à l'aide de la notation définie
dans XPath. Pour éviter des problèmes dus à l'utilisation de caractères spéciaux, les opérateurs
utilisés dans les expressions sont des mots:
opérateur signification
not expr inverse le résultat de l'expression
le résultat sera le résultat de la première expression si
if cond then expr1 else expr2 la condition est vraie, sinon celui de la deuxième
expression
expr1 is expr2 retourne vrai si les deux expressions sont égales
retourne vrai si expr1 est une valeur comprise entre
expr2 et expr3 . Les expressions doivent être du même
expr1 is within( expr2,expr3 )
type de base (numérique, string, date, temps, valeur
monétaire)
expr1 is before expr2 expr1 est inférieure à expr2
expr1 is below expr2 idem
expr1 is after expr2 expr1 est supérieure à expr2
and, or et xor opérateurs booléens
plus, minus, times et over opérateurs arithmétiques
string1 plus string2 concaténation de chaînes de caractères
nombre% valeur divisée par 100
number(), sum(), floor(), ceiling(),
fonctions numériques
average(), min(), max()
string(), concat(), starts-with(),
contains(), substring-before(), substring-
fonctions de manipulation de chaînes de caractères
after(), substring(), string- length(),
normalize-space() et translate()
heure actuelle du système sous forme de chaîne de
now()
caractères
Cette section décrit les balises à utiliser pour décrire l'interface utilisateur, les propriétés de
style permettant la mise en page des éléments interactifs de formulaires, ainsi que le
mécanisme faisant le lien entre l'interface utilisateur et le modèle de données.
2-2-1 Eléments interactifs
Elément Catégorie Description
élément non modifiable par l'utilisateur et affichant une
output anyControl
valeur généralement calculée à partir d'autres éléments
élément de saisie de texte. Les attributs rows et cols
textbox anyNavControl
indiqueront les dimensions (en caractères).
checkbox anyNavControl case à cocher
élément de sélection simple contenant un élément <item
value="..."> pour chaque valeur possible. La propriété de
exclusiveSelect anyNavControl
style list-ui peut prendre une des valeurs radio, checkbox,
menu ou listbox pour définir l'apparence de l'élément
élément de sélection multiple contenant, comme l'élément
multipleSelect anyNavControl
exclusiveSelect, des éléments item.
élément permettant de lancer une action. L'attribut action
button anyNavControl
peut contenir une contrainte dynamique.
élément provoquant l'envoi des données du formulaire.
submit button
L'attribut action a pour valeur par défaut submit().
reset pas encore défini
suspend pas encore défini
D'autres éléments interactifs seront bientôt définis.
2-2-2 Eléments de mise en page
Elément Description
élément pouvant contenir d'autres éléments de formulaire. La propriété de style
layout indique la direction selon laquelle les éléments contenus sont répartis
groupbox (horizontal, vertical ou inherit). La propriété field-align indique l'emplacement
de l'étiquette (sous-élément <caption>) d'un élément par rapport à l'élément
interactif même (left, right, top, bottom, center, justify ou inherit ).
Le lien entre éléments de l'interface et l'instance de données est réalisée à l'aide d'expressions
dans le langage de contraintes dynamiques.
Chaque élément interactif de formulaire peut avoir un attribut ref qui prend pour valeur une
expression dans le langage de contraintes dynamiques. Cet attribut indique quelle partie de
l'instance de données l'élément interactif définit.
Exemple:
<xform:textbox ref="EmpruntLivre/Emprunteur/NomFamille">
</xform:instance>
L'élément <xform:instance> sert à définir la valeur intiale de l'instance de données associée à
un formulaire. Ses sous-éléments devraient être modifiés par le logiciel employé par
l'utilisateur lorsque celui-ci interagit avec les éléments interactifs du formulaire.
S'il y a plusieurs formulaires indépendants dans le même document, l'élément <xform:xform
id="NomDuFormulaire"> permet de déclarer un formulaire et l'attribut xform:xform permet
d'associer un élément interactif à un formulaire déclaré. Exemple:
<xform:textbox xform:xform=ref="EmpruntLivre/Emprunteur/NomFamille">
<xform:xform id="b">
<xform:model>
...
</xform:model>
<xform:instance>
<EmpruntLivre>
<Emprunteur>
<NomFamille>...</NomFamille>
</Emprunteur>
</EmpruntLivre>
</xform:instance>
</xform:xform>
L'élément <xform:model> sert à définir le modèle de données associé à un formulaire, un peu
comme une déclaration de type dans un langage de programmation. Si une instance est
explicitement déclarée, elle doit être conforme au modèle associé au formulaire.
L'élément <xform:bind id="..." ref="..."> permet d'établir un lien entre modèle, instance et
interface lorsque ces différentes parties ne sont pas directement imbriquées dans le même
élément <xform:xform>.
1- INTRODUCTION
XML est devenu dans peu de temps le format standard de structuration et d’échange de
données le plus populaire. Ce métalangage est capable d’être le format du stockage, du
transport et d’affichage des données. Parallèlement, les bases de données relationnelles
constituaient depuis un bon moment et constituent toujours le moyen le plus utilisé pour le
stockage des données dans la plupart des entreprises, et ce pour leur capacité de mettre à
disposition d’un grand nombre d’utilisateurs des données avec un accès rapide et un bon
niveau de sécurité.
Les SGBDRs sont donc des outils qui s'adossent traditionnellement à un système de gestion
de base de données (SGBD) pour organiser les éléments d'information (fichiers, textes,
images, etc.) au sein d'une structure de tables liées entre-elles. Une galaxie de contenus
structurés qu'ils rendent accessibles depuis une application cliente par le biais de langages de
requêtes - exécutées via des interfaces (telles que ODBC et JDBC). Pour l'heure, le
vocabulaire le plus utilisé pour l'interrogation de bases de données demeure le langage SQL
(pour Structured Query language).
Avec la montée en puissance du XML, les éditeurs positionnés sur ce créneau tentent
d'évoluer : la plupart d'entre eux ont mis en place des mécanisme permettant d'intégrer à leur
produit des documents dans ce format. Certains ajoutant d'ores et déjà une couche de
structuration XML à leur référentiel propriétaire (c'est notamment le cas d'Oracle).
Aux côtés de ces acteurs traditionnels, plusieurs éditeurs proposent des applications XML
natives. Schématiquement, ce type d'outils s'articulent autour d'un référentiel de contenu qui
repose sur les briques du langage XML relatives à la description et à la structuration de
données (DTD, XML Schema, etc.). Côté logiciel client, les langages de requêtes qu'ils
supportent sont également décrits à l'aide de vocabulaires XML. Il s'agit principalement de
XQuery et de XPath.
Pour ces raisons et pour les avantages qu’offrent ces deux moyens, à savoir XML et les
SGBDs, plusieurs auteurs pensent que « l’utilisation combinée de ces deux méthodes offre
également au programmeur un grand nombre de possibilités. D’une part, les bases de
données relationnelles apportent une gestion et des fonctionnalités de sécurité fiables…
d’autre part, dans la mesure où le langage XML est composé uniquement de texte, il peut
facilement être transmis sur un réseau, et d’une plate-forme à l’autre… de plus, il peut
facilement être traduit d’un langage à l’autre»5 .
Plusieurs raisons donc nous poussent à associer XML et les bases de données : stocker des
documents XML dans une base de données ou utiliser un contenu d’une base de données au
format XML :
- XML fournit une méthode de représentation des données structurées sans ajout
d’informations,
- XML permet la réutilisation des données par des systèmes d’héritage,
5
WILLIAMS, Kevin & BRUNDAGE, Michael & DENGLER, Patrick, et al. – XML et les bases de données. –
Eyrolles, 2001
- XML peut être utilisé par des outils déjà disponibles (Feuilles de style : XSLT et
serveurs XML : ex : Biztalk…),
- XML, en contenant les données et la structure, permet facilement la transmission et la
représentation des données,
- Les bases de données sont plus adaptées que XML pour des utilisations internes de
recherche.
Je vais essayer, à travers ce cours d’expliquer, à partir du livre « XML et les bases de
données » comment peut-on profiter des avantages de ces deux mondes.
2-1 SGBDR
§ Indépendance physique,
§ Indépendance logique,
§ Manipulation des données par des non informaticiens,
§ Efficacité d'accès aux données,
§ Administration centralisée des données,
§ Non redondance des données,
§ Cohérence des données,
§ Sécurité des données.
Cependant, ces SGBDs limités pour trois raisons essentielles :
- ils sont conçus pour gérer des données de gestion, c'est à dire structurées de manière
régulière, bien souvent sous forme de tables. Beaucoup de données ne peuvent donc
être gérées par un SGBD de la génération présente : c'est le cas des textes, des images,
des résultats de mesures…,
- les SGBD actuels ne permettent que de retrouver les données stockées dans la base. Ils
ne sont guère capables de raisonner afin de déduire à partir de données et de lois
générales connues, de nouvelles données,
- les SGBD actuels qui se disent de plus en plus "user friendly" - c'est à dire amis de
l'utilisateur- sont loin de présenter des interfaces simples, accessibles par des non
informaticiens.
Nous allons commencer par une modélisation des données provenant d’une base de données
relationnelle pour voir après les possibilités de les stocker dans un document XML.
Dans une base de données, il y a des différentes tables qui stockent chacune un ensemble de
données liées à une entité déterminée. Une table représentant une adresse postale d’une
personne par exemple peut être schématisée comme suit :
Prenom Nom Rue Ville Code_postal Pays
Abderrazak Mkadmi 18 rue la Antony 92160 France
fontaine
Cette table est créée, par le biais du langage SQL, comme suit :
Create table PERSONNE (Prenom VARCHAR(35), Nom VARCHAR (35), Rue VARCHAR
(35), Ville VARCHAR (35), Code_postal VARCHAR (9), Pays VARCHAR (35)) ;
Parallèlement, en XML, les données peuvent être regroupés dans un élément décrivant une
entité déterminée (exemple : adresse). Pour présenter par exemple l’entité présentée ci-dessus
dans une table d’une base de données, nous pouvons créer un élément « Personne » qui
contiendra toutes les données stockées dans la table « PERSONNE ».
XML permet deux moyens de représenter ces données : en utilisant des éléments ou des
attributs (comme c’est vu dans le cours précédant sur XML).
En utilisant des éléments, nous pouvons présenter l’élément « Personne » comme suit :
<Personne>
<Prenom>Abderrazak</Prenom>
<Nom>MKADMI</nom>
<Rue>18 rue la Fontaine</Rue>
<Ville>Antony</Ville>
<Code_postal>92160</Code_postal>
<Pays>France</Pays>
</Personne>
En utilisant des attributs, l’élément « Personne » peut être présenté comme suit :
<Personne
Prenom= »Abderrazak »
Nom= « MKADMI »
Rue= « 18 rue la Fontaine »
Ville= « Antony »
Code_postal= « 92160 »
Pays= « France »/>
Dans une base de données relationnelle, une association entre deux entités d’informations est
assurée par une relation entre deux tables. Pour pouvoir présenter cette relation dans un
document XML, je vais d’abord présenter cette structure dans une base de donnée, à travers
ces deux tables :
Table : PROPRIETAIRE_MODELE
ID_Proprietaire Prenom_Owner Nom_Owner Tel_Owner Email_Owner Ville_Owner
Clé
primaire Clé
étrangère
Table : MODELEXML
ID_Modele Designation_Modele Version Date_Version Mots_Cles ID_Proprietaire
Table : PROPRIETAIRE_MODELE
ID_Proprietaire Prenom_Owner Nom_Owner Tel_Owner Email_Owner Ville_Owner
Clé
primaire Clé
étrangère
Table : MODELEXML
ID_Modele Designation_Modele Version ID_Organisation Mots_Cles ID_Proprietaire
Clé Primaire
Clé
étrangère
Table : ORGANISATION
ID_Organisation Nom_Org Acronyme_Org Tel_Org Site_Web_Org Ville_Org
Clé
primaire
6
WILLIAMS, Kevin & BRUNDAGE, Michael & DENGLER, Patrick, et al. – XML et les bases de données. –
Eyrolles, 2001
7
op cit p.9
- Créer une table intermédiaire qui exprime la relation entre le père et l’enfant, si ce
dernier apparaît une ou plusieurs fois ;
- Créer une colonne pour chaque élément contenant que du texte et apparaissant qu’une
seule fois dans l’élément père dans la table représentant l’élément père, tout en
définissant la taille nécessaire … Si l’élément contenant du texte apparaît plusieurs
fois dans l’élément père, il faut créer une table pour stocker ses valeurs, ainsi que la
clé étrangère renvoyant à l’élément père. Si cet élément peut apparaître plus d’une fois
dans plusieurs éléments, il faut créer une table intermédiaire pour exprimer la relation
entre chaque père et chaque enfant ;
Pour les éléments de contenu mixte, créer une table et insérer des lignes, tout en précisant
une clé, puis créer deux tables, une pour l’élément et une pour relier les différentes parties de
cet élément, et dans la table des sous éléments, inclure une clé étrangère qui pointe vers la
table de l’élément principal ;
Pour la déclaration des attributs :
pour chaque attribut de type CDATA, ajouter une colonne à la table correspondant à
l’élément associé à cet attribut, tout en lui définissant une chaîne de longueur variable et une
taille maximale. Ex : pour : Code_Postal CDATA #REQUIRED, on met : Code_Postal
VARCHAR (10) ;
pour chaque attribut de type ÉNUMÉRÉ, ajouter une colonne à la table correspondant à
l’élément associé à cet attribut, tout en lui définissant un type : ENUM. Ex : pour un élément
Role_Affaire
< !ELEMENT Role_Affaire EMPTY>
< !ATTLIST Role_Affaire
Type_Role_Affaire (client | fournisseur | distributeur) #REQUIRED
On crée la table suivante :
Create table Role_Affaire (Type_Role_Affaire ENUM (client, fournisseur,
distributeur))
Gérer les attributs de type ID et IDREF qui servent successivement à identifier de manière
unique les éléments à l’intérieur de document XML (pour les ID) et renvoyer à d’autres
éléments dont les attributs ID correspondent (pour les IDREF). Pour le premier attribut, nous
pouvons le définir comme une clé primaire dans la base de données ou simplement le garder
pour le relier à tout IDREF pointant vers lui. Quant au deuxième, on le représente par une clé
étrangère qui fait référence à la clé primaire de l’élément vers lequel l’attribut pointe. Si
l’attribut IDREF pointe vers plusieurs types d’élément, on le représente par une clé de
référence de table indiquant la table à laquelle la clé correspond ;
Pour les attributs de type NMTOKEN, NMTOKENS, ENTITY, ENTITIES, créer pour
chacun d’eux une colonne dans la table correspondant à l’élément stockant la valeur de
l’attribut ;
Enfin, vérifier les résultats, s’il y a des conflits entre les noms, et changer les noms de façon à
résoudre ce problème.
Toutefois, dans un contexte où les données sont déjà structurées par XML, il peut se révéler
intéressant de disposer d'un langage permettant de faire des requêtes directement sur cette
structure de données. C'est le but des langages de requête XML (XML Query Language) dont
le W3C vise la standardisation. L'interrogation des BD relationnelles reçoit donc un
traitement particulier, comme nous avons vu plus haut. Souvent, un schéma SQL peut être
traduit en une perspective XML où chaque tableau devient un document, chaque colonne
devient un élément du document et chaque valeur de cellule comme le contenu d'élément. Les
interrogations SQL, les regroupements (GROUP BY, HAVING), les unions (joins), peuvent
être convertis en syntaxe XQuery comme des expressions FLWR (FOR, LET, WHERE,
RETURN).
XML Query Language, le langage de requête XML est à XML ce que SQL pour les bases de
données relationnelles. Il représente le standard le plus important produit par le W3C, dans
lequel une interrogation est représentée comme une expression.
L'élement de base donc du langage XQuery, comme cité ci-dessus est l' expression. En
XQuery, tout est une expression qui renvoit une valeur. Le langage reconnait de nombreuses
sortes d'expressions qui peuvent être construites à partir de mots-clés, de symboles ou
d'opérandes. Je vais essayer de présenter les différents types d'expressions définies par le
W3C à savoir :
Ø expression de chemin (path),
Ø constructeurs d'éléments,
Ø expressions FLWR (, LET, WHERE, RETURN),
Ø expressions mettant en jeu des opérateurs et des fonctions (UNION, INTERSECT,
EXCEPT),
Ø expressions conditionnelles (IF…THEN…ELSE),
Ø et expressions qui testent ou modifient les types de données.
Ces diverses expressions peuvent être utilisées soit directement, soit dans des blocs emboîtés.
5-2-1 Expressions de chemin
Elles sont basées sur la synthaxe de XPath, le standard XML pour décrire des "chemins" dans
un document XML:
Exemple : pour trouver tous les titres de chapitres dans un document livres.xml :
document("livres.xml")//chapitre/titre
pour trouver tous les livres publiés par Eyrolles après 1991:
document("biblio.xml")//livre[editeur = "Eyrolles" AND @annee > "1991"]
5-2-2 Constructeurs d'éléments
Utilisés quand une requête doit créer de nouveaux éléments. Les accolades { } permettent de
placer une expression au sein d'un constructeur.
Génère un élement <livre> dont un sous élément est <titre> et qui contient l'attribut "année"
:
<livre>
{ $b/@annee }
{ $b/titre }
</livre>
La variable $b est rattachée à une autre partie de la requête. Quand l'ensemble de la requête
est lancé, le constructeur ci-dessus donnera un résultat sous la forme suivante:
<livre annee="2002">
<titre>XML et les bases de données</title>
</livre>
5-2-3 Expressions FLWR
Prononcée "flower", une expression FLWR (For, Let, Where, Return) est similaire à la
construction SELECT-FROM-WHERE de SQL (avec qui elle partage certaines capacités), et
compose le squelette de l'expression XQuery. Une expression FLWR consiste à :
v une clause FOR : attache une ou plusieurs variables à une séquence de valeurs
renvoyées par une autre expression (généralement une expression de chemin), et
boucle dans les valeurs ;
v une clause LET : attache aussi une ou plusieurs variables à une séquence, mais sans
itération ;
v une clause WHERE : contient un ou plusieurs prédicats qui filtrent ou limitent le jeu
de noeuds générés par les clauses FOR/LET.
<resultats>
{
FOR $t IN distinct(document("prix.xml")/prix/livre/titre)
LET $p := avg(document("prix.xml")/prix/livre[titre=$t]/prix)
WHERE (document("biblio/xml")/livre[titre=$t]/editeur) = "Eyrolles"
RETURN
<resultat>
{ $t }
<moy>
{ $p }
</moy>
</resultat>
}
</resultats>
<utilisateur>
{ $u/numero }
{ $u/nom }
{
IF (empty($b))
THEN <status>inactif</status>
ELSE <status>actif</status>
}
</utilsateur>
5-2-5 Expressions quantifiées
Cette expression est exprimée par SOME et EVERY. Avec SOME, il est possible de
déterminer si au moins un noeud d'un bloc de noeuds correspond à un prédicat. L'expression
EVERY permet quant à elle de tester si tous les noeuds d'un bloc correspondent à un prédicat.
Le code suivant fait la liste des utilisateurs ayant parié sur tous les jeux :
<parieur>
{
FOR $u IN document("utilisateur.xml")//utilisateur_tuple
WHERE
EVERY $item IN document("jeux.xml")//jeu_tuple SATISFIES
SOME $b IN document("paris.xml")//pari_tuple SATISFIES ($jeu/numjeu
= $b/numjeu AND $u/numutilisateur = $b/numutilisateur)
RETURN
$u/nom
}
</parieur>
"Journal du Net"
42
true
"2002-11-04"
1. CHAMP D'APPLICATIONS
2. LES STANDARDS
2.1. INTRODUCTION
La spécification XML est mise en oeuvre sous forme d'applications, c'est à dire de langages
de descriptions dérivés.
XML est un méta- langage de description, servant à créer des langages plus spécialisés. C'est
par exemple le domaine des mathématiques, des graphiques 2D, du multimédia, ...
Comme les standards connexes (XPath, XLL), ces applications dérivées peuvent devenir des
recommandations du W3C.
§ MathML (Mathematical Markup Language) pour la description et communication
d'informations mathématiques et scientifiques sur le Web,
§ SVG (Scalable Verctor Graphics) pour la description en XML des graphiques en 2D,
8
Customer Relationship Management
1
Y=
X² + 1
SMIL (Synchronized Multimedia Integration Langage) est une application du XML dont
l'objet est la synchronisation des fichiers multimédias sur internet.
SMIL va utiliser les vidéos encodées préalablement en tant que ressources au même titre que
les fichiers audio, les images ou les fichiers textes, voir même le Flash pour Real Player.
SMIL nous permet de connaître la qualité de la connexion de l'internaute visiteur, les options
de langues de son système. SMIL permet donc de synchroniser des flux Audio et Vidéos en
fonction des paramètres de chaque internaute.
SMIL version 1.0 a un statut de recommandation du 15 Juin 1998, dont les spécifications sont
disponibles à :
http://www.w3.org/TR/1998/REC-smil-19980615
Aujourd'hui, seul Real Player sait gérer le SMIL convenablement, et le navigateur xsmiles
Une page SMIL est composée de 2 éléments principaux :
- Une entête qui définit toutes les régions nécessaires à l'affichage,
- Un corps qui contient toutes les instructions de synchronisation.
Définition des régions d’affichage
< ?xml version="1.0" encoding="UTF-8" ?>
< !DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 1.0//EN"
http://www.w3.org/TR/REC-smil/SMIL.dtd>
<smil>
<head>
<meta name="author" content= "Daniel Duchaussoy"/>
< meta name="title" content= "Demo SMIL"/>
<meta name="copyright" content="2000 Daniel Duchaussoy"/>
<meta name="abstract" content="Demo SMIL pour ma page perso"/>
<switch>
< ! - - définition des régions pour les internautes haut débit - ->
<layout system-bitrate="80000">
<root-layout background-color="black" height="525" width="772" />
<region id="fondg" left="0" top="0" height="525" width="772"
z-index="0" />
<region id="videog" left="106" top="130" height="240" width="320"
z-index="1" />
</layout>
< ! - - définition des régions pour les internautes bas -débit - ->
<layout>
<root-layout background-color="black" height="403" width="593" />
<region id="fondg" left="0" top="0" height="403" width="593"
z-index="0" />
<region id="videog" left="73" top="92" height="144" width="192"
z-index="1" />
</layout>
</switch>
</head>
CONCLUSION
XML est un méta- langage de description des données permettant de définir des formats de
documents. Ces formats possèdent les caractéristiques suivantes:
• Ce sont des documents textuels utilisant la norme Unicode,
• Le modèle de base est hiérarchique,
• XML est une norme de l'industrie,
• L'information dans les documents est auto-descriptive
L'ensemble de ces caractéristiques fait en sorte que la norme XML permet de représenter des
documents structurés, elle assure la pérennité de l'information et facilite les échanges de
données.
ü XML permet de définir des langages spécifiques à savoir : XLL, XPath, XQuery, RDF,
… à travers une méta-syntaxe, à laquelle doivent se conformer ces langages,
ü XML ne s’intéresse pas au formatage de données, il en décrit la structure et la sémantique,
Les informations liées à la présentation des données doivent être décrites dans une feuille
de style qui permet au navigateur de savoir comment contrôler le format des éléments,
ü Le XSL (Extensible Style Language) est le langage utilisé pour définir les feuilles de style
qui seront associées aux documents XML. C'est le fichier XSL qui permettra de définir
que tel élément XML doit être affiché avec telle fonte, de telle couleur, etc. Ces décisions
seront, grâce à XSL, prises par le créateur du document qui aura ainsi un meilleur contrôle
sur l'apparence de son document,
ü Une DTD est un composant facultatif associé à un document XML spécifiant le contenu
autorisé et la structure des éléments. Si on utilise une DTD, le document sera dit "valide";
c'est-à-dire qu'il fera appel à cette DTD et s'y conformera. Si on n'utilise pas de DTD, le
document XML devra être "bien formé"; il ne devra comporter aucune ambiguïté dans le
balisage,
ü Un sché ma XML est une DTD plus développée. Il est conçu pour palier aux déficiences
des DTD. XML Schema propose, en plus des fonctionnalités fournies par les DTD, des
nouveautés à savoir le grand nombre de types de données, la notion d'héritage, le support
des espaces de nom… et le grand apport de ce dernier est qu’il est écrit en langage XML,
ü XForms doivent devenir la prochaine génération de formulaires, étandant et simplifiant la
fourniture de formulaires indépendants de l’interface utilisateur.
ü XQuery est donc le nouveau langage qui permet au XML d'atteindre son plein potentiel
dans la gestion de données en provenance de bases de données et autres documents au
format XML.
« Il est à prévoir que l'usage d'XML va déborder largement le WWW, en provoquant la
convergence de deux mondes informatiques jusqu'ici séparés ; celui des documents et
celui des données. Il est très probable qu'il va de ce fait devenir très rapidement la
lingua franca de l'informatique, parlée tout autant par les SGBD que par les outils de
bureautique et de documentation, par les logiciels de gestion aussi bien que par les
applications techniques et scientifiques et qu'il va considérablement simplifier
l'Échange de Données Informatisé (EDI).
On n'a donc pas fini d'entendre parler de XML ! 9 »
9
LAZINIER, Emmanuel. XML expliqué aux débutants. - http://www.chez.com/xml/initiation/
BIBLIOGRAPHIE
LIVRES
WILLIAMS, Kevin & BRUNDAGE, Michael & DENGLER, Patrick, et al. – XML et les
bases de données. – Eyrolles, 2001
HAROLD, Eliotte Rusty. – XML : le guide de l’utilisateur. – Eyrolles, 2000
BERNADAC, Jean-Christophe & KNAB, François. - Construire une application XML. -
Eyrolles
MICHARD, Alain. - XML Langage et applications. – Eyrolles. -
(http://www.eyrolles.com/xml)
SITES INTERNET
Des références sur html : htlp://www.allhtml.com/langages/html.php3
Des références sur html4:
• http://oxygen.citeweb.net/
• http://www.w3.org/tr/rec-html40
Le site de l'éditeur O'Reilly : htlp://www.xml.com/pub
Les rapports techniques du consortium W3C : http://www.w3.org/tr
Des références sur xml :
• l'incontournable: http://www.w3c.org
• le site XML français: http://xmlfr.org
• Spécification XML annotée: xml.com/axml/axml.html
• Tutoriaux SUN: java.sun.com/xml
• Le site de référnce de Robin Cover: www.oasis-open.org/cover
• Site généraliste "business": xml.com
• Infos sur les softs commerciaux: xmlsoftware.com
• Infos sur des freewares: www.garshol.priv.no/download/xmltools
• et ...www.google.com
• www.w3.org/tr/rec-xml
• http://www.xmltechno.com
• http://www.chez.com/xml/liens/liens-en-1.htm
LAZINIER, Emmanuel. - XML expliqué aux débutants. -
http://www.chez.com/xml/initiation/
Bertrand Ibrahim. – Introduction à XML. - http://cui.unige.ch/eao/www/xml/Plan.html
Des références sur XML-QL:
§ http://www.w3.org/TR/NOTE-xml-ql/
OUTILS
Microsoft :
- notepad XML : http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dnxml/html/xmlpaddownload.asp
- parser XML : http://msdn.microsoft.com/xml/default.asp
Modélisation et développement, éditeur DTD :
- http://www.opentext.com/near_and_far/
- http://www.eyrolles.com/xml
Validation de syntaxe XHTML:
http://validator.w3.org/
Validation de syntaxe de schémas:
http://www.w3.org/2001/03/webdata/xsv
Validation de syntaxe de feuille de style CSS:
http://jigsaw.w3.org/css-validator/validator-uri.html
Validation de syntaxe XML (ne semble par reconnaître les déclarations d'espaces de noms
xmlns:xx="...")
http://www.stg.brown.edu/service/xmlvalid/
Validation de syntaxe XML (offre le choix entre validation basée sur la DTD ou traitement
des espaces de noms)
http://www.cogsci.ed.ac.uk/~richard/xml-check.html
Vérificateur de syntaxe XML (vérifie juste que le document est bien formé)
http://www.xml.com/xml/pub/tools/ruwf/check.html
Validation de syntaxe XML (nécessite Internet Explorer?? je n'ai pas pu le faire fonctionner)
http://msdn.microsoft.com/downloads/samples/internet/xml/xml_validator/
GLOSSAIRE
BPML (Business Process Modeling Language) : De la même façon que XML fournit un
format de représentation des données, BPML est un métalangage de modélisation des
processus collaboratifs qu'engage une entreprise avec ses partenaires sur internet.
www.bpmi.org
cXML (Commerce XML) Cette spécification XML, élaborée par Ariba, se propose de
standardiser la gestion des catalogues électroniques et des transactions commerciales
exécutée travers d'une place de marché sur internet. www.cxml.org
DOM (Document Object Model) : Le modèle objet de documents définit une API
(indépendante des langages de programmation) permettant de manipuler et de
parcourir un document représenté sous la forme d'arborescence orientée objet (un
noeud de l'arbre est un objet). www.w3.org/DOM
ebXML (Electronic Business XML Initiative) : Les Nations unies (UN/Cefact) et l'organisme
Oasis sont à l'origine de ce framework XML, qui permettra à deux partenaires de
s'échanger sur internet des messages s'inscrivant dans le cadre de l'intégration de leurs
processus collaboratifs. www.ebxml.org
ebXML Registry : Cet annuaire référence tous les éléments (schémas XML, documents,
description de processus, modèles UML, etc. ) nécessaires à une entreprise désirant
engager une collaboration commerciale sur internet, basée sur le framework XML
ebXML, avec l'un de ses partenaires. www.ebxml.org/toc.htm
eCo Framework : Framework XML d'échange de données. Défini par CommerceNet, celui-
ci se propose de rassembler dans une même spécification les apports de différents
standards XML (OBI, ICE, OFX, OTP, etc.).
www.commerce.net/projects/currentprojects/eco
HDML (Handheld Device Markup Language) : S'appuyant sur une syntaxe XML, ce langage,
développé par Openwave (ex-Phone. coin), est utilisé pour créer et diffuser un contenu
de type hypertexte sur des terminaux mobiles caractérisés par de fortes contraintes
d'affichage.
OBI (Open Buying on the Internet) : Le but de cette spécification est de standardiser toutes
les étapes relatives à la gestion des achats sur internet. www.openbuy.org
SAX (Simple API for XML) : Type d'analyseur (parser) XML, dit événementiel.
Contrairement à un analyseur DOM, qui lit un document XML en bloc, un analyseur
SAX renvoie les éléments d'un document au fur et à mesure de leur lecture.
www.megginson.com/SAX.
SOAP (Simple Object Access Protocol) : Ce protocole permet d'invoquer un objet distant en
communiquant les informations nécessaires à l'appel (nom de la méthode et de ses
paramètres d’entrée) dans un message au format XML et via HTTP. La réponse à la
requête est, elle aussi, renvoyée dans une structure XML.
www.w3.org/TR/2000/NOTE-SOAP-20000508
SVG (Scalable Vector Graphics) : Langage de description en XML des graphiques en deux
dimensions. www.w3.org/TR/2000/CR-SVG-20001102
UDDI (Universal Description Discovery and Integration) : Cet annuaire offre des mécanismes
d’enregistrement et de recherche de services web développés et publiés par les
entreprises du monde entier. UDDI fournit des données sur l'auteur de services web
(adresse, contact, etc. ), sur leur catégorie d'appartenance (taxonomie) et sur les
moyens techniques permettant de les invoquer. www.uddi.org
VML (Vector Markup Language) : Définit un format d'encodage des informations graphiques
vectorielles, auquel s'ajoutent des balises décrivant la manière dont ces informations
sont affichées. www.w3.org/TR/1998/NOTE-VML-9980513.html.
WebDAV (Web Distributed Authoring and Versioning) : Ce standard constitue une série
d'extensions au protocole HTTP 1. 1. Il permet de disposer d'une infrastructure
d'édition et de partage (verrouillage, gestion de versions, etc. ) de documents résidant
sur des serveurs web distants. Les informations liées aux propriétés du document - les
métadonnées - sont décrites en XML. www.webdav.org/specs
WML (Wireless Markup Language) : Il s'agit du langage de description - basé sur une
syntaxe XML - du contenu diffusé sur les terminaux mobiles conformes au protocole
WAP (wireless Application Protocol). www.w forum.org.
WSDL (Web Services Description Language) : Ce langage permet d'exposer dans un format
XML la signature d'un composant applicatif - on parle de service web - accessible sur
internet. Cette signature inclut les opérations exposées par le service web en question,
le type de ses paramètres d'entrée et de sortie, l'adresse réseau à laquelle on pourra
l'invoquer, etc. www.w3.org/TR/2001/NOTE-wsdl-20010315
xCBL (XML Common Business Library) : Cette spécification XML, élaborée par
Commerce0ne, se propose de standardiser la gestion des catalogues électroniques et
des transactions commerciales exécutées au travers d'une place de marché sur internet.
www.xcbl.org
XLANG Schedule : Ce langage permet de décrire en XML les processus collaboratifs conçus
avec l'outil BizTalk Orchestration Designer. www.microsoft.com/biztalk
XLink (XML Linking Language) : Ce langage, basé sur une syntaxe XML, permet d'insérer
dans un document XML des éléments de description de liens entre objets. Ces liens
peuvent être plus unidirectionnels, comme les hyperliens de HTML (« -A HREF... »)
ou plus complexes (liens entre plus de deux documents ou auxquels on associe des
métadonnées, etc. www.w3.ore/TR/xlink.
XML Namespaces (domaine ou espace de noms) : Permet de qualifier les éléments et les
attributs d'un document XML en leur associant des espaces de noms identifiés par une
adresse URI (Uniform. Resource Identifier). Tous les éléments appartenant à un
espace de noms sont préfixés par son identifiant, suivi du signe «:» (-personne : nom-
Martin-/personne : nom-). www.w3.or2/TR/REC-xml- names.
XML Schema : Cette spécification permet de créer des schémas XML, lesquels remplacent et
pallient les lacunes des DTD en termes de définition de type de données, d'espaces de
noms (namespaces) et des relations entre les éléments d'un document XML et ses
attributs. Contrairement à une DTD, un schéma XML est un document XML.
www.w3.org/ XML/Schema.
XML-RPC (XML Remote Procedure Call) : Ce protocole a inspiré SOAP. Il permet à une
application d'appeler une fonction applicative distante, la requête étant transportée sur
HTTP et son corps décrit en XML. www.xml-rpc.com
XPath (XML Path Language) : Ce langage permet d'accéder à un élément d'un arbre XML. Il
a été conçu pour être utilisé conjointement avec XSLT et XPointer.
www.w3.org/TR/xpath.
XUL (eXtensible User Interface Language) : Langage basé sur XML permettant de décrire les
éléments composant une interface utilisateur, tels que les fenêtres graphiques, les
boîtes de dialogue, les menus, les barres de défilement, etc.
www.mozilla.org/xpfe/xptoolkit/xulintro.html