Développement d`Applications Web - Feuilles de style XML: CSS et
Transcription
Développement d`Applications Web - Feuilles de style XML: CSS et
Développement d’Applications Web Feuilles de style XML: CSS et XSLT Mehdi BENZINE [email protected] Département d’Informatique Faculté des Sciences Université FERHAT ABBAS Sétif I 2015/2016 . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 1 / 33 . Introduction Les feuilles de style permettent d’appliquer des règles de mise en forme à un document XML (couleurs, polices de caractères, marges ...). Plusieurs types de feuilles de style peuvent être appliquées à un document XML. . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 2 / 33 . CSS: Cascading StyleSheet Les feuilles de style CSS offrent un système de règles simples, pour associer des effets de style à un élément XML. Il est possible d’associer à un fichier XML une feuille de style CSS en ajoutant au prologue du fichier l’instruction de traitement: <?xml-stylesheet type="text/css" href="url fichier css"?> Les feuilles de style CSS utilisées pour mettre en forme les documents XML sont les mêmes que celles que nous avons utilisé avec HTML. . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 3 / 33 . Mise en forme avec CSS Pour mettre en forme un document XML avec une feuille de style CSS, il suffit de définir une règle pour chaque élément que l’ont souhaite afficher. Seuls les nœuds textuels peuvent être affichés. La présence ou non d’attributs et leurs valeurs peuvent permettre de définir des règles conditionnelles. . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 4 / 33 . Exemple <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/css" href="style.css"?> <carnet> <contact type="perso"> <nom>Karkar</nom> <prenom>Farid</prenom> <telephone fixe="true">036 84 47 12</telephone> <telephone fixe="true">036 84 55 15</telephone> ... </contact> <contact type="pro"> <nom>Boudoukha</nom> <prenom>Said</prenom> ... <adresse> <numero>8</numero> <rue>rue des frères Habeche</rue> <ville>Sétif</ville> </adresse> </contact> . . . . . . </carnet> . . . . . . . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 5 / 33 . Exemple Les éléments n’ayant pas de contenu textuel et ne devant pas être affichés carnet{ background-color: yellow; } contact{ } Les éléments ayant un contenu textuel peuvent doivent être affichés comme bloc, en ligne ... grâce à l’attribut display nom{ display: block; color: red; text-decoration: underline; } . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 6 / 33 . Exemple La valeur d’un attribut de l’élément peut permettre en mettre en place une mise en forme conditionnelle telephone[fixe="true"]{ display: inline; color: green; } telephone[fixe="false"]{ display: inline; color: blue; } contact[type="pro"] > nom{ display: inline; background-color: green; color: white; } M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 7 / 33 . Limites des CSS Les CSS présentent un certain nombre de limites parmi lesquelles: Impossibilité d’afficher plusieurs fois le même élément Impossibilité d’afficher les éléments dans un ordre différent que celui où ils apparaissent dans le document Impossibilité d’afficher les valeurs des attributs ... . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 8 / 33 . XSLT: eXtensible Stylesheet Language Transformations La recommandation XSL (eXtensible Stylesheet Language) regroupe deux parties: XSLT (XSL Transformations): Langage de transformation permettant de transformer un document XML en un autre document XML ou XHTML (de structure et/ou de contenu différents du document initial). XSL-FO (XSL Formatting Objects): Langage de description de mise en forme. Pouvant être utilisé conjointement avec XSLT (utile pour générer des documents pdf, rtf...). XSL-FO et XSLT sont eux mêmes des dialectes XML. Seul XSLT sera étudié dans ce cours. . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 9 / 33 . Document XSLT Une feuille de style XSLT est un document XML. XSLT est un langage permettant d’exprimer des séquences d’instructions (langage de programmation) XSLT est un langage Turing complet L’élément racine de ce document doit déclarer l’espace de nommage XSLT comme ceci: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> Le document XML auquel s’applique la feuille de style doit y faire référence dans le prologue grâce à l’instruction de traitement: <?xml-stylesheet type="application/xslt+xml" href="url fichier xslt"?> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 10 / 33 . Principe de XSLT Une feuille de style XSLT est un ensemble de règles de transformation (templates). Un template est caractérisé par: une expression XPath (pattern) permettant de sélectionner les nœuds du document auxquels s’applique le template un contenu (content) destiné à remplacer l’élément d’origine dans le document XML résultat . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 11 / 33 . template Le document XML est lu de manière séquentielle et chaque élément reconnu par un template est traité par ce template. Le résultat du traitement est inséré dans le document XML résultat. Un template est exprimé de la manière suivante: <xsl:template match="xpath"> <!--Instructions de traitement--> </xsl:template> L’attribut match permet de désigner l’ensemble des nœuds auxquels s’applique le template. . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 12 / 33 . Exemple <carnet> <contact type="perso"> <nom>Karkar</nom> <prenom>Farid</prenom> <telephone fixe="true">036 84 47 12</telephone> <telephone fixe="true">036 84 55 15</telephone> <telephone fixe="true"></telephone> </contact> <contact type="pro"> <nom>Boudoukha</nom> <prenom>Said</prenom> <prenom>Ali</prenom> <telephone fixe="true">036 93 54 10</telephone> <telephone fixe="false">06 61 85 20 41</telephone> <adresse> <numero>8</numero> <rue>rue des frères Habeche</rue> <ville>Sétif</ville> </adresse> </contact> . . . . . . . . </carnet> . . . . . . . . . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 13 / 33 . Exemple Exemple: <xsl:template match="contact"> Contact </xsl:template> Résultat: Contact Contact . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 14 / 33 . value-of La règle <xsl:value-of select="xpath"/> permet de renvoyer dans le résultat la valeur des nœuds retournée par la requête de l’attribut select. Pour chaque nœud contexte sur lequel est appelée la requête XPath, seul le premier nœud retourné par la requête est affiché. Pour insérer le contenu d’un élément ou d’un attribut comme valeur d’un attribut, il suffit de le placer entre {}. . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 15 / 33 . Exemple Exemple: <xsl:template match="contact"> <a href="#{nom}"> <xsl:value-of select="nom"/> </a> </xsl:template> Résultat: <a href="#Karkar">Karkar</a> <a href="#Boudoukha">Boudoukha</a> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 16 / 33 . Exemple Exemple: <xsl:template match="contact"> <xsl:value-of select="telephone"/> </xsl:template> Résultat: 036 84 47 12 036 93 54 10 <!-- Le premier numéro de téléphone de chaque contact est affiché --> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 17 / 33 . XML bien formé Le résultat d’une transformation XSLT étant un document XML, celui-ci doit être bien formé. Chaque template XSLT doit produire des éléments XML bien formés, car le texte contenu dans le template est lui même considéré comme étant une partie du document XSLT.Il doit donc être bien formé. . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 18 / 33 . Exemple Exemple: <xsl:template match="carnet"> <html> <head></head> <body> Carnet d'adresses </body> </html> </xsl:template> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 19 / 33 . apply-templates L’instruction apply-templates <xsl:apply-templates select="xpath"> </xsl:apply-templates> recherche et applique le template (défini ailleurs dans la feuille de style) permettant de transformer chacun des nœuds retournés par la requête XPath contenu dans l’attribut select. Si l’attribut select n’est pas spécifié, tous les nœuds enfants du nœud courant seront traités. . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 20 / 33 . Exemple Exemple: <xsl:template match="carnet"> <html> <head></head> <body> Carnet d'adresses:<br/> <xsl:apply-templates select="contact" /> </body> </html> </xsl:template> <xsl:template match="contact"> <xsl:value-of select="nom"/><br/> </xsl:template> Résultat: <html> <head></head> <body> carnet d'adresses:<br/> Karkar<br/> Boudoukha<br/> </body> </html> M. BENZINE . DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 21 / 33 . if L’instruction if permet d’appliquer une transformation uniquement si une condition est vérifiée. <xsl:if test="prédicat">...</xsl:if> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 22 / 33 . Exemple Exemple: <xsl:template match="telephone"> <li> <xsl:if test="@fixe=true()"> Ligne fixe: </xsl:if> <xsl:if test="@fixe=false()"> Portable: </xsl:if> <xsl:value-of select="." /> </li> </xsl:template> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 23 / 33 . choose L’instruction choose permet d’appliquer une transformation correspondant à la branche when qui est vérifiée. Quand aucune condition when n’est vérifiée, la branche otherwise est exécutée. <xsl:choose> <xsl:when select="predicat1">...</xsl:when> <xsl:when select="predicat2">...</xsl:when> ... <xsl:otherwise>...</xsl:when> </xsl:choose> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 24 / 33 . Exemple Exemple: <xsl:template match="nom"> <xsl:choose> <xsl:when test="../@type='perso'"> <h2 style="background-color: blue; width: 20%"> <xsl:value-of select="." /> </h2> </xsl:when> <xsl:when test="../@type='pro'"> <h2 style="background-color: green; width: 20%"> <xsl:value-of select="." /> </h2> </xsl:when> </xsl:choose> </xsl:template> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 25 / 33 . for-each L’instruction for-each permet d’itérer sur un ensemble de nœuds pour effectuer un transformation sur chacun de ces nœuds. <xsl:for-each select="xpath"> ... </xsl:for-each> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 26 / 33 . Exemple Exemple: <xsl:template match="contact"> <xsl:for-each select="telephone"> Telephone: <xsl:value-of select="." /> </xsl:for-each> </xsl:template> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 27 / 33 . text L’instruction text permet d’insérer du texte dans document en sortie (pouvant être utilisé pour insérer des espaces, des sauts de ligne...). <xsl:text>...</xsl:text> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 28 / 33 . sort L’instruction sort permet de trier un ensemble de nœuds sur un critère donné. <xsl:sort select="critère xpath" order="ascending ou descending" /> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 29 / 33 . Exemple Exemple: <xsl:apply-templates select="contact"> //Le template est applique sur les contacts //tries par noms croissants <xsl:sort select="nom" order="ascending" /> </xsl:apply-templates> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 30 / 33 . template et apply-templates: attribut mode Il est possible d’associer plusieurs templates à un même type de nœuds. L’attribut mode permet de distinguer ces différents templates. . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 31 / 33 . Exemple Exemple: <xsl:apply-templates select="contact" mode="resume"> <xsl:sort select="nom" order="ascending" /> </xsl:apply-templates> <xsl:apply-templates select="contact" mode="details"> <xsl:sort select="nom" order="ascending" /> </xsl:apply-templates> ... <xsl:template match="contact" mode="resume"> ... </xsl:texmplate> <xsl:template match="contact" mode="details"> ... </xsl:texmplate> . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 32 / 33 . Quelques moteurs XSLT Parmi les moteurs de transformation XSLT disponibles sur le marché: Xalan Saxon libxslt MSXML Mozilla ... . M. BENZINE DAW:Feuilles de style XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015/2016 . . . . . . . 33 / 33 .