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 entsprechen.
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' wertet, 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 Collation – 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