MKCORPUS PROJECT MKCORPUS PROJECT MKCORPUS PROJECT
MKC Home

Automatisez la gestion de vos pages HTML... grâce à XML !

Emmanuel Lazinier


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.

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 aviez la patience de corriger une à une toutes les erreurs signalées par MSIE5, vous finiriez par avoir un document bien formé au sens XML que MSIE5 vous afficherait 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.

HTML Tidy

Catégorie
Graticiel
Téléchargement
W3C : HTML Tidy
Finalités
Développé par Dave Raggett, HTML Tidy est proposé par le W3C. Sa finalité première est de nettoyer les fichiers HTML des erreurs (ex. éléments qui se chevauchent) et de tout ce qui est  interdit par les recommandations HTML. Il peut entre autres choses :
  • restaurer les balises <P> stupidement supprimées par l'éditeur (au demeurant excellent) de Nescape Communicator 4 et réclamées par le même Nestcape pour afficher correctement les styles CSS (option "enclose-text:yes") !
  • traduire en style CSS les balises de présentation (<FONT>, <CENTER>) aujourd'hui déconseillées par le W3C (option "clean:yes")
  • enfin, et surtout, transformer un fichier HTML en fichier XML (option "output-xml:yes").
Activation
Tidy étant un exécutable en mode console, le plus simple est de l'activer à l'aide d'un fichier .BAT . Un même fichier .BAT pourra bien sûr invoquer Tidy successivement pour tout un ensemble de fichiers : vous pourrez donc nettoyer et xmliser tout un site d'un seul coup !

Le fichier .BAT aura l'allure suivante :

tidy -config configuration.txt depart.htm >arrivee.xml
Les paramètre de configuration à choisir (fichier configuration.txt) sont les suivants :
output-xml:yes
clean:yes
char-encoding:latin1
enclose-text:yes
doctype: omit

Note. Tidy est aussi inclus dans l'éditeur HTML HTML-Kit, développé également par Dave Raggett.

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 :

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, il est possible que les lettres accentuées soient toujours sous la forme d'entités (&acute;, 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 (&eacute;...) 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..

(A suivre...)