Vous devez activer Javascript pour accéder à ce site
 

Semaine

RECHERCHE

Travail 3

Consignes

Faites les exercices et répondez aux questions en utilisant Chrome comme moteur XSLT et comme navigateur. En effectuant les exercices, n'utilisez que des fonctions disponibles dans Chrome.

Une fois votre travail terminé, transmettez à votre personne tutrice, un document (Word 97/2000/XP, ODF, PDF, RTF ou en format texte) en fichier attaché. Il s'agit d'un travail personnel et vous ne devez pas partager vos solutions. Cette activité notée compte pour 15% de la note globale.

Vous devez transmettre votre travail en utilisant l'outil de dépôt de l'Université.

Bon travail!

Exercice 1

Étant donné le document XML suivant, rédigez le contenu du document CSS « test.css », de telle sorte que les mots « Rouge » s'affichent en rouge, les mots « Noir » s'affichent en noir, les mots « majuscule » s'affichent en majuscule et ainsi de suite. Votre document CSS doit contenir au plus 5 instructions CSS de la forme « quelque chose {autre chose} ».

Indice : Vous pouvez utiliser « color:red », « color:olive », « color:black », « color:blue », et ainsi de suite pour fixer la couleur du texte.

<?xml version="1.0" encoding="ISO-8859-1" ?>
 <?xml-stylesheet type="text/css" href="test.css"?>
 <a>
 <b>Rouge</b>
 <c><a>Olive</a>
 <b>Bleu</b>
 <a><a>Noir</a> 
 Olive 
 <b>Bleu</b>
 <a>Rouge</a>
 <a>Noir</a>
 </a></c>
 <b><a>Rouge</a>
 <b>Noir</b></b>
<d>majuscule</d>
 </a>

Vous pouvez tester votre solution en ligne:

Document CSS:


Résultat :

Exercice 2

Supposons que toutes les notes des étudiants, dans différents cours, se trouvent dans le document XML suivant :

<?xml version="1.0" encoding="ISO-8859-1" ?>
 <?xml-stylesheet href="class.xsl" type="text/xsl" ?>
 <universite>
 <etudiant><nom>Réjean Tremblay</nom>
 <cours sigle="INF8430" note="89" />
 <cours sigle="INF1030" note="69" />
 <cours sigle="INF1230" note="75" /></etudiant>
 <etudiant><nom>Martin Lambert</nom>
 <cours sigle="INF8430" note="75" />
 <cours sigle="INF1030" note="72" />
 <cours sigle="INF1230" note="73" /></etudiant>
 <etudiant><nom>Luc Alain</nom>
 <cours sigle="INF9430" note="39" />
 <cours sigle="INF1030" note="89" />
 <cours sigle="INF1230" note="79" /></etudiant>
 <etudiant><nom>Olive Saint-Amant</nom>
 <cours sigle="INF8430" note="91" />
  <cours sigle="INF1230" note="99" /></etudiant>
 </universite>

À partir de ce document XML, fournissez le document XSLT « class.xsl » qui calcule les moyennes des étudiants, d'après les éléments « cours » associés aux éléments « étudiant », et qui trie les étudiants par ordre alphabétique de leur nom de famille. Votre document XSLT doit fonctionner même si on change le nom des étudiants, l'ordre des éléments et le nom des cours. En conséquence, le nom des étudiants ou le nom des cours ne peuvent apparaître dans votre document XSLT. En outre, vous ne devez pas utiliser les crochets « [ ] » dans votre solution.

Vous pouvez tester votre solution en ligne à l'aide du laboratoire XSLT.

Indices

  1. Le tableau ci-dessous devrait vous permettre de vérifier votre réponse.

    Étudiant Moyenne
    Luc Alain 69.0
    Martin Lambert 73.3
    Olive Saint-Amant 95.0
    Réjean Tremblay 77.7
  2. Vous pouvez trier les étudiants selon leur nom de famille, en remplaçant « <xsl:apply-templates select="etudiant" /> » par :

    <xsl:apply-templates select="etudiant" >
    <xsl:sort select="substring-after(nom,' ')" order="ascending"/>
    </xsl:apply-templates>
    
  3. Vous pouvez formater les nombres à virgule flottante comme dans le tableau, en utilisant des appels de fonction XSLT tels que « format-number(10.1324, '##.0') ».

Exercice 3

Utilisez le même document XML qu'à l'exercice précédent. Cette fois-ci, comptez le nombre d'étudiants dans chaque cours et calculez la moyenne par cours. Encore une fois, les noms des cours ou des étudiants ne doivent pas apparaître dans votre document XSLT.

Le tableau qui suit présente le résultat.

Sigle Nombre d'étudiants Moyenne du cours
INF8430 3 85.0
INF1030 3 76.7
INF1230 4 81.5
INF9430 1 39.0

Bien que cet exercice soit très similaire au précédent et que la solution soit de même longueur, vous le trouverez probablement plus difficile.

Note. Si vous aviez le droit d'utiliser XSLT 2.0, la nouvelle instruction « xsl:for-each-group » rendrait ce problème plus facile. Mais rappelez-vous que vous devez vous limiter à XSLT 1.0.

Exercice 4

Supposons que vous ayiez des documents contenant exclusivement une déclaration XML, des éléments et des attributs. Il n'y a pas d'espace de noms. Vous souhaitez filtrer les documents XML de telle manière que seuls les éléments dont le nom contient la lettre a sont inclus. Naturellement, les éléments, peu importe leur nom, qui ne sont pas contenus dans un élément dont le nom contient la lettre a doivent être omis. Le document XML devra contenir une instruction xml-stylesheet, mais elle ne doit pas être reproduite dans le document sortant.

Si on prend cet exemple:

<?xml-stylesheet href="monfichier.xsl" type="text/xsl" ?>
<a>
<ab x="x"><b>Test</b><a>z</a></ab>
<z x="x"><a>z</a></z>
</a>

On souhaite que le document sortant soit celui-ci:

<a>
<ab x="x"><a>z</a></ab>
</a>

Vous devez proposer deux documents XSLT permettant de réaliser ce filtrage. Le premier document ne devra pas contenir d'élément « xsl:element », alors que le second ne contiendra pas d'élément « xsl:copy ».

Comme précédemment, vous pouvez vérifier votre solution en ligne.

Exercice 5

Considérez le fichier XML de la question 2 comprenant les notes des étudiants. Écrivez une requête XQuery qui calcule la moyenne des notes de chaque cours et la présente sous cette forme :

<maliste>
   <cours sigle="INF8430">85</cours>
   <cours sigle="INF1030">76.66666666666667</cours>
   <cours sigle="INF1230">81.5</cours>
   <cours sigle="INF9430">39</cours>
</maliste>

Vous pouvez utiliser la fonction avg qui calcule la moyenne.


© Daniel Lemire, 2014. Tous droits réservés.