Copyright © 2012-2023 Yves MARCOUX; dernière modification de cette page: 2023-02-07.

INU3011 Documents structurés

Exercices XSLT de base

Yves MARCOUXEBSIUniversité de Montréal


Notes : Les exemples des deux séries de 240-Ex-XSLT-pas-a-pas sont un prérequis. Les réponses aux exercices sont données à titre d’exemples et ne sont jamais qu’une des solutions possibles.


Table des matières

À faire en premier : préparer votre navigateur

Instructions pour chaque navigateur

Vérification du bon fonctionnement des feuilles XSLT locales

Méthode de travail

Complétez la feuille XSLT

Complétez la feuille XSLT


À faire en premier : préparer votre navigateur

N.B. : Si vous travaillez aux Laboratoires de l’EBSI (en virtuel ou présentiel) avec le navigateur Firefox, vous n’avez rien à faire pour cette section.

Ces exercices prévoient l’exécution par un navigateur Web d’une feuille de style XSLT locale sur un fichier XML. Pour des raisons de sécurité, les navigateurs requièrent pour cela une configuration particulière, qui varie selon le navigateur. Faute de procéder à cette configuration, les navigateurs affichent habituellement une fenêtre entièrement vide (ou blanche) si on essaie d’ouvrir un fichier XML lié à une feuille XSLT locale.

Instructions pour chaque navigateur

Firefox

  1. Après avoir lancé Firefox, tapez about:config dans la barre d’adresse. Confirmez toute mise en garde qui pourrait s’afficher.
  2. Repérez l’option nommée security.fileuri.strict_origin_policy.
  3. Si la valeur de l’option est false, vous n’avez rien à faire. Si la valeur est true, continuez avec les étapes ci-dessous.
  4. Ouvrez le menu contextuel de l’option (clic droit sur l’option).
  5. Sélectionnez Inverser; cela réglera la valeur de l’option à false.

Cette option est persistante d’un lancement à l’autre du navigateur. Normalement, vous n’aurez donc pas à refaire l’opération.

Safari

  1. Après avoir lancé Safari, faites Préférences → Avancé, cocher Afficher les outils de développement dans le menu.
  2. Faites Développement → Désactiver les restrictions de fichiers locaux.

Cette option est persistante d’un lancement à l’autre du navigateur. Normalement, vous n’aurez donc pas à refaire l’opération.

Chrome et Edge

N.B. : Si vous êtes sur Mac ou Linux, il est déconseillé d’utiliser Chrome ou Edge pour ces exercices. Il est recommandé d’utiliser plutôt Safari sur Mac ou Firefox sur Linux. Les instructions ci-dessous ne s’appliquent qu’à Windows.

Chrome et Edge doivent être démarrés avec un raccourci spécial, qui active une option les autorisant à appliquer une feuille XSLT locale à un fichier XML.

  1. Enregistrez d’abord ce fichier compressé à l’endroit de votre choix sur votre ordinateur. Assurez-vous qu’il ne soit pas « bloqué » par Windows (comment vérifier ?), puis décompressez-le; cela créera un dossier raccourcis-speciaux contenant les trois raccourcis suivants :

  2. Pour Edge seulement :

    1. Démarrez le navigateur (Edge).
    2. Cliquez sur les trois petits points complètement à droite de la barre d’adresse, ou faites Alt+F.
    3. Choisissez Paramètres.
    4. Choisissez Système et niveau de performance.
    5. Désactivez l’option Démarrage rapide si elle ne l’est pas déjà.

    Ce réglage est persistant d’un lancement à l’autre de Edge. Normalement, vous n’aurez donc pas à refaire l’opération.

  3. Fermez toutes les fenêtres du navigateur qui seraient déjà ouvertes, puis relancez-le en double-cliquant sur le raccourci spécial approprié. Laissez-le ouvert jusqu’à ce que vous ayez terminé votre session de travail.

Tant que vous ne fermez pas la dernière fenêtre du navigateur, il sera possible d’ouvrir un fichier XML lié à une feuille XSLT locale. Si vous fermez de nouveau toutes les fenêtres du navigateur, et que vous redémarrez le navigateur de la façon habituelle (et non avec le raccourci spécial), le navigateur reprendra son comportement normal, et affichera donc une fenêtre entièrement vide lorsqu’on essaie d’ouvrir un fichier XML lié à une feuille XSLT locale. Pour à nouveau pouvoir travailler avec une feuille XSLT locale, redémarrez simplement le navigateur avec le raccourci spécial.

Vérification du bon fonctionnement des feuilles XSLT locales

Pour vérifier que votre navigateur est configuré correctement pour l’application de feuilles XSLT locales, récupérez ce fichier compressé (assurez-vous qu’il n’est pas « bloqué » par Windows; comment vérifier ?) et décompressez-le à l’emplacement de votre choix sur votre poste de travail. Si le navigateur à vérifier est Edge ou Chrome, fermez toutes les fenêtres du navigateur qui seraient déjà ouvertes, puis lancez-le en double-cliquant sur le raccourci ad hoc récupéré ou créé précédemment et laissez le ouvert.

Ouvrez ensuite dans votre navigateur le fichier XML test-XSLT-local\XML\test-doc.xml tout juste décompressé. Si la configuration est correcte, vous obtiendrez le rendu suivant :

test-XSLT-local.png

Si ça ne marche pas

Avec Chrome et Edge, essayez de créer vous-même un raccourci spécial de cette façon :

  1. Repérez quelque part sur votre poste (par exemple, sur le bureau) un raccourci fonctionnel vers le navigateur qui vous intéresse.
  2. Copiez ce raccourci dans le dossier modStyl\travail.
  3. Clic droit sur le raccourci fraîchement copié, puis choisissez Propriétés et allez à l’onglet Raccourci.
  4. Dans la zone de saisie Cible, après le chemin d’accès au programme, ajoutez ceci :

     --allow-file-access-from-files

    Il doit y avoir une espace avant les deux tirets --. La cible au complet ressemblera à ceci :

    "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files

  5. Cliquez OK.

Un double-clic sur ce raccourci (après avoir fermé toutes les fenêtres du navigateur) lancera le navigateur avec l’option spéciale l’autorisant à appliquer une feuille XSLT à un fichier local activée.

Pour Edge : Assurez-vous d’avoir bien fait l’étape 2 de la section 1.1.3 ci-dessus. Refaites-la s’il y a un doute.


Méthode de travail

Chacun de ces exercices fait intervenir un document XML bien-formé (donné au début de chaque section) et une feuille de style XSLT partielle (aussi donnée au début de chaque section), qu’il s’agit de compléter de façon à obtenir un certain extrant HTML (dont l’affichage souhaité en navigateur est donné dans la question). Le plus simple est de placer tous les fichiers en jeu dans le même dossier sur votre poste de travail.

Voici la méthode recommandée pour pouvoir contrôler facilement l’allure de l’extrant produit par une feuille XSLT que vous êtes en train de compléter :

  1. Au début d’une section, créez le document XML bien-formé (par copier-coller à partir du présent protocole) dans l’éditeur de votre choix (oXygen, Notepad++, etc.) et sauvegardez-le en UTF-8.
  2. Vous pouvez fermer la fenêtre d’éditeur du document si vous voulez, car dans le cadre d’une section, le document ne change pas; c’est dans la feuille de style – et non dans le document XML – que vous ferez de fréquentes modifications.
  3. Créez la feuille de style partielle (par copier-coller à partir du présent protocole) dans oXygen et sauvegardez-la sous le nom feuille.xsl. Laissez oXygen et l’onglet de la feuille de style ouverts.
  4. Ouvrez le document XML bien-formé (créé en A) dans votre navigateur adéquatement configuré.
  5. Retournez à oXygen pour commencer à compléter la feuille de style.

Après cette mise en place, chaque fois que vous voudrez contrôler l’extrant, vous n’avez qu’à sauvegarder la feuille XSLT dans oXygen, puis passer à la fenêtre du navigateur et rafraîchir l’affichage (F5 ou bouton approprié de la barre d’outils).


Complétez la feuille XSLT

Avec le document XML bien-formé suivant :

<?xml-stylesheet type="text/xsl" href="feuille.xsl" ?>
<notice type="article">
 <accès><général/></accès>
 <lisibilité><restreint/></lisibilité>
 <auteurs>
  <auteur>Julia Royer</auteur>
  <auteur>Claude Rouleau</auteur>
 </auteurs>
<titre>Le printemps</titre>
</notice>

et à partir de la feuille de style XSLT suivante, que vous nommerez « feuille.xsl » et placerez dans le même dossier que le document XML :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="notice/titre" /></title>
</head>
<body>
<h1><xsl:value-of select="notice/titre" /></h1>
<hr/>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

complétez la feuille de style pour obtenir successivement chacun des résultats suivants (pensez à utiliser les fonctions XPath, si nécessaire, notamment count(...) et last()) :

  1. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>Dans cette notice, le premier auteur est
    <xsl:value-of select="notice//auteur[1]" />.
    </p>
  2. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>Dans cette notice, le dernier auteur est
    <xsl:value-of select="notice//auteur[last()]" />.
    </p>
  3. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>Dans cette notice, le dernier auteur est
    <xsl:value-of select="notice//auteur[last()]" />,
    alors que le premier est
    <xsl:value-of select="notice//auteur[1]" />.
    </p>
  4. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>Dans cette notice, le nombre d'auteurs est
    <xsl:value-of select="count(notice//auteur)" />.
    </p>
  5. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>Cela va vous sembler redondant, mais
    le titre de cette notice est
    « <xsl:value-of select="notice/titre" /> ».
    </p>

Complétez la feuille XSLT

Changeons maintenant de document et travaillons avec celui-ci :

<?xml-stylesheet type="text/xsl" href="feuille.xsl" ?>
<notice type="bibtex">
 <accès><général/></accès>
 <lisibilité><restreint/></lisibilité>
 <auteurs>
  <auteur type="pers-phys">Julia Royer</auteur>
  <auteur type="pers-mora">Corporation General Motors</auteur>
 </auteurs>
 <cote valeur="123.456" />
 <titre>Le printemps</titre>
 <résumé>
  <par>Les auteurs parlent de leur saison préférée.</par>
  <par>Les <em degré="1">12 premiers</em> chapitres parlent de botanique.</par>
 </résumé>
</notice>

Toujours avec la même feuille XSLT comme point de départ :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="notice/titre" /></title>
</head>
<body>
<h1><xsl:value-of select="notice/titre" /></h1>
<hr/>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

modifiez-la pour obtenir successivement les résultats suivants :

  1. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>Dans cette notice, le premier auteur est
    <xsl:value-of select="notice//auteur[1]" />
    et son type est
    "<xsl:value-of select="notice//auteur[1]/@type" />".</p>
  2. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>Dans cette notice, le dernier auteur est
    <xsl:value-of select="notice//auteur[last()]" />
    et son type est
    "<xsl:value-of select="notice//auteur[last()]/@type" />".</p>
  3. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>Dans cette notice, le seul bout de texte en emphase est
    "<xsl:value-of select="notice//em" />".</p>
  4. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>La cote de l'ouvrage décrit dans cette notice est
    <xsl:value-of select="notice/cote/@valeur" />.</p>
  5. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>Dans cette notice, le résumé comporte
    <xsl:value-of select="count(notice/résumé/*)" />
    paragraphes.</p>
  6. Exemple cible
    - Réponse
    à ajouter juste après <hr/>:

    <p>Cette notice, comme document XML, comporte
    <xsl:value-of select="count(//@*)" />
    spécifications d'attribut.</p>