Gestion XML d'une galerie d'images
Auteur : Dominique Guebey - http://www.dg77.net/galerie/demo/
- Sommaire :
- Introduction | Intérêts de la méthode | Tutorial express XML | Transformation XSL et processeurs XSLT | Structure et principes | Fichier DTD, documentation de base | Support linguistique (localisation) | Jeu de fichiers de travail et exemples | Exemples simplifiés | Guide de démarrage | Fichiers HTML sorti par XSLT | Fichier CSS et présentation | Limitations actuelles/évolutions prévues | Log/historique des modifications/évolutions | Documentation et ressources sur XML/XSLT | Conditions d'utilisation |
Introduction
Ce document présente une solution pour créer une galerie virtuelle, à partir d'informations organisées dans un fichier XML. Les pages HTML, affichables dans un navigateur web, sont générées automatiquement par une feuille de transformation XSL (XSLT) fournie ici.
Le traitement préparatoire des fichiers images (conversion, formatage, redimensionnement, retouche…) n'est pas le sujet de ce qui suit et est supposé avoir été réalisé.
Intérêts de la méthode
- Automatiser la présentation :
- Gérer manuellement un fichier HTML pour chaque image est une tâche rapidement fastidieuse, qui peut tourner aux travaux forcés le jour où l'on décide de changer de présentation ou organisation des fichiers. La solution de facilité qui consiste à charger directement (et donc sans lien de retour, sans titre ou texte d'accompagnement, ni mention des droits etc.) l'image qu'on a sélectionnée est un pis-aller peu satisfaisant techniquement et esthétiquement.
- Des alternatives rigides et/ou fermées et/ou pauvres :
- On voit souvent proposer des méthodes de gestion "dynamique" d’albums : outre que, généralement, elles confectionnent du HTML "sale" avec un résultat fort limité en informations, il faut être conscient qu’elles imposent à chaque fois une solution spécifique, reposant sur l’utilisation de services, ou de langages ou programmes particuliers. Ces solutions imposent éventuellement à l’utilisateur ordinaire un apprentissage démesuré. Plus souvent, elles obligent à activer les languages de script sur le poste client, ce qui n’est pas un choix nécessairement tourné vers l’avenir (un language peut passer de mode), ni conforme à la philosophie et l’étiquette du Web (les scripts peuvent fonctionner différemment selon le navigateur), et est encore moins conforme aux préceptes d’une bonne sécurité informatique. Au surplus, elles exposent à des remises en cause régulières : à chaque changement de plate-forme ou prestataire, ou même de simple transfert sur une autre machine ; avec les ennuis connus de réinstallation et configuration, les problèmes de changements de version et compatibilité, etc.
- Saisir et c’est tout :
- La méthode proposée consiste à tenir à jour un unique fichier XML, tache qui peut s’accomplir avec le plus simple instrument informatique : un éditeur de texte (ne pas confondre avec un traîtement de texte). Ensuite de quoi, un programme standard (processeur XSLT) se charge de créer les pages web. Outre la pérennité et la portabilité, cette méthode présente l’intérêt de ne faire appel à aucun effort de programmation, fut-ce sous forme de "script", pour présenter et exploiter les objets ainsi répertoriés et documentés.
- XML, norme ouverte :
- XML est une norme non-propriétaire bien établie, facile d’utilisation, particulièrement souple, pour laquelle de nombreux outils sont gratuitement disponibles sur pratiquement toutes les plates-formes informatiques. Les fichiers et traîtements offerts ici incorporent des éléments facultatifs RDF et RDFPIC, ce qui autorise l’exploitation de metadata suivant les standards du W3C [http://www.w3.org] et l’utilisation d’outils préconçus pour indexer, identifier et récupérer des images sur tout réseau de connaissance.
- Des serveurs prêts :
- A l’opposé du simple traitement manuel, toujours possible, l’utilisation d’outils XML ne répond pas moins à l’évolution récente des applications informatiques, basées sur les Services Web. De nombreuses plates-formes libres ou commerciales appliquent désormais ce principe et incorporent naturellement les transformations XSL dans leurs mécanismes. Cocoon, Apache et Jakarta, Tomcat, Struts, Jonas, Jetty, Websphere… mettront en oeuvre avec une puissance multipliée la présente "galerie". Ces serveurs permettent, en adaptant simplement une feuille xslt pour chaque cas, de générer un document au format adapté à chaque requête : (x)html pour un navigateur web, pdf pour l’impression, wml pour un téléphone Wap…
- Polyvalence :
- Il n’y a pas de limite aux utilisations imaginables. A partir du même fichier XML, on pourra (par XSLT ou toute autre méthode) générer un catalogue aussi bien que l’interrelation avec une autre base de documentation. Si on y tient vraiment, rien n’empêchera d’utiliser une solution commerciale ou un de ces services d’album photo disponibles sur le Web : les informations minimales généralement requises pourront aisément être extraites et servies. Enfin, si on décide un jour de réformer la structure des données ou de les fondre dans une autre base, l’opération se fera sans difficultés.
- Integration et universalité :
- L’utilisation d’XML correspond à une vision plus vaste de la nature du problème. Peu à peu, des stocks d’informations apparaissent, des efforts s’accumulent, dont le produit ne doit pas être périodiquement détruit et remplacé par ce qu’on espère être mieux, mais au contraire pouvoir être intégré utilement à des sources d’informations à la fois plus riches et plus utilisables. Ces considérations peuvent sembler aller trop loin pour une simple utilisation domestique occasionnelle, mais l’opinion qu’on en a peut changer rapidement, face à l’efficacité redoutable des moyens d’archivage actuel et à leur généralisation. Car la contrepartie est la possibilités d’anarchie et de gaspillage de temps, voire de perte ou destruction inopinée… Mieux vaut avoir réfléchi dès le début, sinon on risque de se trouver dans une situation pire que celle du photographe qui constate un jour que son armoire déborde de boîtes à chaussures pleines de négatifs sans la moindre annotation.
Tutorial express XML
Ci-dessous un exemple de fichier XML. On y trouve un fichier "articles" succinct, contenant deux références :
<?xml version="1.1" encoding="iso-8859-1"?> <articles> <article code="zs857"> <designation>Rondelle d'alu A</designation> <prix p="vente" unit="100">44.51</prix> </article> <article code="zs858"> <designation>Ecrou inox 8x42</designation> <prix p="vente" unit="boite">4.00</prix> </article> </articles>
La première ligne "<?xml…", toujours la même, est impérative ; c’est le prologue XML. Le numéro de version XML, en cours depuis le 4 février 2004, est 1.1. On a stipulé l’encodage iso-8859-1 i.e. alphabet latin1 ou "West European" avec caractères accentués, plutôt que la valeur par défaut UTF-8, trop limitée. Il est conseillé d’utiliser un éditeur de texte sérieux (Jext [http://www.jext.org] par exemple) pour maîtriser l’encodage du fichier.
Dans les autres lignes, "articles", "article", "désignation" et "prix" sont des éléments, définis par des balises (noter le "/" qui distingue les balises de fin : "</xxx>" de celles de début "<xxx>") ; "code", "p" et "unit" sont des attributs. Au moment où l’on décide de la structure d’un fichier xml, on a donc le choix entre deux possibilités pour stocker les informations : au sein d’un élément, ou en tant qu’attribut.
Elément racine : <articles> mérite une mention particulière : on doit toujours avoir un tel élément qui commence et finit le fichier. Ce dernier serait mal formé s’il consistait simplement en une collection d’éléments article non englobée dans un élément racine.
- L’indentation ne sert qu’à faciliter la lecture, la forme suivante est aussi valable :
- <?xml version="1.1" encoding="iso-8859-1"?> <articles> <article code="zs857"> <designation> Rondelle d'alu 8x42</designation> <prix cat="vente" unit="100">44.51</prix> </article> <article code="zs858"> <designation>Ecrou inox 8x42</designation> <prix cat="vente" unit="1">4.00</prix> </article></articles>
Le travail demandé consistera essentiellement à ajouter dans un fichier XML les éléments et attributs, en respectant la structure prévue, ainsi que les principes élémentaires d’XML :
- Respect de la casse, i.e. distinction majuscule/minuscule ; ici, les éléments et attributs sont tous en minuscule.
- Les attributs doivent être entre apostrophes ou guillemets. <img imgw=500> n’est pas correct, il faut : <img imgw="500">
- A toute balise de début doit correspondre une balise de fin (exemple : <mabalise>[contenu de l’élément]</mabalise>), sauf cas de balise fermée (exemple : <mabalise xattrib="z33"/>).
- Les éléments sont imbriqués les uns dans les autres, il ne sauraient se chevaucher. <tag1><tag2>xxxxxxxx</tag2></tag1> est correct, <tag1><tag2>xxxxxxxx</tag1></tag2> ne l’est pas (on dit qu’il n’est pas "bien formé").
- Quelques autres notions succintes concernant XML :
Les ENTITES : il est essentiel de savoir que, dans les données d’un élément, les 5 caractères & ' < > et " doivent être remplacés respectivement par & ' < > et ". Des exemples d’utilisation des entités peuvent être trouvés dans la méthode de support linguistique (voir ci-dessous) et le paramétrage des feuilles de style CSS.
Les NAMESPACE, voir ci-dessous l’exemple (section sur les transformations XSL) et les explications de la section "exemples simplifiés".
Transformation XSL et processeurs XSLT
La transformation XSL consiste à lire le fichier XML et à sortir un autre fichier formaté suivant certaines règles. Le fichier XSLT contient lesdites règles et se présente lui-même comme un fichier XML. XSLT sert en général à créer un fichier HTML ou TXT ou un autre XML.
Pour concorder avec le fichier XML, un espace de nommage ou "namespace" est défini, identifié par le préfixe dg77 (cf mention "xmlns:dg77=…") ; les namespaces sont utiles à qui veut profiter de "l’extensibilité" d’XML : il est possible à chacun d’ajouter ses propres éléments ou attributs, simplement en ajoutant son propre espace de nommage. Aucune modification ne sera à faire dans ce qui préexiste.
La transformation XSL requiert l’utilisation d’un processeurs XSLT. Il en existe plusieurs librement disponibles. Voir plus bas, dans les "ressources". Parmi eux, un processeur XSLT connu est Xalan. Ce programme existe en versions Java et C++ et est donc largement portable. Xalan fait partie du JDK 1.4 de Sun [http://java.sun.com] et se trouve aussi séparément sur le site d’Apache [http://xml.apache.org] . Si votre entreprise utilise un IBM AS400 (alias "iSeries"), on pourra trouver Xalan dans l’IFS, sous /QIBM/ProdData/OS400/xml/lib. Demander à l’homme-système. Le fichiers .jar tient sur une disquette.
Voici, ci-dessous, un exemple de commande pour PC Microsoft, servant à lancer Xalan en version Java. "c:\j2sdk1.4.1_01\lib\tools.jar" est à remplacer par le chemin de votre JRE (run-time Java), encore n’est-ce pas indispensable si Java est convenablement installé ; xalan.jar est censé être dans le "path", et galerie.xsl dans le répertoire en cours. Le premier paramètre (%1) contient le nom du fichier XML, le second (%2) le nom du fichier sorti. Ensuite viennent les paramètres passés à la feuille XSLT : nomfic est en principe le même que le %2 (s’il ne contient rien, tous les fichiers sortiront en un bloc), nomxml désigne le nom du fichier XML utilisé, et dateheure (facultatif) renferme des informations sur la génération du fichier.
java -classpath c:\j2sdk1.4.1_01\lib\tools.jar;xalan.jar org.apache.xalan.xslt.Process -in %1 -xsl galerie.xsl -out %2 -param nomxml %1 -param dateheure %4 -param processor xalan -param nomfic %3
La transformation galerie.xsl prévoit que le nom du fichier à traiter soit passé en argument. Si ce paramètre n’est pas transmis, le processus crée tous les fichiers HTML regroupés en un seul tenant. Contrairement aux version ultérieures, XSLT 1.0 ne prévoit pas la possibilité de sortir des fichiers séparés au cours du traitement, bien que certains processeurs XSLT connaissent cette option. La feuille XSLT permet de choisir entre deux processeurs : XALAN (voir ci-dessus), et SAXON [http://saxon.sourceforge.net] . Si on ne passe pas en paramètre le nom d’un des processeurs prévus, les pages sont sorties en un seul fichier qu’il faudra séparer manuellement en autant de fichiers que nécessaire. La séparation est indiquée par une ligne de commentaire, elle est très vite réalisée sous éditeur de texte : faire "enregistrer sous" pour chaque fichier HTML indiqué en commentaire, puis réouvrir chacun d’entre eux et supprimer les lignes superflues au-dessus et au-dessous.
Structure et principes
Il est permis de stocker plusieurs galeries dans un même fichier XML.
La galerie est composée d’une liste d’albums, et/ou d’une liste de planches et/ou d’une liste d’images.
Un album est composé d’une liste de planches et/ou d’une liste d’images.
Une planche contient une liste d’images.
Dans une liste d’images, chaque élément peut être agrémenté d’une illustration (cf élément "icone" dans la définition XML). Le choix d’un d’entre eux peut ouvrir une page permettant d’afficher une image (élément "img") de dimensions plus importantes, mais cela est facultatif.
Tous les éléments précédents (galerie, album, planche, image) commencent par un élément description. La description comporte obligatoirement un élément titre et un élément fichier. Ce dernier contient le nom du fichier HTML qui sera créé et utilisé en affichage ; s’il est vide, il n’y aura pas de fichier généré, ce qui peut être préféré pour les images.
Des textes libres peuvent être ajoutés en début et en fin de page. Ils peuvent contenir un lien vers une autre page ou servant à envoyer un message, ainsi que des attributs de présentation (gras, souligné, italique, petits ou gros caractères) ou même une image.
Des éléments auteur, copyright ou motsclef peuvent être ajoutés. Ces éléments s’appliquent aux niveaux inférieurs si ces derniers n’en contiennent pas (par exemple l’auteur indiqué dans l’album s’appliquera aux planches et images) ; ainsi on n’aura le plus souvent à les entrer qu’une seule fois.
Fichier DTD, documentation de base
Cette "Document Type Definition" constitue la documentation technique pour chaque élément et attribut. Les lignes commençant par "<!-- " sont des commentaires. La DTD peut être prise en compte par les éditeurs XML et les processeurs XSLT. Ces programmes sont dits validants s’ils contrôlent la conformité du fichier à la DTD. Les lignes "<!ATTLIST…" définissent les attributs relatifs à un élément.
<!-- rdf=Resource Description Format --xalan> <!ELEMENT rdf:RDF (galeries)> <!-- Le fichier peut contenir plusieurs galeries / File may include several galeries --> <!ELEMENT galeries (galerie)*)> <!ATTLIST galeries xmlns CDATA #IMPLIED> <!-- La galerie, composee d'albums, et/ou de planches, et/ou d'images --> <!-- The gallery, made of books, and/or plates, and/or pictures --> <!ELEMENT galerie (description,(album|planche|image)*)> <!-- L'album, compose de planches, et/ou d'images --> <!-- The book, made of plates, and/or pictures --> <!ELEMENT album (description,(planche|image)*)> <!-- La planche, composee d'images --> <!-- The plate, made of pictures --> <!ELEMENT planche (description,image*)> <!-- L'image / The picture--> <!ELEMENT image (description,ref?,icone?,img?,alticone?,altimage?,titicone?,titimage?)> <!-- DESCRIPTION commune / Common description --> <!ELEMENT description (titre,fichier,auteur*,copyright*,categorie?,motsclef?, texte*,textf*,ret?,cre?,upd?)> <!-- Obligatoire / Mandatory (title and file) --> <!ELEMENT titre (#PCDATA)> <!ELEMENT fichier (#PCDATA)> <!-- Facultatif / Optional (author, copyright, category, keywords) --> <!ELEMENT auteur (#PCDATA)> <!ELEMENT copyright (#PCDATA | link)*> <!ELEMENT categorie (#PCDATA)> <!ELEMENT motsclef (#PCDATA)> <!ELEMENT ret (#PCDATA)> <!ATTLIST ret url CDATA #REQUIRED> <!ELEMENT cre (#PCDATA)> <!ELEMENT upd (#PCDATA)> <!-- Elements propres a l'objet image / Specific data for pictures --> <!-- Ref : ex numero diapositive, nomenclature museographique etc. / Reference to identify the picture --> <!ELEMENT ref (#PCDATA)> <!-- La petite image qui sert dans l'index / Image file used in the picture lists --> <!ELEMENT icone (#PCDATA)> <!-- Attributs largeur/hauteur, cadre - Width/Height, frame and border (cf CSS) --> <!ATTLIST icone iconw CDATA #IMPLIED iconh CDATA #IMPLIED iconfram CDATA #IMPLIED iconbord CDATA #IMPLIED> <!-- L'image / Image file used in the separate HTML page --> <!ELEMENT img (#PCDATA)> <!-- Attribut largeur/hauteur Width/Height --> <!ATTLIST img imgw CDATA #IMPLIED imgh CDATA #IMPLIED imgfram CDATA #IMPLIED imgbord CDATA #IMPLIED> <!-- Alt… : le titre et le texte de remplacement / Title and Default texts --> <!ELEMENT alticone (#PCDATA)> <!ELEMENT altimage (#PCDATA)> <!ELEMENT titicone (#PCDATA)> <!ELEMENT titimage (#PCDATA)> <!-- TEXTE avec attribut code langue (note optionnal lang attribute) --> <!-- Texte en debut de page / Text before --> <!ELEMENT texte (#PCDATA|link|u|i|b|small|big|image)*> <!ATTLIST texte lang CDATA #IMPLIED>> <!-- Texte en fin de page / Text after --> <!ELEMENT textf (#PCDATA|link|u|i|b|small|big|image)*> <!ATTLIST textf lang CDATA #IMPLIED> <!-- On peut inserer des liens dans un texte --> <!-- A text may include links (mail or url) --> <!ELEMENT link (#PCDATA)> <!ATTLIST link type (mail|url) "url" url CDATA #REQUIRED> <!-- Texte souligne / Underlined --> <!ELEMENT u (#PCDATA|i|b)*> <!-- Texte en italique / Italic --> <!ELEMENT i (#PCDATA|u|b)*> <!-- Texte en gras / bold --> <!ELEMENT b (#PCDATA|u|i)*> <!-- Texte reduit / Small --> <!ELEMENT small (#PCDATA|u|i|b)*> <!-- Texte grossi / Big --> <!ELEMENT big (#PCDATA|u|i|b)*> |
Support linguistique (localisation)
La DTD et la transformation xsl permettent de générer des pages en langues différentes à partir d’un même fichier XML.
Les éléments texte et textf disposent d’un attribut lang="[code]". Si cet attribut n’est pas renseigné, l’élément est sorti en tout état de cause. S’il est renseigné, l’élément sera sorti seulement s’il concorde avec le code langue (voir ci-dessous). Si le code langue n’est pas renseigné (par accident ou pour simplification), les éléments texte et textf sont tous sortis.
En ce qui concerne les textes constants (par ex : "Auteur"), le principe réside dans des "entités" grâce auxquelles certaines données peuvent être converties et transmises. Le fichier de paramétrage galerie_param.ent est intégré lors de la génération XSLT et définit le code langue dans l’entité &dg77codlang;). L’entité &dg77ficlang; contient le nom d’un fichier des entités correspondant aux zones constantes sorties par la transformation (par exemple : "date de création"). Ce fichier doit s’appeler "galerie_loc_" suivi par le code langue puis ".ent"
Jeu de fichiers de travail et exemples
Les données sont stockées dans le répertoire "distrib"
Fichiers de base :
- galerie.dtd (5,2 Ko) : description de la structure XML
- galerie.xsl (40,2 Ko) : feuille XSLT pour transformation XML-xHTML.
- galerie_param.ent (0,8K) : fichier des entités paramètres CSS et Linguistiques
- galerie_loc_fr.ent (0,8K) : textes fixes des pages HTML en version française
- Autres langues disponibles : anglais, espagnol, allemand, italien, néerlandais
- galerie.css (2,6 Ko) : feuille de style CSS appliquée aux fichiers HTML
- galerie_prt.css (2,6 Ko) : feuille de style destinée à l’impression
Outils et distribution :
- galerie.xml (3,5 Ko) : fichier XML de travail à copier, modifier et utiliser comme modèle.
- galerie.exe (83 Ko) : fichier pour MS Windows auto-extractible, contenant les éléments nécessaires.
- galerie.tar (87 Ko) : comme galerie.exe, en version archive.
Exemples :
- sample.xml (2,1 Ko) : fichier d’exemple minimal
- demo.xml (6,1 Ko) : fichier d'exemple un peu plus étoffé.
- demo.htm : résultat de la transformation de demo.xml
- http://www.dg77.net/galerie/index.html : voir une application réelle dans MA GALERIE
Exemples simplifiés
Ci-dessous un exemple simplifié : 2 images exposées directement dans la galerie (cf sample.xml) :
<?XML version="1.0" encoding="ISO-8859-1"?> <!--?xml:stylesheet version="1.0" type="text/XSL" href="galerie.xsl"?--> <!DOCTYPE galerie SYSTEM "galerie.dtd"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#" xmlns:s0="http://sophia.inria.fr/~enerbonn/rdfpiclang#" xmlns:s1="http://www.w3.org/2000/PhotoRDF/dc-1-0#" xmlns:s2="http://www.w3.org/2000/PhotoRDF/technical-1-0#"> <galeries xmlns="http://ns.dg77.net/XML/"> <galerie> <d:description> <titre>Titre général de la galerie</titre> <fichier>sample.htm</fichier> <texte>Texte initial, facultatif. Ci-dessus dans "fichier" nom (avec chemin éventuellement) du fichier HTML à sortir.</texte> </description> <image> <description> <titre>Titre de la première image</titre> <fichier>image01.htm</fichier> <texte>Commentaire de l'image, sorti au-dessus. Dans les éléments suivants icone et img, mettre le (chemin)/nom des fichiers images.</texte> </description> <icone>img01.jpg</icone> <img>img02.jpg</img> </image> <image> <description> <titre>2e image</titre> <fichier>image02.htm</fichier> <textf>Commentaire de l'image, sorti après</textf> </description> <icone>img03.jpg</icone> <img>img04.jpg</img> </image> </galerie> </galeries> </rdf:RDF> |
La première ligne "<?XML" a déjà été commentée plus haut
La spécification "<?XML stylesheet" permet normalement à un navigateur qui supporte XSLT de lire directement le fichier XML et d'afficher les informations après transformation XSL. Cf infra la section "Fichiers HTML sortis par XSLT". La ligne xsl:stylesheet est maintenue uniquement pour mémoire.
"<!DOCTYPE" fait référence à la Document Type Definition (fichier DTD). SYSTEM indique que le fichier se trouve localisé sur l'ordinateur. Cette ligne est facultative, si on la met, indiquer le chemin ("path") exact de galerie.dtd sur votre ordinateur.
Comme indiqué dans l'introduction, le fichier est englobé dans un balisage RDF. Le Resource Description Framework [http://www.w3.org/RDF/] ou "Cadre de Description de Ressource", est destiné d'abord à "informer sur les informations" qu'on trouve sur le Web. Le concept semble abstrait au premier abord mais il est fondamentalement simple : une "métadonnée" RDF permet de savoir que telle source concerne tel sujet et donne tel type d'information. Cette enveloppe RDF doit être conservée (faute de quoi il faudrait modifier la feuille XSLT) mais l'utilisation de RDF reste entièrement optionnelle.
Dans l'élément racine "galeries" un Espace de Nommage (namespace) propre au fichier XML est spécifié (attribut "xmlns") ; voir explications complémentaires dans la section sur XSLT.
Ci-dessous exemple enrichi, avec album contenant une planche de deux images (cf demo.xml) et une description de type RDFPIC [http://www.w3.org/TR/photo-rdf/] pour une des images :
<?XML version="1.0" encoding="ISO-8859-1"?> <!--?xml:stylesheet version="1.0" type="text/XSL" href="galerie.xsl"?--> <!DOCTYPE galerie SYSTEM "galerie.dtd"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#" xmlns:s0="http://sophia.inria.fr/~enerbonn/rdfpiclang#" xmlns:s1="http://www.w3.org/2000/PhotoRDF/dc-1-0#" xmlns:s2="http://www.w3.org/2000/PhotoRDF/technical-1-0#"> <galeries xmlns="http://ns.dg77.net/XML/"> <galerie> <description> <titre>Galerie de démonstration</titre> <fichier>demo.htm</fichier> <texte><link type="url" url="../index.html">Ceci est un lien pour aller ailleursen local</link><link type="url" url="http://www.w3.org"> Et ceci est un lien qui va sur Internet</link></texte> <texte>La galerie comporte un ou plusieurs albums, et/ou une ou plusieurs planches, et/ou une ou plusieurs images. <link type="mail" url="chmoltok@bigfoot.com">CONTACT</link> </texte> <textf><b>Texte en gras</b><i> Texte en italique</i> <u> Texte souligné </u><small> Petits caractères</small> <big> Gros caractères</big> </textf> <ret url="../index.html">RETOUR</ret> </description> <album> <description> <titre>Album de démonstration</titre> <fichier>album1.htm</fichier> <auteur>Dominique Guebey</auteur> <copyright>2003 Dominique Guebey</copyright> <motsclef>galerie,XML,XSLT,documentation,</motsclef> <texte>L'album peut comporter une ou plusieurs planches, et/ou des images.</texte> </description> <image> <description> <titre>image decorative</titre> <fichier/> </description> <icone iconw="33">img90.jpg</icone> <alticone>imagette decorative</alticone> </image> <planche> <description> <titre>Première planche</titre> <fichier>planche1.htm</fichier> <copyright>2003, Dominique Guebey</copyright> <texte>On donne ci-dessous la liste des images, si-possible illustrée de vignettes</texte> </description> <image> <description> <titre>Première image de la première planche</titre> <fichier>image01.htm</fichier> <motsclef>racewalking</motsclef> <copyright>2003, cf <link type="url" url="http://walk.bigfoot.net/marche/photo/usage.htm"> conditions d'utilisation</link> </copyright> </description> <icone iconw="100">img01.jpg</icone> <img imgw="500">img02.jpg</img> <alticone>Texte de remplacement imagette</alticone> <altimage>Texte alternatif de l'image</altimage> </image> <image> <description> <titre>2e image de la première planche</titre> <fichier>image02.htm</fichier> <texte> <u><b>Commentaire de l'image 2 de la planche 1</b> </u> </texte> <rdf:Description rdf:about="http://walk.bigfoot.net/marche/photo/stages.htm/st840004.jpg"> <s0:XMLlang>fr</s0:XMLlang> <s1:creator>Dominique Guebey</s1:creator> <s1:relation>Font Romeu</s1:relation> <s1:identifier>#3416</s1:identifier> <s1:description>Stage de marche hivernal, Denis Terraz, Martial Fesselier, Gerard Lelievre</s1:description> <s1:title>Col du Calvaire</s1:title> <s1:rights>http://walk.bigfoot.net/marche/photo/usage.htm</s1:rights> <s1:subject>Sport</s1:subject> <s1:format>image/jpeg</s1:format> <s1:date>1984-02-25</s1:date> <s2:camera>SLR 35mm Minolta X500</s2:camera> <s2:lens>135mm</s2:lens> <s2:film>Kodachrome 64</s2:film> </rdf:Description> </description> <ref>#3416</ref> <icone iconw="90">img03.jpg</icone> <img imgw="720">img04.jpg</img> <alticone>Texte alternatif de l'icone</alticone> <altimage>Texte alternatif de l'image</altimage> </image> </planche> </album> </galerie> </galeries> </rdf:RDF> |
Guide de démarrage
Implantation ------------ Les elements peuvent etre a differents emplacements : - Bases pour transformation : DTD, feuille xslt et fichiers d'entites Par exemple dans /usr/local/galerie on trouvera : - galerie.dtd - galerie.xsl - galerie_param.ent - galerie_loc_fr.ent, galerie_loc_en.ent, etc. - galerie_xalan.bat, script .sh… - Feuille de style et icones Par exemple dans /home/mon_repert/design : - galerie.css - galerie_prt.css - bulhome.png, bulstart.png etc. Remarque : icones et css peuvent etre dans des repertoires distincts. - La galerie elle-meme : par exemple dans /home/www/galerie Adaptations ----------- EMPLACEMENT DES CSS : dans l'exemple, ces elements sont dans le repertoire specifique /home/mon_repert/design. Editer galerie_param.ent aux lignes - <!ENTITY dg77css "galerie.css"> et - <!ENTITY dg77cssprt "galerie_prt.css"> Ajouter avant le nom de fichier ("galerie…") le CHEMIN RELATIF d'acces a partir de l'emplacement qui sera utilise comme racine lors de la generation. Dans le present exemple, il s'agit d'inserer "../../monrepert/design/" (Remarque sur "../../" : etant positionne dans /home/www/galerie, il faudra d'abord remonter de deux niveaux). EMPLACEMENT DES ICONES : dans l'exemple, ces elements sont dans un repertoire specifique (/home/mon_repert/design). Il faut editer galerie_param.ent : dans <!ENTITY dg77img "galerie.css"> mettre le CHEMIN RELATIF d'acces comme pour les CSS ci-dessus. Dans le present exemple, on doit mettre "../../monrepert/design/" (ne pas oublier le "/" final). LOCALISATION : par defaut, les textes constants sont en francais. Exemple d'adapation pour une langue "sw" non encore prevue : - editer galerie_param.ent : dans <!ENTITY dg77codlang "fr"> remplacer "fr" par "sw" - copier la ligne <!ENTITY % dg77ficlang SYSTEM "galerie_loc_fr.ent"> dans une nouvelle ligne et remplacer dans cette derniere "fr" par "sw" - choix du fichier langue : la ligne ENTITY dg77ficlang de la langue choisie doit se trouver sous "INCLUDE" ; il ne doit y en avoir qu'une a cet endroit. Les autres doivent se trouver apres "IGNORE" - copier galerie_loc_fr.ent (ou …_en.ent) dans un nouveau fichier nommé "galerie_loc_sw.ent" - editer galerie_loc_sw.ent en changeant les textes entre-guillemets *** MERCI DE COMMUNIQUER CE FICHIER A : Dominique Guebey http://www.dg77.net/email.php Creation du fichier XML ----------------------- Pour commencer, le fichier galerie.xml peut servir de modele ; galerie.dtd donne la structure exacte à respecter. Il existe des editeurs XML specialises qui controlent la validite des donnees saisies, mais n'importe-quel editeur doit convenir. Les noms de fichiers peuvent etre precedes de nom de sous-repertoires a l'interieur de la galerie ( par exemple : "souvenirs/athenes2004/acropole05.htm"), le generateur XSLT creera automatiquement l'arborescence. Generation des pages HTML ------------------------- Pour MS Windows, le .bat fourni peut etre utilise ou servir de modele ; le fichier .sh peut jouer le meme role sous Unix ou Gnu/Linux. Se positionner dans le repertoire racine de la "galerie" : cd /home/www/galerie La feuille XSLT recoit plusieurs parametres : - nomxml : nom du fichier xml en entree - dateheure : chaine de caractere mise a la suite de "&dg77gen;" (officiellement "genere le" mais on est libre de modifier le texte dans galerie_loc_[lang].ent) - processeur : la feuille de style prevoit Xalan et Saxon ; voir les indications complementaires pour nomfic ci-apres - nomfic : nom complet du fichier qu'on veut creer (le nom complet est celui indique dans le fichier et peut inclure un chemin, comme indique ci-dessus (cf "Creation du fichier XML"). Si nomfic n'est pas specifie, tous les fichiers seront crees. Si le processeur utilise n'est pas prevu dans la feuille XSLT (galerie.xsl), tout sera sorti en un seul bloc, avec une ligne de commentaires donnant le nom du fichier a sortie entre chaque bloc correspondant a une page html. Exemple sous windows : les .xsl .ent et .dtd etant dans ..\distrib cd galerie\demo ..\distrib\galerie_xalan demo.xml ven26nov2004-21:02 demo.htm Utilisation de l'antislash "\" ------------------------------ Dans les fichiers XML, les chemins sont indiques avec la barre oblique normale (ainsi que dans les fichiers .ENT). La barre oblique inversee (ou "antislash") n'est utilisee que dans un eventuel "batch" de generation (fichier .bat).
Fichiers HTML sorti par XSLT
Les fichiers générés sont en XHTML 1.1. Ceci ne doit pas être considéré comme de la coquetterie mais un souci normal de préserver l'évolution à long terme. De plus, s'agissant ni plus ni moins que de XML, il est possible de les exploîter avec des outils standards. Par exemple d'utiliser XSL-FO pour en tirer directement des fichiers PDF ou autres formats imprimables.
Le processus génère en tête de chaque page un lien de retour vers la page appelante. Exemple : si une page "album" présente une liste de planches ou d'images, chaque page "planche" ou "image" aura un lien sur lequel il suffira de cliquer pour revenir à l'album. Un élément ret a été ajouté pour mettre en tête de page un lien vers un URL externe à la "Galerie".
Des lignes de commentaires indiquent le nom des fichiers. Ceci est utile dans le cas où ils sont créés en un seul tenant. Chacun doit commencer par la ligne "DOCTYPE" suivie par la balise "<HTML>" ; la dernière ligne est la balise "</HTML>". Exemple :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://ns.dg77.net/XML/" xml:lang="fr"> <head> <meta http-equiv="Content-Type" content="application/xml+xhtml; charset=iso-8859-1" /> <title>2e image de la première planche</title> <meta name="keywords" content="galerie,XML,XSLT,documentation," /> <link media="screen" href="../distrib/galerie.css" type="text/css" rel="stylesheet" /> <link media="print" href="../distrib/galerie_prt.css" type="text/css" rel="stylesheet" /> <link href="../distrib/favicon.ico" rel="shortcut icon" /> </head> <body id="debut" class="image"> <div class="navg"> <a href="planche1.htm#image02.htm" title="Retour/back"> <img src="../distrib/bulstart.png" alt="[Retour/back]" height="22" /> </a> </div> <div class="navg"> <a href="image01.htm" title="Précédent"> <img src="../distrib/bulprev.png" alt="Précédent" height="22" /> </a> </div> <h3>2e image de la première planche</h3> <p> <span class="u"> <b>Commentaire de l'image 2 de la planche 1</b> </span> </p> <table class="tabcentr"> <tr> <td class="cadre"> <img src="img04.jpg" width="720" alt="img04.jpg" /> </td> </tr> </table> <p>#3416</p> <hr /> <div> <small> <div>Auteur : Guebey Dominique</div> <div>Copyright : 2003, Dominique Guebey</div> <div class="navg"> Créé le 29 avril 2003 - </div> <div class="navg"> Page générée le mar30nov2004-14:01 - par XSLT, voir : <a href="http://walk.bigfoot.net/galerie/demo/index.htm">dg77.net</a> <span class="prinx">[http://walk.bigfoot.net/galerie/demo/]</span> </div> </small> </div> </body> </html> |
Résultat :
2e image de la première plancheCommentaire de l'image 2 de la planche 1
#3416 Auteur : Guebey Dominique
Copyright : 2003, Dominique Guebey
|
Fichiers CSS et présentation
Tous les fichiers HTML créés font référence à une feuille de style dans leur partie "head" (cf lignes <link … type="text/css" … /> ci-dessus). Une feuille de style CSS (Cascading Style Sheet) permet de déterminer les attributs de présentation dans le fichier HTML. On notera la présence d'une deuxième CSS destinée à la sortie sur imprimante <link …media="print"… /> .
En ce qui concerne les pages img, l'image est entourée d'une marge blanche déterminée par CSS. Pour cela on utilise la classe prédéfinie "cadre" (voir les attributs iconfram/iconbord et imgfram/imgbord documentés dans la DTD ci-dessus). Le fonds de ces pages est d'un gris voulu proche du 18% des "chartes grises" Kodak, Tout ceci pour suivre peu ou prou les préconisations d'Ansel Adams pour l'exposition des tirages.
La présence de la CSS est impérative pour bénéficier de certains éléments de présentations (souligné, centrage) outre le style général. Le fichier CSS fourni peut être adapté aux goûts de chacun (couleur de fond, polices de caractères, marges…).
Le nom des CSS est paramètré dans le fichier primaire des entités (cf supra). Il est ainsi possible d'utiliser des CSS différentes suivant les cas. Voir la section "guide de démarrage".
Limitation actuelles/évolutions prévues
- Voir aussi le TODO de galerie.xsl
- Les textes sur fond gris sont assez peu lisibles.
- Augmenter quelque peu la taille par défaut des images.
- Localisation : mettre l'attribut LANG a l'element TITRE
- Avoir un README.TXT traduit du LISEZ_MOI.TXT
- Mettre à jour la version anglaise du présent document.
- Si pas de nom de fichier indiqué, gérer l'anomalie
- Gérer l'attribut "title" dans les liens
- Etudier une feuille XSL-FO pour générer un document imprimable.
- On n'est pas maître de l'ordre de sortie des données. Exemple : au niveau galerie, si une liste d'images coexiste avec une liste de planches et une liste d'albums, elles seront toujours présentées dans l'ordre albums-planches-images par le traîtement XSLT. Il faudra déplacer manuellement les lignes du fichier HTML pour qu'il en aille autrement.
- Inclusion d'images dans le texte : gérer le "déroulement" du texte autour (css "float"…)
- Passer à XML 1.1 (namespace : ibid.) ?
- RDF/Rdfpic : exploiter les donnés existantes dans rdf et rdfpic
- Un attribut "type" permettrait de traiter d'une façon spécifique des objets autres que des images.
- Utilisation d'un SCHEMA XML
Log / historique des modifications / évolutions
- 2003-05-04 : première version en ligne.
- 2003-06-08 : sorties en XHTML 1.1 au lieu de 1.0 strict.
- 2003-09-14 : attributs nouveaux (imgh/iconh), hauteur des images/icones ; largeur par défaut gérée en conséquence par la feuille XSLT.
- 2003-09-23 : éléments nouveaux (titimage, titicone), pour sortir l'attribut "title" de la balise img.
- 2003-09-23 : attributs nouveaux (iconfram, iconbord, imgfram, imgbord), contenant le nom de classes figurant dans la CSS ; donnent la possibilité d'avoir différents cadres autour des images.
- 2003-09-29 : attribut "alt" obligatoire en XHTML pour balise img ; si "altimage" ou "alticone" absent, la valeur de l'élément titre est utilisé par défaut.
- 2004-02-13 : en pied de page, lien de retour au sommet pour galerie, album et planche.
- 2004-02-15 : version complète de cette documentation en Anglais.
- 2004-02-17 : génération automatique des fichiers séparés : nom du fichier voulu passé en paramètre optionnel à la feuille XSLT. Utilisation d'un programme en REXX.
- 2004-02-28 : modification de la CSS, nouveaux encadrements des images, et méthode améliorée de centrage de l'image.
- 2004-02-29 : utilisation de RDF (Resource Description Framework) : désormais les fichiers XML et XSL supportent les balises RDF et des éléments de RDFPIC.
- 2004-03-14 : ajout d'une feuille de style CSS pour impression
- 2004-03-14 : pages index affichent lien vers fichier XML
- 2004-03-14 : "icone" : pas de balise img si pas de fichier mis en référence.
- 2004-03-15 : un URL (élément "link" peut être inclu dans l'élément "copyright"
- 2004-03-15 : paramètre supplémentaire (optionnel) transmissible : date-heure de génération
- 2004-03-17 : élément nouveau ret (facultatif) dans description pour créer un lien en tête de page
- 2004-04-01 : mise à disposition de feuilles XSLT spécifiques aux processeurs XALAN et SAXON, générant directement les fichiers séparés.
- 2004-11-10 : optimisation/simplification (auteur/copyright/keywords, template thead)
- 2004-11-12 : ajout dates creation/derniere modification dans la description
- 2004-11-14 : utilisation d'icones et favicon ; documentation installation amélioré.
- 2004-11-14 : fichier d'entites externes : parametrage feuilles de style, code langue (fr et en prévus), nom du processeur utilise
- 2004-11-25 : possibilité d'avoir des emplacements distincts pour les CSS (gestion d'URL relatifs).
- 2004-11-30 : les dates de création et dernière modification on le n. mois traduit.
- 2004-11-30 : liens entre images (précédent/suivant) ; liens verticaux pour galerie/album/planche ; fichiers localisés de, es, it, et ne.
- 2005-07-30 : index, lien vers xml deplace en bas
- 2005-07-30 : index, lien vers xml deplace en bas
- 2005-07-30 : index, insertion de 2 espaces apres l'icone
- 2005-10-03 : quelques corrections concernant les liens page index vers page image et vice-versa.
- 2006-03-25 : index, têtière, lien à droite vers première page image de la suite.
Documentation et ressources sur XML/XSLT
Voir : http://www.dg77.net/tekno/links.htm#XSL
Conditions d'utilisation
Les modules présentés ici et cette page de documentation peuvent être librement utilisés, modifiés et distribués, même contre paiement, à condition que la présente clause s'applique aux fichiers ainsi transférés, qu'ils soient modifiés ou non.