XSLT Le langage de transformation de documents XML Introduction à XSLT p.1/30
Sommaire Une introduction à XSLT, destinée à comprendre les mécanismes du langage. Règles XSLT Désignation de fragments XML Appels de règles Application : XML - HTML et XML - WML Passage de paramètres Introduction à XSLT p.2/30
XSLT, où, quand, comment Document XML Document XML Prog. XSLT Serveur web Prog. XSLT Serveur web Client Web HTML WML Client Web Client WAP Prog. XSLT HTML HTML Prog. XSLT Introduction à XSLT p.3/30
Structure de base : les règles Règle = template : élément de base pour produire le résultat une règle s applique dans le contexte d un nœud de l arbre l application de la règle produit un fragment du résultat. Programme XSLT = ensemble de règles pour construire un résultat Introduction à XSLT p.4/30
Un exemple Produire une phrase quand on rencontre un nœud FILM : xsl:template match="film" Ceci est le texte produit par application de cette règle. /xsl:template Motif de sélection : match="film" Corps de la règle = contenu de l élément Introduction à XSLT p.5/30
Extraction de données On insére dans le résultat des fragments du document traité Exemple : recherche du titre pour le nœud FILM : xsl:value-of select="titre"/ Plus généralement : on donne un chemin d accès à un nœud à partir du nœud courant Introduction à XSLT p.6/30
Illustration Contexte d application de la règle XSLT select="titre" FILM TITRE AUTEUR ANNEE GENRE PAYS RESUME Vertigo Hitchcock 1958 Drame USA Scotty... Introduction à XSLT p.7/30
Une règle complète <xsl:template match="film"> <html> <head> <title>film: <xsl:value-of select="titre"/> </title> </head> <body> Le genre du film, c est <b><xsl:value-of select="genre"/></b> </body> </html> </xsl:template> Introduction à XSLT p.8/30
Le résultat Appliquée à Vertigo.xml, on obtient : <html> <head> <title>film: Vertigo </title> </head> <body> Le genre du film, c est <b>suspense</b> </body> </html> Introduction à XSLT p.9/30
Produire un document HTML html head body title "Film: " <xsl:value-of select="titre"> p h1 i i <xsl:value-of <xsl:value-of select="titre"> select="genre"> <xsl:value-of select="pays"> Introduction à XSLT p.10/30
Chemins complexes Dans l exemple précédent, on accédait aux fils d un nœud. En fait on peut : Accéder à tous les descendants Accéder aux parents, aux frères, aux neveux... Accéder aux attributs Effectuer des boucles Le langage d expression de chemins : XPath. Introduction à XSLT p.11/30
Salles et séances chemin "FILM/TITRE" Contexte d application de la règle FILM SALLE chemin "@NO" NO=2 PLACES=320 chemin SEANCES/SEANCE chemin "REMARQUE" TITRE AUTEUR ANNEE GENRE PAYS RESUME REMARQUE SEANCES Alien Scott Science-Fiction 1979 USA Près d un vaisseau spatial... Réservation conseillée boucl for-eac SEANCE SEANCE SEANCE 15:00 18:00 21:00 Introduction à XSLT p.12/30
Chemins complexes Descendants : le titre du film est désigné par select="film/titre" ; Attributs : le numéro de la salle est désigné par select="@no" ; Boucles : avec xsl:for-each sur l ensemble des séances désignées par select="seances/seance" ; L élément contexte : désigné par le symbole., comme dans select=".". Introduction à XSLT p.13/30
Application Quelques exemples de chemins : <xsl:template match="salle"> <h2>salle No <xsl:value-of select="@no"/></h2> Film: <xsl:value-of select="film/titre"/> de <xsl:value-of select="film/auteur"/> <ol> <xsl:for-each select="seances/seance"> <li><xsl:value-of select="."/></li> </xsl:for-each> </ol> </xsl:template> Introduction à XSLT p.14/30
Le résultat Appliqué à Alien.xml : <h2>salle No 1 </h2> Film: Alien de Ridley Scott <ol> <li> 15:00</li> <li> 18:00</li> <li> 21:00</li> </ol> NB : c est un fragment HTML, à intégrer dans un document complet. Introduction à XSLT p.15/30
Appels de règles En général on produit un résultat en combinant plusieurs règles : La règle initiale s applique à la racine du document traité ( / ) On produit alors le cadre du document HTML On appelle d autres règles pour compléter la création du résultat Introduction à XSLT p.16/30
Application au cinéma CINEMA NOM ADRESSE METRO SALLE NO=1 PLACES=320 SALLE NO=2 PLACES=120 Epée de bois 100, rue Mouffetard Censier TITRE REMARQUE SEANCES TITRE SEANCES Alien Réservation conseillée Vertigo SEANCE SEANCE SEANCE SEANCE 15:00 18:00 21:00 22:00 Introduction à XSLT p.17/30
Première règle «Cadre» HTML, puis appel de la règle CINEMA <xsl:template match="/"> <html> <head><title>programme de <xsl:value-of select="cinema/nom"/ </title> </head> <body bgcolor="white"> <xsl:apply-templates select="cinema"/> </body> </html> </xsl:template> Introduction à XSLT p.18/30
Règle CINEMA Exploitation de l élément CINEMA, puis appel à la règle SALLE <xsl:template match="cinema"> <h1><i> <xsl:value-of select="nom"/> </i></h1><hr/> <xsl:value-of select="adresse"/>, <i>métro: </i> <xsl:value-of select="metro"/> <hr/> <xsl:apply-templates select="salle"/> </xsl:template> Introduction à XSLT p.19/30
Vue d ensemble Démo html head body title h1 hr adresse p p Règle "/" i h2 h3 h2 h3 Epée de bois Salle No 1 Film: Alien Salle No 2 Film : Vertig Règle "CINEMA" Règle "SALLE" Introduction à XSLT p.20/30
La même chose, en WML On génère les cartes du site <xsl:template match="/"> <wml> <!-- Carte d accueil --> <xsl:apply-templates select="cinema"/> <!-- Cartes pour les salles et séances -- <xsl:apply-templates select="cinema/salle <!-- création des cartes pour les films - <xsl:apply-templates select=".//film"/> </wml> </xsl:template> Introduction à XSLT p.21/30
Arbre XML du site wml card id=index card id=s1 id=s2 id=alien id=vertig card card card p p p p p a href=s1 a href=alien href=vertigo a a href=s2 Introduction à XSLT p.22/30
Règle CINEMA <xsl:template match="cinema"> <card id="index" title="programme"> <p align="center"> <xsl:value-of select="nom"/> </p> <xsl:for-each select="salle"> <p> <a href="#s{@no}"> Salle <xsl:value-of select="@no"/ </a> <xsl:value-of select="film/titre </p> </xsl:for-each> </card> </xsl:template> Introduction à XSLT p.23/30
Résultat <card id="index" title="programme"> <p align="center"> Epée de bois </p> <p> <a href="#s1"> Salle 1: </a> Alien </p> <p> <a href="#s2"> Salle 2: </a> Vertigo </p> </card> Introduction à XSLT p.24/30
Règle SALLE <xsl:template match="salle"> <card id="s{@no}"> <p>séances salle <xsl:value-of select="@no"/></p> <p> <a href="#{film/titre}"> Film : <xsl:value-of select="film/titre"/> </a> </p> <xsl:apply-templates select="seances"/> </card> </xsl:template> Introduction à XSLT p.25/30
Résultat <card id="s2"> <p> Séances salle 2 </p> <p> <a href="#vertigo"> Film : Vertigo</a> </p> <p> Séance 22:00 </p> </card> Introduction à XSLT p.26/30
XSLT avec paramètres (Démo) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0/ "http://www.w3.org/tr/rec-html40/stri <html> <head> <title>formulaire de Recherche</title> </head> <body bgcolor="white"> <h1>formulaire de Recherche</h1> <form method= get action= Moteur.xml n Film: <INPUT TYPE= TEXT NAME= Séance: <INPUT TYPE= TEXT NAME= Ville: <INPUT TYPE= TEXT NAME= <input type= submit name= chercher v </form> </body> </html> Introduction à XSLT p.27/30
Le document XML <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE MOTEUR [ <!ENTITY EpeeDeBois SYSTEM "http://epee-de-bois.fr/edb.xml" <!ENTITY CineMarseille SYSTEM "http://cine-marseille.fr/cm.xml ]> <MOTEUR> <CINEMA> &EpeeDeBois; </CINEMA> <CINEMA> &CineMarseille; </CINEMA> </MOTEUR> Introduction à XSLT p.28/30
Traitement des paramètres... <xsl:param name="titre"/> <xsl:param name="seance"/> <xsl:param name="ville"/> <xsl:template match="moteur"> <xsl:for-each select="cinema"> <xsl:if test=" ($titre = or TITRE = $titre) and ($seance = or HEURE >= $seance and ($ville = or VILLE = $ville)"> <xsl:apply-templates select="." /><p/> </xsl:if> </xsl:for-each> </xsl:template> Introduction à XSLT p.29/30
Conclusion sur XSLT Un langage totalement adapté au traitement de documents XML Parcours d un document, vu comme un arbre Déclenchement de règles sur certains nœuds Association de plusieurs programmes à un même document Introduction à XSLT p.30/30