Langages de l Internet : XML XSL Taha Zerrouki Taha.zerrouki@gmail.com 1
Partie 4 XSL : Plan Syntaxe Règles XSL Incorporer des éléments HTML Mise en pratique 2
XSL Transformer ou mettre en forme les données (complémentaire de CSS) Peut refondre entièrement la structure de l arbre XML Réorganiser Cacher des parties Transformer les types Règles qui associent un sélecteur et une forme à générer 3
Insérer dans XML <?xml version= 1.0?> <?xml-stylesheet type= text/xsl href= transform.xsl?> 4
Fichier XSL Fichier XML avec l extension.xsl <?xml version="1.0" encoding="iso-8859-1"?> La définition de XSL (et de XHTML) <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0"> Ce qui va sortir de la transformation (ici du XHTML): <xsl:output method="html" doctype-public="-//w3//dtd XHTML 1.0 Transitional//EN" doctype-system=" http://www.w3.org/tr/xhtml1/dtd/xhtml1- transitional.dtd"/> 5
Fichier XSL Commence par <xsl:stylesheet> et finit par </xsl:stylesheet> Contient un certain nombre de <xsl:template> </xsl:template> Les <xsl:template> définissent la transformation opérée sur les éléments <xsl:template match= / > : sur la racine du document <xsl:template match= element > : sur l element <element> 6
Règles XSL <xsl:stylesheet> </xsl:stylesheet> Eléments (règles) <xsl:template match="critère"> </xsl:template> <xsl:value-of select="critère"/> <xsl:for-each select="critère"> </xsl:for-each> <xsl:sort select= critère /> <xsl:apply-templates /> <xsl:apply-templates select="critère" /> Élément racine Signification règle qui précise ce qui doit être produit en sortie pour tout élément vérifiant le critère ; si le critère est "/", cela concerne l'ensemble du document règle qui produit directement en sortie le contenu de l'élément spécifié par le critère règle qui itère sur tous les éléments satisfaisant le critère ; il faut préciser ce qui doit être produit pour chaque occurrence d'éléments sélectionnés trie les éléments pris en compte dans une itération xsl:for-each dit que toutes les règles portant sur des sous-éléments de l'élément courant doivent être appliquées règle disant qu'on n'applique que les règles qui portent sur les sous-éléments de l'élément courant précisés par le critère 7
Critères <xsl:template match= equipe > <xsl:for-each select= personne > toutes les <personne> de l <equipe> <xsl:for-each select= personne/nom > tous les <nom> des <personne> de l <equipe> <xsl:for-each select= */*/nom > tous les element <nom> quelque part en profondeur 2 <xsl:for-each select= *//age > tous les element <age> à n importe quelle profondeur <xsl:for-each select=../laboratoire > tous les <laboratoire> au même niveau que <equipe> 8
Critères. élément courant / élément racine * tous les éléments @* tous les attributs d'une balise @langue attribut langue 9
Critères <xsl:template match= equipe > <xsl:for-each select= personne[telephone] > chaque <personne> qui a un <telephone> <xsl:for-each select="personne[@sexe = femme ]"> chaque <personne> dont l attribut sexe est femme <xsl:for-each select= personne > <xsl:sort select= nom /> trie sur la valeur de l élément <nom> dans <personne> <xsl:sort select= @grade /> trie sur la valeur de l attribut grade de <personne> 10
Génération/transformation Si output est réglé sur html, on écrit directement les balises dans le xsl: <table> <xsl:for-each select= personne > <tr><td><xsl:value-of select= nom /></td> <td><xsl:value-of select= prenom /></td> <td><xsl:value-of select= @sexe /></td> <td><xsl:value-of select= addresse/telephone /></td></tr> </xsl:for-each> </table> 11
Génération/transfomation Pour générer des éléments XML <xsl:element name= personne > </xsl:element> Des attributs à l élément courant <xsl:attribute name= sexe > bidule </xsl:attribute> ATTENTION EN HTML: Pas de: <a name= #<xsl:value-of select= nom > ></a> Mais: <a><xsl:attribute name= name > #<xsl:value-of select= nom /></xsl:attribute></a> 12
Règles relatives <xsl:stylesheet > <xsl:template match= / > <xsl:for-each select="article/ > <xsl:apply-templates select="texte"/> </xsl:for-each> </xsl:template> <xsl:template match="texte"> <xsl:apply-templates /> </xsl:template> <xsl:template match="paragraphe"> <p><xsl:value-of /></p> </xsl:template> </xsl:stylesheet> 13
Exemple xsl:template inventaire07.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="inventaire07.xsl"?> <!-- Nom de fichier : inventaire07.xml --> <!DOCTYPE INVENTAIRE[ <!ELEMENT INVENTAIRE (LIVRE*)> <!ELEMENT LIVRE (TITRE, AUTEUR+, EDITEUR, ANNEE, PAGES, PRIX)> <!ELEMENT TITRE (#PCDATA)> <!ELEMENT AUTEUR (#PCDATA)> <!ELEMENT EDITEUR (#PCDATA)> <!ELEMENT ANNEE (#PCDATA)> <!ELEMENT PAGES (#PCDATA)> <!ELEMENT PRIX (#PCDATA)> ]> <INVENTAIRE> <LIVRE> <TITRE>Introduction au XML</TITRE> <AUTEUR>Samir Souidi</AUTEUR> <EDITEUR>Osman Eyrolles Multimedia</EDITEUR> <ANNEE>2000</ANNEE> <PAGES>364</PAGES> <PRIX>euro 175.00</PRIX> </LIVRE> </INVENTAIRE> inventaire07.xsl <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/wd-xsl" version="1.0"> <!-- Nom de fichier Inventaire07.xsl --> <xsl:template match="/"> <H2>Description de livres</h2> <SPAN style="font-style:italic">titre : </SPAN> <xsl:value-of select="inventaire/livre/titre"/> <BR/> <SPAN style="font-style:italic">auteur : </SPAN> <xsl:value-of select="inventaire/livre/auteur"/> <BR/> <SPAN style="font-style:italic">editeur : </SPAN> <xsl:value-of select="inventaire/livre/editeur"/><br/> <SPAN style="font-style:italic">annee : </SPAN> <xsl:value-of select="inventaire/livre/annee"/><br/> <SPAN style="font-style:italic">nombre de pages : </SPAN> <xsl:value-of select="inventaire/livre/pages"/> <BR/> <SPAN style="font-style:italic">prix : </SPAN> <xsl:value-of select="inventaire/livre/prix"/> </xsl:template> </xsl:stylesheet> 14
Règles XSL <xsl:if test="expression-booléenne"> </xsl:if> test="expression- <xsl:choose> <xsl:when booléenne"> </xsl:when> <xsl:when booléenne"> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose> test="expression- <xsl:element name="nomelement"> </xsl:element> <xsl:attribute name="nomattribut"> </xsl:attribute> règle disant ce que l'on fait si l'expression booléenne est évaluée à vrai if généralisé ; permet de tester plusieurs conditions et d'avoir une alternative lorsque tous les tests échouent. règle qui produit en sortie un élément du nom indiqué. On peut y imbriquer des éléments xsl:attribute. règle qui produit en sortie un attribut qui sera inséré dans l'élément de sortie courant. 15
Contact Taha Zerrouki http://tahadz.com http://infobouirauniv.wordpress.com Taha.zerrouki@gmail.com 16