3.2.5  Modus Attribute

An allen Templates hat man die Möglichkeit einen selbst deklarierten Modus anzugeben. Wenn dann der XSLT Prozessor in eine bestimmte Richtung gepusht, vgl. Push vs. Pull Stylesheets , wird, werden nur diejenigen Regeln zur Auswertung herangezogen, die im selben Modus sind, wie der apply-templates Call selbst.

Beispielsweise möchte man die Titel im Kapitel anders behandeln als die Kapitel im Inhaltsverzeichnis, denn im TOC sollen z.B. keine Fussnoten-Marker angezeigt werden.

In Templates formuliert würde so eine Anweisung folgendermassen aussehen:

<xsl:template match="title" mode="toc">
  <div class="toc-entry">
    <xsl:apply-templates select="node()[not(self::footnote)]"/>
  </div>
</xsl:template>

<xsl:template match="title">
  <h1>
    <xsl:apply-templates/>
  </h1>
</xsl:template>
Plain Text

Die Generierung des TOC könnte dann so ablaufen:

<xsl:for-each select="chapter">
  <xsl:apply-templates select="title" mode="toc">
</xsl:for-each>
Plain Text

Bzgl. der Eindeutigkeit der Regelbasis kann man so anhand des Mode-Attributes XSLT Konstrukte Mode Attribut Attribute mode Ausführungsgruppen bilden.

Wie auch bei Angabe der Priorities kann man auf diese Weise Regeln setzen, die nie ausgeführt werden, weil sie vllt. im Zuge einer Refactoring-Massnahme abgeklemmt und dann vergessen werden.
Auch das mode -Attribut ist also mit Vorsicht zu geniessen und sparsam einzusetzen.