IX.1 Problématique

 

Le service de líétat civil díune grande ville désire réaliser un document permettant de suivre un individu de sa naissance à sa mort.

A partir de ce document, des recherches peuvent être réalisées. De plus, des transformations en HTML doivent être possible afin de proposer la visualisation de ces fiches dans líintranet de la mairie.

Ce système doit pouvoir síétendre aux autres villes de France, voir plus.

 

IX.2 Analyse

 

La première étape est de déterminer quels sont les éléments qui caractérisent la vie civile díun individu et líimbrication de ces éléments les uns dans les autres et les uns par rapport aux autres.

En vrac de quoi à priori a-t-on besoin ?

ß      naissance (parents, date, lieu)

ß      Nom

ß      Prénom(s)

ß      Date du décès

ß      Sexe

ß      Enfant(s)

ß      Adresse

ß      Numéro de sécurité social

ß      Etat civil (marié, veuf, célibataire, pacsé)

 

Un  individu possède un seul nom cíest son nom patronymique. Si cíest une femme mariée, elle possède un nom marital.

Par contre, il peut posséder plusieurs prénoms, líun est principal, les autres sont secondaires.

Un individu, síil est toujours vivant, ne possède pas de date de décès ou alors celle-ci est vide. Dans ce cas, líadresse la aussi níest pas à indiquer ou alors elle est vide.

Un individu possède ou non un ou des enfants.

Líindividu possède un père et une mère, il est nécessaire díen connaître les noms et prénoms principaux ainsi que la date de naissance.

On peut prendre le numéro de sécurité sociale comme identifiant unique. Il sera insérer comme attribut de líélément individu.

 

On peut découper les informations díun individu en quatre zones :

ÿ    Son identité (sexe, nom patronymique, nom marital, prénoms, date de naissance, date de décès)

ÿ    Ses parents (nom du père, prénom principal du père, date de naissance du père, nom de la mère, prénom principal de la mère, date de naissance de la mère)

ÿ    Sa situation familiale (état civil, enfants)

ÿ    Son adresse

 

Il est nécessaire, comme je líai signalé précédemment, de réaliser un schéma de líarborescence de ce document xml.

 

IX.3 Le DIT

 

La discussion sur le numéro de sécurité social a déjà eu lieu dans le point précédent.

 

Le DIT (Document Information Tree) est représenté ci-dessous.

 

AppleMark

 

 

IX.4 Réalisation

 

 

a. Le document XML

 

Cet exemple est plus complet et plus complexe que les précédents. Pour cette raison, pour une meilleure lisibilité ainsi que pour montrer une autre méthode, la DTD níest pas directement incluse dans le fichier XML mais est externe.

Nous allons créer un document XML contenant 2 individus.

 

ÿ    La partie entête et DTD

 

q   Le code source

 

1

2

3

4

<?xml version="1.0" encoding="ISO8859-1" standalone="no"?>

<!DOCTYPE ens_individu PUBLIC "Jacquenod/etatcivil/DTD"

 "http://www.jacquenod.fr/XML/individu.dtd">

 

 

q   Explications

 

Explications

1

Entête du document xml indiquant le type de codage utilisé (encoding="ISO8859-1") ainsi que la déclaration díune DTD externe (standalone="no")

2-3

Déclaration de la DTD externe (<!DOCTYPE) avec líindication de líélément racine de ce document xml (ens_individu).

Cette DTD est déclarée en PUBLIC. On suppose quíelle est mise à disposition díautres utilisateurs sur internet. Il est donc nécessaire díy ajouter un texte explicatif Jacquenod/etatcivil/DTD qui rend líensemble unique. La DTD est utilisable à líadresse web http://www.jacquenod.fr/XML/individu.dtd. Líintérêt de donner ce type díadresse est aussi de pouvoir utiliser le validateur du W3C en ligne. La DTD est ainsi consultable et le validateur peut fonctionner car il a besoin de pouvoir ´ télécharger ª la DTD.

 

ÿ    Description díun individu

 

q   Le code source

 

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

<ens_individu ville="Nantes">

<individu numero_secu="1640444100345">

 

<identite sexe="M">

<nom_patronymique>Jonnav</nom_patronymique>

<prenoms>

<prenom_principal>Laurent</prenom_principal>

<prenom_secondaire>François</prenom_secondaire>

<prenom_secondaire>Martin</prenom_secondaire>

</prenoms>

<date_naissance>19/04/1964</date_naissance>

</identite>

 

<parents>

<pere>

<nom_patronymique_pere>Jonnav</nom_patronymique_pere>

<prenom_principal_pere>Philippe</prenom_principal_pere>

<date_naissance_pere>31/02/1943</date_naissance_pere>

</pere>

<mere>

<nom_jeune_fille_mere>Turbault</nom_jeune_fille_mere>

<prenom_principal_mere>Annie</prenom_principal_mere>

<date_naissance_mere>10/06/1944</date_naissance_mere>

</mere>

</parents>

 

<situation_familiale etatcivil="marie">

<enfants>

<fils>Jonnav André</fils>

<fils>Jonnav Charles</fils>

<fille>Jonnav France</fille>

</enfants>

</situation_familiale>

<adresse>Saint Brevin</adresse>

</individu>

 

 

q   Explications

 

Explications

5

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 (ligne 76).

Cet élément racine possède un attribut ville qui permet de définir la ville díapplication de ce document (ici Nantes).

6

Insertion díun élément individu. Cet élément possède un attribut numero_secu. Cet attribut a la valeur 1640444100345.

Cet élément níest pas vide, il contient díautres éléments. Il se termine ligne 39.

8-16

Insertion de líélément identite est de ses sous-éléments.

8

Description de líélément identité. Cet élément est composé díautres éléments comme líindique la DTD (voir DTD).

Cet élément possède un attribut sexe qui peut prendre les valeurs M ou F (Voir DTD)

9

Description de líélément texte nom_patronymique.

10-14

Insertion des prénoms de líindividu via líélément prenoms.

11

Líindividu possède un prénom principal décrit par líélément prenom_principal.

12-13

Líindividu possède deux prénoms secondaires décrit par líélément prenom_secondaire.

14

Fin de description de líélément prenoms.

15

Insertion de líélément texte date_naissance.

16

Fin de la description de líidentité de líindividu

18-29

Insertion de líélément parents qui contient les informations du père et de la mère de líindividu.

19-23

Informations en rapport avec le père insérées via les éléments suivants : nom_patronymique_pere, prenom_principal_pere et date_naissance_pere.

24-28

Informations en rapport avec la mère insérées via les éléments suivants : nom_patronymique_mere, prenom_principal_mere et date_naissance_mere.

29

Fin de description de líélément parents.

31-37

Insertion de líélément situation_familiale qui contient les informations sur les enfants de líindividu insérées via les éléments fils et/ou fille.

Líélément situation_familiale contient en plus un attribut etatcivil qui permet de déterminer si líindividu est marié, célibataire, veuf ou pacsé (Voir DTD).

32-36

Description des enfants. Ici líindividu possède deux fils et une fille.

37

Fin de description de la situation familiale de líindividu via la fermeture de líélément situation_familiale.

38

Insertion de líélément adresse qui contient le lieu díhabitation de líindividu.

39

Fin de description de cet individu.

 

A partir de la ligne 42 est décrit le deuxième individu.

Cette description se termine ligne 74 par la fermeture de líélément individu.

Le document XML se termine par la fermeture de líélément racine ens_individu ligne 76.

 

ÿ    Le document XML complet

 

Ce document décrit 2 individus.

Cela permet de tester et díeffectuer le tri.

 

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

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

<?xml version="1.0" encoding="ISO8859-1" standalone="no"?>

<!DOCTYPE ens_individu PUBLIC "Jacquenod/etatcivil/DTD"

 "http://www.jacquenod.fr/XML/individu.dtd">

 

<ens_individu ville="Nantes">

<individu numero_secu="1640444100345">

 

<identite sexe="M">

<nom_patronymique>Jonnav</nom_patronymique>

<prenoms>

<prenom_principal>Laurent</prenom_principal>

<prenom_secondaire>François</prenom_secondaire>

<prenom_secondaire>Martin</prenom_secondaire>

</prenoms>

<date_naissance>19/04/1964</date_naissance>

</identite>

 

<parents>

<pere>

<nom_patronymique_pere>Jonnav</nom_patronymique_pere>

<prenom_principal_pere>Philippe</prenom_principal_pere>

<date_naissance_pere>31/02/1943</date_naissance_pere>

</pere>

<mere>

<nom_jeune_fille_mere>Turbault</nom_jeune_fille_mere>

<prenom_principal_mere>Annie</prenom_principal_mere>

<date_naissance_mere>10/06/1944</date_naissance_mere>

</mere>

</parents>

 

<situation_familiale etatcivil="marie">

<enfants>

<fils>Jonnav André</fils>

<fils>Jonnav Charles</fils>

<fille>Jonnav France</fille>

</enfants>

</situation_familiale>

<adresse>Saint Brevin</adresse>

</individu>

 

<!-- Deuxieme individu -->

<individu numero_secu="2341144100345">

 

<identite sexe="F">

<nom_patronymique>Darte</nom_patronymique>

<nom_marital>Paruton</nom_marital>

<prenoms>

<prenom_principal>Aline</prenom_principal>

<prenom_secondaire>Gisele</prenom_secondaire>

</prenoms>

<date_naissance>23/11/1934</date_naissance>

<date_deces>01/04/1989</date_deces>

</identite>

 

<parents>

<pere>

<nom_patronymique_pere>Darte</nom_patronymique_pere>

<prenom_principal_pere>Jean</prenom_principal_pere>

<date_naissance_pere>09/02/1839</date_naissance_pere>

</pere>

<mere>

<nom_jeune_fille_mere>Fraise</nom_jeune_fille_mere>

<prenom_principal_mere>Anemone</prenom_principal_mere>

<date_naissance_mere>04/03/1845</date_naissance_mere>

</mere>

</parents>

 

<situation_familiale etatcivil="veuf">

<enfants>

<fille>Darte Fanny</fille>

</enfants>

</situation_familiale>

<adresse></adresse>

</individu>

 

</ens_individu>

 

 

b. La DTD (Definition Type of Document)

 

La DTD est la grammaire du document XML auquel elle est attachée. Elle indique dans quel ordre, de quel contenu sont constitués les éléments et attributs décrits dans le document XML. Pour mieux la comprendre, reportez vous au DIT décrit section IX.3.

 

ÿ    Le code source de la DTD

 

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

<!ELEMENT ens_individu (individu*)>

<!ATTLIST ens_individu ville CDATA #REQUIRED>

<!ELEMENT individu (identite,parents,situation_familiale,adresse)>

<!ATTLIST individu numero_secu CDATA #REQUIRED>

<!ELEMENT identite (nom_patronymique,nom_marital?,prenoms,date_naissance,date_deces?)>

<!ATTLIST identite sexe (M|F) #REQUIRED>

<!ELEMENT nom_patronymique (#PCDATA)>

<!ELEMENT nom_marital (#PCDATA)>

<!ELEMENT prenoms (prenom_principal,prenom_secondaire*)>

<!ELEMENT prenom_principal (#PCDATA)>

<!ELEMENT prenom_secondaire (#PCDATA)>

<!ELEMENT date_naissance (#PCDATA)>

<!ELEMENT date_deces (#PCDATA)>

<!ELEMENT parents (pere,mere)>

<!ELEMENT pere (nom_patronymique_pere,prenom_principal_pere,date_naissance_pere)>

<!ELEMENT nom_patronymique_pere (#PCDATA)>

<!ELEMENT prenom_principal_pere (#PCDATA)>

<!ELEMENT date_naissance_pere (#PCDATA)>

<!ELEMENT mere (nom_jeune_fille_mere,prenom_principal_mere,date_naissance_mere)>

<!ELEMENT nom_jeune_fille_mere (#PCDATA)>

<!ELEMENT prenom_principal_mere (#PCDATA)>

<!ELEMENT date_naissance_mere (#PCDATA)>

<!ELEMENT situation_familiale (enfants*)>

<!ATTLIST situation_familiale etatcivil (marie|celibataire|pacse|veuf) #REQUIRED>

<!ELEMENT enfants (fils*,fille*)>

<!ELEMENT fils (#PCDATA)>

<!ELEMENT fille (#PCDATA)>

<!ELEMENT adresse (#PCDATA)>

 

q   Explications

 

Explications

1

Le premier élément a être décrit est évidemment la racine du document XML. Cet élément est ens_individu. Cet élément peut contenir de 0 à n éléments individu (*).

2

Líélément racine ens_individu possède aussi un attribut ville qui représente le nom de la ville auquel le document síapplique. Cet attribut est obligatoire (#REQUIRED).

3

Líélément individu sous élément de líélément racine ens_individu possède lui-même un certain nombre díélément. Ces éléments doivent apparaître dans líordre suivant : identite, parents, situation_familiale et enfin adresse. Ces sous-éléments sont obligatoires.

4

Cet élément individu possède un attribut obligatoire (#REQUIRED) : numero_secu.

5-6

Parmi les sous-éléments de líélément individu il y a identite. Son utilisation est définie à cette ligne. Il possède à son tour des sous-éléments qui doivent apparaître dans líordre suivant : nom_patronymique, nom_marital?, prenoms, date_naissance et enfin date_deces?.

Les éléments nom_marital et date_deces sont facultatifs (?).

7

Líélément identite possède un attribut obligatoire (#REQUIRED) sexe qui peut prendre les valeurs M ou F (M|F). Cet attribut est obligatoire (#REQUIRED).

8

Líélément nom_patronymique sous-élément de líélément identite ne contient que du texte (#PCDATA).

9

Líélément nom_marital sous-élément de líélément identite ne contient que du texte (#PCDATA). Rappelons que cet élément est facultatif.

10

Líélément prenoms, sous-élément de líélément identite, est constitué de deux éléments prenom_principal et prenom_secondaire*. Ces deux éléments doivent apparaître dans cet ordre. Le premier (prenom_principal) est obligatoire et ne peut apparaître quíune fois. Le second (prenom_secondaire*) peut être présent de 0 à n fois (*).

11-14

Définition des éléments prenom_principal, prenom_secondaire*, date_naissance et date_deces. Ces quatres éléments sont des éléments qui ne contiennent que du texte (#PCDATA).

Rappelons que date_deces?, est facultatif et que prenom_secondaire* peut être présent de 0 à n fois dans la définition díun individu.

15

Définition de líélément parents qui contient les informations concernant les parents de líindividu. Cet élément contient les éléments pere et mere. Ces deux éléments doivent être présent de manière obligatoire et dans cet ordre.

16-20

Définition de líélément pere qui contient trois éléments qui sont déclarés en ligne 18, 19 et 20 et qui contiennent uniquement du texte. Ces 3 éléments doivent être obligatoirement présent dans cet ordre.

21-25

Définition de líélément mere qui contient trois éléments qui sont déclarés en ligne 23, 24 et 25 et qui contiennent uniquement du texte. Ces 3 éléments doivent être obligatoirement présent dans cet ordre.

26

Définition de líélément situation_familiale qui contient 1 élément (enfants*). Cet dernier peut être présent de 0 à n fois.  Líélément contient aussi un attribut etatcivil déclaré ligne 27-28.

27-28

Líattribut etatcivil possède obligatoirement un contenu qui doit être líun de ceux présents dans la liste définie ligne 27 (marie|celibataire|pacse|veuf). Cet attribut doit obligatoirement être présent (#REQUIRED).

29-31

Définition de líélément enfants obligatoirement présent. Cet élément peut contenir de 0 à n éléments textes fils et/ou de 0 à n éléments filles. Ces deux éléments textes optionnels sont définis lignes 30 et 31.

32

Définition du dernier élément adresse. Cet élément ne contient que du texte. Il se trouve au niveau 1 du DIT.

 

 

 

c. La Validation

 

 

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.

 

La validation est faite en utilisant la première via le Web. Cette partie va être détaillée en utilisant des copies écran.

 

Remarque

Lorsque vous transformez votre document via Xalan, par exemple, la phase 1 est automatiquement réalisée. Une analyse du fichier XML est faite et si il y a des erreurs celles-ci seront indiquées.

 

ÿ    Phase 1

 

Chargement de líURL et indication de líadresse du fichier XML. Ce fichier ainsi que la DTD doit être accessible via internet pour que la validation puisse se faire.

 

ÿ    Phase 2

 

Si la page XML et la DTD ne contiennent pas díerreur de syntaxe, et si le fichier XML respecte cette DTD, vous obtenez la page suivante.

 

 

ÿ    Vous pouvez aussi obtenir plus díinformations en cliquant sur ces liens ou en les activant en phase1.

 

 

Vous devez cliquer sur les boutons pour effectuer vos choix. Vous pouvez aussi forcer le codage et le Doctype (html1.0, XHTML1.0 Ö).

 

 

Si je choisis les options suivantes, jíobtiens des résultats en plus à líécran comme líarborescence (voir ci-après).

 

 

 

 

 

d. 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"?>

<!-- Entete pour la transformation avec Xalan -->

<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

21

22

23

24

25

26

27

28

29

30

31

32

<!-- Traitement du noeud ens_individu -->

<xsl:template match="ens_individu">

<!-- Mise en forme de l'entete avec inclusion du nom de la ville -->

<HTML><HEAD>

<TITLE>Etat civil de la ville de <xsl:value-of select="@ville"/></TITLE>

</HEAD>

<BODY>

<CENTER>

<!-- Mise en forme de l'entete avec inclusion le corps du document HTML -->

<!-- avec inclusion du nom de la ville -->

<TABLE><TR><TD ALIGN="CENTER">

<FONT COLOR="green" SIZE="5">

<U><B>Etat civil de la ville de la ville de <xsl:value-of select="@ville"/>

</B></U></FONT>

</TD>

</TR>

</TABLE>

<!-- Tri des fiches par ordre alphabetique sur le nom_patronymique -->

<xsl:apply-templates select="individu">

<xsl:sort select="identite/nom_patronymique"/>

</xsl:apply-templates>

</CENTER>

</BODY>

</HTML>

</xsl:template>

 

 

q   Explications

 

Explications

8

Cette règle permet de sélectionner un núud, en líoccurrence la racine (ens_individu) 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 31.

10-13

Insertion des balises de structure habituelle díune page HTML (<HTML>, <HEAD>, <TITLE> et <BODY>).

11

Lors de líinsertion de la balise <TITLE>, le texte composant le titre de la page contient le nom de la ville auquel le fichier XML est associé. Pour se faire, la règle <xsl:value-of select="@ville"/> est utilisée. Elle permet de récupérer líattribut ville du núud courant. Ce núud est la racine à ce moment de la transformation à savoir : ens_individu.

17-23

Insertion dans la page HTML, résultat de la transformation, díun tableau en début de document, qui contient la même information que celle insérée dans le titre (voir Ligne 11). Ce titre ne doit apparaître quíune seule fois dans tout le document HTML díoù son insertion à ce moment de la transformation.

19

Insertion du nom de la ville grâce à líutilisation de la même règle quíen ligne 11.

25-27

Ces trois lignes vont permettre de sélectionner tous les núuds individu contenus dans ce fichier XML et de leurs appliquer les règles de transformation suivantes (ligne 33). Le traitement se fait en triant les ´ fiches ª.

25

Cette règle permet de sélectionner les núuds individu et de leurs appliquer les règles suivantes avant de terminer líapplication de la règle en cours.

26

Avant díappliquer les autres règles, un tri est effectué pour une présentation du document HTML par ordre alphabétique des noms patronymiques.

27

Une fois toutes les autres règles du document XSL appliquées à tous les núuds individu, la fin de cette règle est appliquée.

28-30

Insertion des balises de fin du document HTML. Ces balises sont insérées une fois que tous les éléments de toutes les autres règles sont eux mêmes insérés.

31

Fin de la règle de transformation débutée ligne 8.

 

ÿ    La deuxième phase de transformation

 

Cette deuxième règle commence ligne 33 et se termine ligne 166.

Pour une question de visibilité, elle est décomposée en sous partie correspondant à chaque niveau 2 du DIT à savoir les fils de líélément individu (identite, parents, situation_familiale et adresse).

 

v  Début et fin de la règle

 

q   Code source

 

33

34

35

36

Ö

166

<xsl:template match="individu">

<TABLE>

<TR>

<TD ALIGN="CENTER" COLSPAN="2">

Ö

</xsl:template>

 

q   Explications

 

Explications

33

Début de la règle de transformation. Cette règle síapplique à líélément sélectionné à savoir individu.

34-36

Insertion des première balises HTML qui permettent de définir le tableau qui contient les infos de líuindividu.

166

Fin de líapplication de cette règle. Un fois passé ce ´ cap ª, la transformation reprend au niveau de la première règle (Ligne 28).

 

 

v  Transformation de la partie identité et adresse

 

q   DIT

 

Cette partie est la transformation de la branche correspondant à líélément identite et la branche correspondant à líélément adresse du document XML (Voir la partie du DIT correspondante ci-dessous).

 

 

q   Code source

 

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

<TABLE BORDER="1">

<TR>

<TD ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow">

<B><xsl:number value="position()"/>. Identite

<FONT COLOR="green">

<xsl:value-of select="identite/nom_patronymique"/>

<xsl:text> </xsl:text>

<xsl:value-of select="identite/prenoms/prenom_principal"/>

</FONT>

</B></TD>

</TR>

<xsl:for-each select="identite/nom_patronymique">

<TR>

<TD ALIGN="left">Nom Patronymique</TD>

<TD ALIGN="left"><xsl:value-of select="."/></TD>

</TR><TR>

<TD ALIGN="left">Prenoms Principal</TD>

<TD ALIGN="left"><xsl:value-of select="../prenoms/prenom_principal"/></TD>

</TR><TR>

<TD ALIGN="left">Prenoms secondaires</TD>

<TD ALIGN="left">

<xsl:for-each select="../prenoms/prenom_secondaire">

<xsl:value-of select="."/>

<xsl:if test="position()!=last()"><xsl:text> </xsl:text></xsl:if>

</xsl:for-each>

</TD>

</TR>

</xsl:for-each>

<xsl:if test="identite/nom_marital">

<TR><TD ALIGN="left">Nom marital</TD>

<TD ALIGN="left"><xsl:value-of select="identite/nom_marital"/></TD>

</TR>

</xsl:if>

<TR>

<TD ALIGN="left">Date de naissance </TD>

<TD ALIGN="left"><xsl:value-of select="identite/date_naissance"/></TD>

</TR>

<xsl:if test="identite/date_deces">

<TR><TD ALIGN="left">Date du deces</TD>

<TD ALIGN="left"><xsl:value-of select="identite/date_deces"/></TD>

</TR>

</xsl:if>

<TR>

<xsl:choose>

<xsl:when test="identite/@sexe='F'">

<TD ALIGN="left">Sexe</TD>

<TD ALIGN="left">Féminin</TD>

</xsl:when>

<xsl:otherwise>

<TD ALIGN="left">Sexe</TD>

<TD ALIGN="left">Masculin</TD>

</xsl:otherwise>

</xsl:choose>

</TR><TR>

<TD ALIGN="left">Adresse</TD>

<TD ALIGN="left"><xsl:value-of select="adresse"/></TD>

</TR>

</TABLE>

</TD>

<!-- Fin partie identite -->

 

 

q   Explications

 

Rappel

La position dans líarborescence est toujours au niveau de líélément individu.

 

Explications

37-94

Insertion du tableau qui contient les informations en rapport avec la branche identité et adresse. Ce tableau est lui-même inséré dans les cellules du tableau définit dans la règle 1.

38-47

Insertion de la première ligne sur fond jaune dans laquelle sont insérées les informations suivantes : numéro díordre, nom patronymique et prénom principal.

40

Le numéro díordre est la position de la fiche de líindividu suite au tri sur le nom patronymique. A chaque traitement díun nouveau núud, la fonction position() renvoie ce numéro díordre.

42

Récupération du nom patronymique de líindividu.

43

Ajout díun espace entre le premier contenu récupéré (nom patronymique) et le second (prénom principal).

44

Récupération du prénom principal de líindividu.

48-64

On va récupérer toutes les informations correspondant à líidentité de líindividu. Toutes les recherches pour toutes les règles incluses dans ces lignes vont se baser sur la position du núud nom_patronymique.

48

La première boucle níest pas forcément utile. En effet, líutilisateur ne peut avoir quíun nom patronymique.

49-52

Insertion du nom patronymique. La ligne 51 permet de récupérer cette valeur. Cet élément est un sous élément díindividu. Il est important à ce moment de bien voir où nous sommes situés dans líarborescence, cela va conditionner les autres recherches.

53-55

Insertion du prénom principal.  La ligne 54 permet de récupérer cette valeur. Pour atteindre cet élément, étant donné le positionnement actuel dans líarbre (Voir ci-dessus). Il est nécessaire de remonter díun cran pour pouvoir ensuite redescendre vers líélément prenoms puis prenom_secondaire.

56-63

Insertion des prénoms secondaires de líindividu.

58-61

Líindividu peut posséder plusieurs prénoms secondaires, díoù la nécessité de la boucle pour tous les récupérer. La boucle prend comme base de recherche et comme positionnement dans líarbre, le núud prenom_secondaire.

59

Nous sommes au niveau du núud prenom_secondaire. La récupération de son contenu ne nécessite donc pas de déplacement dans líarbre.

60

Chaque prénom est séparé par un espace sauf si, le prénom est le dernier de líindividu. Pour se faire il est nécessaire de tester si líélément prenom_secondaire traité est ou non le dernier. La fonction position() renvoie le numéro díordre de líélément en cours de traitement. La fonction last() renvoie elle le numéro díorde du dernier élément en cours de traitement. Il suffit donc de tester si ce qui est renvoyé par ces deux fonctions est identiques ou non.

61

Fin de la boucle récupérant et traitant tous les prénoms secondaires de líindividu.

64

Fin de la boucle traitant les núuds nom_patronymique.

65-69

On ajoute le nom marital de líindividu si ce núud existe.

A ce moment de la transformation, nous sommes au niveau du núud individu (Nous sommes à nouveau dépendant de la règle ligne 33).

70-73

Insertion des informations en rapport avec líélément date_naissance. La ligne 72 permet díinsérer la valeur associée à líélément date_naissance. Rappelons que nous sommes au niveau du núud individu. Il est donc nécessaire de se déplacer dans líarborescence pour se positionner au niveau du bon núud. Pour cela il faut descendre, comme le montre la partie du DIT correspondant (voir ci-dessus), au niveau du núud identite puis date_naissance.

 74-78

Insertion des informations en rapport avec líélément date_deces. La particularité de cet élément est quíil peut être présent ou non. Il est donc nécessaire de tester sa présence pour líindividu en cours de traitement (individu courant). Le bloc de test <xsl:if test est donc utilisé. Si líélément (núud) est présent celui-ci est inséré dans une nouvelle ligne du tableau sinon, on passe aux contenus suivants du traitement.

79-90

Le document final en HTML indique si líindividu est de sexe Féminin ou Masculin. Mais dans le document XML source, cette information est associée à un attribut de líélément identite qui est sexe et ceci sous la forme F ou M. Il faut donc transformer cette notation. Pour se faire la règle <xsl:choose> permet de tester la valeur contenue dans líattribut sexe de líélément identite et ainsi de créer la ligne correspondante avec le bon texte. Le test portant sur la valeur F est effectuée ligne 81, le deuxième test est en fait líéquivalent díun default (ligne 85). En effet si le sexe níest pas F il ne peut être que M (voir DTD).

90-93

Insertion de líinformation correspondant à líélément adresse. Cet élément est un fils direct de líélément individu.

94

Fermeture de la balise TABLE ouverte ligne 37.

95

Fermeture de la balise TD ouverte ligne 36.

 

 

v  Transformation de la partie parents

 

q   DIT

 

Cette partie est la transformation de la branche correspondant à líélément parents du document XML (Voir la partie du DIT correspondante ci-dessous).

 

 

q   Code source

 

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

<!-- Debut partie Parents -->

</TR><TR>

<TD>

<TABLE BORDER="1">

<TR><TD ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow">

<B>Parents</B></TD></TR>

<TR><TD ALIGN="left"><U>Nom</U> Prenom du pere</TD>

<TD ALIGN="left">

<xsl:value-of select="parents/pere/nom_patronymique_pere"/>

<xsl:text> </xsl:text>

<xsl:value-of select="parents/pere/prenom_principal_pere"/></TD>

</TR><TR>

<TD ALIGN="left">Date de naissance du pere</TD>

<TD ALIGN="left">

<xsl:value-of select="parents/pere/date_naissance_pere"/></TD>

 </TR><TR>

<TD ALIGN="left"><U>Nom</U> Prenom de la mere</TD>

<TD ALIGN="left">

<xsl:value-of select="parents/mere/nom_jeune_fille_mere"/>

<xsl:text> </xsl:text>

<xsl:value-of select="parents/mere/prenom_principal_mere"/></TD>

</TR><TR>

<TD ALIGN="left">Date de naissance de la mere</TD>

<TD ALIGN="left">

<xsl:value-of select="parents/mere/date_naissance_mere"/></TD>

</TR>

</TABLE>

</TD>

<!-- Fin partie Parents -->

 

q   Explications

 

Rappel

La position dans líarborescence est toujours au niveau de líélément individu.

 

Explications

100-125

Insertion de la cellule qui contient le tableau comportant les informations en rapport avec líélément parent.

101

Ouverture du tableau.

104-113

Insertion des informations en rapport avec le père de líindividu courant. Ces informations sont situées dans les éléments nom_patronymique_pere, prenom_principal_pere et date_naissance_pere.

107

Ajout díun espace entre le nom et le prénom. Cet espace est inséré grâce à la règle <xsl:text>.

113-123

Insertion des informations en rapport avec la mère de líindividu courant. Ces informations sont situées dans les éléments nom_patronymique_mere, prenom_principal_mere et date_naissance_mere.

117

Ajout díun espace entre le nom et le prénom. Cet espace est inséré grâce à la règle <xsl:text>.

124

Fermeture de la balise TABLE insérée ligne 101.

125

Fermeture de la balise TD insérée ligne 100.

 

v  Transformation de la partie situation familiale

 

Cette transformation correspond à líélément situation_familiale.

 

 

q   DIT

 

Cette partie est la transformation de la branche correspondant à líélément Ö. du document XML (Voir la partie du DIT correspondante ci-dessous).

 

 

q   Code source

 

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

<!-- Debut partie Situation Familiale -->

<TD>

<TABLE BORDER="1">

<TR>

<TD ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow">

<B>Etat Civil</B></TD>

</TR><TR>

<TD ALIGN="left">Situation familiale</TD>

<TD ALIGN="left">

<xsl:value-of select="situation_familiale/@etatcivil"/></TD>

</TR>

<xsl:for-each select="situation_familiale/enfants/fils">

<TR>

<TD ALIGN="left">fils</TD>

<TD ALIGN="left">

<xsl:value-of select="."/>

<xsl:if test="position()!=last()">

<xsl:text> </xsl:text>

</xsl:if>

</TD>

</TR>

</xsl:for-each>

<xsl:for-each select="situation_familiale/enfants/fille">

<TR>

<TD ALIGN="left">fille</TD>

<TD ALIGN="left">

<xsl:value-of select="."/>

<xsl:if test="position()!=last()">

<xsl:text> </xsl:text>

</xsl:if>

</TD>

</TR>

</xsl:for-each>

</TABLE>

</TD>

</TR>

</TABLE>

<HR></HR>

<!-- Fin partie Situation Familiale -->

 

q   Explications

 

Rappel

La position dans líarborescence est toujours au niveau de líélément individu.

 

Explications

128-161

Insertion des informations en rapport avec la situation familiale de líindividu courant.

133-137

Insertion de la valeur correspondant à líattribut etatcivil de líindividu. Cet attribut fait partie de líélément situation_familiale.

138-148

Insertion des informations portant sur les fils de líindividu courant. Líélément correspondant est fils. Cet élément peut être présent ou non. Afin díinsérer tous les contenus, une boucle est utilisée. Cette boucle permet de récupérer tous les núuds indiqués dans le select du for-each pour líindividu courant. Les informations sont rangées dans une cellule du tableau. Un espace (ligne 144) est ajouté en fin de nom si líélément fils en cours de traitement (selection ligne 142) níest pas le dernier (test ligne 143 à 145). Ce dernier point níest pas très utile sauf si vous décidez de mettre toutes les informations les unes derrière les autres sur la même ligne, cela permet de les séparer (autre choix de présentation).

149-159

La même démarche que pour le traitement des éléments fils est faite pour le traitement des éléments fille.

160

Fermeture de la balise TABLE ouverte ligne 129.

161

Fermeture de la balise TD ouverte ligne 128.

162

Fermeture de la balise TR ouverte ligne 99.

163

Fermeture de la balise TABLE ouverte ligne 34.

164

Insertion díune ligne séparatrice entre les tableaux descriptifs de  chaque individu.

166

Fin de la deuxième règle de présentation.

 

 

ÿ    Fin de la transformation

 

q   Le code source

 

167

</xsl:stylesheet>

 

q   Explications

 

Explications

167

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

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

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

<!-- Entete pour la transformation avec Xalan -->

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

 

<xsl:output method="html" indent="yes"/>

 

<!-- Traitement du noeud ens_individu -->

<xsl:template match="ens_individu">

<!-- Mise en forme de l'entete avec inclusion du nom de la ville -->

<HTML><HEAD>

<TITLE>Etat civil de la ville de <xsl:value-of select="@ville"/></TITLE>

</HEAD>

<BODY>

<CENTER>

<!-- Mise en forme de l'entete avec inclusion le corps du document HTML -->

<!-- avec inclusion du nom de la ville -->

<TABLE><TR><TD ALIGN="CENTER">

<FONT COLOR="green" SIZE="5">

<U><B>Etat civil de la ville de la ville de <xsl:value-of select="@ville"/>

</B></U></FONT>

</TD>

</TR>

</TABLE>

<!-- Tri des fiches par ordre alphabetique sur le nom_patronymique -->

<xsl:apply-templates select="individu">

<xsl:sort select="identite/nom_patronymique"/>

</xsl:apply-templates>

</CENTER>

</BODY>

</HTML>

</xsl:template>

 

<xsl:template match="individu">

<TABLE>

<TR><TD ALIGN="CENTER" COLSPAN="2">

<TABLE BORDER="1">

<!-- Debut partie identite -->

<TR>

<TD ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow">

<B><xsl:number value="position()"/>. Identite

<FONT COLOR="green">

<xsl:value-of select="identite/nom_patronymique"/>

<xsl:text> </xsl:text>

<xsl:value-of select="identite/prenoms/prenom_principal"/>

</FONT>

</B></TD>

</TR>

<xsl:for-each select="identite/nom_patronymique">

<TR>

<TD ALIGN="left">Nom Patronymique</TD>

<TD ALIGN="left"><xsl:value-of select="."/></TD>

</TR><TR>

<TD ALIGN="left">Prenoms Principal</TD>

<TD ALIGN="left"><xsl:value-of select="../prenoms/prenom_principal"/></TD>

</TR><TR>

<TD ALIGN="left">Prenoms secondaires</TD>

<TD ALIGN="left">

<xsl:for-each select="../prenoms/prenom_secondaire">

<xsl:value-of select="."/>

<xsl:if test="position()!=last()"><xsl:text> </xsl:text></xsl:if>

</xsl:for-each>

</TD>

</TR>

</xsl:for-each>

<xsl:if test="identite/nom_marital">

<TR><TD ALIGN="left">Nom marital</TD>

<TD ALIGN="left"><xsl:value-of select="identite/nom_marital"/></TD>

</TR>

</xsl:if>

<TR>

<TD ALIGN="left">Date de naissance </TD>

<TD ALIGN="left"><xsl:value-of select="identite/date_naissance"/></TD>

</TR>

<xsl:if test="identite/date_deces">

<TR><TD ALIGN="left">Date du deces</TD>

<TD ALIGN="left"><xsl:value-of select="identite/date_deces"/></TD>

</TR>

</xsl:if>

<TR>

<xsl:choose>

<xsl:when test="identite/@sexe='F'">

<TD ALIGN="left">Sexe</TD>

<TD ALIGN="left">Féminin</TD>

</xsl:when>

<xsl:otherwise>

<TD ALIGN="left">Sexe</TD>

<TD ALIGN="left">Masculin</TD>

</xsl:otherwise>

</xsl:choose>

</TR><TR>

<TD ALIGN="left">Adresse</TD>

<TD ALIGN="left"><xsl:value-of select="adresse"/></TD>

</TR>

</TABLE>

</TD>

<!-- Fin partie identite -->

 

<!-- Debut partie Parents -->

</TR><TR>

<TD>

<TABLE BORDER="1">

<TR><TD ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow">

<B>Parents</B></TD></TR>

<TR><TD ALIGN="left"><U>Nom</U> Prenom du pere</TD>

<TD ALIGN="left">

<xsl:value-of select="parents/pere/nom_patronymique_pere"/>

<xsl:text> </xsl:text>

<xsl:value-of select="parents/pere/prenom_principal_pere"/></TD>

</TR><TR>

<TD ALIGN="left">Date de naissance du pere</TD>

<TD ALIGN="left">

<xsl:value-of select="parents/pere/date_naissance_pere"/></TD>

 </TR><TR>

<TD ALIGN="left"><U>Nom</U> Prenom de la mere</TD>

<TD ALIGN="left">

<xsl:value-of select="parents/mere/nom_jeune_fille_mere"/>

<xsl:text> </xsl:text>

<xsl:value-of select="parents/mere/prenom_principal_mere"/></TD>

</TR><TR>

<TD ALIGN="left">Date de naissance de la mere</TD>

<TD ALIGN="left">

<xsl:value-of select="parents/mere/date_naissance_mere"/></TD>

</TR>

</TABLE>

</TD>

<!-- Fin partie Parents -->

<!-- Debut partie Situation Familiale -->

<TD>

<TABLE BORDER="1">

<TR>

<TD ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow">

<B>Etat Civil</B></TD>

</TR><TR>

<TD ALIGN="left">Situation familiale</TD>

<TD ALIGN="left">

<xsl:value-of select="situation_familiale/@etatcivil"/></TD>

</TR>

<xsl:for-each select="situation_familiale/enfants/fils">

<TR>

<TD ALIGN="left">fils</TD>

<TD ALIGN="left">

<xsl:value-of select="."/>

<xsl:if test="position()!=last()">

<xsl:text> </xsl:text>

</xsl:if>

</TD>

</TR>

</xsl:for-each>

<xsl:for-each select="situation_familiale/enfants/fille">

<TR>

<TD ALIGN="left">fille</TD>

<TD ALIGN="left">

<xsl:value-of select="."/>

<xsl:if test="position()!=last()">

<xsl:text> </xsl:text>

</xsl:if>

</TD>

</TR>

</xsl:for-each>

</TABLE>

</TD>

</TR>

</TABLE>

<HR></HR>

<!-- Fin partie Situation Familiale -->

</xsl:template>

</xsl:stylesheet>

 

 

c. Le document html

 

La transformation est effectuée en utilisant le logiciel Xalan.

 

Xalan ño individu.html individu.xml individu.xsl

 

Le résultat de la transformation donne le fichier html qui suit.

Le tri est bien effectué par nom.

 

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Etat civil de la ville de Nantes</title>

</head>

<body>

<center>

<table>

<tr>

<td ALIGN="CENTER"><font COLOR="green" SIZE="5"><u><b>Etat civil de la ville de la ville de Nantes</b></u></font></td>

</tr>

</table>

<table>

<tr>

<td ALIGN="CENTER" COLSPAN="2">

 

<table BORDER="1">

<tr>

<td ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow"><b>1. Identite <font COLOR="green">Darte Aline</font></b></td>

</tr>

<tr>

<td ALIGN="left">Nom Patronymique</td><td ALIGN="left">Darte</td>

</tr>

<tr>

<td ALIGN="left">Prenoms Principal</td><td ALIGN="left">Aline</td>

</tr>

<tr>

 

<td ALIGN="left">Prenoms secondaires</td><td ALIGN="left">Gisele</td>

</tr>

<tr>

<td ALIGN="left">Nom marital</td><td ALIGN="left">Paruton</td>

</tr>

<tr>

<td ALIGN="left">Date de naissance </td><td ALIGN="left">23/11/1934</td>

</tr>

<tr>

<td ALIGN="left">Date du deces</td><td ALIGN="left">01/04/1989</td>

 

</tr>

<tr>

<td ALIGN="left">Sexe</td><td ALIGN="left">F&eacute;minin</td>

</tr>

<tr>

<td ALIGN="left">Adresse</td><td ALIGN="left"></td>

</tr>

</table>

</td>

</tr>

<tr>

<td>

<table BORDER="1">

 

<tr>

<td ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow"><b>Parents</b></td>

</tr>

<tr>

<td ALIGN="left"><u>Nom</u> Prenom du pere</td><td ALIGN="left">Darte Jean</td>

</tr>

<tr>

<td ALIGN="left">Date de naissance du pere</td><td ALIGN="left">09/02/1839</td>

</tr>

<tr>

 

<td ALIGN="left"><u>Nom</u> Prenom de la mere</td><td ALIGN="left">Fraise Anemone</td>

</tr>

<tr>

<td ALIGN="left">Date de naissance de la mere</td><td ALIGN="left">04/03/1845</td>

</tr>

</table>

</td><td>

<table BORDER="1">

<tr>

<td ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow"><b>Etat Civil</b></td>

 

</tr>

<tr>

<td ALIGN="left">Situation familiale</td><td ALIGN="left">veuf</td>

</tr>

<tr>

<td ALIGN="left">fille</td><td ALIGN="left">Darte Fanny</td>

</tr>

</table>

</td>

</tr>

</table>

<hr>

<table>

 

<tr>

<td ALIGN="CENTER" COLSPAN="2">

<table BORDER="1">

<tr>

<td ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow"><b>2. Identite <font COLOR="green">Jonnav Laurent</font></b></td>

</tr>

<tr>

<td ALIGN="left">Nom Patronymique</td><td ALIGN="left">Jonnav</td>

</tr>

<tr>

<td ALIGN="left">Prenoms Principal</td><td ALIGN="left">Laurent</td>

 

</tr>

<tr>

<td ALIGN="left">Prenoms secondaires</td><td ALIGN="left">Fran&ccedil;ois Martin</td>

</tr>

<tr>

<td ALIGN="left">Date de naissance </td><td ALIGN="left">19/04/1964</td>

</tr>

<tr>

<td ALIGN="left">Sexe</td><td ALIGN="left">Masculin</td>

</tr>

 

<tr>

<td ALIGN="left">Adresse</td><td ALIGN="left">Saint Brevin</td>

</tr>

</table>

</td>

</tr>

<tr>

<td>

<table BORDER="1">

<tr>

<td ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow"><b>Parents</b></td>

</tr>

<tr>

<td ALIGN="left"><u>Nom</u> Prenom du pere</td><td ALIGN="left">Jonnav Philippe</td>

 

</tr>

<tr>

<td ALIGN="left">Date de naissance du pere</td><td ALIGN="left">31/02/1943</td>

</tr>

<tr>

<td ALIGN="left"><u>Nom</u> Prenom de la mere</td><td ALIGN="left">Turbault Annie</td>

</tr>

<tr>

<td ALIGN="left">Date de naissance de la mere</td><td ALIGN="left">10/06/1944</td>

 

</tr>

</table>

</td><td>

<table BORDER="1">

<tr>

<td ALIGN="CENTER" COLSPAN="2" BGCOLOR="yellow"><b>Etat Civil</b></td>

</tr>

<tr>

<td ALIGN="left">Situation familiale</td><td ALIGN="left">marie</td>

</tr>

<tr>

<td ALIGN="left">fils</td><td ALIGN="left">Jonnav Andr&eacute; </td>

 

</tr>

<tr>

<td ALIGN="left">fils</td><td ALIGN="left">Jonnav Charles</td>

</tr>

<tr>

<td ALIGN="left">fille</td><td ALIGN="left">Jonnav France</td>

</tr>

</table>

</td>

</tr>

</table>

<hr>

</center>

 

</body>

</html>

 

 

d. Le visuel