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 wer­den 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 Argu­ment ü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 Sprach­bezeichners keine Rolle spielt (caseless matching). Stimmt der Vorgabe­wert mit dem Attributwert überein, d.h., die Sprache des Element­inhalts ent­spricht 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 Sprachbezeich­ners, 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 Zeichen­folge -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 Kno­ten) 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 Eingabese­quenz 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 übergebe­nen 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