fn:compare

(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: Stringfunktionen – Analyse

Herkunft: XPath 2.0

Rückgabewert: Die Integerzahlen -1, 0 oder +1 – abhängig davon, ob der erste Vergleichswert verglichen mit dem zweiten als kleiner, gleich oder größer gewertet wird –, oder die leere Sequenz, falls einer der zu vergleichenden Werte die leere Sequenz ist.

Aufruf/Argumente:

fn:compare($string1?, $string2?, $collation?)

$string1:
Ein String xs:string, mit dem der zweite Eingabewert verglichen wird. Wird als erstes Argument eine leere Sequenz übergeben, so gibt die Funktion eine leere Sequenz zurück.

$string2:
Ein String xs:string, der mit dem ersten Eingabewert verglichen wird. Wird als zweites Argument eine leere Sequenz übergeben, so gibt die Funktion eine leere Sequenz zurück.

$collation:
Optional. Das dritte Argument bezeichnet mit einem String xs:string einen Vergleichsregelsatz (collation), der dem Stringvergleich zugrunde gelegt wird. Der String muss lexikalisch dem Typ xs:anyURI entspre­chen.

Verwendungszweck:

Die Funktion dient zum Vergleich zweier Strings und kann zunächst deren Identität (auch unter Hinzuziehung einer Collation) feststellen. Die Reihenfolge, in der die zu vergleichenden Strings übergeben werden, ist relevant.

Bei vollständiger Ungleichheit werden die Strings zeichenweise verglichen. Ist ein Teilstring am Beginn beider Strings gleich, so wird ab dem ersten auf den identischen Substring folgenden Zeichen verglichen. Enthält einer der beiden Strings am Anfang den jeweils anderen Vergleichsstring vollständig, so wird er als »größer« gewertet.

Das Ergebnis des Zeichenvergleichs hängt von der verwendeten Collation ab. Im Allgemeinen gilt, analog zum Stringvergleich mittels ASCII-Wert:

A < a und a < b

Die Funktion verwendet die Default-Collation der Systemumgebung, sofern nicht als drittes Argument ein String übergeben wird, der – als URI ausgewertet – eine alternative Collation bezeichnet. Lässt sich das dritte Argument nicht lexikalisch als xs:anyURI deuten, so erfolgt eine Fehlermeldung. Existiert in der Systemumgebung keine Default-Collation, so wird für die Funktion die Unicode Codepoint Collation herangezogen.

Auf Grundlage der Funktion fn:compare() ist auch die Anwendung folgender Operatoren auf Stringwerte definiert:

Operator Anwendung Beschreibung

eq

$string1 eq $string2

true für string1 'gleich' string2

ne

$string1 ne $string2

true für string1 'ungleich' string2

gt

$string1 gt $string2

true für string1 'größer' string2

lt

$string1 lt $string2

true für string1 'kleiner' string2

le

$string1 le $string2

true für string1 'kleiner gleich' string2

ge

$string1 ge $string2

true für string1 'größer gleich' string2

Beispiele:

Beispiel 1 – Vergleich zweier identischer Strings:

fn:compare('abc', 'abc') ergibt 0

Beide Strings sind identisch – der Rückgabewert der Funktion ist daher 0.

Beispiel 2 – Vergleich zweier zum Teil identischer Strings:

fn:compare('abc', 'abcd') ergibt -1

In diesem Fall ist der zweite String für die ersten drei Zeichen gleich dem ersten String. Da der erste String aber kürzer ist, wird er als »kleiner« gewertet (mit anderen Worten: "" < d). Würden die Argumente vertauscht, so würde die Funktion daher +1 zurückgeben.

Beispiel 3 – Vergleich zweier identischer Strings:

fn:compare('abce', 'abcd') ergibt +1

Die Strings sind für die ersten drei Zeichen identisch, für das vierte Zeichen gilt jedoch e > d, daher wird der erste String als »größer« gewertet.

Beispiel 4 – Vergleich zweier verschiedener Strings:

fn:compare('def', 'abcd') ergibt +1

Bei diesem Vergleich ist bereits das erste Zeichen ausschlaggebend: d > a, daher wird der erste String als »größer« gewertet. Es spielt keine Rolle, dass der zweite String mehr Zeichen aufweist als der erste.

Beispiel 5 – Vergleich abhängig von der Default-Collation:

fn:compare('Strasse', 'Straße') ergibt 0

Wenn die Default-Collation das 'ß' im Stringvergleich als identisch mit 'ss' wer­tet, gelten beide Strings als identisch und die Funktion gibt den Wert 0 zurück. Andernfalls hängt das Ergebnis davon ab, wie – anhand der Regeln der Colla­tion – der Vergleich zwischen 's' und 'ß' ausfällt, die jeweils als vierte Zeichen auf den identischen Substring 'Stra' folgen.

Funktionsdefinition:

XPath 1.0:

Funktion nicht verfügbar

XPath 2.0:

fn:compare($comparand1 as xs:string?,
           $comparand2 as xs:string?) as xs:integer?

fn:compare($comparand1 as xs:string?, 
           $comparand2 as xs:string?, 
           $collationLiteral as xs:string) as xs:integer?

   

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