spacer spacer
Index   Page down
spacer

Résumé

Exemple d'application de XSLT pour convertir des documents XML en des documents HTML pour ensuite les publier sur Internet. L'exemple est tenu simple pour faciliter l'assimilation rapide des concepts de base. On offre au lecteur des instructions pour qu'il puisse tester l'exemple sur son ordinateur.

Remerciements

Un grand merci a Max Froumentin du W3C pour ses précieux commentaires.
spacer spacer
Introduction  
Page up Page down
Nous ne pouvons pas rester indifférent devant le travail considérable déployé ces dernières années par le W3 Consortium dans le développement du "Extensible Markup Language" (XML) et du "Extensible Stylesheet Language" ( XSL). Leur but premier a été de rendre plus flexible le traitement de documents, réussissant à surmonter remarquablement plusieurs limitations et désavantages liées avec l'utilisation du quasi universel Hypertext Markup Language (HTML) Plus de clarté, simplicité, modularité et cohérence certainement ne furent pas seulement des vains mots si nous examinons les multiples développements qu'il a donné lieu.  Entre-temps sont apparus des instruments intéressants en relation avec XML et XSL lesquels, bien que encore incomplets, permettent de faire les premiers pas dans leur application. Ci-après nous présentons dans un bref exposé un exemple de comment on a pu améliorer la gestion des pages publiées dans ce site par l'introduction d'un langage de marquage de documents spécifique basé sur XML qui de facto a abouti à une extension du HTML. Cette présentation assume que lecteur a des connaissances de base sur XHTML, XML, XSL, XSLT.
spacer spacer
Le problème avec les documents HTML  
Page up Page down
Au début écrire des documents aptes a être publiés dans Internet paraissait une tâche plutôt immédiate: tout ce qu'on avait besoin était un traitement de texte décent et les spécifications HTML afin de pouvoir ajouter le marquage approprié mais par la suite quelques problèmes apparurent qui conduisirent à la conclusion que le mélange entre éléments de marquage structurels et marquages de style n'a pas été un choix heureux. La première déception est venue de la découverte que pas toutes les pages se ressemblaient de façon consistante si présentés avec différents navigateurs et/ou logiciels. Ce problème a pu être contourné par le choix judicieux d'une structure HTML et style de compromis, actuellement toujours à la base des pages faisant partie de ce site.
L'observation qu'un tas de marquages répétitifs de style et de mise en page a fini presque par submerger le contenu des documents amena l'auteur à postuler un mécanisme par lequel le style et la mise en page pouvait être dérivé du marquage structurant le contenu d'un document.
 Jusqu'à il y a peu une solution viable n'était pas en vue mais depuis la récente publication de MSXML 3.0 de la maison Microsoft Corporation combiné avec programme utilitaire MSXSL.EXE de la même maison ont pourvu l'opportunité d'implémenter une solution. Alternativement vous pouvez recourir à Instant Saxon 6.5.3, une application écrite par Michael Kay.
Une autre voie pour implémenter la séparation du contenu de la présentation implique l'utilisation de "Cascading Style Sheets" (CSS), un mécanisme bien conçu mais qui malheureusement n'a pas été convenablement incorporé dans la plupart des "navigateurs" causant ainsi maintes frustrations à ceux qui ont voulu l'utiliser. Quand nous parlons d'une solution viable nous entendons bien exclure le transfert de la frustration d'une technologie à une autre. Ce problème devrait néanmoins disparaître avec l'apparition de versions plus récentes des navigateurs.
spacer spacer
Quel rôle jouent XML, DTD, et XSLT  
Page up Page down
La première brique à la base de notre solution nous vient du standard "eXtended Markup Language" ( XML) laquelle nous permet de structurer un document suivant un ensemble relativement simple de règles. A titre d'exemple donnons un coup d'oeil au texte source du document structuré selon XML page_ex.xml à la base de la page HTML page_ex.html . (Nous suggérons d'ouvrir ces pages dans des fenêtres séparées et comparer le texte source XML avec celui HTML de page_ex.html en utilisant l'option "montre texte source" du navigateur.) La plupart des navigateurs en utilisation actuellement ne sont pas encore en mesure de traiter de façon utile un tel document, raison pour laquelle pour pouvoir visionner page_ex.xml, nous devons le convertir en un document HTML.
Ici vient la seconde brique de notre solution: le standard "eXtensible Stylesheet Language Transformations" (XSLT) lequel nous permet moyennant des règles patron de spécifier comment le document XML doit être converti en un document HTML par un processeur XSL.
 Depuis la troisième ligne du préambule de notre exemple nous pouvons déduire que le "stylesheet" applicable a ce document se dans la ressource page_ex.xsl . Ce "stylesheet" est utilisé par le processeur XSL, en l'exemple le programme outil MSXSL.EXE de Microsoft Corporation, pour dériver la version HTML de page_ex.xml.
La dernière brique de notre solution est représentée par la "Document Type Définition" (DTD), définition du type de document qui décrit la structure du contenu de notre document XML et, bien que pas nécessaire au fonctionnement de cette solution, est un outil très précieux pour assurer la conformité à la structure de contenu désirée. La deuxième ligne dans le préambule nous dit que la DTD pour le document page_ex.xml se trouve dans page_ex.dtd . Avec la DTD un processeur XSL est en mesure d'identifier toutes les inconsistances et tous les erreurs dans le document. Les déclarations spécifiques au contenu du document sont regroupés à la fin du fichier.
spacer spacer
Aspects notables de cette solution  
Page up Page down
Dans l'essence, le "stylesheet" page_ex.xsl décrit un canevas structuré de document prêt à être rempli avec du contenu. La génération de page_ex.html peut être vue comme un processus de fusion entre ce canevas et le contenu structuré de page_ex.xml où les noms des éléments aident à mettre en place correctement le différents morceaux de texte. Une puissante et inattendue caractéristique du concept XSLT est qu'on décrit une seule fois comment un morceau particulier de texte doit être traité, indépendamment de l'endroit et de combien de fois il peut apparaître. Si dans un développement futur vous devez distinguer le traitement d'un bout de texte en fonction du contexte vous pouvez modifier le "stylesheet" sans besoin de réécrire le tout à nouveau. La DTD permet l'utilisation de tout marquage HTML valable dans le bloc BODY pour faciliter la transition de HTML à XML avec des documents existants. Remarquez cependant que le "stylesheet" page_ex.xsl définit seulement le traitement du sous-ensemble de marquages effectivement requises par notre exemple.  Par exemple les attributs "home", "previous", et "next" de l'élément "page" contrôlent automatiquement l'aide à la navigation dans l'entête. Ceci est obtenu par les déclarations suivantes en page_ex.xsl:

<TD class="rheader">
  <xsl:apply-templates select="@home"/>
  <xsl:call-template name="br"/>
  <xsl:apply-templates select="@previous"/>
  <xsl:call-template name="br"/>
  <xsl:apply-templates select="@next"/>
</TD>
Ceci pourrait être ultérieurement perfectionné en faisant apparaître une icône appropriée avec "mapping" etc..., comme cela est fait dans les pages du présent site.
Si nous examinons les annotations HTML engendrées par page_ex.html on remarquera que certains éléments apparaissent en minuscules alors que d'autres sont en majuscules. Ceci à été fait à dessein pour distinguer ce qui à été inséré par le processeur XSLT (majuscule) de ce qui provient directement du document XML (minuscule). Les navigateurs ne distinguent pas le minuscule du majuscule quand ils lisent du marquage HTML.
spacer spacer
 
Page up Page down
Il est possible de paramétrer la présentation au moyen d'attributs ayant des valeurs par défaut auxquelles le "stylesheet" peut se référer comme avec "indent" et "separation" dans l'exemple suivant tiré du canevas "sections" dans page_ex.xsl :

<TR><TD width="{@indent}">
    <xsl:call-template name="nbsp"/></TD>
  <TD width="{@separation}">
    <xsl:call-template name="nbsp"/></TD>
  ...
</TR>
dans le DTD page_ex.dtd nous pouvons trouver les déclarations correspondantes d'où viennent les valeurs:

<!ELEMENT sections   (section+, body?)>
<!ATTLIST sections
  %core.att;
  width         %RelativeLength;  "95%"
  height        %RelativeLength;  "80%"
  indent        %RelativeLength;  "30%"
  separation    %RelativeLength;  "2%"
>
Cette façon de paramétrer vous donne aussi l'opportunité de les changer dans des cas exceptionnels en spécifiant simplement les valeurs désirées localement moyennant les attributs de l'élément.
 Ce qui examinerons plus de près le marquage HTML engendré et les déclarations en entête dans page_ex.html ou le soumettent à un valideur HTML découvriront des divergences. L'exemple présenté est en réalité le fruit d'un compromis entre générer du pur marquage HTML4 et engendrer marquage XHTML1, car XML, XSL, et XSLT requièrent que tout élément doit avoir son marquage de clôture. Par exemple vous ne pouvez pas spécifier dans XSLT la génération d'un élément META sans son META/ (à moins que vous voulez recourir à une construction très compliquée avec des éléments xsl:text, voir la règle canevas nommée "br", pour une instance très simple du genre). Des essais avec différents navigateurs ont montré que des éléments avec marquage de clôture, bien que pas contemplé par HTML4, ne donnent lieu à aucun inconvénient.
L'attribut "height" qui apparaît dans les éléments table ne fait pas partie des spécifications HTML4, cependant il est reconnu par la plupart des navigateurs pour raisons de compatibilité avec des versions précédentes. On l'utilise souvent pour contrôler la mise en page de ce site.
spacer spacer
Que gagnons nous avec XML, XSL, XSLT?  
Page up Page down
Ci de suite une liste d'avantages décisifs caractérisant ces nouveaux standards:
  • Il est plus facile de centrer l'attention sur le contenu dans les documents structurés selon le standard XML.
  • Avec des "stylesheet" séparés on peut obtenir des présentations spécifiques en fonction du média ciblé à partir du même document.
  • La continuité avec le standard HTML existant est préservée.
  • XSLT vous permet de contrôler la présentation de vos documents à partir de leur contenu structuré.
  • Flexibilité dans la définition de la frontière entre structure du contenu et détails de présentation.
  • Possibilité de modifier le style de présentation sans avoir à modifier le contenu.
  • On ne détermine qu'une fois le compromis de notation HTML fonctionnant avec divers navigateurs.
 Naturellement ce qui vaut pour XSLT vaut également pour XSL, un standard qui incorpore XSLT, Xpath et "Formatting Objects". Avec XSL vous fournissez une recette sur comment le contenu d'un document XML doit être présenté sans besoin de l'altérer. Une fois implémenté par la majorité des navigateurs, XSL deviendra une alternative intéressante car il ne requiert pas le standard HTML.
Évidemment pour bénéficier de tous ces avantages nous devons investir quelque temps dans la mise au point de procédés de travail plus consistants, et chose plus importante encore, nous devons assurer la cohérence de l'information traitée.
spacer spacer
Essayez l'exemple sur votre ordinateur  
Page up Page down
Les instructions pas à pas suivantes vous permettrons de jouer avec l'exemple présenté sur votre ordinateur:
  1. Décharger MSXML 3.0 et installez le avec la modalité remplacement (voir instructions de Microsoft).
  2. Décharger MSXSL.EXE .
  3. Décharger le fichier ZIP page_ex.zip avec les sources de cet exemple et décomprimez-les dans un répertoire de votre choix. Ensemble à ces sources vous trouverez un petit fichier "batch" appelé xml.bat qui doit être modifié de façon à pointer sur le répertoire ou vous avez installé l'outil msxsl.exe (voir commentaire à 'intérieur du fichier même).
  4. Ouvrir le navigateur "Internet Explorer" (MSIE) et charger le fichier page_ex.xml; si MSXML 3.0 à été proprement installé le document devrait être affiché dans sa forme HTML (conversion interne par le MSIE).
 
  1. Maintenant ouvrez une fenêtre DOS, positionnez vous dans le répertoire avec les sources et passez la commande
    
    xml page_ex
    
    Ceci devrait engendrer le fichier page_ex.html lequel peut être examiné avec quelconque navigateur.
  2. Si vous désirez expérimenter plus avec XML et XSLT vous pourriez également décharger Microsoft XML Notepad pour afficher et modifier rapidement fichiers XML et Microsoft XML Parser SDK avec la documentation pour MSXML 3.0 (existe seulement en anglais).
    Vous pourriez aussi considérer l'emploi d'un outil plus spécifique comme XMLwriter de Wattle Software.
spacer spacer
Conclusions  
Page up Page down
Dans notre présentation nous avons mis en évidence la flexibilité introduite par ces nouveaux standards dans le traitement de documents. Mais les documents devraient contenir de l'information et pas du langage de marquage obscurcissant, but que nous atteignons en utilisant XML, XSL, et XSLT. On pourrait bien objecter que l'exemple présenté contient toujours du marquage HTML mais à ce sujet nous devons distinguer le marquage structurant le contenu de celui modulant le style; ce dernier devrait disparaître complètement mais en le bannissant derechef ne serait pas sage car, pour puissant que XML combiné avec XSL et XSLT puisse être, il y aura encore des situations qui peuvent être traités plus efficacement avec les recettes déjà connues.  La conversion des pages de ce site n'aurait presque pas été possible si le standard XML n'avait pas pourvu la flexibilité nécessaire pour faire la transition. Encore pour bien du temps ces pages seront mises à disposition du public sous forme de documents HTML mais dès que les navigateurs capables de traiter XML et XSL seront plus largement diffusés leur forme XML sera mise à disposition directement. A ce moment XSL dans sa forme native deviendra déterminant dans la gestion de leur présentation, rendant ainsi la transition complète.

Louis JEAN-RICHARD

Novembre 2000

Rev. Octobre 2004

spacer spacer
Références   Page up
  1. The World Wide Web Consortium
  2. Extensible Markup Language (XML) 1.0
  3. Extensible Stylesheet Language (XSL) 1.0
  4. XSL Transformations (XSLT) 1.0
  5. Hypertext Markup Language (HTML) 4.01
  6. Cascading Style Sheets (CSS)
  7. MSXSL.EXE Command Line Utility by Microsoft Corporation
  8. MSXML 3.0 by Microsoft Corporation
  9. Microsoft XML Notepad
  10. Microsoft XML Parser SDK
  11. Instant Saxon 6.5.3
  12. page_ex.zip avec les sources des exemples utilisés dans cet article
  13. XMLwriter by Wattle Software