Si le langage de présentation de page HTML permet de préciser la structure d'une page pour que le navigateur la présente de façon agréable à l'utilisateur, il ne permet pas de gérer la structure interne des données contenues dans la page (liste de personnes, de produits, ...). Elles peuvent être au mieux être organisées au sein de listes ou de tableaux, mais toute information de structure est en fait perdu.
Le langage XML (eXtensible Markup Language) a été défini dans le but de pallier cette déficience. Comme HTML, XML est issu d'un langage beaucoup plus général mais beaucoup trop complexe pour être utilisé en pratique, le langage SGML créé dans le but de faciliter la gestion électronique de documents.
Comme HTML, XML est un langage à balises, mais deux caractéristiques l'en distinguent :
Les données du document sont alors organisées sous forme d'imbrication de balises. L'exemple suivant décrit une liste de personnes avec leur nom, leur adresse et leur téléphone :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<GENS>
<PERSONNE>
<NOM> Flora Bonhomme </NOM>
<ADRESSE>
<RUE> 5 rue Galliéni </RUE>
<CODE> 75012 </CODE>
<VILLE> Paris </VILLE>
</ADRESSE>
<TEL> 01 23 45 67 89 </TEL>
</PERSONNE>
<PERSONNE>
<NOM> Anne Gentile </NOM>
<ADRESSE>
<RUE> 2 rue des Dames </RUE>
<CODE> 75007 </CODE>
<VILLE> Paris </VILLE>
</ADRESSE>
<TEL> 01 45 23 67 89 </TEL>
</PERSONNE>
<PERSONNE>
<NOM> Linda Legay </NOM>
<ADRESSE>
<RUE> 5 avenue Foch </RUE>
<CODE> 35000 </CODE>
<VILLE> Rennes </VILLE>
</ADRESSE>
<TEL> 01 23 67 45 89 </TEL>
</PERSONNE>
</GENS>
Un document XML bien formé commence normalement par une ligne de déclaration :
<?xml version="1.0" encoding="ISO-8859-1"?>
et se poursuit donc par une liste de données organisées de façon arborescente.
Un navigateur adapté fait apparaître la structure des données de la page, mais ne peut en aucune façon l'interpréter. Tout ce qu'il peut percevoir, c'est l'organisation de l'arborescence et au passage vérifier que l'arborescence est correcte.
Pour permettre au serveur ou au navigateur de présenter les données sous un format adapté, il faut lui fournir une feuille de style (xsl ou xml style sheet). Beaucoup plus évolué que les feuilles de style HTML, les feuilles xsl permettent un réel traitement des données offrant un formattage très sélectif. On l'introduit par une ligne d'en-tête :
<?xml-stylesheet href="gens.xsl" type="text/xsl"?>
On obtient ainsi une page dont on affichera la source avec surprise (à partir du navigateur).
Le code de la feuille de style est très simple et sa lecture montre clairement comment comment elle procède :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<head>
<title>Annuaire téléphonique</title>
</head>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="GENS">
<body>
<h1>Annuaire téléphonique</h1>
<table border="1">
<th width="50%" >Nom</th>
<th width="50%">Tel</th>
<xsl:apply-templates/>
</table>
</body>
</xsl:template>
<xsl:template match="PERSONNE">
<tr>
<td align="center"><xsl:value-of select="child::NOM"/></td>
<td align="center"><xsl:value-of select="child::TEL"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
Pour donner un sens à un document et pour s'assurer qu'un document est bien conforme au sens voulu, il faut introduire une autre notion, celle de DTD (Document Table Definition) ou, plus récemment, de schéma xml (Xml Schema Defintion ou xsd).
On trouvera quelques détails dans une page sur les schémas xml.