Emmanuel
Lazinier
Création de la page : 1999-10-20.
Dernière mise à jour : 2002-03-26
Première partie : "Cloner" du HTML en XML
Savez-vous que, dès aujourd'hui, vous pouvez
mettre à votre service toute la puissance de XML pour simplifier
et automatiser la gestion de vos pages Web ? Même si elles sont actuellement
en HTML. Et même si, d'aventure, vous souhaitez que demain elles
soient toujours en HTML !
Petit rappel : les avantages de XML sur HTML
1. XML "capture" les données contenues dans vos pages
XML permet d'avoir des fichiers "propres", dans lesquels l'information
est balisée en fonction de sa nature et non pas de sa présentation
finale. Par exemple dans une bibliographie :
-
les titre des livres seront balisés <TITRE> et non pas <I>
ou <EM> ;
-
le nom des auteurs (non balisables en HTML) seront balisés <AUTEUR>
;
-
et l'ensemble sera regroupé dans une balise <LIVRE>, qui pourra
même contenir, si on le désire, le numéro ISBN sous
la forme d'un "attribut" : <LIVRE ISBN="...">
Si votre fichier est "régulier" (c'est-à-dire de structure
simple et répétitive comme l'est une bibliographie, un catalogue,
un annuaire, un tableau financier, etc.) :
-
sa création et sa mise à jour seront beaucoup plus
faciles et rigoureuses en XML qu'en HTML : en particulier vous pourrez
utiliser des outils comme XML Notepad ou bien un script de saisie spécifique
que vous programmerez vous-même.
-
vous pourrez ensuite réaliser des présentations de ce fichier
:
-
multiples grâce à différentes feuilles de style
XSL ;
-
interactives grâce à des scripts attaquant le Document Object
Model ou modifiant en temps réel la feuille de style XSL.
-
vos visiteurs pourront télécharger votre fichier et l'exploiter
en local à leur guise, comme un véritable fichier de données.
Un exemple ? Voir notre Bibliographie XML
en XML.
2. XML est "transformable"
Si votre fichier est plus du type "document" que du type "fichier de données",
comme c'est le cas par exemple pour un article, vous pouvez préférer
continuer à saisir comme par le passé le corps de ce document
à l'aide d'un éditeur HTML classique. Mais ce que HTML
ne vous donnera pas, c'est la possibilité d'automatiser les tâches
répétitives liées à la fabrication de votre
document, comme :
-
la fabrication d'une table des matières, d'un index avec liens hypertextes,
-
la numérotation des notes, leur renvoi en fin de document et la
construction de liens hypertextes entre les appels de notes et les notes...
Toutes ces tâches ne sont pas automatisables pour un fichier HTML.
Elles le sont pour un fichier XML grâce au langage de transformation
XSLT.
Vous avez donc intérêt à transformer votre document
HTML en XML pour bénéficier de ces alléchantes possibilités.
Est-ce possible ? Oui. Est-ce difficile ? Non, et le présent
article se propose de vous le démontrer.
Comment passer de HTML à XML
Commençons par bien préciser notre
problème. Nous voudrions qu'un fichier initialement en HTML devienne
en final un fichier XML dont toutes les données internes
auront été convenablement capturées (balisées)
et dont la structure aura été rendue conforme à la
structure logique de ces données . Nous savons que ceci peut se
faire de manière automatisée grâce au langage de transformation
XSLT. Mais nous savons que de telles transformations ne peuvent se faire
que sur un document XML ! Il nous faut donc dans un premier temps
transformer notre fichier HTML en un fichier identique mais conforme
aux exigences de XML -- autrement dit "cloner" notre fichier HTML en XML.
C'est ce "clonage" que nous allons décrire dans ce premier article.
Une chance : HTML n'est pas du XML tout à fait "bien formé",
mais presque...
Prenez au hasard un fichier HTML (anglais de préférence,
la suite vous montrera pourquoi). Ajoutez-lui en tête la processing
instruction suivante <?xml version="1.0"
?> et changez son extension .html en .xml. Puis essayez de
le lire sous Internet Explorer 5. Que se passera-t-il ?
Eh bien, selon toute probabilité, vous obtiendrez un message
d'erreur, vous indiquant que telle ou telle partie du document n'est pas
"bien formée" au sens XML : telle balise ne sera pas fermée,
tel attribut ne sera pas entre guillemets...
Si vous avez la patience de corriger une à une toutes les erreurs
signalées par MSIE5, vous finirez par avoir un document bien formé
au sens XML que MSIE5 vous affichera alors avec sa feuille de style par
défaut, sous la forme d'une arborescence dépliable et repliable.
Comme vous êtes paresseux, vous vous demandez certainement si
ce travail ne pourrait pas être fait par un logiciel. Et vous avez
bien raison, puisqu'un tel logiciel existe et s'appelle HTML Tidy.
Problèmes possibles
Les scripts.
Tidy ne transforme pas le contenu des éventuels éléments
<SCRIPT>, lesquels peuvent comporter des caractères qu'XML réprouve,
comme le "<". Il est donc possible que
votre fichier résultat soit mal formé pour cette raison.
Vous devrez alors soit effacer le script incriminé soit déclarer
son contenu comme section CDATA (qui ne sera alors pas analysée
par le "parseur" ou analyseur grammatical).
Le résultat
Si, comme nous l'avons suggéré, votre fichier HTML de départ
était en anglais, le résultat produit par Tidy sera alors
d'emblée du XML bien formé que MSIE5 vous affichera
immédiatement avec sa feuille de style par défaut, sous forme
d'une arborescence dépliable et repliable.
Si d'aventure vous rétablissez l'extension .HTML vous aurez la
satisfaction de voir que votre butineur favori est toujours capable de
lire votre fichier et de lui donner exactement la même présentation
qu'autrefois. Vous avez donc réalisé du premier coup du HTML
XMLisé !
Vous pourrez aussi vous amuser à visualiser ce fichier en
tant que fichier XML en y ajoutant la processing instruction suivante
:
<?xml-stylesheet href="displayidentical.msxsl"
type="text/xsl"?>
et en créant la feuille de style XSL élémentaire (displayidentical.msxsl)
suivante.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- encoding="ISO-8859-1" n'est en fait pas nécessaire pour
un fichier en anglais -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<!-- Se positionner sur la racine du document -->
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<!-- Reproduire le document à l'identique -->
<xsl:template match="@* | * | text()">
<xsl:copy>
<xsl:apply-templates select="@* | * | text()"/>
<!-- Attention : ne pas couper la ligne suivante pour ne pas introduire
d'espaces parasites -->
</xsl:copy></xsl:template>
</xsl:stylesheet>
Le problème des lettres accentuées
Puisque vous êtes francophone, il y a gros à parler que les
fichier HTML que vous souhaitez transformer sont en français en
non pas en anglais. Dans ce cas MSIE5 risque encore de vous renvoyer un
message d'erreur lorsque vous essaierez de lire le fichier XML produit
par Tidy. La raison en est que notre belle orthographe française
comporte des letttres accentuées qui ne font pas partie du
noyau ASCII de base. Deux cas sont possibles :
-
Si vous avez bien pensé à configurer Tidy avec l'option char-encoding:latin1
les lettres accentuées figurent directement dans le fichier source.
Il vous suffit donc alors de remplacer la processing instruction de base
générée par Tidy <?xml
version="1.0"> par <?xml version="1.0"
encoding="ISO-8859-1"?>. Et le tour est joué !
-
Si vous avez oublié de configurer Tidy avec l'option char-encoding:latin1
et que vous n'avez pas mis non plus l'option numeric-entities:yes,
il est possible que les lettres accentuées soient toujours sous
la forme d'entités (´, etc.) -- c'est ce que génèrent
malheureusement la plupart des éditeurs HTML. Il faut savoir que,
si ces entités sont prédéfinies en HTML, elles
ne le sont pas en XML. Il va donc vous falloir relancer Tidy avec
cette fois l'option char-encoding:latin1
afin qu'il traduise ces entités (é...) en leurs
valeurs respectives ("é"...). Et nous serons alors ramenés
au cas précédent...
Vous avez maintenant un fichier XML valide, et néanmoins
fonctionnellement identique au fichier HTML de départ. Il vous est
maintenant possible de le transformer à votre guise et selon vos
besoins, en utilisant soit
le moteur
XSLT de MSIE5, soit tout autre logiciel de transformation XSLT.
Mais ceci est une autre histoire..
Retour à la page d'accueil.