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 Kontextknoten.
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 seinem lokalen Namen (der QName hat also kein Namensraumpräfix) und ist dieser 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 leerem 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 vorhanden 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-namespace.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 Namensraum-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