Par Eoin Lane
Vous trouverez les futures mises à jour de cet article sur http:/www.inconn.ie/article/cocoon.htm (le nom de domaine n'est pas opérationnel actuellement mais le sera bientôt).
Le langage hypertexte extensible (XML) est un nouveau langage hypertexte web (il a obtenu l'agrément ISO en février 1999). C'est un outil puissant destiné à séparer le contenu web du style. Il a été écrit beaucoup de choses au sujet de XML, mais pour les utiliser de façon réelle dans la conception web, les tschnologies y afférant doivent être comprises. Pour ce faire, j'ai ajouté mes deux centimes à la grande masse de littérature qui existe sur le sujet. Cet article n'a pas pour but d'apprendre XML, ni d'explorer au maximum ses possibilités, mais c'est un moyen pour que les technologies relatives à XML puissent être mises en pratique immédiatement.
Avant d'aller plus loin, je vous suggère deux sites où vous pourrez obtenir l'information définitive sur XML. Le premier est le site du World Wide Web Consortium (W3C) sur http://www.w3.org/. W3C est responsable de la spécification XML. Le second est un site de Questions Fréquemment Posées sur XML http://www.ucc.ie/xml/ qui répondra aux autres questions. Je vous recommande également les pages XML hébergées par IBM sur http://www.ibm.com/xml/, où vous pourrez trouver un large éventail d'excellents tutoriels et articles sur XML.
Le langage originel de la toile, SGML (depuis 1986 environ) est le père de tous les langages hypertextes. SGML peut être utilisé pour documenter tous les systèmes imaginables ; depuis la conception aéronautique complexe jusqu'aux dialectes chinois anciens. Cependant, il souffre de sa complexité et de son maniement peu aisé pour les applications web usuelles. HTML est à la base une version très raccourcie de SGML, à l'origine conçu avec l'esprit de publication de la communauté scientifique. C'est un simple langage hypertexte (il a été dit "quiconque le veut peut l'apprendre") et avec l'explosion du web, il est évident que les gens bien informés en ont témoigné. Depuis sa création, le web a évolué en complexité et a enfin dépassé le stade de ses lents débuts dans la communauté scientifique.
Aujourd'hui les pages internet doivent être dynamiques, interactives, exploitables en arrière-plan avec des bases de données, sécurisées, et attirantes à l'oeil pour être compétitives dans un cyberespace toujours plus peuplé. Entrez dans XML, un nouveau langage de balisage pour traiter les complexités de la conception du web actuel. XML ne représente que 20% de la complexité de SGML et peut manipuler 80% des fichiers SGML (croyez-moi lorsqu'il s'agit du code des dialectes chinois anciens, 80% en contiennent). Dans la section suivante, je comparerai brièvement deux exemples de marquage, un en HTML et le second en XML, en démontrant les avantages d'une approche XML. Dans la section finale, je montrerai comment installer un serveur web Apache pour traiter un document XML afin que vous puissiez commencer immédiatement à utiliser XML dans votre conception web.
L'exemple qui suit est très simple, pour que chacun puisse se familiariser :
<html> <head> <title>C'est mon article</title> </head> <body> <h1 align="center">C'est mon article<h1> <h1 align="center">par <a href="mailto:eoinlane@esatclear.ie">EoinLane</a></h3> ... </body> <html>
Deux points importants sont à souligner dans ce document.
XML résout ces deux problèmes.
L'équivalent en XML se présente comme suit :
<?xml version="1.0"?>
<page>
<titre>C'est mon article</titre>
<author>
<nom>Eoin Lane>/nom>
<mel>eoinlane@esatclear.ie</mel>
</author>
...
</page>
La première chose est de remarquer que ce document, comme d'autres documents XML valides, est bien formé. Pour obtenir un document bien formé chaque balise doit avoir un crochet ouvert et un crochet fermé. Un progamme de recherche d'adresses de courrier doit ensuite localiser le texte entre les balises ouvert et fermé du courrier.
Le second point crucial est que ce document XML contient seulement des données. Il n'y a rien dans ce document qui impose la manière d'afficher le nom de l'auteur ou son adresse e-mail. En pratique, il est plus facile de penser de façon séparée la conception web en termes de données et de présentation. Dans la conception de sites moyens et de grands sites, où toutes les pages ont la même apparence et où seules les données changent de page en page, c'est évidemment une meilleure solution. Elle autorise également un partage du travail où style et contenu peuvent être manipulés par deux départements différents travaillant de façon indépendante. Elle autorise également la possibilité d'avoir un jeu de données avec un certain nombre de présentations.
Un document XML peut être présenté en utilisant deux méthodes différentes. L'une utilise une Feuille de Style en Cascade (CSS) (reportez-vous à http://www.W3.org/style/css/) pour baliser le texte en HTML. La seconde utilise un langage de transformation appelé XSL, qui convertit le document XML en HTML, XML, pdf, ps ou Latex. Quant à savoir lequel utiliser, W3C (les responsables de cette spécification) disent ceci : Utilisez CSS lorsque vous le pouvez, utilisez XSL lorsque vous le devez
Ils déclarent également : La raison est que CSS est beaucoup plus facile à utiliser, plus facile à apprendre, donc plus facile à maintenir et moins onéreuse. Il existe des éditeurs WYSIWYG pour CSS et il y a généralement plus d'outils pour CSS que pour XSL. Mais la simplicité de CSS signifie qu'elle a ses limites, certaines fonctions que vous ne pourrez effectuer avec CSS, ou avec CSS seule. Vous aurez alors besoin de XSL, ou du moins de la partie transformation de XSL.
Quelles sont donc les actions que vous ne pouvez effectuer avec CSS ? En général tout ce qui nécessite des transformations. Par exemple, si vous avez une liste que vous voulez afficher en ordre alphabétique, si des mots doivent être remplacés par d'autres, ou si des éléments vides doivent être remplacés par du texte. CSS peut effectuer une génération de texte, mais seulement pour des tâches limitées, comme des numéros d'en-têtes de sections.
XSL (Langage de Feuille de Style eXtensible) est le langage utilisé pour transformer et afficher des documents XML. Il n'est pas encore dans sa version définitive, donc méfiez-vous ! C'est un langage de formatage de document complexe qui est en lui-même un document XML. Il peut être subdivisé en deux parties : transformation (XSLT) et formatage d'objets (quelquefois comme FO, XSL:FO ou simplement XSL). Pour plus de simplicité je traiterai seulement de XSLT ici.
Transformations XSL (XSLT)
Le 16 novembre 1999, le World Wide Web Consortium a annoncé la publication de XSLT comme Recommandation W3C. Ce qui signifie essentiellement que XSLT est stable et ne changera pas dans l'avenir. Le document XML ci-dessus peut être transformé en document HTML, et en conséquence affiché sur n'importe quel navigateur en utilisant le fichier XSLT suivant :
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
<xsl:template match="page">
<html>
<head>
<title>
<xsl:valueof select="title"/>
</title>
</head>
<body bgcolor="#ffffff">
<xsl:apply=templates/>
<body>
</html>
</xsl:template>
<xsl:template match="title">
<h1 align="center">
<xsl:applytemplates/>
<h3 align="center ">
by <xsl:applytemplates/>
</h3>
</xsl:template>
<xsl:template match="mail">
<h2 align="left">
<xsl:applytemplates/">
</h2>
</xsl:template>
</xsl:stylesheet>
Pour en savoir plus sur XSLT, je vous recommande le site http://www.xlinfo.com/ comme un bon point de départ. J'ai également trouvé excellent le chapitre 14 révisé, de la Bible XML. Cette révision est basée sur les spécifications qui sont devenues par la suite la recommandation.
Avec l'arrivée de la génération suivante de navigateurs, c'est-à-dire Netscape 5 actuellement en construction http://www.mozilla.org/, cette transformation côté client peut être effectuée. Lorsque le fichier XML est requis, le fichier XSL correspondant sera envoyé avec, et la transformation sera effectuée par le navigateur. Actuellement, il y a beaucoup de navigateurs capables d'afficher seulement du HTML, et jusqu'à ce que la transformation soit effectuée ensuite côté serveur. Cette tâche peut être accomplie en utilisant les servlets Java (programmes additionnels du serveur Java).
Le servlet Cocoon est identique à un servlet, écrit par quelques personnes très intelligentes chez Apache http://www.apache.org/. A la base, il prend un document XML et le transforme en utilisant un document XSL. Un exemple de cette transformation est la conversion du document XML en document HTML pour que le navigateur puisse l'afficher. Donc si votre serveur web est configuré pour faire fonctionner les servlets, et si vous incluez le servlet cocoon, vous pouvez alors lancer la conception de vos pages web en utilisant XML. Le reste de cet article montrera exactement comment effectuer cette opération.
J'ai testé les instructions suivantes sur une installation récente de Red Hat 6.0, donc je sais qu'elle fonctionne.
Installez d'abord le serveur web Apache. Sur Red Hat, cette fonction est livrée pré-installée mais je préfère que vous la supprimiez en utilisant :
rpm -e --nodeps apache
Ne vous souciez pas des messages d'erreur. Ensuite procurez-vous la version d'Apache la plus récente sur http://www/apache.org/ (actuellement version 1.3.9) et copiez-la dans une emplacement pratique. J'ai installé la mienne dans /usr/local/src/. Désarchivez et décompressez le fichier en utilisant :
tar zxvf apache_1.3.9.tar.gz
Ce qui décompactera Apache dans le répertoire /usr/local/src/apache_1.3.9. Entrez dans ce répertoire, configurez, construisez et installez l'application en utilisant les commandes suivantes :
./configure --prefix)/usr/local/apache --mandir=/usr/local/man --enable-shared=max make make install
Ces commandes permettront d'installer Apache dans le répertoire /usr/local/apache, et il est important de remarquer ici le fichier http.conf, que vous pourrez trouver dans le répertoire /usr/local/apache/conf. Ce fichier contient la plupart des informations importantes nécessaires pour faire tourner Apache correctement. Il contient des informations sur la provenance des documents web, des serveurs web virtuels et des dossiers aliases. Nous reviendrons brièvement sur ce fichier, donc familiarisez-vous avec sa présentation générale. A ce stade, j'ai dû redémarrer Linux et lancer ensuite Apache en utilisant l'instruction suivante :
/usr/local/apache/bin/apachect1 start
Pour le tester, faites pointer votre navigateur sur http://localhost/, et vous y êtes, espérons-le ! Pour une bonne conception et une bonne organisation, je vous renvoie à un article que j'ai trouvé extrêmement utile pour configurer mon propre site : Pour une Meilleure Conception des Pages Web sous Linux, écrit par Chris Gibbs (Linux Gazette n°4243, traduit en français par Joëlle Cornavin).
En octobre, IBM a sorti le Kit 1.1.8 Java de Développement pour Linux. Il est plus rapide que les JSDK correspondants de Blackdown, qui se trouvent sur http://blackdown.org/, et de Sun. Téléchargez JDK d'IBM (consultez http://www.ibm.com/java/). A nouveau, décompressez celui-ci dans le répertoire /usr/local/src/jdk118. Ensuite, téléchargez le logiciel JSDK2.0 de JavaSoft, la version Solaris (non JSDK2.1 ou n'importe quelle autre variante que vous seriez amené(e) à obtenir), désarchivez-la et décompactez-la - je l'ai également installée dans /usr/local/src/JSDK2.0. Ajoutez la commande suivante ou équivalente à /etc/profile pour les rendre accessibles sur votre système.
JAVA_HOME="/usr/local/src/jdk118"
JSDK_HOME="/usr/local/src/JSDK2.0"
CLASSPATH="$JAVA_HOME/lib/classes.zip:$JSDK_HOME/lib/jsdk.jar"
PATH="$JAVA_HOME/bin:$JSDK_HOME/bin:$PATH"
export PATH CLASSPATH JAVA_HOME JSDK_HOME
Pour les tester, lancez :
java -version
à l'invite de la commande, et vous pouvez revenir au message suivant :
java version "1.1.8"
et pour tester le kit de développement, lancez :
servletrunner
et si tout se passe bien, vous pouvez revenir au message suivant :
servletrunner starting with settings:
port = 8080
backlog = 50
max handlers = 100
servlet dir = ./examples
document dir = ./examples
servlet propfile = ./examples/servlet.properties
Nous sommes maintenant prêts à installer le moteur servlet d'Apache, ApacheJServ.
A nouveau, téléchargez le dernier ApacheServ (version 1.0 en ce moment, bien que la version 1.1 en soit au stade beta final) depuis le site Java d'Apache http://java.apache.org/ et décompactez-le dans /usr/local/src/ApacheJServ-1.0/. Tapez configure, make et make install en utilisant les instructions suivantes :
./configure --with-apache-install=/usr/local/apache --with-jsdk=/usr/local/src/JSDK2.0 make make install
Lorsque cette opération a été effectuée avec succès, ajoutez la ligne suivante à la fin du fichier http.conf auquel j'ai fait référence plus haut lors de l'installation du serveur web Apache :
Include /usr/local/src/ApacheJServ-1.0/example/jserv.conf
et redémarrez le serveur web en utilisant :
/usr/local/apache/bin/apachect1 restart
Le moment de vérité est maintenant arrivé, pointez votre navigateur Internet sur http://localhost/example/Hello et si vous revenez en arrière sur les deux lignes suivantes :
Example Apache JServ Servlet
congratulations, Apache JServ is working!
Alors, vous y êtes presque.
Enfin, téléchargez la dernière version de Cocoon (actuellement version 1.5) sur le site Java d'Apache http://www.java.apache.org/. Cocoon est distribué comme un fichier Java archivé et peut être extrait en utilisant la commande jar. Créez d'abord le répertoire /usr/local/src/cocoon et décompactez ensuite le fichier jar cocon dedans :
mkdir /usr/local/src/cocoon jar -xvf Cocoon_1.5.jar
Maintenant il s'agit de configurer le moteur JServ pour reconnaître un fichier avec une extension .xml et d'utiliser le processus servlet cocoon et de le faire fonctionner.
Cherchez le fichier jserv.properties que vous trouverez dans le répertoire /usr/local/src/ApacheJServ-1.0/example/ et à la fin de la section qui commence par :
# CLASSPATH environment value passed to the JVM
ajoutez la commande suivante :
wrapper.classpath=/usr/local/src/coccon/bin/xxx.jar
Dans le cas de Cocoon 1.5, ceci signifie que vous devez ajouter les trois lignes suivantes :
wrapper.classpath=/usr/local.src/cocoon/bin/fop.0110.jar
wrapper.classpath=/usr/local/src/cocoon/bin/openxml.106-fix.jar
wrapper.classpath=/usr/local/src/cocoon/bin/xslp.19991017-fix.jar
Toutefois, ces fichiers seront modifiés avec les différentes versions. Cherchez alors Le fichier suivant, example.properties, qui se trouve lui aussi dans le répertoire /usr/local/src/ApacheJServ-1.0/example/ et ajoutez la ligne suivante :
repositories=/usr/local/src/cocoon/bin/Cocoon,jar
Dans mon fichier example.properties, vous deviez modifier la ligne :
repositories=/usr/local/src/ApacheJServ-1.0/example
pour celle-ci :
repositories=/usr/local/src/ApacheJServ-1.0/example, /usr/locale/src/cocoon/bin/Cocoon.jar
Ajoutez également la ligne suivante à la fin du fichier example.properties :
servlet.org.apache.cocoon.Cocoon.initArgs=properties=/usr/local/src/cocoon/bin/Cocoon.jar
Le moteur JServ est maintenant correctement configuré et tout ce qui nous reste à faire est d'indiquer à Apache de diriger n'importe quel appel d'un fichier XML (ou n'importe quel fichier que vous voulez confier à Cocoon) au servlet Cocoon. Pour cela, nous avons besoin du fichier de configuration JServ : jserv.conf mentionné plus haut (à nouveau dans le même répertoire). Ajoutez la ligne suivante :
ApJServAction .xml/example/org.apache.cocoon.Cocoon
Pour accéder à la documentation et aux exemples de Cocoon, ajoutez la ligne suivante à la section alias de votre fichier http.conf :
Alias /xml/ "/usr/local/src/cocoon/"
<Directory "/usr/local/src/cocoon/">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Alias /xml/example/"/usr/local/src/cocoon/example/"
<Directory "/usr/local/src/cocoon/example/">
Options Indexes MultiViews
AllowsOverride None
Order allow,deny
Allow from all
</Directory>
Redémarrez le navigateur pour que les modifications prennent effet :
/usr/local/apache/bin/apachect1 restart
Pointez maintenant votre navigateur sur http://localhost/xml/ pour explorer la documentation et http://localhost/xml/example/ pour essayer les exemples. Si Cocoon réclame un supplément de mémoire, ouvrez alors le fichier cocoon.properties qui se trouve dans le répertoire /usr/local/src/cocoon/. Cherchez la ligne :
store.memory = 150000
et modifiez-la en mettant un nombre inférieur à 15000. Pour essayer les exemples PDF, qui sont faciles je pense, vous devrez avoir installé Acrobat Reader comme programme additionnel (plug-in) de Netscape, mais le jeu en vaut la chandelle.
La série Cocoon 1.x est essentiellement un travail en évolution permanente. Ce qui a démarré comme un simple servlet pour la transformation de XSL statique a évolué en un projet beaucoup plus important. Avec ce développement grandissant, les considérations de conception prises au début du projet en gênent maintenant les développements futurs alors que son importance et son envergure sont évidentes. Pour ajouter à cela, XSL est aussi un travail en évolution, bien que la version actuelle de XSLT soit devenue une Recommandation W3C (le 16 novembre 1999).
Cocoon 2 projette de résoudre ces problèmes et nous fournit un servlet pour les transformations XML de taille à gérer de grandes quantités de trafic web. La conception Web de sites moyens et grands dans l'avenir est entièrement basée sur XML, puisque ses avantages deviennent évidents, et le servlet Cocoon 2 nous fournira, espérons-le, un moyen de l'utiliser de façon concrète.
Au moment où j'ai écrit cet article, Apache a ouvert un nouveau site dédié exclusivement à XML (consultez http://xml.apache.org/). Le projet cocoon a évolué de façon évidente au delà de toute attente, et le nouveau Cocoon 2 sera un servlet commercialement viable pour rendre possible la conception de sites web en XML. Les gens d'Apache méritent de nombreux remerciements pour ce travail, donc écrivez-leur et remerciez-les, rejoignez la liste de discussion et donnez votre appui en général. Après tout, c'est du code open source et c'est dans l'esprit de Linux.
Copyright ©1999, Eoin Lane. Publié dans le numéro 48 de Linux Gazette, Décembre 1999
Traduction française Joëlle Cornavin jcornavi@club-internet.fr