Paramètres des instructions de traitement

  • Raccourci de la révision : XSLT/Paramètres_des_instructions_de_traitement
  • Titre de la révision : Paramètres des instructions de traitement
  • ID de la révision : 261589
  • Créé :
  • Créateur : Fredchat
  • Version actuelle ? Non
  • Commentaire /* Document à relire */

Contenu de la révision

{{wiki.template('Traduction_à_relire')}}

Présentation

XSLT supporte la possibilité de passer des paramètres à une feuille de style lors de son exécution. C'était déjà possible depuis longtemps à l'aide de XSLTProcessor avec JavaScript. Cependant lorsqu'on utilisait une instruction de traitement ou PI (pour Processing Instruction) <?xml-stylesheet?> il n'existait aucun moyen de fournir des paramètres.

Pour résoudre cela, deux nouvelles {{template.Abbr("PI", "Instructions de traitement")}} ont été implémentées dans Firefox 2 (voir {{template.Anch("Versions supportées")}} dans la suite de cet article pour plus de détails), <?xslt-param?> et <?xslt-param-namespace?>. Ces deux {{template.Abbr("PI", "Instructions de traitement")}} peuvent contenir des « pseudo attributs » de la même manière que la {{template.Abbr("PI", "Instruction de traitement")}} xml-stylesheet.

L'exemple suivant passe les deux paramètres color et size à la feuille de style <tt>style.xsl</tt> :

<?xslt-param name="color" value="blue"?>
<?xslt-param name="size" select="2"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>

Notez que ces {{template.Abbr("PI", "Instructions de traitement")}} n'ont aucun effet lorsque la transformation est faite à l'aide de l'objet XSLTProcessor en JavaScript.

Instructions de traitement

Les attributs des {{template.Abbr("PI", "Instructions de traitement")}} xslt-param et xslt-param-namespace sont analysés en utilisant les règles définies dans xml-stylesheet. Tous les attributs non reconnus doivent être ignorés. L'analyse d'un attribut ne doit pas échouer à cause de la présence d'un attribut non reconnu tant que l'attribut respecte la syntaxe dans xml-stylesheet.

Les deux instructions de traitement xslt-param et xslt-param-namespace doivent apparaître dans le prologue du document, c'est-à-dire avant la balise du premier élément. Toutes les {{template.Abbr("PI", "Instructions de traitement")}} du prologue doivent être exécutées, chacune de celles intervenant avant et aussi après chaque {{template.Abbr("PI", "Instruction de traitement")}} xml-stylesheet.

S'il existe plusieurs {{template.Abbr("PI", "Instructions de traitement")}} xml-stylesheet les paramètres s'appliquent à toutes les feuilles de style, qui est la conséquence de l'importation de toutes les feuilles de style dans une unique feuille de style selon la spécification XSLT.reference? Notez que les {{template.Abbr("PI", "Instructions de traitement")}} XSLT xml-stylesheet multiples ne sont pas supportées par Firefox à l'heure actuelle.

xslt-param

La {{template.Abbr("PI", "Instruction de traitement")}} xslt-param accepte 4 attributs:

name
La partie local du nom du paramètre. Aucune vérification de syntaxe n'est faite pour cet attribut, cependant, si ce n'est pas un NCName valide, il ne correspondra à aucun paramètre de la feuille de style.
namespace
L'espace de nommage du nom du paramètre. Aucune vérification de syntaxe n'est faite pour cet attribut.
value
Contient la valeur de chaîne du paramètre. La valeur de l'attribut est utilisée comme valeur du paramètre. Le type de donnée sera toujours une chaîne.
select
Un expression XPath pour le paramètre. La valeur de l'attribut est analysée comme une expressions XPath. Le résultat de l'évaluation de l'expression est utilisé comme valeur pour le paramètre.

Si l'attribut name est absent ou vide, la PI est ignorée.

Si l'attribut namespace est absent ou vide, l'espace de nommage null est utilisé.

Il n'est pas erroné de spécifier un nom de paramètre qui n'existe pas dans la feuille de style (ou qui soit une variable de la feuille de style). La {{template.Abbr("PI", "Instruction de traitement")}} est simplement ignorée.

Si les attributs value et select sont tout les deux présent, ou s'ils sont tout les deux absents, la {{template.Abbr("PI", "Instruction de traitement")}} est ignorée.

Notez que value="..." n'est pas strictement égal à select="'...'" car la valeur peut contenir à la fois des caractères apostrophe et des caractères guillemet.

Exemples

Définition du paramètre color pour la chaîne red :

<?xslt-param name="color" value="red"?>

Définition du paramètre columns pour le nombre 2 :

<?xslt-param name="columns" select="2"?>

Définition du paramètre books pour un ensemble de nœuds contenant tous les éléments <book> dans l'espace de nommage null :

<?xslt-param name="books" select="//book"?>

Définition du paramètre show-toc<code> pour le booléen <code>true :

 <?xslt-param name="show-toc" select="true()"?>
Le contexte de l'attribut select

Le contexte suivant est utilisé pour analyser et évaluer l'expression de l'attribut select.

  • Le nœud de contexte est le nœud utilisé comme nœud courant initial utilisé lors de l'exécution de la feuille de style.
  • La position du contexte est la position de la liste initiale de nœuds courants utilisée lors de l'exécution de la feuille de style.
  • La taille du contexte est la taille de la liste initiale de nœuds courants utilisée lors de l'exécution de la feuille de style.
  • Aucune variable n'est disponible.
  • La bibliothèque de fonctions est la bibliothèque de fonctions standards de XPath.
  • Les déclarations d'espaces de nommage sont déterminées par les {{template.Abbr("PI", "Instructions de traitement")}} xslt-param-namespace, voir ci-dessous.

Si l'attribut select ne peut pas être analysé ou exécuté, la {{template.Abbr("PI", "Instructions de traitement")}} est ignorée (en particulier, l'attribut value ne sera pas utilisé pour la remplacer).

xslt-param-namespace

xslt-param-namespace accepte deux attributs :

prefix
Le préfixe mappé.
namespace
L'espace de nommage vers lequel le préfixe mappe.

Une {{template.Abbr("PI", "Instruction de traitement")}} xslt-param-namespace affecte l'expression de l'attribut select pour tous les xslt-param suivant la {{template.Abbr("PI", "Instruction de traitement")}}. Cela s'applique même s'il y a d'autres nœuds tels que des commentaires ou d'autres {{template.Abbr("PI", "Instructions de traitement")}} entre les {{template.Abbr("PI", "Instruction de traitement")}} xslt-param-namespace et xslt-param.

Il n'est pas erroné d'utiliser le même préfixe pour plusieurs instructions de traitement, chaque nouvelle PI ne fait que changer l'espace de nommage vers lequel le préfixe renvoie.

Si prefix est absent, vide ou égale un à NCName non valide, la {{template.Abbr("PI", "Instruction de traitement")}} est ignorée.

Si namespace est absent, la {{template.Abbr("PI", "Instruction de traitement")}} est ignorée. Si namespace est vide, le mappage du préfixe est supprimé.

Exemples

Définition du paramètre books pour un ensemble de nœuds contenant tous les éléments <book> dans l'espace de nommage http://www.example.org/myNamespace :

<?xslt-param-namespace prefix="my" namespace="http://www.example.org/myNamespace"?>
<?xslt-param name="books" select="//my:book"?>

Versions supportées

Supportées depuis Firefox 2.0.0.1. L'attribut value est supporté dans Firefox 2, mais l'attribut select provoque des plantages pour certaines expressions dans la version 2.0.

Possibilités de développements futurs

Devons-nous autoriser n'importe quelle fonction XSLT dans les expressions ? document() semble utile, mais il semble plus judicieux de maintenir la constante que generate-id() devrait produire la même chaîne pour un même document.

Interwiki Language Links

{{ wiki.languages( { "en": "en/XSLT/PI_Parameters" } ) }}

Source de la révision

<p>
{{wiki.template('Traduction_à_relire')}}
</p>
<h3 name="Pr.C3.A9sentation"> Présentation </h3>
<p>XSLT supporte la possibilité de passer des paramètres à une feuille de style lors de son exécution. C'était déjà possible depuis longtemps à l'aide de <a href="fr/XSLTProcessor">XSLTProcessor</a> avec JavaScript. Cependant lorsqu'on utilisait une instruction de traitement ou <i>PI</i> (pour Processing Instruction) <code>&lt;?xml-stylesheet?&gt;</code> il n'existait aucun moyen de fournir des paramètres.
</p><p>Pour résoudre cela, deux nouvelles {{template.Abbr("PI", "Instructions de traitement")}} ont été implémentées dans <a href="fr/Firefox_2">Firefox 2</a> (voir {{template.Anch("Versions supportées")}} dans la suite de cet article pour plus de détails), <code>&lt;?xslt-param?&gt;</code> et <code>&lt;?xslt-param-namespace?&gt;</code>. Ces deux {{template.Abbr("PI", "Instructions de traitement")}} peuvent contenir des « pseudo attributs » de la même manière que la {{template.Abbr("PI", "Instruction de traitement")}} <code>xml-stylesheet</code>.
</p><p>L'exemple suivant passe les deux paramètres <code>color</code> et <code>size</code> à la feuille de style <tt>style.xsl</tt> :
</p>
<pre class="eval">&lt;?xslt-param name="color" value="blue"?&gt;
&lt;?xslt-param name="size" select="2"?&gt;
&lt;?xml-stylesheet type="text/xsl" href="style.xsl"?&gt;
</pre>
<p>Notez que ces {{template.Abbr("PI", "Instructions de traitement")}} n'ont aucun effet lorsque la transformation est faite à l'aide de l'objet <code>XSLTProcessor</code> en JavaScript.
</p>
<h3 name="Instructions_de_traitement"> Instructions de traitement </h3>
<p>Les attributs des {{template.Abbr("PI", "Instructions de traitement")}} <code>xslt-param</code> et <code>xslt-param-namespace</code> sont analysés en utilisant les règles définies dans <a class="external" href="http://www.w3.org/TR/xml-stylesheet/">xml-stylesheet</a>. Tous les attributs non reconnus doivent être ignorés. L'analyse d'un attribut ne doit pas échouer à cause de la présence d'un attribut non reconnu tant que l'attribut respecte la syntaxe dans <code>xml-stylesheet</code>.
</p><p>Les deux instructions de traitement <code>xslt-param</code> et <code>xslt-param-namespace</code> doivent apparaître dans le prologue du document, c'est-à-dire avant la balise du premier élément. Toutes les {{template.Abbr("PI", "Instructions de traitement")}} du prologue doivent être exécutées, chacune de celles intervenant avant et aussi après chaque {{template.Abbr("PI", "Instruction de traitement")}} <code>xml-stylesheet</code>.
</p><p>S'il existe plusieurs {{template.Abbr("PI", "Instructions de traitement")}} <code>xml-stylesheet</code> les paramètres s'appliquent à toutes les feuilles de style, qui est la conséquence de l'importation de toutes les feuilles de style dans une unique feuille de style selon la spécification XSLT.<span class="comment">reference?</span> Notez que les {{template.Abbr("PI", "Instructions de traitement")}} XSLT <code>xml-stylesheet</code> multiples ne sont pas supportées par Firefox à l'heure actuelle.
</p>
<h4 name="xslt-param"> xslt-param </h4>
<p>La {{template.Abbr("PI", "Instruction de traitement")}} <code>xslt-param</code> accepte 4 attributs:
</p>
<dl><dt> name
</dt><dd> La partie local du nom du paramètre. Aucune vérification de syntaxe n'est faite pour cet attribut, cependant, si ce n'est pas un <a class="external" href="http://www.w3.org/TR/REC-xml-names/#NT-NCName">NCName</a> valide, il ne correspondra à aucun paramètre de la feuille de style.
</dd><dt> namespace
</dt><dd> L'espace de nommage du nom du paramètre. Aucune vérification de syntaxe n'est faite pour cet attribut.
</dd><dt> value
</dt><dd> Contient la valeur de chaîne du paramètre. La valeur de l'attribut est utilisée comme valeur du paramètre. Le type de donnée sera toujours une <i>chaîne</i>.
</dd><dt> select
</dt><dd> Un expression <a href="fr/XPath">XPath</a> pour le paramètre. La valeur de l'attribut est analysée comme une expressions XPath. Le résultat de l'évaluation de l'expression est utilisé comme valeur pour le paramètre.
</dd></dl>
<p>Si l'attribut <b>name</b> est absent ou vide, la PI est ignorée.
</p><p>Si l'attribut <b>namespace</b> est absent ou vide, l'espace de nommage <code>null</code> est utilisé.
</p><p>Il n'est pas erroné de spécifier un nom de paramètre qui n'existe pas dans la feuille de style (ou qui soit une variable de la feuille de style). La {{template.Abbr("PI", "Instruction de traitement")}} est simplement ignorée.
</p><p>Si les attributs <b>value</b> et <b>select</b> sont tout les deux présent, ou s'ils sont tout  les deux absents, la {{template.Abbr("PI", "Instruction de traitement")}} est ignorée.
</p><p>Notez que <code>value="..."</code> n'est pas strictement égal à <code>select="'...'"</code> car la valeur peut contenir à la fois des caractères apostrophe et des caractères guillemet.
</p>
<h5 name="Exemples"> Exemples </h5>
<p>Définition du paramètre <code>color</code> pour la chaîne <code>red</code> :
</p>
<pre class="eval">&lt;?xslt-param name="color" value="red"?&gt;
</pre>
<p>Définition du paramètre <code>columns</code> pour le nombre <code>2</code> :
</p>
<pre class="eval">&lt;?xslt-param name="columns" select="2"?&gt;
</pre>
<p>Définition du paramètre <code>books</code> pour un ensemble de nœuds contenant tous les éléments <code>&lt;book&gt;</code> dans l'espace de nommage <code>null</code> :
</p>
<pre class="eval">&lt;?xslt-param name="books" select="//book"?&gt;
</pre>
<p>Définition du paramètre <code>show-toc&lt;code&gt; pour le booléen &lt;code&gt;true</code> :
</p>
<pre class="eval"> &lt;?xslt-param name="show-toc" select="true()"?&gt;
</pre>
<h5 name="Le_contexte_de_l.27attribut_select"> Le contexte de l'attribut <i>select</i> </h5>
<p>Le contexte suivant est utilisé pour analyser et évaluer l'expression de l'attribut <b>select</b>.
</p>
<ul><li> Le nœud de contexte est le nœud utilisé comme nœud courant initial utilisé lors de l'exécution de la feuille de style.
</li><li> La position du contexte est la position de la liste initiale de nœuds courants utilisée lors de l'exécution de la feuille de style.
</li><li> La taille du contexte est la taille de la liste initiale de nœuds courants utilisée lors de l'exécution de la feuille de style.
</li><li> Aucune variable n'est disponible.
</li><li> La bibliothèque de fonctions est la bibliothèque de fonctions standards de XPath.
</li><li> Les déclarations d'espaces de nommage sont déterminées par les {{template.Abbr("PI", "Instructions de traitement")}} <code>xslt-param-namespace</code>, voir ci-dessous.
</li></ul>
<p>Si l'attribut <b>select</b> ne peut pas être analysé ou exécuté, la {{template.Abbr("PI", "Instructions de traitement")}} est ignorée (en particulier, l'attribut <b>value</b> ne sera pas utilisé pour la remplacer).
</p>
<h4 name="xslt-param-namespace"> xslt-param-namespace </h4>
<p><code>xslt-param-namespace</code> accepte deux attributs :
</p>
<dl><dt> prefix
</dt><dd> Le préfixe mappé.
</dd><dt> namespace
</dt><dd> L'espace de nommage vers lequel le préfixe mappe.
</dd></dl>
<p>Une {{template.Abbr("PI", "Instruction de traitement")}} <code>xslt-param-namespace</code> affecte l'expression de l'attribut <b>select</b> pour tous les <code>xslt-param</code> suivant la {{template.Abbr("PI", "Instruction de traitement")}}. Cela s'applique même s'il y a d'autres nœuds tels que des commentaires ou d'autres {{template.Abbr("PI", "Instructions de traitement")}} entre les {{template.Abbr("PI", "Instruction de traitement")}} <code>xslt-param-namespace</code> et <code>xslt-param</code>.
</p><p>Il n'est pas erroné d'utiliser le même préfixe pour plusieurs instructions de traitement, chaque nouvelle PI ne fait que changer l'espace de nommage vers lequel le préfixe renvoie.
</p><p>Si <b>prefix</b> est absent, vide ou égale un à NCName non valide, la {{template.Abbr("PI", "Instruction de traitement")}} est ignorée.
</p><p>Si <b>namespace</b> est absent, la {{template.Abbr("PI", "Instruction de traitement")}} est ignorée. Si <b>namespace</b> est vide, le mappage du préfixe est supprimé.
</p>
<h5 name="Exemples_2"> Exemples </h5>
<p>Définition du paramètre <code>books</code> pour un ensemble de nœuds contenant tous les éléments <code>&lt;book&gt;</code> dans l'espace de nommage <code><span class="plain">http://www.example.org/myNamespace</span></code> :
</p>
<pre class="eval">&lt;?xslt-param-namespace prefix="my" namespace="<span class="plain">http://www.example.org/myNamespace</span>"?&gt;
&lt;?xslt-param name="books" select="//my:book"?&gt;
</pre>
<h3 name="Versions_support.C3.A9es"> Versions supportées </h3>
<p>Supportées depuis Firefox 2.0.0.1. L'attribut <b>value</b> est supporté dans Firefox 2, mais l'attribut <b>select</b> provoque des plantages pour certaines expressions dans la version 2.0.
</p>
<h3 name="Possibilit.C3.A9s_de_d.C3.A9veloppements_futurs"> Possibilités de développements futurs </h3>
<p>Devons-nous autoriser n'importe quelle fonction XSLT dans les expressions ? <code>document()</code> semble utile, mais il semble plus judicieux de maintenir la constante que <code>generate-id()</code> devrait produire la même chaîne pour un même document.
</p><p><span class="comment">Interwiki Language Links</span>
</p>{{ wiki.languages( { "en": "en/XSLT/PI_Parameters" } ) }}
Revenir à cette révision