Fonction key() |
Fait référence à une relation définie avec un élément <xsl:key>. Théoriquement, la fonction key() fonctionne de la même manière que la fonction id(), bien que les clés soient plus flexibles que les ID.
Entrées
Le nom de la clé (définie par un élément <xsl:key>) et un objet. Si l'objet est un ensemble de nœuds, la fonction key() s'applique alors à elle-même la valeur de chaîne de chacun des nœuds de l'ensemble et renvoie l'ensemble de nœuds résultant de toutes les invocations de cette fonction key(). Si l'objet est de n'importe quel autre type, il est converti en chaîne comme si la fonction string() avait été appelée.
Sortie
Un ensemble de nœuds contenant les nœuds dans le même document que celui du nœud de contexte dont les valeurs de la clé recherchée correspondent aux arguments de la recherche. En d'autres termes, si la feuille de style contient un élément <xsl:key> qui définit une clé nommée postalcodes à partir de l'enfant <postalcode> de tous les éléments <address> dans le document actuel, l'appel de la fonction key(postalcodes, '34829') renvoie un ensemble de nœuds contenant tous les éléments <address> ayant un élément <postalcode> dont la valeur est 34829.
Définie dans
XSLT section 12.2, Clés.
Exemple
Pour montrer les performances de la fonction key(), nous utiliserons la version de document tronquée du glossaire déjà mentionnée dans le chapitre 5:
    <?xml version="1.0"?>
    <glossary>
      <glentry>
        <term id="applet">applet</term>
        <defn topic="Java" language="en">
          An application program,
          written in the Java programming language, that can be
          retrieved from a web server and executed by a web browser.
          A reference to an applet appears in the markup for a web
          page, in the same way that a reference to a graphics
          file appears; a browser retrieves an applet in the same
          way that it retrieves a graphics file.
          For security reasons, an applet's access rights are limited
          in two ways: the applet cannot access the filesystem of the
          client upon which it is executing, and the applet's
          communication across the network is limited to the server
          from which it was downloaded.
          Contrast with <xref refid="servlet"/>.
        </defn>

        <defn topic="Java" language="it">
          [Pretend this is an Italian definition of applet.]
        </defn>
        <defn topic="Java" language="es">
          [Pretend this is a Spanish definition of applet.]
        </defn>
      </glentry>

      <glentry>
        <term id="DMZlong" xreftext="demilitarized zone">demilitarized
          zone (DMZ)</term>
        <defn topic="security" language="en">
          In network security, a network that is isolated from, and
          serves as a neutral zone between, a trusted network (for example,
          a private intranet) and an untrusted network (for example, the
          Internet). One or more secure gateways usually control access
          to the DMZ from the trusted or the untrusted network.
        </defn>
        <defn topic="security" language="it">
          [Pretend this is an Italian definition of DMZ.]
        </defn>
        <defn topic="security" language="es">
          [Pretend this is a Spanish definition of DMZ.]
        </defn>
        <defn topic="security" language="jp">
          [Pretend this is a Japanese definition of DMZ.]
        </defn>
        <defn topic="security" language="de">
          [Pretend this is a German definition of DMZ.]
        </defn>
      </glentry>

      <glentry>
        <term id="servlet">servlet</term>
        <defn topic="Java" language="en">
          An application program, written in the Java programming language,
          that is executed on a web server. A reference to a servlet
          appears in the markup for a web page, in the same way that a
          reference to a graphics file appears. The web server executes
          the servlet and sends the results of the execution (if there are
          any) to the web browser. Contrast with <xref refid="applet" />.
        </defn>
        <defn topic="Java" language="es">
          [Pretend this is a Spanish definition of servlet.]
        </defn>
        <defn topic="Java" language="it">
          [Pretend this is an Italian definition of servlet.]
        </defn>

        <defn topic="Java" language="de">
          [Pretend this is a German definition of servlet.]
        </defn>
        <defn topic="Java" language="jp">
          [Pretend this is a Japanese definition of servlet.]
        </defn>
      </glentry>
    </glossary>
La feuille de style utilisée pour traiter ce document est la suivante : Notez que deux éléments <xsl:key> ont été définis afin de pouvoir indexer le document XML de deux manières différentes :
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>
    <xsl:strip-space elements="*"/>

      <xsl:key name="language-index" match="defn" use="@language"/>
      <xsl:key name="term-ids"       match="term" use="@id"/>

      <xsl:param name="targetLanguage"/>

      <xsl:template match="/">
        <xsl:apply-templates select="glossary"/>
      </xsl:template>

      <xsl:template match="glossary">
        <html>
          <head>
            <title>
              <xsl:text>Glossary Listing: </xsl:text>
            </title>
          </head>
          <body>
            <h1>
              <xsl:text>Glossary Listing: </xsl:text>
            </h1>
            <xsl:for-each select="key('language-index', $targetLanguage)">
              <xsl:apply-templates select="ancestor::glentry"/>
            </xsl:for-each>
          </body>
        </html>
      </xsl:template>

      <xsl:template match="glentry">
        <p>
          <b>
            <a>
              <xsl:attribute name="name">
                <xsl:value-of select="term/@id" />
              </xsl:attribute>
            </a>
            <xsl:value-of select="term"/>
            <xsl:text>: </xsl:text>
          </b>
          <xsl:apply-templates select="defn[@language=$targetLanguage]"/>
        </p>
      </xsl:template>

      <xsl:template match="defn">
        <xsl:apply-templates
         select="*|comment()|processing-instruction()|text()"/>
      </xsl:template>

      <xsl:template match="xref">
        <a>
          <xsl:attribute name="href">
            <xsl:text>#</xsl:text><xsl:value-of select="@refid"/>
          </xsl:attribute>
          <xsl:choose>
            <xsl:when test="key('term-ids', @refid)[1]/@xreftext">
              <xsl:value-of select="key('term-ids', @refid)[1]/@xreftext"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="key('term-ids', @refid)[1]"/>
            </xsl:otherwise>
          </xsl:choose>
        </a>
      </xsl:template>

    </xsl:stylesheet>
Transformer le glossaire avec un targetLanguage de en donne les résultats suivants :
    <html>
    <head>
    <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Glossary Listing: </title>
    </head>
    <body>
    <h1>Glossary Listing: </h1>
    <p>
    <b><a name="applet"></a>applet: </b>
          An application program,
          written in the Java programming language, that can be
          retrieved from a web server and executed by a web browser.
          A reference to an applet appears in the markup for a web
          page, in the same way that a reference to a graphics
          file appears; a browser retrieves an applet in the same
          way that it retrieves a graphics file.
          For security reasons, an applet's access rights are limited
          in two ways: the applet cannot access the filesystem of the
          client upon which it is executing, and the applet's
          communication across the network is limited to the server
          from which it was downloaded.
          Contrast with <a href="#servlet">servlet</a>.
        </p>
    <p>
    <b><a name="DMZlong"></a>demilitarized
          zone (DMZ): </b>
          In network security, a network that is isolated from, and
          serves as a neutral zone between, a trusted network (for example,
          a private intranet) and an untrusted network (for example, the
          Internet). One or more secure gateways usually control access
          to the DMZ from the trusted or the untrusted network.
        </p>
    <p>
    <b><a name="servlet"></a>servlet: </b>
          An application program, written in the Java programming language,
          that is executed on a web server. A reference to a servlet
          appears in the markup for a web page, in the same way that a
          reference to a graphics file appears. The web server executes
          the servlet and sends the results of the execution (if there are
          any) to the web browser. Contrast with <a href="#applet">applet</a>.
        </p>
    </body>
    </html>
La Figure C-5 montre l'aspect qu'aurait le document une fois affiché dans un navigateur. Utiliser un targetLanguage de jp donne alors les résultats suivants : Glossaire HTML généré
    <html>
    <head>
    <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Glossary Listing: </title>
    </head>
    <body>
    <h1>Glossary Listing: </h1>
    <p>
    <b><a name="DMZlong"></a>demilitarized
          zone (DMZ): </b>
          [Pretend this is a Japanese definition of DMZ.]
        </p>
    <p>
    <b><a name="servlet"></a>servlet: </b>
          [Pretend this is a Japanese definition of servlet.]
        </p>
    </body>
    </html>
          </programlisting>
Une fois affiché, le document ressemble à la Figure C-6. Notez que les résultats sont totalement différents en cas de modification du targetLanguage. Glossaire HTML généré