Je vais éssayer de faire un effort. Ce n'est pas évident au début c'est vrai.
D'abord, il faut savoir tout moteur qui fait procès en conformité avec w3c xslt est écrit avec un ensemble de templates (3 ou 4 selon) dits defauts qui assure que si il n'y a pas un template qui matche explicitement noeuds et attributs, les templates défauts s'interviennent et donnent une chance de faire avancer les matches même récursivement chacun d'noeuds dans le sens technique de Modèle de Données de DOM de xml.
[1] Pour les noeuds dit de texte et les attributs, le template défaut est comme ça.
1 2 3
| <xsl:template match="text()|@*">
<xsl:value-of select="." />
</xsl:template> |
[2] Pour les élément et la racine documentaire, il est
1 2 3
| <xsl:template match="*|/">
<xsl:apply-templates />
</xsl:template> |
et il assure que les matches vont faire avancer récursivement. Le cas sans l'attribut select serait interprété comme étant select="node()" qui est, d'ailleurs, explicitement dit select="*|text()|processing-instruction()|comment()". Attention : l'attribut n'est pas considéré comme un noeud d'enfant de l'élément en contexte dans le Modèle de Données d'après DOM.
[3] Pour les processing-instruction() et comment(), il ne fait rien.
<xsl:template match="processing-instruction()|comment()" />
Ceci étant dit et j'ai fait dire très explicitement parce que ce n'est pas très facile à comprendre et c'est bien même souvent mal compris dans le détail.
Dans le cas où vous écrivez un seul template et rien d'autres
1 2 3 4 5
| <xsl:template match="foo">
<h1>
<xsl:apply-template select="bar">
</h1>
</xsl:template> |
L'élément foo va être matcher par les templates défauts et puis bar de suite. Or, l'élément bar n'a pas eu un template explicite pour lui. Par conséquent, les templates vont prendre la place et en deuxième étape va matcher le noeud de texte qui donne la sortie et puis le processus s'arrête.
Dans le cas où vous écrivez un seul template et rien d'autres
1 2 3
| <xsl:template match="bar">
<h1><xsl:apply-templates/></h1>
</xsl:template> |
le raisonnement, une fois compris l'autre cas de par le mécanisme des templates défauts, est le même.
Si le résultat est le même qu'est-ce qui justifie l'utilisation de l'un par rapport à l'autre?
La raison est qu'ils donnent les voies de se faire élaborer différemment dans les cas où la structure et le résultat attendu soient plus compliqués.
Voilà !
Partager