In Kapitel 7 war bereits die Rede von Funktionen, die eine Implementierung von XPath umsetzen müsse. Für XSLT hat das W3C weitere Funktionen vorgesehen, die die folgende Tabelle zeigt.
Funktionsname | Funktion | Rückgabetyp |
---|---|---|
document(object, node-set?) | Zugriff per URI auf ein anderes XML-Dokument (object), eventuell dort nur auf eine Knotenmenge | node-set |
key(string, object) | Analog zu id(): Zugriff auf Attribute, die mit dem Element xsl:key zugewiesen wurden (siehe das Beispiel im Anschluss an diese Tabelle). | node-set |
format-number(number, string, string?) | Formatierte Zahlenausgabe | string |
current() | Knotenmenge, die nur aus dem gegenwärtigen Knoten besteht | node-set |
unparsed-entity-uri(string) | URI des nichtanalysierten Entity im selben Dokument | string |
generate-id(node-set?) | Eindeutiges Kennzeichen für den ersten Knoten des Arguments in der Dokumentreihenfolge | string |
system-property(string) | Information über die XSLT-Version und den Hersteller der Implementierung; vorgesehen sind xsl:version, xsl:vendor und xsl:vendor-url. Wie das Beispiel des Pfadtrenners oben gezeigt hat, haben diejenigen, die XSLT implementieren, schon Ergänzungen vorgenommen (Saxon: system-property('file.separator')) | object |
Zu diesen Erweiterungen der XPath-Kernbibliothek gehören auch zwei Top-Level-Elemente: xsl:key und xsl:decimal-format. Ersteres dient dazu, unabhängig von id/idref Elemente mit einem eindeutigen Schlüssel zu versehen. Dies nicht zuletzt deshalb, weil die XSLT-Engine ein in der DTD als id deklariertes Attribut nicht unbedingt erkennen muss; denn sie ist nicht verpflichtet, die DTD zu prüfen.
Das Element xsl:key enthält drei Attribute, die
Hierzu gehört die Funktion key, die hinsichtlich der durch xsl:key entstandenen Schlüssel dieselbe Aufgabe hat wie id() für IDs.
Hätte im oben gewählten Beispiel die Autoren keine id, über die man auf sie verweisen kann, sondern ein Attribut name, dann kann man über xsl:key und die Funktion ebenfalls referenzieren.
<!-- XML --> <author name="novalis"> <!-- Auslassungen --> </author> <author name="kleist"> <!-- Auslassungen --> </author> <!-- Schlüssel zuweisen --> <xsl:key name="verweis" match="author" use="@name"/> <!-- Verweis auf Autor im href-Attribut von Element a --> <xsl:template match="referenz"> <a href="#{generate-id(key('verweis',.))}"> <xsl:apply-templates/> </a> </xsl:template> <!-- Dem Autor ein name-Attribut in Element a geben --> <xsl:template match="author"> <p><a name="{generate-id()}"> ... </a></p> </xsl:template>
Ebenfalls zusammen gehören das Element xsl:decimal-format und die Funktion format-number. Das Element, das auf oberster Ebene vorkommen muss, definiert die Dezimalschreibweise, wie sie format-number nutzt. Zu den Attributen gehören der decimal-separator und der grouping-separator, aber auch das Zeichen für Unendlichkeit und das Minuszeichen lassen sich definieren.
<xsl:decimal-format decimal-separator="," grouping-separator=" " infinity="unendlich"/>
legt fest, dass Fließkommazahlen durch ein Komma definiert sind, Zahlen in Dreierguppen geschrieben werden sollen und statt des Unednlich-Zeichens der Zeichenkette stehen soll.
Zu einigen der weiteren Funktionen, die XSLT bietet, enthält das Kapitel 11 ein paar konkrete Anwendungen.