fn:lang
(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: Nodenamen und Identifier
Herkunft: XSLT 1.0, XPath 2.0 Core
Rückgabewert: Ein boolescher Wert; true bzw. false, abhängig davon, ob für den untersuchten Kontextknoten ein xml:lang-Attribut mit einem Wert gültig ist, der dem übergebenen Sprachcodebezeichner entspricht.
Aufruf/Argumente:
fn:lang($sprachbezeichner?, $node)
$sprachbezeichner:
Obligatorisch. Das Argument muss ein String xs:string sein, der inhaltlich einem Kürzel für einen Sprachcode entspricht. Es kann sich um einen der definierten Codes nach ISO 639, einen bei der IANA registrierten oder einen nutzerdefinierten Sprachcode handeln. Der leere String ist als Wert gestattet.
$node: (neu in XPath 2.0)
Optional. Ein XPath-Ausdruck, der einen Knoten bezeichnet, sofern die Funktion nicht auf den Kontextknoten angewendet werden soll. Dieses Argument steht in XPath 1.0 nicht zur Verfügung. Wenn es übergeben wird, so darf es sich nicht um die leere Sequenz handeln.
Verwendungszweck:
Das xml:lang-Attribut kennzeichnet die Sprache des Inhaltes eines Elements bzw. des Inhalts seiner Nachfahren, sofern diese nicht ein eigenes, abweichendes xml:lang-Attribut besitzen.
Die Funktion fn:lang() vergleicht den ihr übergebenen String mit dem Wert des xml:lang-Attributs des Kontextknotens oder – sofern ein zweites Argument übergeben wurde – mit dem xml:lang-Attribut des so bezeichneten Knotens. Wird dort kein entsprechendes Attribut vorgefunden, so sucht die Funktion von diesem Knoten ausgehend in Richtung der Ancestor-Achse nach dem ersten dort auftretenden Element, das ein solches Attribut besitzt.
Der Vergleich ist nicht case-sensitive, weswegen die Schreibweise des übergebenen Sprachbezeichners keine Rolle spielt (caseless matching). Stimmt der Vorgabewert mit dem Attributwert überein, d.h., die Sprache des Elementinhalts entspricht der angefragten Sprache, so gibt die Funktion den booleschen Wert true zurück, ansonsten false.
Es wird dabei nur mit der Hauptgruppe der Sprachangabe verglichen. In xml:lang mit Bindestrich (#x002D) beginnende Suffixe des Sprachbezeichners, die Untergruppen einer Sprache spezifizieren, werden ignoriert: Die Funktion gibt daher für alle Untergruppen der angefragten Sprache gleichermaßen true zurück. Zum Beispiel ergibt auch ein xml:lang-Attribut mit Wert "fr-CA" für kanadisches Französisch true bei Test auf "fr", da die Zeichenfolge -CA innerhalb des Sprachbezeichners beim Vergleich verworfen wird.
Wird der Funktion der leere String als Sprachbezeichner übergeben, so gibt sie den Wert false zurück (der leere String wird als »keine Sprache« interpretiert).
Wird weder ein für den Kontextknoten (bzw. den alternativ bezeichneten Knoten) noch für einen seiner Vorfahren gültiges xml:lang-Attribut gefunden, so gibt die Funktion den Wert false zurück.
Eine Fehlermeldung erfolgt hingegen, wenn kein zweites Argument übergeben wurde und gleichzeitig kein Kontextknoten existiert (err:XPDY0002) oder aber das Kontextitem kein Node ist (err:XPTY0004).
Mögliche Kompatibilitätsprobleme:
Besteht in XPath 2.0 die Eingabesequenz aus mehr als einem Item, so wird ein Fehler gemeldet; ebenso, wenn es sich bei dem übergebenen Wert um einen nicht typisierten Node handelt. Ansonsten wird der typisierte Wert als Grundlage für den Test verwendet. In XSLT 1.0 existieren keine typisierten Nodes. Hier wird im Fall eines übergebenen Nodesets dessen erster Node verarbeitet.
Beispiel – Abfrage eines Language-Codes:
Wendet man die Funktion folgendermaßen an:
fn:lang("fr")
so wird für den <para>-Container als Kontextknoten in allen folgenden Fällen – außer dem letzten – der Wert true zurückgegeben:
<!-- dies ist französisch -->
<para xml:lang="fr"/>
<!-- dies ist französisch -->
<div xml:lang="fr">
<!-- der para-Container "erbt" die Sprachangabe -->
<para/>
</div>
<!-- dies ist französisch -->
<para xml:lang="FR"/>
<!-- dies ist franko-kanadisch -->
<para xml:lang="fr-CA"/>
<!-- dies ist japanisch -->
<para xml:lang="jp"/>
Funktionsdefinition:
XSLT 1.0:
lang(string) => boolean
XPath 2.0:
fn:lang($testlang as xs:string?) as xs:boolean
fn:lang($testlang as xs:string?,
$node as node()) as xs:boolean
<< 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