Maintenant que nous connaissons la syntaxe de base d'XML, nous pouvons nous intéresser à la structure d'un fichier XML.
Nous allons définir dans un fichier, une structure de données représentant un message.
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> |
|
<prenom>Guillaume</prenom> |
|
<email>gcharpen@etudiant.univ-mlv.fr</email> |
|
<email>gerarddupont@provider.com</email> |
|
<message>mon message</message> |
|
L'élément message est l'élément racine du document. Il existe un et un seul élément de ce type dans un document; c'est un élément père qui contient tous les autres.
En revanche, d'autres éléments peuvent être également éléments pères. C'est le cas, dans notre exemple, de l'élément expediteur. Il est en effet père de l'élément identite (qui est donc l' élément fils de l'élément expediteur). L'élément identite est également élément père de l'élément prenom, de l'élément nom et de l'élément email...
Pour les éléments sans fils (comme l'élément prenom) on placera, comme dans l'exemple, la balise ouvrante, le contenu et la balise fermante sur la même ligne.
Par convention on formate les documents XML pour qu'ils reflètent l'imbrication des éléments : une tabulation ou une série d'espace représente le fait que l'on passe dans un éléments fils. C'est ce que nous avons fait pour l'exemple.
Si on ouvre le fichier que nous venons d'écrire dans un navigateur web (ici Mozilla Firefox) on obtient un rendu sous forme d'une structure arborescente.
Remarque : vous pouvez cliquer sur le lien "fichier" placé sous l'exemple précédent pour le visualiser directement dans votre navigateur sans avoir le créer vous-même.

Remarque : on voit ici l'importance de l'attribut encoding dans le prologue du fichier. En effet, si nous n'avions pas spécifié un encodage Western European (ISO-8859-1), les accents n'auraient pas été gérés; la valeur "Gérard" aurait été mal affichée.
On constate que les données sont représentées sous forme d'un arbre dont il est possible de replier ou de déplier chaque branche. Nous allons maintenant détailler cette structure de données.
La structure arborescente des données XML |
Vous l'aurez compris, la structure de données représentée dans un fichier XML est hierarchisée dans une arborescence (un élément racine unique; chaque élément peut contenir d’autres éléments qui peuvent à leur tour contenir du texte ou d’autres éléments).
On peut donc représenter les données d'un fichier XML sous forme d'arbre. Si on utilise cette représentation pour l'exemple précédent on obtient l'arbre suivant :

Cette structure hiérarchique en arbre est très avantageuse puisqu'elle permet de représenter des données structurées quelle que soit leur complexité et car on sait facilement manipuler les structures de ce type.
Comment bien structurer un fichier XML ? |
Il n'est pas forcément aisé de savoir choisir les noms de balises à utiliser lors de la création d'un fichier XML. En effet, il nous est laissé une liberté quasi totale à ce sujet :il n'existe pas de règle précise pour le choix de noms de balises; il est simplement conseillé de donner les noms les plus significatifs possibles aux éléments définis.
L'autre problèmatique est qu'il est souvent possible de définir la même information au sein de différentes structures :
-
quand créer un nouvel élément ?
Il n'y a pas de règle précise pour la création d'élément. Il est simplement conseillé de séparer les informations que l'on voudra récupérer de manière seule. Ainsi pour l'identité de l'éxpéditeur du message dans l'exemple précédent nous aurions pu utiliser :
|
<identite>Guillaume Charpentier</identite> |
|
mais cette solution ne dissocie pas clairement le nom et le prénom de l'éxpéditeur ce qui peut être pénalisant si l'on désire par la suite récupérer juste une de ces deux informations; nous n'y aurons pas accès directement.
-
sous élément ou attributs ?
Il est parfois très compliqué de savoir s'il est préférable de passer une information comme sous élément ou comme attribut d'un autre élément. Encore une fois, il n'existe en effet pas de règle précise sur cette question.
Ainsi dans notre exemple de message présenté précemment, on aurait pu aussi bien choisir pour l'élément "expediteur" de passer ses deux sous éléments prenom et nom en attribut :
<expediteur prenom="Guillaume" nom="Charpentier"> |
|
On rejoint là la même problèmatique que pour une modélisation de base de données. L'objectif est ici identique : structurer des données... et il n'existe de manière unique de le faire... cela dépend surtout des besoins de récupération d'information .