5.9.1. Utilisation de l'attribut class

L'utilisation d'un gabarit XSLT fondé sur les valeurs de l'attribut class permet d'appliquer une transformation à des branches entières de types d'élément au lieu d'un seul type d'élément.

À chaque fois que l'on veut vérifier un nom élément (une déclaration XPath qui contient une valeur de nom d'élément), il faudra à la place vérifier le contenu de l'attribut class de l'élément. Même si l'élément est inconnu du processeur, l'attribut class permettra à la transformation de savoir que l'élément appartient à une classe d'éléments connus, et qu'il pourra être traité en toute sécurité conformément aux règles de cette classe.

Assurez-vous d'inclure un blanc en tête et en queue dans la vérification de chaîne de l'attribut class. Vous pourriez sinon obtenir des réponses fausses (sans les blancs, "task/step" correspondrait à la fois à "task/step" et à "notatask/stepaway").

Lorsque vous créez une transformation qui vise plusieurs types, assurez-vous de donner aux règles plus spécifiques une priorité plus élevée afin d'éviter les conflits. Par exemple, lorsque vous combinez les règles de traitement existantes des thèmes avec les règles de traitement plus spécifiques des tâches, utilisez un fichier interpréteur (shell file) pour importer les deux ensembles de règles et une priorité d'importation pour s'assurer que les règles spécifiques des tâches n'entreront pas en conflit avec les règles génériques des thèmes.

Exemple — Déclaration match pour des éléments de liste

<xsl:template match="li">

devient :

<xsl:template match="*[contains(@class,' topic/li ')]">

Cette déclaration match fonctionnera sur tout élément <li> rencontré. Elle fonctionnera également sur les éléments <step> et <appstep>, même si elle ne sait pas ce qu'ils sont spécifiquement, parce que l'attribut class indique au gabarit ce qu'ils sont généralement.

Exemple — Déclaration match pour des éléments <step>

<xsl:template match="*[contains(@class,' task/step ')]">

Cette déclaration match ne fonctionnera pas sur les éléments <li> génériques, mais elle fonctionnera à la fois sur les éléments <step> et <appstep> ; même si elle ne sait pas ce qu'est un élément <appstep>, elle sait qu'il faut le traiter comme un élément <step>.