• Aucun résultat trouvé

[PDF] Utilisation des feuilles XSL dans les pages Web | Cours informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Utilisation des feuilles XSL dans les pages Web | Cours informatique"

Copied!
34
0
0

Texte intégral

(1)

Module BD et Sites Web

(2)

Plan

– Instructions XSLT (suite) – Chemins complexes

– Exécution des règles – Passage de paramètres – Priorités

(3)

Copie de noeuds

• Copier des nœuds du document source vers le document résultat :

<xsl:copy> copie un seul nœud, sans ses descendants

<xsl:copy-of> copie en profondeur, c-à-d copie le nœud et ses descendants, y compris les attributs

(4)

Branchement conditionnel

• Instruction <xsl:if >

– Possède un attribut test dont la valeur est une expression Xpath. L’expression est évaluée et renvoie un booléen. Le contenu de l’élément <xsl:if> est instancié si l’expression est évaluée à true.

• Instruction <xsl:choose>

– S’utilise avec les éléments <xsl:when> et <xsl:otherwise>

(5)

Exemple

<xsl:stylesheet version’1.0’

xmlns:xsl=‘http://www.W3.org/1999/XSL/Transform’> <xsl:output method=‘xml’ encoding=‘ISO-8859-1’/>

<xsl:template match=‘FILMS’>

<xsl:apply-templates select=‘FILM’/> </xsl:template>

<xsl:template match=‘FILM’>

<xsl:if test=‘ANNEE &lt; 1970’> <xsl:copy-of select=‘.’/> </xsl:if>

</xsl:template> </xsl:stylesheet>

(6)

Exemple

<xsl:template match=‘FILM’>

<xsl:choose>

<xsl:when test=‘ANNEE &lt; 1970’>

‘<xsl:value-of select=‘TITRE’/>’ est ancien

</xsl:when>

<xsl:when test=‘ANNEE &gt; 1970’>

‘<xsl:value-of select=‘TITRE’/>’ est récent

</xsl:when>

<xsl:otherwise>

de quand date ‘<xsl:value-of select=‘TITRE’/>’?

</xsl:otherwise> </xsl:choose>

(7)

Boucle

• Instruction <xsl:for-each>

• S’utilise avec l’attribut select

• L’itération s’effectue sur l’ensemble de nœuds constitué par l’expression Xpath de l’attribut

select. Le contenu de l’élément xsl:for-each

est instancié successivement pour chaque nœud de l’ensemble.

(8)

Création de nœuds (élément et attribut)

• XSLT permet de construire des nœuds dans le document résultat:

• <xsl:attribute name=‘xx’> permet

d’ajouter un attribut de nom ‘xx’ à un élément. Le contenu de l’élément xsl:attribute définit la

valeur de l’attribut (c’est un corps de règle qui doit envoyer un noeud de type Text.)

• <xsl:element name=‘yy’> permet d’insérer

(9)

Création de nœuds

• <xsl:comment> permet de créer des

commentaires

• <xsl:processing-instruction> crée des

instructions de traitement

• <xsl:text> crée un nœud de type text

(10)

Chemins complexes

Jusqu’à présent, on accédait aux fils d’un nœud. On peut aussi

accéder à tous les descendants

accéder aux parents, aux frères, aux neveux, … accéder aux attributs

effectuer des boucles

(11)

Exemple : Document XML

1 <?xml version=‘1.0’ encoding=‘ISO-8959-1’?>

2 <?xml-stylesheet href=‘Salle.xsl’type=‘text/xsl’?> 3 <?cocoon-process type=‘xslt’?>

4 <SALLE NO=‘1’ PLACES=‘320’> 5 <FILM> 6 <TITRE>Alien</TITRE> 7 <AUTEUR>Ridley Scott</AUTEUR> 8 <ANNEE>1979</ANNEE> 9 <GENRE>Science-Fiction</GENRE> 10 <PAYS>Etats-Unis</PAYS>

11 <RESUME>près d’un vaisseau spatial… </RESUME> 12 </FILM> 13 <REMARQUE>réservation conseillée</REMARQUE> 14 <SEANCES> 15 <SEANCE>15:00</SEANCE> 16 <SEANCE>18:00</SEANCE> 17 <SEANCE>21:00</SEANCE> 18 </SEANCES> 19 </SALLE>

(12)

Exemple: traduction de Salle

1 <xsl:template match=‘SALLE’>

2 <h2>Salle No

3 <xsl:value-of select=‘@NO’/></h2>

4 Film: <xsl:value-of select=‘FILM/TITRE’/>

5 de <xsl:value-of select=‘FILM/AUTEUR’/>

6 <ol> <xsl:for-each select=‘SEANCES/SEANCE’>

7 <li><xsl:value-of select=‘.’/></li> 8 </xsl:for-each>

9 </ol>

(13)

Le résultat

Appliqué au fichier Salle.xml :

1 <h2>Salle No1 </h2> 2 Film: Alien 3 De Ridley Scott 4 <ol> 5 <li>15:00</li> 6 <li>18:00</li> 7 <li>21:00</li> 8 </ol>

(14)

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’

(15)

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

(16)

Exemple

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>

(17)

Règle CINEMA

Exploitation de l’élément CINEMA, puis appel à la règle SALLE

1 <xsl:template match=‘CINEMA’> 2 <h1><i> 3 <xsl:value-of select=‘NOM’/> 4 </i></h1><hr/> 5 <xsl:value-of select=‘ADRESSE’/> 6 <i>Métro: </i> 7 <xsl:value-of select=‘METRO’/> 8 <hr/> 9 <xsl:apply-templates select=‘SALLE’/> 10 </xsl:template>

(18)

Arbre XML à transformer

Salle Film Seances Adresse Metro Cinema Nom

(19)

Vue d’ensemble

xsl:template match=‘/’ html body head title xsl:value-of xsl:apply-templates xsl:template match=‘CINEMA’ h1 i hr xsl:value-of xsl:apply-templates xsl:value-of i xsl:value-of ‘Métro:’ hr

(20)

Exécution des règles

• La première règle, appliquée à la racine du document XML, produit un « squelette » du document HTML (balises html,

head, body), puis lance l’exécution de la règle CINEMA

(qui s’applique aux éléments CINEMA).

• La deuxième règle (CINEMA) produit les informations globales sur le cinéma (nom, adresse, métro), puis lance l’exécution de la règle SALLE

• La règle SALLE s’applique aux éléments SALLE du

(21)

Sélection d’une règle

• Que faire quand plusieurs règles sont candidates pour un même noeud ?

• il existe des priorités implicites qui permettent au processeur de choisir

• on peut aussi donner explicitement une priorité • si le choix est impossible : le processeur s’arrête.

(22)

Règles par défaut

• Quand aucune règle n’est sélectionnée, XSLT applique des règles par défaut :

– La 1ère s’applique à la racine et à tous les éléments. Elle déclenche un appel de règle pour tous les fils du nœud courant (apply-templates sans attribut select équivaut à la sélection de tous les fils du nœud courant) – La 2ème s’applique aux nœuds de texte et aux attributs. Elle insère le

contenu textuel de ces nœuds dans le document résultat.

– La 3ème s’applique aux commentaires et aux instructions, et elle ne fait

rien.

Un programme minimal (sans règle), produira le contenu textuel du document auquel il s’applique.

(23)

Priorité implicite

Intuition : plus c’est « spécifique », plus c’est prioritaire On utilise l’attribut priority.

Priorité 0 : les patterns constitués d’une seule étape XPath, avec un nom

d’élément ou d’attribut et sans prédicat

Priorité -0.5 les filtres autres qu’un nom d’élément ou d’attribut ont

une priorité égale à -0,5 ( node() , * )

(24)

Mode

• Permet de guider le processeur dans le choix d’une règle à appliquer.

• En l’absence d’un attribut mode, la règle est

concernée par tout les apply-templates (qui

n’utilisent pas alors leur attribut mode). Sinon, le

mode de la règle et le mode de apply-templates

(25)

Algorithme de sélection d’une règle

• Pour un nœud sélectionné par apply-templates, toutes les règles ayant un attribut match sont potentiellement concernées.

– On restreint cette liste aux règles qui ont le même mode que apply-templates (s’il y en a)

– On teste le pattern de l’attribut match pour déterminer si le nœud satisfait la règle

– S’il y a plusieurs règles, on garde celles qui ont la plus grande préséance d’importation (ordre d’importation)

(26)

Exemple

1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <FILM> 3 <TITRE>Vertigo</TITRE> 4 <ANNEE>1958</ANNEE><GENRE>Drame</GENRE> 5 <MES>Alfred Hitchcock</MES>

6 <RESUME>Scottie Ferguson, ancien inspecteur de 7 police, est sujet au vertige depuis qu’il a vu 8 </RESUME> 9 </FILM> 10 <FILM> 11 <TITRE>Alien</TITRE> 12 <ANNEE>1979</ANNEE><GENRE>Science-fiction</GENRE> 13 <MES>Ridley Scott</MES>

(27)

Programme XSLT

Une règle pour <RESUME > qui ne fait rien...

1 <xsl:template match="/"> 2 <xsl:apply-templates/> 3 </xsl:template> 4 5 <xsl:template match="RESUME"/> 6

7 <xsl:template match="@ * |node()" priority="-1"> 8 <xsl:copy>

9 <xsl:apply-templates select="@ * |node()"/> 10 </xsl:copy>

11 </xsl:template>

... moins prioritaire que les autres.

(28)

Résultat

Résultat : on obtient tout le document, sauf les nœuds RESUME.

1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <FILM> 3 <TITRE>Vertigo</TITRE> 4 <ANNEE>1958</ANNEE><GENRE>Drame</GENRE> 5 <MES>Alfred Hitchcock</MES> 6 </FILM> 10 <FILM> 11 <TITRE>Alien</TITRE> 12 <ANNEE>1979</ANNEE><GENRE>Science-fiction</GENRE> 13 <MES>Ridley Scott</MES> 14 </FILM>

(29)

29

Paramètres

L’élément xsl:param permet de passer des paramètres aux règles. 1. Indiquer (dans la règle) le nom du paramètre et sa valeur par défaut

<xsl:param name=nom select=expression/> Name : nom du paramètre

Select (optionnel) : expression XPath qui donne la valeur par défaut (convertie en chaîne de caractères)

<xsl:template name="message">

<xsl:param name="texte" select="string(salut)" /> <xsl:value-of select= "$texte" />

</xsl:template>

Si l’attribut select est absent, la valeur par défaut est le contenu de l’élément

xsl:param.

(30)

Passage de paramètres

Passer des paramètres à une règle :

<xsl:with-param name= "texte" select="string(coucou)"/>

Cet élément suit un call-template ou un apply-templates

<xsl:template match=‘/’>

<xsl:call-template name="message">

<xsl:with-param name="texte" select="string(coucou)" /> </xsl:call-template>

(31)

Instructions classiques

<xsl:apply-templates/>

– La liste des nœuds à traiter est constituée des nœuds fils du nœud contexte.

– Appliquer les règles.

<xsl:apply-templates select="p"/>

– La liste des nœuds à traiter est constituée des nœuds atteints par le chemin p depuis le nœud contexte.

– Appliquer les règles.

<xsl:value-of select="p"/>

– Recopier dans le flot de sortie la valeur-chaîne de chaque nœud atteint par le chemin p depuis le nœud contexte.

<xsl:copy-of select="p"/>

– Recopier dans le flot de sortie le fragment du document à transformer dont la racine est le nœud atteint par le chemin p depuis le nœud

contexte.

<xsl:text> t </xsl:text>

(32)

Conclusion

XSLT est un langage 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

(33)

Bibliographie

• B. Amann et P. Rigaux : Comprendre XSLT, O’Reilly, 2002

(34)

Traitement des paramètres

<xsl:param name=‘titre’/> <xsl:param name=‘séance’/> <xsl:param name=‘ville’/> <xsl:template match="MOTEUR"> <xsl:for-each select="CINEMA"> <xsl:if test="

CINEMA//TITRE = $titre) and

CINEMA//HEURE &gt;= $seance) and CINEMA/VILLE = $ville)">

<xsl:apply-templates select="." /><p/> </xsl:if>

Références

Documents relatifs

si l’on fait passer, dans les deux conducteurs de cuivre et de fer, la charge qui faisait fondre également les deux fils d’épreuve, le fil BC qui reçoit son

A partir des enquêtes nationales SUMER 2003 et 2010, nous examinons l’influence d’une instance représentative du personnel en charge de la santé-sécurité, le Comité

enfants exposés aux AD et les non-exposés à ces médicaments durant la fenêtre d’exposition d’intérêt en restreignant l’analyse aux enfants nés avant l’année

Pour le juge de Nantes « l’organisation d’une messe sur la voie publique afin de permettre un rassemblement collectif interdit par cet article 47 [du décret du 29

Le concept de prise en charge médicale pendant la grossesse chez les femmes ayant une maladie chronique pré-existante n’a pas, à notre connaissance, été étudié dans la

De l’étude de l’insertion du clergé séculier dans les dynamiques d’une ville médiévale jusqu’à l’analyse de la description d’image effectuée par un notaire

L’épaisseur des parois des vases domestiques enregistre une diminution constante de la base vers la lèvre, passant d’une moyenne de 1.12 cm pour les tessons de bases à 0.83 cm

Les arcs latéraux sont percés chacun d’une baie en plein- cintre, lesquelles datent du XIX e siècle, comme le prouvent leur désaxement vers l’ouest au sein de l’arc