fn:min

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 5.)

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

   

Kategorie: Aggregation

Herkunft: XPath 2.0

Rückgabewert: Eine Sequenz aus einem atomaren Item, das den niedrigsten Wert aller Items der Eingabesequenz besitzt – nach Vereinheitlichung ihrer Typen.

Aufruf/Argumente:

fn:min($eingabesequenz?, $collation-URI)

$eingabesequenz:
Eine Sequenz aus einem oder mehreren atomaren Items xs:anyAtomicType. Besteht die Eingabesequenz nicht vollständig aus Items atomaren Typs, so werden die betreffenden Items im Vorfeld atomi­siert. Ist die Eingabesequenz leer, so wird die leere Sequenz zurückgegeben.

$collation-URI:
Optional. Das zweite Argument besteht aus einem String xs:string, der den URI-String der anzuwendenden Collation benennt. Der Wert muss lexikalisch dem Typ xs:anyURI entsprechen. Wird kein zweites Argument übergeben, so wird für den Stringvergleich die Default-Collation herangezogen.

Verwendungszweck:

Die Funktion fn:min() gibt stets eine Sequenz aus einem einzelnen Item zurück, das den niedrigsten Wert aller Items einer der Funktion übergebenen Eingabesequenz besitzt. Der Typ des zurückgegebenen Minimalwerts muss nicht notwendigerweise dem Typ des korrespondierenden Items der Eingabesequenz gleichen, da die Rückgabe stets nach einer Typvereinheitlichung erfolgt.

Haben mehrere oder alle Items denselben niedrigsten Wert, so wird nur eines der betreffenden Items zurück­gegeben (welches genau, ist abhängig von der Implementierung).

Ist die Eingangssequenz leer, so gibt die Funktion die leere Sequenz zurück. Ein Fehler wird nicht gemeldet. Wird genau dies aber gewünscht, so kann das Vor­handensein eines Rückgabewertes mittels der Funktion fn:exactly-one() überprüft werden (siehe Beispiel 3 zu fn:max()).

Die Items der Eingabesequenz müssen atomar und in einer Form (bezeichnet als total order) vorliegen, die ihre Vergleichbarkeit mittels des le-Operators (»less or equal«) gewährleistet. Im Wesentlichen bedeutet »total order«, dass es für zwei Grö­ßen, die als ungleich erkannt wurden, feststellbar sein muss, welche der beiden größer bzw. kleiner als die andere ist. Eine Grundvoraussetzung besteht in der Typgleichheit aller Werte, wobei auch Subtypen (derived types) der entspre­chenden Typen zugelassen sind.

Sind Items der Eingabesequenz vom Typ xs:untypedAtomic, so werden sie in den Zahlentyp xs:double umgewandelt.

Ist die Typgleichheit und damit die Vergleichbarkeit nicht gewährleistet oder durch Typumwandlungen nicht zu erreichen, so wird ein entsprechender Feh­ler ausgegeben: »Invalid argument type« (err:FORG0006).

Vergleich numerischer Werte:

Die Typgleichheit numerischer Werte wird gegebenenfalls durch Typ-Promotion (Umwandlung in einen übergeordneten numerischen Typ) hergestellt. Enthält die Eingangssequenz ein oder mehrere Items vom Wert NaN, so gibt die Funktion den Wert NaN zurück.

Vergleich von Datums- und Zeitwerten:

Die Vergleichbarkeit von Werten der Typen xs:dateTime, xs:date oder xs:time erfordert die grundsätzliche An- oder Abwesenheit einer Zeitzonenangabe. Besitzt ein derartiger Wert eine entsprechende Angabe nicht, so wird die implizite Zeitzonenabgabe hinzuge­fügt, wie sie sich aus dem Bewertungskontext ergibt. Der Datums- oder Zeit­wert wird – falls erforderlich – auf dieser Grundlage normalisiert und in dieser Form für die Vergleiche herangezogen. Unterscheiden sich (normalisierte) Minimalwerte nur anhand ihrer Zeitzonenangabe, ist es der Implementation überlassen, welcher der Werte zurückgegeben wird.

Vergleich von Zeitdauerwerten:

Zu vergleichende Zeitdauerwerte müssen entweder alle vom Typ xs:yearMonthDuration oder alle vom Typ xs:dayTimeDuration sein.

Vergleich von URI-Werten und Strings:

Der Vergleich zwischen URI-Werten xs:anyURI und Zeichenketten xs:string wird, nach Umwandlung von Items des Typs xs:anyURI in xs:string, anhand einer Collation bestimmt. Hierbei findet entweder die Default-Collation oder die durch das zweite Funktionsargument bestimmte Collation Verwendung.

Der Vergleich von Zeichenketten wird im einfachsten Fall Zeichen für Zeichen vorgenommen, wobei als Grundregel gilt:

[0 – 9] < [A – Z] < [a -z]

Der zur Bezeichnung der Collation übergebene Wert muss lexikalisch dem Typ xs:anyURI entsprechen. Wird die Collation nicht unterstützt, so erfolgt die Fehlermeldung »Unsupported collation« (err:FOCH0002).

Wurde eine Collation angegeben, besitzen die Items der Eingabesequenz (nach eventueller Typumwandlung) jedoch nicht den Typ xs:string, so wird das Collation-Argument ignoriert, ohne dass ein Fehler gemeldet wird. Dies geschieht beispielsweise dann, wenn die Eingabesequenz aus numerischen Typen besteht.

Beispiele:

Beispiel 1 – Minimum aus einer numerischen Sequenz:

fn:min((4, 5, 6, 7))

gibt 4 zurück (vom Typ xs:integer).

Beispiel 2 – Minimum aus einer Stringsequenz:

fn: min(('bb','aa', 'AA'))

gibt 'AA' zurück (vom Typ xs:string).

Funktionsdefinition:

XPath 1.0:

Funktion nicht verfügbar

XPath 2.0:

fn:min($arg as xs:anyAtomicType*) as xs:anyAtomicType?

fn:min($arg as xs:anyAtomicType*,
       $collation as string)      as xs:anyAtomicType?

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn