fn:namespace-uri

(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: Die Funktion gibt den URI-String des Namensraumanteils des expandierten Namens des untersuchten Knotens als xs:anyURI aus, also denjenigen URI-String, der an das Präfix des QNames gebunden ist.

Aufruf/Argumente:

fn:namespace-uri($node-sequenz)

$node-sequenz:
Untersucht wird stets der erste Knoten einer übergebenen Sequenz aus Nodes, dessen Namensraum-URI als xs:anyURI ausgegeben wird. Ist die übergebene Sequenz leer, gibt die Funktion einen xs:anyURI zurück, der dem leeren String entspricht. Wird kein Argument übergeben, so bezieht sich die Funktion auf den Kontext­knoten.

Verwendungszweck:

Die Funktion gibt den Namensraum-URI des ersten Knoten einer übergebenen Nodesequenz oder des Kontextknotens aus. Der Rückgabestring xs:anyURI ist für alle Knotentypen außer Element- und Attributknoten mit Namensraumpräfix oder (nicht leeren) Default-Namensraum stets leer.

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

Entspricht der expandierte Name des betrachteten Knotens sei­nem lokalen Namen (der QName hat also kein Namensraumpräfix) und ist die­ser im Null-Namensraum (Default-Namensraum mit leerem Namensraum-URI-String), so gibt die Funktion ebenfalls einen leeren String zurück.

Auch für Elemente und Attribute, die sich im Null-Namensraum befinden, wird der leere String zurückgegeben. Hierfür muss ein Default-Namensraum mit lee­rem URI-String deklariert sein.

Ebenfalls leer ist der Rückgabestring für Elemente und Attribute, die sich nicht in einem Namensraum befinden, was, technisch gesehen, allerdings nicht dem Null-Namensraum entspricht (es liegt dann gar keine Deklaration für den Default-Namensraum vor). Dennoch wird dies von XPath in Form eines leeren Namensraum-URI-Strings umgesetzt, da kein null-Wert als Datentyp vorhan­den ist, der diesen Umstand ausdrücken könnte.

Beispiel – Ausgabe eines Namensraum-URIs:

Quelldokument:

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

Innerhalb des Elements <beispiel> gilt der Namensraum "http://www.mein-test-name­space.de". Das zweite Element ist durch sein Präfix test an diesen Namensraum gebunden, das erste nicht.

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>

Im Stylesheet wird durch die Funktion fn:namespace-uri() der Wert des URI-Strings der Namensaumknoten der verarbeiteten Elemente ausgelesen.

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 "http://www.mein-test-namespace.de".
</ergebnis>

Das erste verarbeitete Element befindet sich in keinem Namensraum, daher wird in diesem Fall ein xs:anyURI ausgegeben, der dem leeren String entspricht. Das zweite Element befindet sich im test-Namensraum. Hier wird der entsprechend vereinbarte Namens­raum-URI als xs:anyURI ausgegeben. (Die Anführungszeichen werden im Stylesheet erzeugt.)

Funktionsdefinition:

XPath 1.0:

namespace-uri(node-set?) => string

XPath 2.0:

fn:namespace-uri() as xs:anyURI

fn:namespace-uri($arg as node()?) as xs:anyURI

   

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