TP XML 3
Transformations XSLT côté client
On dispose d'un document XML et de sa DTD qui utilise une entité.
Le document XML décrit les animaux d'un Zoo. L'objectif est de faire une feuille de style qui transforme le document source XML en une version publiée en (X)HTML. Tout se passe côté client (dans un prochain tépé, tout se passera côté serveur).
Pour commencer avec XSLT
- Créez une feuille de style minimaliste qui affiche le corps HTML avec un titre grâce à une règle qui réagit sur la racine du source XML. Modifiez le source XML pour lui assigner cette feuille de style. Chargez le document dans le navigateur. Youpi, ça marche.
- Ajoutez des règles à votre feuille de style pour qu'elle transforme le contenu en (X)HTML en utilisant ces ressources.
![Note](../../../img/note.gif) |
Un navigateur peut afficher le résultat HTML d'une transformation XSLT. Le problème est que le code HTML produit n'est pas visible (il est gardé jalousement par le navigateur qui se contente de le consommer pour formatter l'affichage).
Une solution alternative :
est d'utiliser un processeur XSLT utilisable en ligne de commande, qui permet de sauver dans un fichier le résultat HTML produit. Par exemple, Xalan peut s'utiliser comme ceci :
java org.apache.xalan.xslt.Process -IN input.xml -XSL stylesheet.xsl -OUT output.html
est de compiler cette classe Java, qui s'utilise comme cela :
java TestXSLT stylesheet.xsl input.xml
et qui affiche le résultat sur la sortie standard.
|
Introduction d'espaces de noms
On veut séparer ce qui est documentaire (les éléments img, b, info, danger, commentaire, etc) de ce qui est structure de données (les autres éléments).
- Déclarez et utilisez dans le document XML source 2 espaces de nommage pour identifier ces 2 familles. Vous n'utiliserez pas de préfixe pour les éléments de structures de données, vous en utiliserez un pour les éléments documentaires. Utilisez un URN et un URL pour les 2 URIs d'espace de nom. Que fait le parseur XML lorsqu'il rencontre votre URL d'espace de nom ?
- Il en parle à son parfrère.
- Rien.
- Il essaye de lire la DTD à l'adresse indiquée.
- Il est obligé de trouver la DTD à l'adresse indiquée, sinon ça plante.
- Il vous averti qu'il s'agit d'un site de fesses; vous êtes content de pouvoir compléter votre collection de photos.
- Rechargez le document dans le navigateur. Que constatez-vous ? Pourquoi ?
- Corrigez votre feuille de style pour qu'elle fonctionne à nouveau.
- Que remarquez-vous des patterns qui correspondent aux attributs ?
![Warning](../../../img/warning.gif) |
Support XSLT côté client
Il est possible que votre navigateur supporte mal les imports ou toute autre fonctionnalité XSLT. C'est un des inconvénients des transformations côté client.
Si vous arrivez dans les limites de ce que sait faire votre navigateur, utilisez-en un autre, ou utilisez Xalan comme indiqué ci-dessus.
|
Imports de règles
On veut que les mois des dates apparaissent en clair, c'est à dire sous la forme "15 mars 2004" au lieu de "2004-03-15". On utilise cette librairie qui fait ça très bien.
- Est-ce que cette feuille de style peut-être distribuée sur la planète sans risque ? Pourquoi ?
- Faites les adaptations nécessaires à votre feuille de style pour que les dates apparaissent en clair.
Génération de tables des matières, tris
- Créez une table des matières des animaux du zoo, dont chaque item pointe vers les fiches descriptives complètes. Vous utiliserez des règles avec un mode nommé.
- Triez votre table des matières par ordre alphabétique sur le nom des animaux.
- Faites une autre règle pour trier votre table des matières par date de naissance croissante.
- Déclarez un paramètre à votre feuille de style pour pouvoir choisir le type de tri.
- Comment peut-on passer un paramètre à la feuille de style côté client ?