VI.1 Problématique

 

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.3 Le DIT

 

La gestion díun livre peut se faire de manière ´ plate ª. Tous les éléments qui le définissent se trouvent au même niveau dans líarbre correspondant à ce livre. Le numéro ISBN peut-être soit un élément soit un attribut de líélément livre.

La deuxième solution est choisie. Le DIT (Document Information Tree) est représenté ci-dessous.

 

AppleMark

 

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

 

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

 

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.

 

 

b. Le document XSL

 

ÿ    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

 

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

 

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

 

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

 

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.

 

Xalan ño livre.html livre.xml livre.xsl

 

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