Une bibliothèque désire réaliser une petite gestion de ses livres via des documents XML. Le but est de fournir cette information sur internet via un fichier html. La présentation doit síeffectuer sur un critère : la catégorie.
VI.2 Analyse
Un livre peut être caractérisé par les informations
suivantes :
ÿ
son
auteur
ÿ
son
titre
ÿ
son
année de parution
ÿ
son
éditeur
ÿ
son
appartenance à une catègorie
ÿ
son
numéro ISBN
Le numéro ISBN est un numéro unique qui peut servir de
référence et de clé pour la représentation díune information. Il doit être
obligatoirement renseigné.
Tous les éléments cités doivent être obligatoirement présent
dans la description díun livre.
VI.4 Réalisation
a. Le document
XML
Pour faire simple, la
grammaire (DTD) est directement insérée dans le document XML.
Nous allons créer un
document XML contenant 3 références de livres.
ÿ
La partie entête et DTD
q
Le code source
1 2 3 4 5 6 7 8 9 10 11 |
<?xml
version="1.0" encoding="ISO8859-1"
standalone="yes"?> <!DOCTYPE ens_livres [ <!ELEMENT
ens_livres (livre+)> <!ELEMENT
livre (auteur,titre,annee,editeur,categorie)> <!ATTLIST
livre ISBN CDATA #REQUIRED> <!ELEMENT
auteur (#PCDATA)> <!ELEMENT
titre (#PCDATA)> <!ELEMENT
annee (#PCDATA)> <!ELEMENT
editeur (#PCDATA)> <!ELEMENT
categorie (#PCDATA)> ]> |
q
Explications
Nƒ |
Explications |
1 |
Entête du document xml
indiquant le type de codage utilisé (encoding="ISO8859-1") ainsi que la non présence díune DTD externe (standalone="yes") |
2 |
Déclaration de la DTD
interne (<!DOCTYPE) avec
líindication de líélément racine de ce document xml (ens_livres). Cette DTD interne se termine à la ligne 11 (]>). |
3 |
Déclaration de líélément ens_livres racine du document. Cet élément contient de 1
à n éléments livre (livre+). On retrouve cet élément
dans la déclaration de la DTD ligne 2. |
4 |
Déclaration de líélément
de niveau 2 livre. Chaque
élément livre contient les
éléments auteur,titre,annee,editeur,categorie. Ces éléments doivent être dans cet ordre. |
5 |
Déclaration de líattribut
ISBN. Cet attribut est un
attribut de líélément livre (<!ATTLIST livre ISBN Ö). Il doit être obligatoirement présent (#REQUIRED). |
6-10 |
Ces lignes indiquent que
les éléments cités doivent contenir du texte et rien díautre (#PCDATA). |
11 |
Fin de la déclaration de
la DTD (]>). |
ÿ
Description díun livre
q
Le code source
12 13 14 15 16 17 18 19 Ö 34 |
<ens_livres> <livre
ISBN="133"> <auteur>Verchu</auteur> <titre>La
mer</titre> <annee>2001</annee> <editeur>Flamarion</editeur> <categorie>Action</categorie> </livre> Ö. </ens_livres> |
q
Explications
Nƒ |
Explications |
12 |
Insertion de líélément
racine. Cet élément ne peut être présent quíune seule fois. Il doit être
fermé à la fin du document XML. |
13 |
Insertion díun élément
livre. Cet élément possède un attribut ISBN qui possède la valeur 133. |
14-18 |
Líélément livre possède 5
sous-éléments (voir DTD). Chacun des ces éléments possède une valeur puis est
refermé. |
19 |
Fin de la description
díun livre. |
34 |
Fin du document XML avec
la fermeture de líélément racine (</ens_livres>). |
ÿ
Le document XML complet
Ce document décrit 3
livres.
Cela permet de tester et
díeffectuer le tri sur la catégorie indiquée lors de la problématique.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?xml
version="1.0" encoding="ISO8859-1"
standalone="yes"?> <!DOCTYPE ens_livres [ <!ELEMENT
ens_livres (livre+)> <!ELEMENT
livre (auteur,titre,annee,editeur,categorie)> <!ATTLIST
livre ISBN CDATA #REQUIRED> <!ELEMENT
auteur (#PCDATA)> <!ELEMENT
titre (#PCDATA)> <!ELEMENT
annee (#PCDATA)> <!ELEMENT
editeur (#PCDATA)> <!ELEMENT
categorie (#PCDATA)> ]> <ens_livres> <livre
ISBN="133"> <auteur>Verchu</auteur> <titre>La
mer</titre> <annee>2001</annee> <editeur>Flamarion</editeur> <categorie>Action</categorie> </livre> <livre
ISBN="15555"> <auteur>Aragone</auteur> <titre>Le pere</titre> <annee>1946</annee> <editeur>Hachette</editeur> <categorie>Roman</categorie> </livre> <livre
ISBN="099000"> <auteur>Adelle</auteur> <titre>La
mort</titre> <annee>1998</annee> <editeur>Hatier</editeur> <categorie>Policier</categorie> </livre> </ens_livres> |
La validité de ce document
xml est testée en utilisant le validateur du W3C.
Vous avez deux
possibilités :
ÿ
Address : ce choix
vous oblige à mettre votre document xml sur internet pour que le validateur
puisse y accéder. Si vous possédez une DTD externe vous devez aussi la mettre
sur internet et modifier líentête de votre document XML en indiquant líadresse
web de cette DTD (Voir exemples suivants).
ÿ
Local File : en
cliquant sur Browse, vous accédez à votre disque local. Il suffit díaller y
chercher votre document XML. Attention, vous ne pouvez avoir de DTD externe
dans ce cas.
Si aucune erreur níest
détectée, vous devez obtenir un message indiquant que votre document est
valide.
ÿ
La partie entête
q
Le code source
1 2 3 4 5 6 |
<?xml
version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output
method="html" indent="yes"/> |
q
Explications
Nƒ |
Explications |
1 |
Code qui débute le
document XSL. Souvenez vous quíun document XSL níest rien díautre quíun
document XML. Vous retrouvez donc le même début que dans le document XML. |
3-4 |
Déclaration du
´ rôle ª du document, transformation en feuille de style avec
líutilisation díune notation NameSpace (espace de noms) xmlns. |
5 |
Indication du type de
sortie. Il en existe 3 xml, html et text. En fonction du type de sortie
choisie, certains éléments comme les espaces, les balises ne seront pas
exactement gérés de la même façon. Par exemple, en sortie html, un élément
<BR/> sera transformé en <BR></BR> en sortie xml il restera
dans la syntaxe xml <BR/>. |
ÿ
La première phase de
transformation
q
Le code source
7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<xsl:template
match="ens_livres"> <HTML><HEAD><TITLE>Page Librairie
</TITLE></HEAD> <BODY> <CENTER> <TABLE> <xsl:apply-templates select="livre"> <xsl:sort select="categorie"/> </xsl:apply-templates> </TABLE> </CENTER> </BODY> </HTML> </xsl:template> |
q
Explications
Nƒ |
Explications |
7 |
Cette règle permet de
sélectionner un núud, en líoccurrence la racine et díeffectuer des
transformations. Cette première sélection permet généralement de générer le
code HTML de déclaration de la page HTML. Les éléments qui ne vont pas être
répétés (<BODY> Ö). Cette partie de
transformation se termine par la fermeture de la balise en ligne 19. |
8-11 |
Génération du code HTML
caractéristique díun page HTML. Le résultat provenant des livres étant inséré
dans un tableau, la balise TABLE ne doit être dans ce cas présent quíune fois
díoù son apparition à ce niveau. |
12 |
Avant de faire
líaffichage et la récupération des contenus des livres il est nécessaire
díeffectuer un tri. Ce tri doit se placer avant líextraction des contenus
díun livre sinon il ne peut être fait. En effet une fois descendu dans
líarborescence caractérisant un livre ce livre est déjà sélectionné. Le
premier sélectionné par défaut est le premier trouvé dans le document XML. Il
faut donc bien trier avant la descente. Cette règle ne peut être incluse que
dans une apply-templates. Grâce à cette règle, les núuds livre sont
sélectionnés. Rappelez vous que lorsque une règle est rencontrée, tous les
núuds concernés sont ´ balayés ª. Il va bien y avoir une sélection de tous les núuds, un tri
en ensuite le passage aux autres règles. |
13 |
Cette règle permet le
tri. Nous sommes au niveau des noeuds livre dans líarborescence. Le tri doit
se faire sur la catégorie. Cet élément est un fils direct de líélément livre
(núud courant à ce moment de la transformation). Il suffit donc de
sélectionner pour le tri líélément categorie. |
14 |
Cette ligne va de pair
avec la ligne 12. Elle est très importante et il faut bien voir sa portée.
Elle dit simplement de passer aux autres règles de transformation si il en
existe. A ce moment de la transformation, on passe non pas à líinsertion du
code de la ligne 15 mais à líapplication de la règle située ligne 21. Le code des lignes15 à 18
ne sera inclus lors de la transformation que si toutes les autres règles sont
terminées. On retrouve donc bien ces codes HTML en fin du document html créé.
Avant cela vont síinsérer díautres codes html créés par les autres règles. |
19 |
Fin de la règle de
transformation débuté ligne 7. |
ÿ
La deuxième phase de
transformation
q
Le code source
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<xsl:template
match="ens_livres/livre"> <TR> <TD ALIGN="CENTER"
BGCOLOR="green"> ISBN du livre <xsl:number value="position()"
format="1. "/>
: <xsl:value-of
select="@ISBN"/> </TD> </TR> <TR> <TD ALIGN="CENTER"> Auteur : <xsl:value-of select="auteur"/> </TD> </TR> <TR> <TD ALIGN="CENTER">
Titre : <xsl:value-of
select="titre"/> </TD> </TR> <TR> <TD ALIGN="CENTER"> Categorie : <xsl:value-of
select="categorie"/> </TD> </TR> <TR> <TD ALIGN="CENTER"> Editeur : <xsl:value-of select="editeur"/>
</TD> </TR> <TR> <TD ALIGN="CENTER">
Annee : <xsl:value-of select="annee"/> </TD> </TR> </xsl:template> |
q
Explications
Nƒ |
Explications |
21 |
Cette nouvelle règle va
síappliquer sur les núuds fils du núud ens_livres à savoir livre. Cíest ce
quíindique la partie incluse dans le match. Souvenez vous bien que
précédemment la transformation est passée par la règle 1 qui a permis
notamment de créer la balise TABLE. Cette règle se termine
ligne 53. Important : cette
règle va être utilisé autant de fois quíil y a díélément livre. Tous les codes
qui suivent vont être crées pour chaque élément livre rencontré. Dans notre
exemple nous en avons 3. |
22,27 |
Création de la première
ligne de ce tableau <TR>Ö</TR>. |
23,26 |
Création de la première
cellule, son fond est vert et son contenu sera le numéro díordre díapparition
du livre en fonction du tri effectué ainsi que son numéro ISBN. |
24 |
A la suite du texte ISBN
du livre, la numérotation est
incluse sous le format chiffre arabe (1, 2 Ö). Cette numérotation síeffectue
en comptant tout simplement líordre díarrivée du núud livre courant via la
fonction position(). |
25 |
Rappelez vous que nous
sommes au niveau du núud livre. Pour récupérer le contenu de líattribut ISBN
de ce núud il suffit de le sélectionner via la syntaxe @ISBN pas besoin de se
déplacer dans líarbre. |
28-52 |
Inclusion dans le tableau
des autres informations via leur sélection et líutilisation de la règle
<xsl:value-of select. |
ÿ
Fin de la transformation
q
Le code source
54 55 |
</xsl:stylesheet> |
q
Explications
Nƒ |
Explications |
55 |
Cette instruction est la
dernière du document XSL et elle clos cette transformation. |
ÿ
Le document XSL complet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<?xml
version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> <xsl:output
method="html" indent="yes"/> <xsl:template
match="ens_livres"> <HTML><HEAD><TITLE>Page Librairie
</TITLE></HEAD> <BODY> <CENTER> <TABLE> <xsl:apply-templates select="livre"> <xsl:sort select="categorie"/> </xsl:apply-templates> </TABLE> </CENTER> </BODY> </HTML> </xsl:template> <xsl:template
match="ens_livres/livre"> <TR> <TD ALIGN="CENTER"
BGCOLOR="green"> ISBN du livre <xsl:number value="position()"
format="1. "/>
: <xsl:value-of
select="@ISBN"/> </TD> </TR> <TR> <TD ALIGN="CENTER"> Auteur : <xsl:value-of select="auteur"/> </TD> </TR> <TR> <TD ALIGN="CENTER">
Titre : <xsl:value-of
select="titre"/> </TD> </TR> <TR> <TD ALIGN="CENTER"> Categorie : <xsl:value-of
select="categorie"/> </TD> </TR> <TR> <TD ALIGN="CENTER"> Editeur : <xsl:value-of select="editeur"/>
</TD> </TR> <TR> <TD ALIGN="CENTER">
Annee : <xsl:value-of select="annee"/> </TD> </TR> </xsl:template> </xsl:stylesheet> |
c. Le document
html
La transformation est effectuée en utilisant le logiciel
Xalan.
Le résultat de la transformation donne le fichier html qui
suit.
Le tri est bien effectué par catégorie.
<HTML> <HEAD> <META
http-equiv="Content-Type" content="text/html;
charset=UTF-8"> <TITLE>Page
Librairie </TITLE> </HEAD> <BODY> <CENTER> <TABLE
BORDER="1"> <TR> <TD
ALIGN="CENTER" BGCOLOR="green"> ISBN du livre 1. : 133</TD> </TR> <TR> <TD
ALIGN="CENTER"> Auteur : Verchu</TD> </TR> <TR> <TD
ALIGN="CENTER"> Titre : La mer</TD> </TR> <TR> <TD
ALIGN="CENTER"> Categorie : Action</TD> </TR> <TR> <TD
ALIGN="CENTER"> Editeur : Flamarion</TD> </TR> <TR> <TD
ALIGN="CENTER"> Annee : 2001</TD> </TR> <TR> <TD
ALIGN="CENTER" BGCOLOR="green"> ISBN du livre 2. : 099000</TD> </TR> <TR> <TD
ALIGN="CENTER"> Auteur : Adelle</TD> </TR> <TR> <TD
ALIGN="CENTER"> Titre : La mort</TD> </TR> <TR> <TD ALIGN="CENTER">
Categorie : Policier</TD> </TR> <TR> <TD
ALIGN="CENTER"> Editeur : Hatier</TD> </TR> <TR> <TD
ALIGN="CENTER"> Annee : 1998</TD> </TR> <TR> <TD
ALIGN="CENTER" BGCOLOR="green"> ISBN du livre 3. : 15555</TD> </TR> <TR> <TD
ALIGN="CENTER"> Auteur : Aragone</TD> </TR> <TR> <TD
ALIGN="CENTER"> Titre : Le pere</TD> </TR> <TR> <TD
ALIGN="CENTER"> Categorie : Roman</TD> </TR> <TR> <TD
ALIGN="CENTER"> Editeur : Hachette</TD> </TR> <TR> <TD
ALIGN="CENTER"> Annee : 1946</TD> </TR> </TABLE> </CENTER> </BODY> </HTML> |
d. Le visuel