slam:donneestructurees:le_format_xml_1

Voir cette page sous forme de diaporama.

Langage XML

Historique : de SGML à XML

XML(Extensible Markup Language) dérive d'un langage développé dans les années 80, le SGML(Standard Generalized Markup Language). Ce langage était complexe à apprendre et utiliser quotidiennement. Une version allégée, le HTML a donc été développée ; mais ce dernier, malgré de nombreuses adaptations, ne pouvait pas être étendu à l'infini, au fur et à mesure de l'augmentation des besoins des développeurs. C'est alors que fut créé le XML.

Le XML est un dérivé du SGML. Il tente de se servir des principes de simplicité du HTML et de la souplesse SGML.

Le plus important point commun avec le SGML est le fait que tout document XML peut être basé sur une DTD ou un Schéma : une DTD (Définition du type de document) sert à préciser la structure du document.

Cette association n'est cependant pas obligatoire, et un fichier XML peut très bien se suffire à lui-même, sans DTD.

Une autre caractéristique importante est que dans un document XML, la mise en forme des données est totalement séparée des données elles-mêmes. Cela permet de séparer complètement l'information (le contenu) de son apparence (le contenant), et donc de fournir plusieurs types de sortie pour un même fichier de données, en fonction de l'utilisateur ou de l'application demandeuse (autre document XML, tableau, graphique, image, animation multimédia, fichier HTML, fichier PDF…).

Un document XML peut ainsi prévoir plusieurs cibles, comme par exemple l'écran d'un téléphone portable, celui d'un ordinateur de bureau, une base de données, une application logicielle, etc.

De plus, la possibilité de créer les éléments que l'on désire permet de rendre le fichier lui-même lisible et modifiable- par un être humain : on peut donner aux informations contenues dans un tel fichier les étiquettes que l'on veut, et les ordonner selon son désir.

Il est également possible d'effectuer des sélections par tri, des générations automatiques de tables des matières et bien d'autres choses encore, grâce au langage de feuilles de style XSLT.

  • il est destiné à décrire le contenu du document, pas son affichage (les feuilles de style CSS et XSL gèrent l'affichage),
  • il est flexible, on peut définir ses balises, et les utiliser dans un ou plusieurs documents,
  • le document ne sera affiché que s'il est bien formé et valide (s'il suit une DTD ou un schéma),
  • il est lisible pour l'humain (l'information contenue sera toujours accessible, contrairement aux fichiers de certains logiciels, par exemple, il est impossible de visualiser du RTF sans un logiciel qui connaisse ce format),
  • le document XML est un texte qui n'est pas destiné à être lu par l'humain (mais le fait que ce soit un texte permet aux experts d'utiliser un éditeur de texte pour corriger le fichier). 

XML permet de séparer forme et fond. Par exemple, cela signifie que pour produire un document HTML à partir de données en utilisant le format XML, il est nécessaire d'écrire au moins deux fichiers, le premier contenant les données à mettre en forme, le second les informations nécessaires à cette mise en forme.

En pratique, et dans un souci de normalisation et de généralisation, il peut s'avérer nécessaire d'ajouter un troisième fichier à l'ensemble :

  1. Optionnel : un fichier peut être nécessaire pour définir a priori les balises auxquelles le document XML pourra avoir recours. Ce fichier peut être soit une Document Type Definition soit un Schema (voir plus loin dans le cours) ;
  2. Le document contenant les données elles-mêmes, c'est-à-dire le document XML à proprement parler (une instance du document, au sens SGML) ;
  3. Le document contenant les informations de mise en forme, permettant de produire un fichier dans le format de sortie voulu : une feuille XSLT (eXtensive Stylesheet Language Transformations).

Dans le cas d'un format de sortie HTML, il peut être également nécessaire d'ajouter une feuille de style CSS.

En résumé, si l'on veut produire un fichier HTML à partir de données mises sous format XML, il faut :

  1. Créer éventuellement un fichier définissant les balises utilisables ;
  2. Créer le fichier de données XML ;
  3. Créer la feuille de style XSL permettant la production du fichier HTML ;
  4. Créer éventuellement une feuille de style CSS.

Nous verrons au long de ce cours successivement les étapes 2, 1 et 3.

<?xml version="1.0" encoding="UTF-8"?>
<!-- La ligne ci-dessus est le prologue -->
<!-- Élément racine -->
<biblio>
  <!-- Premier enfant -->
  <livre>
    <!-- Élément enfant titre -->
    <titre>Les Misérables</titre>
    <auteur>Victor Hugo</auteur>
    <nb_tomes>3</nb_tomes>
  </livre>
  <livre>
    <titre>L'Assomoir</titre>
    <auteur>Émile Zola</auteur>
  </livre>
  <livre lang="en">
    <titre>David Copperfield</titre>
    <auteur>Charles Dickens</auteur>
    <nb_tomes>3</nb_tomes>
  </livre>
</biblio>

Comme cela est illustré par l'exemple précédent, un fichier XML est composé d'un prologue, d'un élément racine et d'un arbre. Cet arbre est constitué d'éléments imbriqués les uns dans les autres (ayant une relation parent-enfant) et d'éléments adjacents.

  • Les premières lignes forment le prologue, constitué dans l'exemple précédent de la déclaration XML, puis éventuellement d'une déclaration de type de document (une DTD)
  • L'élément biblio est notre élément racine (en anglais : document element) ; il est constitué de trois éléments livre. Dans chacun d'entre eux nous retrouvons la même composition, c'est-à-dire : un élément titre, un élement auteur et éventuellement un élément nb_tomes. L'élément livre, de plus, peut avoir un attribut lang ;

Même s'il est simple de comprendre ce code, on s'aperçoit mieux d'une éventuelle erreur lorsqu'on visualise ce même fichier dans un navigateur.

Visualisation dans un navigateur :

Copier l’exemple ci-dessus dans un éditeur de texte, enregistrez-le au format xml et exécutez-le. Que remarquez-vous ?

Le prologue=Déclaration XML

Cette déclaration fait partie des « instructions de traitement ». Exemple de déclaration XML : <?xml version=“1.0” encoding=“ISO-8859-1” standalone=“yes”?>

On distingue trois informations fournies dans cette déclaration :

  • version : version du XML utilisée dans le document, 1.0 en ce qui nous concerne ;
  • encoding : le jeu de codage de caractères utilisé. Par défaut, encoding a la valeur UTF-8. Cela permet à l'ordinateur de « savoir » quel caractère il doit afficher en réponse aux combinaisons de 1 et de 0 que contient le fichier sur le disque dur ;
  • standalone : dépendance du document par rapport à une déclaration de type de document. Si standalone a la valeur yes, le processeur de l'application n'attend aucune déclaration de type de document extérieure au document. Sinon, le processeur attend une référence de déclaration de type de document. La valeur par défaut est yes. Cette déclaration est facultative, mais il est préférable de l'utiliser. Dans ce cas version, encoding et standalone doivent être placés dans cet ordre. Si elle est utilisée, elle doit être placée en toute première ligne du document XML. Par exemple, il ne faut placer ni commentaire, ni même de simple ligne vide avant elle.

Les commentaires

En XML, les commentaires se déclarent de la même façon qu'en HTML, car ils reprennent la syntaxe du SGML. Ils commencent donc par <!– et se terminent par –>. Ils peuvent être placés à n'importe quel endroit tant qu'ils se trouvent à l'extérieur d'une autre balise.

Exemples de commentaires valides : <!– ceci est correct –>

<elt> <!– ceci est correct aussi –> Un peu de texte </elt>

Remarque : En raison de la compatibilité XML/SGML, la chaîne de caractères – est interdite dans un commentaire.

L'arbre d'éléments

  • a. Introduction

Un document XML peut se représenter sous la forme d'une arborescence d'éléments. Cette arborescence comporte une racine (unique), des branches et des feuilles. Reprenons l'exemple précédent.

  • b. Élément racine

L'élément-racine (en anglais : document element) est, comme son nom l'indique, la base du document XML. Il est unique et englobe tous les autres éléments. Il s'ouvre juste après le prologue, et se ferme à la toute fin du document. Dans l'exemple ci-dessus, l'élément racine est biblio.

  • c. Les éléments

Les éléments forment la structure même du document : ce sont les branches et les feuilles de l'arborescence. Ils peuvent contenir du texte, ou bien d'autres éléments, qui sont alors appelés « éléments enfants », l'élément contenant étant quant à lui appelé logiquement « élément parent ».

Exemple d'élément contenant du texte : <titre>Les Misérables</titre>

Exemple d'élément contenant d'autres éléments :

<livre>
  <titre>L'Assommoir</titre>
  <auteur>Émile Zola</auteur>
  <couverture couleur="rouge" />
</livre>

D'autres éléments sont vides : ils ne contiennent pas d'élément-enfant.

Exemple d'élément vide : <couverture couleur=“rouge” />

Arborescence de l’exemple « bibliographie » :

biblio
|
--- livre
    |
    --- titre
    --- auteur
    --- nbtomes
--- livre
    |
    --- titre
    --- auteur
--- livre
    |
    --- titre
    --- auteur
    --- nbtomes

Fichier XML exemple2 :

<?xml version="1.0" encoding="ISO-8859-1"?>
  <BTSSIO>
    <section>
        <LibelleSection>SISR</LibelleSection>
        <Etudiant Matricule="M1">
          <NomEtudiant>Allibert</NomEtudiant>
          <PrenomEtudiant>Maxime</PrenomEtudiant>
          <Cursus>Bac STG</Cursus>
        </Etudiant>
        <Etudiant Matricule="M2">
          <NomEtudiant>Brun</NomEtudiant>
          <PrenomEtudiant>Pascal</PrenomEtudiant>
          <Cursus>Bac STI</Cursus>
         </Etudiant>
    </section>
    <section>
        <LibelleSection>SLAM</LibelleSection>
        <Etudiant Matricule="M3">
          <NomEtudiant>Grand</NomEtudiant>
          <PrenomEtudiant>Louis</PrenomEtudiant>
          <Cursus>Bac STG</Cursus>
        </Etudiant>
     </section>
</BTSSIO>

Arborescence Exemple2 : à réaliser

Les attributs apportent des informations sur l'élément qui les contient (ils ne sont pas appropriés pour contenir des données). Il n'y a pas de limite sur le nombre d'attributs utilisables dans un élément; il faut cependant trouver un compromis entre l'utilisation d'attributs ou l'emploi d'un nouvel élément.

Tous les éléments peuvent contenir un ou plusieurs attributs. Chaque élément ne peut contenir qu'une fois le même attribut. Un attribut est composé d'un nom et d'une valeur. Il ne peut être présent que dans la balise ouvrante de l'élément (par exemple, on n'a pas le droit d'écrire </livre lang=“en”>).

Exemple d'utilisation d'un élément avec attribut : <instrument type=“vent”>trompette</instrument>

Exemple d'utilisation d'un élément vide avec attributs : <img src=“ours.png” alt=“Gros ours” width=“56” height=“100” />

L'ordre d'utilisation des attributs au sein d'une balise n'a pas d'importance.

Il existe des entités définissables et définies. Elles peuvent|être analysables ou non, internes ou externes. La déclaration des entités s'effectue au sein de la DTD. Elles peuvent être utilisées aussi bien dans la DTD que dans le document XML. Nous reviendrons plus en détails sur les entités et leur utilisation ultérieurement.

Caractère Entité
& &amp;
< &lt;
> &gt;
&quot;
' &aquot;

Certains caractères ayant un sens précis en XML, il est nécessaire de leur trouver un remplaçant lorsque l'on a besoin de les insérer dans un document. On a recours dans ce cas à des entités prédéfinies. Ces entités sont :

Un document XML est bien formé (well formed - l'analyseur XML peut construire son arborescence) si :

  1. il contient une déclaration XML ;
  2. il contient un ou plusieurs éléments ;
  3. il contient un élément racine encapsulant tous les autres éléments et leurs attributs (ex <HTML> … </HTML>) ;
  4. les éléments non vides ont une balise de début et de fin ;
  5. les éléments non vides sont correctement imbriqués (<P> <EM> … </EM> </P>) ;
  6. les noms des balises ouvrantes et fermantes correspondent ;
  7. un nom d'attribut apparaît uniquement dans la balise ouvrante et une seule fois dans cette balise ;
  8. les valeurs des attributs sont entre guillemets ou apostrophes ;
  9. la valeur des attributs n'appelle pas d'entités externes directement ou indirectement ;
  10. les caractères réservés sont remplacés par des références d'entités (par ex. &lt; pour <) ;
  11. toutes les références à des entités non binaires doivent commencer par & et finir par ;
  12. s'il n'y a pas de DTD, les seules entités utilisées sont celles réservées de XML &amp; &lt; &gt; &apos; &quot; ;
  13. s'il y a une DTD toutes les entités non réservées utilisées sont déclarées dans la DTD.
  14. Un nom d'élément ne peut commencer par un chiffre. Si le nom n'est composé que d'un seul caractère, ce doit être une lettre comprise entre « a » et « z » pour les minuscules, « A » et « Z » pour les majuscules. S'il est composé d'au moins deux caractères, le premier peut être « _ » ou « : ». Le nom peut ensuite être composé de lettres, chiffres, tirets, tirets bas et deux points. La syntaxe XML est sensible à la casse (le format distingue majuscules et minuscules).
  15. Toutes les balises portant un contenu non vide doivent être fermées.
  16. Les balises n'ayant pas de contenu doivent se terminer par /> (voir la balise <img …/> ci-dessus) ;

A vous de jouer (1), créez votre premier fichier XML bien formé :

Proposer une présentation structurée au format XML des données contenues dans le texte ci-dessous :

Une bouteille d'eau Cristaline de 150 cl contient par litre 71 mg d'ions positifs calcium, et 5,5 mg d'ions positifs magnésium. On y trouve également des ions négatifs comme des chlorures à 20 mg par litre et des nitrates avec 1 mg par litre. Elle est recueillie à St-Cyr la Source, dans le département du Loiret. Son code barre est 3274080005003 et son pH est de 7,45. Comme la bouteille est sale, quelques autres matériaux comme du fer s'y trouvent en suspension. Une seconde bouteille d'eau Cristaline a été, elle, recueillie à la source d'Aurèle dans les Alpes Maritimes. La concentration en ions calcium est de 98 mg/l, et en ions magnésium de 4 mg/l. Il y a 3,6 mg/l d'ions chlorure et 2 mg/l de nitrates, pour un pH de 7,4. Le code barre de cette bouteille de 50 cl est 3268840001008. Une bouteille de même contenance est de marque Volvic, et a été puisée à… Volvic, bien connu pour ses sources donnant un pH neutre de 7. Elle comprend 11,5 mg/l d'ions calcium, 8,0 mg/l d'ions magnésium, 13,5 mg/l d'ions chlorures et 6,3 mg/l d'ions nitrates. Elle contient également des particules de silice. Son code barre est 3057640117008.

PS : Volvic est dans le Puy-de-Dôme…

Remarque : Un fichier XML est un fichier texte dont l’extension est .xml

Il peut s’écrire dans n’importe quel éditeur de texte (blocnote, notepad) et il existe des éditeurs spécifiques pour xml (XMLSpy, Editix, …)

Exemple 3 de fichier XML

1.	<?xml version="1.0" encoding="UTF-8"?>
2.	<course numéro="8">
3.	<gagnant temps=35>Dupont</gagne>
4.	<2nd>Durand</2nd>
5.	<les arbitres> <arbitre1 nom='Martin'> <arbitre2 nom='Legrand'> </les arbitres>
6.	<début format heure="hh:mm"> 13:00 <fin> 13:53 </début> </fin>
7.	</course>
8.	<course numéro="9">
9.	<gagnant/>Rameau</gagnant>
10.	</course>

A vous de jouer (2)

  1. Quelle est la balise racine de l’exemple 3.
  2. Réalisez l’arbre du fichier XML de l’exemple 3.
  3. Ce fichier est mal formé, indiquez les numéros de ligne qui posent problème et expliquer le problème.
  4. Proposez une correction pour rendre bien formé le document XML ci-dessus en respectant une logique de structuration des informations.
  5. Testez votre correction en ligne
  • slam/donneestructurees/le_format_xml_1.txt
  • Dernière modification : 2024/12/20 09:13
  • de dthevenot