fn:name

(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: XPath 1.0

Rückgabewert: Ein String xs:string in der lexikalischen Form eines QName, der den Bezeichner des der Funktion übergebenen Nodes darstellt.

Aufruf/Argumente:

fn:name($node-sequenz)

$node-sequenz:
Optional. Eine Sequenz aus Nodes. Wird kein Argument übergeben, so wird der QName des Kontextknotens ausgegeben; gegebenenfalls (für einen namenlo­sen Kontextknoten) der leere String.

Verwendungszweck:

Die Funktion fn:name() gibt einen String xs:string in Form des nicht expandierten QNames eines Nodes aus – in der Regel wird es sich um den Tag- bzw. Attributnamen (generic identifier) handeln, wie er im Quelltext des XML-Dokuments steht.

Ohne übergebenes Argument wird die Funktion auf den Kontextknoten angewendet und gibt dessen Namen zurück. Es erfolgt jedoch eine Fehlermeldung, wenn kein Kontextknoten existiert (err:XPDY0002) bzw. das Kontextitem kein Node ist (err:XPTY0004).

Ein übergebenes Argument muss eine Sequenz aus Nodes sein. Ent­hält die übergebene Sequenz genau einen Knoten, so wird dessen nicht expan­dierter QName, bestehend aus eventuellem Präfix und dem lokalen Bezeichner, zurückgegeben. Sind mehrere Knoten in der Sequenz, so wird der QName des ersten Knotens zurückgegeben.

Für eine übergebene leere Sequenz wird ebenfalls ein leerer String zurückgege­ben. Handelt es sich bei dem übergebenen Wert nicht um eine Node-Sequenz (also z.B. um atomare Werte), so soll der Parser einen Fehler signalisieren.

Handelt es sich beim übergebe­nen Knoten bzw. beim ersten Node der übergebenen Sequenz um einen der namenlosen Knoten (Document Node, Textknoten, Kommentarknoten), so wird ein leerer String zurückgegeben.

Für Element- bzw. Attributnamen, die sich in einem Namensraum befinden, wird das entsprechende Namensraumpräfix mit ausgegeben.

In der Regel wird es sich um das gleiche Präfix handeln, wie es im Quelltext des Dokument verwendet wurde, gelegentlich jedoch auch um ein anderes. Dies kann geschehen, wenn innerhalb eines Dokuments oder innerhalb mehrerer, erst bei der Transformation zusammengeführten Dokumente, ein- und derselbe Namensraum-URI mit mehreren Präfixen deklariert ist. Da der Parser intern mit expandierten QNames arbeitet, ist es bei deren Rückwandlung nicht vorhersehbar, welches Präfix der Parser bei fn:name() ausgibt.

Obwohl es sich hier sicherlich um eine eher marginale Unwägbarkeit handelt, empfiehlt es sich, beim Test von QNames auf Namensgleichheit mittels fn:name() Vorsicht walten zu lassen.

Wenn ein Rückgabewert in Form xs:QName benötigt wird
Die Funktion name() wird als fn:name() in XPath 2.0 nur aus Kompatibi­litätsgründen bei­behalten. Zusätzlich wird die neue Funktion fn:node-name() eingeführt, die als Rückgabewert ausdrücklich einen QName hat: fn:node-name($srcval as node()?) as xs:string?

Beispiel – Unterscheidung zwischen Bezeichner und Lokalem Bezeichner:

Quelldokument:

<?xml version="1.0"?>
<beispiel xmlns:test="mein-test-namespace">
  <mein_element>Element ohne Namensraum</mein_element>
  <test:mein_element>Element mit Namensraum</test:mein_element>
</beispiel>

In diesem Dokument sind zwei Elemente mit gleichem lokalen Bezeichner ent­halten, die sich anhand ihres Namensraumes unterscheiden.

Das Stylesheet:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="beispiel">
    <ergebnis>
      <xsl:for-each select="*">
        <xsl:value-of select="fn:position()"/>. Element:
        Der Name des Elements ist "<xsl:value-of select="fn:name()"/>".
        Der local-name des Elements ist "<xsl:value-of select="fn:local-name()"/>".
        Der Namensraum-URI ist "<xsl:value-of select="fn:namespace-uri()"/>".
      </xsl:for-each>
    </ergebnis>
  </xsl:template>
</xsl:stylesheet>

Das Stylesheet liest den lokalen Bezeichner und den Namensraum-URI aller Elemente in <beispiel> mittels einer Schleife aus.

Das Ergebnis:

<?xml version="1.0" encoding="UTF-8"?>
<ergebnis>
   1. Element:
   Der Name des Elements ist "mein_element".
   Der local-name des Elements ist "mein_element".
   Der Namensraum-URI ist "".

   2. Element:
   Der Name des Elements ist "test:mein_element".
   Der local-name des Elements ist "mein_element".
   Der Namensraum-URI ist "mein-test-namespace".
</ergebnis>

Die Funktion fn:name() gibt für beide Elemente den QName aus, der für das erste Element nur aus dem lokalen Bezeichner, für das zweite Element aus loka­lem Bezeichner und Namensraumpräfix besteht. Da hier Eindeutigkeit vorliegt, gibt die Funktion in jedem Fall das wirklich verwendete Präfix aus.

Funktionsdefinition:

XPath 1.0:

name(node)=> string

XPath 2.0:

fn:name() as xs:string

fn:name($arg as node()?) as xs:string

   

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