fn:exactly-one

(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: Funktionen für Sequenzen

Herkunft: XPath 2.0

Rückgabewert: Eine Sequenz; die Eingabesequenz, falls diese aus genau einem Item besteht

Aufruf/Argumente:

fn:exactly-one($sequenz)

$sequenz:
Eine Eingabesequenz aus prinzipiell beliebig vielen Items, die von der Funktion nur dann weitergegeben wird, wenn sie aus genau einem Item besteht. In allen anderen Fällen (null oder mehr als ein Item) wird ein Fehler gemeldet. Dies entspricht der Prüfung der Eingabesequenz auf Kar­dinalität »genau ein« Item.

Verwendungszweck:

Die Funktion fn:exactly-one() erzwingt die Ausgabe einer Sequenz aus genau einem Item durch Zurückweisung all derjenigen Sequenzen, die die­ser Einschränkung (constraint) nicht gerecht werden – die Funktion bricht die Verarbeitung in diesen Fällen mit einer Fehlermeldung ab (err:FORG0005).

Sie kann überall dort verwendet werden, wo Sequenzen aus genau einem Item (Singleton-Sequenzen) zwingend benötigt werden und die Verarbeitung abge­brochen werden muss, wenn dieser Erwartung nicht Rechnung getragen wird. Sequenzen bestehend aus genau einem Item werden von der Funktion hingegen unverändert weitergege­ben.

Beispiele:

Beispiel 1 – Aufruf mit falscher Itemzahl in der Eingabesequenz:

fn:exactly-one((1, 2, 3)) oder fn:exactly-one(())

ergibt jeweils die Fehlermeldung: »fn:exactly-one called with a sequence containing zero or more than one item« (err:FORG0005). Im ersten Fall umfasst die Eingangssequenz zu viele Items, im zweiten zu wenige.

Beispiel 2 – Aufruf mit genau einem Item in der Eingabesequenz:

fn:exactly-one((1))

gibt die übergebene Sequenz (1) zurück.

Beispiel 3 – Leere Sequenz für Aggregatfunktionen abfangen:

fn:exactly-one(fn:avg($daten))

ergibt die oben genannte Fehlermeldung (siehe Beispiel 1), falls die Eingabe­sequenz $daten von fn:avg() zur leeren Ergebnissequenz führt.

Erklärung: In manchen Fällen ist das Standardverhalten von Aggregatfunktionen wie fn:avg(), fn:max() oder fn:min() in Bezug auf eine leere Eingangs­se­quenz unerwünscht – sie geben nämlich die leere Sequenz zurück. Soll beispielsweise eine Fehlermeldung erfolgen, wenn keine Eingangsdaten vorhanden sind, aus denen ein Durchschnitt, ein Maximal- oder Minimalwert gebildet werden kann, so besteht eine Lösung darin, den Rückgabewert mittels der Funktion fn:exactly-one() zu überprüfen. Wird ein Durchschnittswert ermittelt, so wird dieser transparent weitergegeben. Im Fall der leeren Sequenz erfolgt hingegen ein Fehler.

Hinweis – die Aggregatfunktion fn:sum() weicht im Verhalten ab:
Die Aggregatfunktion fn:sum() ist vom oben genannten Problem nicht betroffen, da sie für eine leere Eingangssequenz einen (auch definierbaren) Null-Wert zurück­gibt, nicht aber die leere Sequenz.

Funktionsdefinition:

XPath 1.0:

Funktion nicht verfügbar

XPath 2.0:

fn:exactly-one($arg as item()*) as item()

   

<< 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