fn:normalize-space

(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 – Manipulation

Herkunft: XPath 1.0

Rückgabewert: Ein String xs:string; die Kopie des Eingabestrings mit vorgenommener Whitespace-Normalisierung. Ist der Eingabestring leer, so wird der leere String zurückgegeben.

Aufruf/Argumente:

fn:normalize-space($eingabestring?)

$eingabestring:
Optional. Das Argument der Funktion ist eine zu normalisierende Zeichenkette. Handelt es sich bei dem Argument nicht um einen String xs:string, so wird ein Typfehler gemeldet. Die leere Sequenz ist als Wert zugelassen und wird wie der leere String behandelt. (In XPath 1.0 wird der Wert hingegen, falls es sich nicht um einen String handelt, nach den Regeln der Umwandlungsfunktion string() in einen String verwandelt.). Wird kein Argument übergeben, so bezieht sich die Funktion auf das Kontextitem.

Verwendungszweck:

Die Funktion fn:normalize-space() entfernt aus einer ihr übergebenen Zeichenkette führende und folgende Leerzeichen und ersetzt alle innerhalb des Strings auftauchenden Folgen aus einem oder mehrerer beliebiger Whitespacezeichen durch genau ein einziges Leerzeichen #x20 (SPC).

Die Funktion macht keinen Unterschied zwischen der Übergabe eines leeren Strings oder der leeren Sequenz: In beiden Fällen gibt die Funktion den leeren String zurück. (Dies entspricht in XPath 2.0 dem allgemeinen Verhalten von Stringfunktionen. Eine Ausnahme hiervon ist fn:normalize-unicode(). Bei den meisten anderen Funktionen resultiert die Übergabe der leeren Sequenz hingegen in einer ebenfalls leeren Ausgabesequenz.)

Wird der Funktion kein Argument übergeben, so bezieht sie sich auf das Kontextitem und gibt in normalisierter Form dessen gemäß fn:string() bestimmten Stringwert zurück. Ein Kontextitem muss zu diesem Zeitpunkt auch definiert sein, ansonsten wird ein Laufzeitfehler gemeldet (err:XPDY0002).

Zu den Whitespacezeichen gemäß XML 1.0 zählen im Kontext der Funktion gewöhnliche Leerzeichen (SPC) #x20, der Tabulatorbefehl (TAB) #x9, der Zeilenumbruchbefehl (LF) #xA und der Wagenrücklaufbefehl (CR) #xD.

In XML 1.1 ist der Vorrat an Whitespacezeichen um das NEL-Zeichen (Newline, U+0085 bzw. #x85) aus dem IBM-Mainframe-Bereich sowie um das Unicode-Zeilentrennzeichen #x2028 erweitert. In der Regel vereinheitlicht der XML-Parser die Zeilenendzeichen beim Einlesen des Dokuments bereits zu LF, sodass bei der Verarbeitung geparster XML 1.1-Ressourcen keine Probleme zu erwarten sind.

Eine mittels der XSLT-Funktion unparsed-text() eingelesene Ressource sollte zumindest keine in XML verbotenen Zeichen enthalten. Im Falle nicht auflösbarer Zeichen-Oktette wirft diese Funktion einen Fehler. Die Ressource wird jedoch vor der Verarbeitung nicht geparst.

Beispiele:

Beispiel 1 – fn:normalize-space() auf String angewendet

fn:normalize-space("  Hallo   

                                      Welt!  ")

gibt zurück:

Hallo Welt!

Führende und folgende Leerzeichen am Anfang und Ende des übergebenen Strings werden entfernt. Folgen von Whitespacezeichen (die hier auch den Zeilenumbruch umfassen) im Inneren des Strings werden zu einem einzigen Leerzeichen (SPC) zusammengefasst.

Beispiel 2 – fn:normalize-space() auf leere Sequenz angewendet

fn:normalize-space(())

ergibt ""

Ist der Eingangswert der Funktion eine leere Sequenz, so wird der leere String zurückgegeben. Dies entspricht in XPath 2.0 dem allgemeinen Verhalten der Stringfunktionen. Keinesfalls gibt die Funktion eine leere Sequenz (d.h. keinen Wert) zurück.

Beispiel 3 – fn:normalize-space() in Verbindung mit Schlüsseln

Bei Deklarationen von Schlüsseln mit xsl:key ist die grundsätzliche Verwendung von fn:normalize-space() von Vorteil. Auf diesem Wege wird ein bereits »normalisierter« Index aufgebaut. Beim Test eines sinvollerweise ebenfalls normalisierten Schlüsselkandidaten muss keine Rücksicht auf dort eventuell auftauchende Zeilenumbrüche etc. genommen werden.

Zunächst wird ein normalisierter Index aufgebaut:

<xsl:key name="buchautor" match="buch" use="fn:normalize-space(autor)"/>

Bücher eines Autors können jetzt so gefunden werden:

<xsl:for-each select="key('buchautor', fn:normalize-space($autor)">
  <!-- Template-Anweisungen --> 
</xsl:for-each>

wobei die Variable $autor hier den gewünschten Autornamen enthalten soll – ihr Inhalt wird vorsichtshalber ebenfalls normalisiert.

Funktionsdefinition:

XPath 1.0:

normalize-space(string?) => string

XPath 2.0:

fn:normalize-space() as xs:string

fn:normalize-space($arg as xs:string?) as xs:string

Mögliche Kompatibilitätsprobleme XPath 2.0 zu XPath 1.0:
Keine. In XPath 2.0 wird im Fall eines fehlenden Arguments ebenfalls der normalisierte Stringwert des Kontext-Nodes zurückgegeben.

   

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