Die Spezifikation für Xpath sieht vor, dass
Implementierungen eine Reihe von Funktionen beinhalten
müssen (core function library). Wie das
nächste Kapitel zeigen wird, handelt es sich um solche, die
in XSLT ständig benötigt werden. Mehr noch: wie die
Implementierungen von James Clark (xt) und
Michael Kay
(Saxon) unterstreichen, lohnt es sich
durchaus, mit dem Mindestatz nicht vorlieb nehmen zu
müssen. Anders ausgedrückt: Möglicherweise darf man
XSLT in der Version 1.0 noch nicht als
fertig
ansehen, wie die Kapitel 11 und 20 zeigen
werden.
Zur Übersicht listen wir hier die Funktionen in folgender Notation auf: In der echten Spalte steht der jeweilige Rückgabetyp, in Klammern folgen wie üblich die möglichen Argumente. Ein Fragezeichen nach dem Argument bezeichnet es als optional. Fehlt es, ist das Argument erforderlich. Ein Stern nach dem Argument steht dafür, dass es nicht, aber auch mehrmals vorhanden sein kann (siehe etwa die Funktion concat).
Wenn in der folgenden Tabelle der Funktionsparameter object ist, dann handelt es sich um einen (beliebigen) der anderen Typen. In einigen Fällen ist eine Konvertierung, jeweils in eine Zeichenkette, erforderlich.
Funktionsname | Rückgabewert | Rückgabetyp |
---|---|---|
Knotensatz-orientierte Funktionen | ||
last() | Anzahl (üblicherweise von Elementen in einem Kontext) | number |
position() | Kontext-Position | number |
count(node-set) | Anzahl der Knoten innerhalb des node-set | number |
id(object) | Element mit dem Attribut id vom Wert object | node-set |
local-name(node-set?) | Lokaler Bestandteil des ersten Knotennamens in node-set (ohne Namensraum-Bezeichner: mein-element, nicht ein-namensraum:ein-element) | string |
namespace-uri(node-set?) | Namensraum-Bezeichner des ersten Knotennamens in node-set (ohne lokalen Bestandteil) | string |
name(node-set?) | Namensraum-Bezeichner (falls vorhanden) und lokaler Bestandteil des ersten Knotennamens in node-set; normalerweise der im XML-Dokument verwendete Name | string |
Mehrere dieser Funktionen haben das optionale Argument node-set. Fehlt es, heißt das in allen Fällen, dass der gegenwärtige Knoten als Argument zählt. | ||
Zeichenorientierte Funktionen | ||
string(object?) | Konvertiertes Objekt als Zeichenkette | string |
concat(string, string, string*) | Die Aneinanderreihung der Argumente | string |
starts-with(string, string) | Wahr, wenn der die erste Zeichenkette mit der zweiten beginnt (sonst unwahr) | boolean |
contains(string, string) | Wahr, wenn die erste Zeichenkette die zweite beinhaltet (sonst unwahr) | boolean |
substring-before(string, string) | Der Teil der ersten Zeichenkette, der dem Teil vorausgeht, den die zweite bezeichnet | string |
substring-after(string, string) | Der Teil der ersten Zeichenkette, der dem Teil folgt, den die zweite bezeichnet | string |
substring(string, number, number?) | Der Teil der ersten Zeichenkette, der an der Stelle beginnt, die das zweite Argument bezeichnet, bis zu der Stelle, die das dritte angibt (Beispiel: substring("abcdefg", 3, 2) ergibt cd; das erste Zeichen wird durch 1 bezeichnet | string |
string-length(string?) | Anzahl der Zeichen einer Zeichenkette | number |
normalize-space(string?) | Die Zeichenkette ohne überflüssigeLeerzeichen: Tabulator plus Leerschritt plus doppelter Return werden zu einem Leerzeichen |
string |
translate(string, string, string) | Die Zeichenkette des ersten Arguments, mit den Zeichen des zweiten durch die des dritten ersetzt | string |
Boolesche Funktionen | ||
boolean(object) | Das in einen boolschen Wert konvertierte Argument | boolean |
not() | Wahr, wenn das Argument unwahr ist (sonst unwahr) | boolean |
true() | Wahr | boolean |
false() | Unwahr | boolean |
lang(string) | Wahr, wenn die Sprache des gegenwärtigen Knotens (oder des nächsten Vorfahren, in dem die Sprache definiert ist) mit dem Wert des Arguments übereinstimmt (sonst unwahr) | boolean |
Numerische Funktionen | ||
number(object?) | Der in number konvertierte Wert des Objekts (Zeichenkette, boolscher Wert, Knotensatz oder Objekt); fehlt das Argument, gilt der gegenwärtige Knoten | number |
sum(node-set) | Die Summe aus den Werten, die sich daraus ergeben, die Zeichenketten der einzelnen Knoten des node-set zu number zu konvertieren (auch Kommentare und Verarbeitungsanweisungen, als Kindelemente eines Elements) | number |
floor(number) | Die nächstkleinere Ganzzahl von number (untere Gauss-Klammer) | number |
ceiling(number) | Die nächstgrößere Ganzzahl von number (obere Gauss-Klammer) | number |
round(number) | Die dem Argument nächstgelegene Ganzzahl (wenn das zwei sind: die größere); Beispiel: round(0.5)=1, aber round(-0.5)=0. | number |
Der etwas abstrakte Charakter dieses Kapitels wird
sich in Kapitel 10 hoffentlich nicht in
dem Maße wiederholen, obwohl auch dort zunächst Theorie
ansteht. Das wahre
Ausmaß der XPath-Möglichkeiten
dürften erst die praktischen Kapitel zu XSLT
zeigen: 11 und 20.