5.9.7. Modularisation en XSLT

Le support des feuilles de style en XSLT par les spécialisations DITA peut se manifester en utilisant les mêmes principes que pour les définitions DTD ou les schémas, aboutissant à des feuilles de style faciles à tenir qui appuieront une spécialisation suivante avec un minimum d'effort.

Spécification de la définition de module

La forme de filtrage d'un gabarit XSLT compatible avec les spécialisations est la suivante :

<xsl:template match="*[contains(@class,' topic/section ')]">
  <div>
    <xsl:apply-templates/>
  </div>
</xsl:template>

La déclaration de filtre XSLT qui associe le style à l'élément n'emploie pas une correspondance littérale avec le nom de l'élément. En effet, en fonction de la valeur par défaut de l'élément, par exemple class="- topic/section reference/refsyn ", cette règle s'appliquera sur la valeur " topic/section " (notez les espaces délimiteurs obligatoires dans la chaîne de filtrage) et réalisera les actions de filtrage associées (template actions), indépendamment du nom réel de l'élément.

Le motif XPath de cet exemple indique effectivement de « sélectionner tout élément dont l'attribut class contient la sous-chaîne délimitée par des espaces " topic/section " ».

Règles d'assemblage des feuilles de style XSLT

Le filtrage XSLT est la base du traitement compatible avec les spécialisations de DITA. De fait, la feuille de style XSLT de base d'un thème DITA devrait gérer de façon minimale toute spécialisation, quelle que soit la profondeur de filtrage dans les générations depuis le thème archétype.

Pour gérer une définition DTD ou un schéma DITA nouvellement spécialisés qui auront été rendus compatibles avec une spécialisation avec des valeurs d'attributs class uniques, créez un module qui contient seulement les gabarits nécessaires pour les nouveaux éléments uniques dans la spécialisation, de façon similaire aux fichiers modules (.mod) qui déclarent les éléments uniques dans la spécialisation. Le nom de ce module devrait être le même que le nom racine du module de spécialisation. Dans le cas de la définition DTD de référence de DITA, les déclarations d'élément se trouvent dans le fichier reference.mod et les règles deltas correspondantes pour XSLT dans le fichier reference.xsl.

Créez ensuite une feuille de style XSLT de surclassement ("override") qui commence par l'instruction xsl:import, nommant le fichier XSLT utilisé par la définition DTD parente de cette spécialisation. Cette importation recueille la gestion de tous les éléments qui sont communs avec la définition DTD parente. Ajoutez ensuite une autre instruction xsl:import, nommant le module delta XSLT créé précédemment. En outre, on peut ajouter des importations pour tous les gabarits spécifiques des domaines à appliquer avec cet interpréteur (shell). Puis copiez les gabarits XSLT de toute gestion définie antérieurement à associer de façon unique aux nouveaux noms d'élément, et renommez au besoin les chaînes de filtrage avec les nouvelles valeurs spécialisées de chaque nouvel élément. Ces gabarits XSLT ajoutés sont les deltas de la nouvelle feuille de style, un peu comme les définitions DTD construites sur des définitions DTD précédentes ajoutent des définitions d'élément deltas. Pour la gestion XSLT, il faut seulement définir des gabarits si l'on a besoin d'un nouveau comportement ou si l'on a besoin de modifier le traitement du comportement d'un élément ancêtre.

Comme ce processus réutilise une part importante des comportements précédents, le temps passé à gérer les changements deltas est minimal.

Pour utiliser une feuille de style XSLT compatible avec une spécialisation avec un thème DITA spécialisé, associez-la simplement au thème soit en utilisant l'instruction de traitement de lien de feuille de style du W3C, soit en suivant les règles de configuration de vos outils de traitement (habituellement un utilitaire de traitement XSLT tel que saxon ou xsltproc).