XML (eXtensible Markup Language) : langage de balisage extensible

Fiche ressource Article, événement, site web...
  • Création ou MAJ importante : 28/11/11
  • Correction mineure : 12/06/13
Mots-clés

XML (eXtensible Markup Language) : langage de balisage extensible

Cette fiche ressource à été relue par Maud Ingarao (ENS Lyon, CNRS) et par Florence Petit (IGM).

Introduction

XML est un langage informatique de balisage (enrichissement d'information textuelle).

A noter que le contenu de cette fiche PLUME ne constitue qu'un aperçu global d'XML et des standards associés, et non une formation exhaustive sur ces différents sujets.

Origine

Issu d'une simplification de la norme SGML (Standard Generalized Markup Language), XML (eXtensible Markup Language) est le fruit de travaux communs du World Wide Web Consortium (W3C) et de plusieurs industriels, entre 1996 et 1998.

Vue d'ensemble

Les principes de base d'XML sont donc ceux du SGML :

  • Séparation de la présentation et des données
  • Structuration des données
  • Capacité à valider la structure des données

Ces principes simples et souples donnent à XML la capacité à rendre le partage d'information ouvert, ce qui favorise les échanges informatisés basés sur des formats portables ainsi que l’interopérabilité des applications.

Schéma

Cela peut s'illustrer ainsi :
XML, principes

Structuration et organisation du contenu XML

Principe

XML est un langage de balisage générique qui permet de définir des documents contenant à la fois les données et des indications sur la structure de ces données. Ces balises ne sont pas prédéfinies, d'où la nature extensible du langage. Il convient de respecter des règles de construction syntaxique d'XML : on parle alors d'un document bien formé

Exemple

Un exemple de document XML est le suivant :

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="application/xml" href="personnes.xsl"?>
<personnes>
<personne naissance="1802" mort="1870">
   <nom>
    <prenom>Alexandre</prenom>
    <nom_famille>Dumas</nom_famille>
  </nom>
  <!-- l'abbé Faria a existé -->
  <profession>Ecrivain</profession>
  <informations xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.dumaspere.com"/>
</personne>
<personne naissance="1840" mort="1902">
  <nom>
   <prenom>Emile</prenom>
   <nom_famille>Zola</nom_famille>
  </nom>
  <profession>Ecrivain</profession>
</personne>
</personnes>

Ce document XML correspond à l'arbre ci dessous :
XML, exemple de document, vue hierarchique

Validation du contenu XML

Principe

Un document XML contient des données, organisées selon les règles de construction d'XML : c'est la notion de document bien formé déjà mentionnée.

Une grammaire donnée permet de définir des contraintes supplémentaires sur la structure d'un document XML. La définition d'une grammaire donnée se fait via des DTD ou via des schémas XML (extension : .xsd). Les schémas sont à ce jour les plus utilisés, car par rapport aux DTD, ils présentent en effet l'avantage d'être eux-même des documents XML. La syntaxe simplifiée Relax NG est également très utilisée.

Un document valide est un document qui respecte la grammaire définie dans une DTD ou un schéma XML.

Exemple

Soit le document XML suivant :

<?xml version="1.0" encoding="ISO-8859-1"?>
<personnes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="personnes.xsd">
  <personne>Alexandre Dumas</personne>
  <personne>Emile Zola</personne>
</personnes>

Le contenu de ce document XML peut être validé via le schéma XML suivant :

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Definitions types de donnees -->
  <xsd:simpleType name="personneType">
   <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <xsd:complexType name="personnesType">
   <xsd:sequence>
    <xsd:element name="personne" type="personneType" minOccurs="0" maxOccurs="unbounded"/>
   </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="personnes" type="personnesType"/>
</xsd:schema>

Sur la différence entre document bien formé et document valide, voir par exemple ce récapitulatif sur le site W3schools.

Transformations de contenu XML

Principe

Comme expliqué ci-avant, un document XML contient les données et leur sémantique et ce contenu peut être validé par rapport à une grammaire donnée via des schémas XML (ou une DTD). Pour la présentation et/ou la transformation de contenu en XML, il est possible de passer par :

  • des CSS (Cascading StyleSheets),
  • des feuilles XSL (eXtensible Stylesheet Language), avec principalement XSLT (XSL Transformations) et XSL-FO (XSL-Formatting Objects).

Par ailleurs, le langage de requête XPath est souvent utilisé dans ce contexte de transformations de données car il permet de sélectionner des fragments de contenu XML.

Exemple

On considère le document XML ci-dessous :

<?xml version="1.0"?>
<salutation>
  Bonjour le monde !
</salutation>

La transformation de ce document en une page HTML peut se faire via le code XSLT suivant :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
  <xsl:apply-templates select="salutation"/>
</xsl:template>
<xsl:template match="salutation">
  <html>
   <body>
    <h1>
     <xsl:value-of select="."/>
    </h1>
   </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Le résultat de la transformation donne :

<html>
<body>
  <h1>Bonjour le monde !</h1>
</body>
</html>

Liaisons de contenu en XML

Principe

Étant donné la structure logique en arbre d’XML, la description de relations autres que parent-enfant(s) entre nœuds n’est pas naturelle. La réponse à cette problématique de liaisons de contenu XML passe par :

  • XLink, qui permet de décrire des graphes dans lesquels les sommets sont des documents (situés à des URI particuliers) et les arêtes sont les liens entre ces documents,
  • XPointer, langage dédié à l’identification de fragments de documents XML, souvent utilisé en liaison avec XLink.

Exemple

Soient trois fichiers zola1.txt, zola2.txt et zola3.txt pour lesquels un lien multidirectionnel de type arc doit être construit, pour avoir :
zola1.txt <--> zola2.txt <--> zola3.txt

Via XLink, cela peut s'exprimer de la sorte :

<series xlink:type="extended" xmlns:xlink="http://www.w3.org/1999/xlink">
<auteur>E. Zola</auteur>
  <roman xlink:type="locator" xlink:label="ez1" xlink:href="ftp://archive.org/zola1.txt">
   <titre>La curée</titre>
  </roman>
  <roman xlink:type="locator" xlink:label="ez2" xlink:href="ftp://archive.org/zola2.txt">
   <titre>La fortune des Rougon</titre>
  </roman>
  <roman xlink:type="locator" xlink:label="ez3" xlink:href="ftp://archive.org/zola3.txt">
   <titre>L'assommoir</titre>
  </roman>
  <!-- arcs -->
  <suivant xlink:type="arc" xlink:from="ez1" xlink:to="ez2"/>
  <suivant xlink:type="arc" xlink:from="ez2" xlink:to="ez3"/>
  <precedent xlink:type="arc" xlink:from="ez2" xlink:to="ez1"/>
  <precedent xlink:type="arc" xlink:from="ez3" xlink:to="ez2"/>
</series>

Manipulations de contenu XML

Principe

La manière de manipuler des documents XML depuis des programmes (lecture, écriture, modification) s’implémente principalement de deux façons différentes :

  • SAX (Simple API for XML), API qui aborde la notion de parsing de manière événementielle,
  • DOM (Document Object Model), API qui traite un document XML avec une approche arborescente.

Exemple

Soit l’extrait de document XML suivant :

<nom>
<prenom>David</prenom>
<nom_famille>Rousse</nom_famille>
</nom>

Un parseur SAX reportera typiquement les événements suivants (dans l’ordre indiqué)

startElement : nom
startElement : prenom
content : David
endElement : prenom
startElement : nom_famille
content : Rousse
endElement : nom_famille
endElement : nom

Un parseur DOM va, lui, représenter la totalité du document XML en mémoire sous la forme d'un arbre, en respectant la recommandation Document Object Model du W3C.

A noter : le parsage DOM est un exemple de "XML data binding", qui signifie le fait de représenter les éléments d'un document XML en tant qu'objets en mémoire. Cf. l'article [en] XML data binding sur Wikipedia.

Conclusion

En guise de conclusion, les différents éléments précités autour de XML s'illustrent de la sorte :
XML, champs d'applications

Références

Le support de cours suivant traite de manière plus approfondie d'XML et des normes et standards liés.