xsl:namespace-alias

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 6.)

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

 

Die Deklaration xsl:namespace-alias wird eingesetzt, um während der Ausgabe von Elementen ins Ergebnisdokument einen Namensraum, der an diese gebunden ist, durch einen anderen Namensraum zu ersetzen.

Klassifizierung Deklaration
Funktionsgruppe XSLT-Namensraum maskieren
Einführung XSLT 1.0

Position im Stylesheet und erlaubte Inhalte:

Die Deklaration xsl:namespace-alias gehört zu den Toplevel-Elementen und tritt somit ausschließlich als direktes Kind-Element der Wurzelelemente xsl:stylesheet oder xsl:transform auf. Das Element ist stets leer.

Attribute:

Für die Deklaration gelten die üblichen Standardattribute. Dazu besitzt xsl:namespace-alias besitzt zwei obligatorisch zu setzende Attribute stylesheet-prefix und result-prefix, die das Namensraumpräfix des zu ersetzenden Namensraums und dessen Alias benennen.

result-prefix

Wert

prefix | "#default"

Verwendung

Obligatorisch

Einführung

XSLT 1.0

Das result-prefix-Attribut nennt das Präfix des Namensraums, der im Ergebnisdokument anstelle des auszutauschenden Namensraums verwendet werden soll. Sollen so beispielsweise Literal Result Elements auf den XSLT-Namensraum abgebildet werden, so muss der Wert "xsl" sein.

stylesheet-prefix

Wert

prefix | "#default"

Verwendung

Obligatorisch

Einführung

XSLT 1.0

Das stylesheet-prefix-Attribut benennt das Präfix, an das der auszutauschende Namensraum gebunden ist.

Soll der xmlns-Default-Namensraum präfixloser Elemente auf einen neuen Namensraum gemappt werden, so wird als Wert "#default" angegeben. Existiert keine Deklaration eines Defaultnamensraums, so wird hierfür der Null-Namensraum angenommen.

Hinweis: Tritt, beispielsweise im Zuge von Stylesheet-Importen, derselbe Wert des Attri­buts stylesheet-prefix bei mehreren xsl:namespace-alias-Deklarationen auf, so gilt die Deklaration mit der höchsten Importpräzedenz.

Verwendungszweck:

Die Anweisung xsl:namespace-alias dient dazu, entweder einen durch ein Präfix bestimmten Namensraum des Stylesheets oder dessen Default-Namensraum im Ergebnisdokument durch einen anderen Namensraum zu ersetzen. Für jeden auf diese Weise zu ersetzenden Namens­raum muss eine eigene xsl:namespace-alias-Deklaration erfolgen.

Hauptverwendungszweck ist im Allgemeinen die indirekte Ausgabe von XSLT-Elementen bei der Generierung von XSLT-Stylesheets durch eine XSLT-Transfor­mation. Eine direkte Ausgabe (d.h. als Literal Result Element) von XSLT-Instruktionen oder -Deklarationen in das Ergebnisdokument ist nicht möglich, da diese bei der Verarbeitung des Stylesheets unweigerlich ausgeführt würden.

Durch Verwendung eines (beliebigen) Dummy-Namensraums mit (beliebigem) Präfix ist es möglich, solche auszugebenden XSLT-Instruktionen als normale Literal Result Elements zu tarnen und erst bei der Ausgabe dem XSLT-Namens­raum zuzuordnen. Zur Erinnerung: die Kennzeichnung eines Elements als XSLT-Instruktion erfolgt einzig über den an sie gebundenen Namensraum-URI! Bereits die Verwendung des Präfixes »xsl« ist nicht zwangsläufig.

Es ist dabei vom XSLT-Prozessor abhängig (siehe Beispiele), ob das ursprünglich im Zusammenhang mit dem Dummy-Namensraum eingesetzte Präfix (im Bei­spiel axsl:) tatsächlich durch das Resultatpräfix xsl: ersetzt wird. Ist dies nicht der Fall, so wird dem alten Präfix allerdings in jedem Fall der neue Namensraum-URI zugewiesen (im Beispiel der für XSLT-Instruktionen). (Anmerkung: In diesem Fall würde für die XSLT-Instruktionen im so generierten Stylesheet ein anderes Präfix als »xsl« verwendet, hier »axsl«. Soll dies vermieden werden, so ist bereits im generierenden Stylesheet ein alternatives Präfix für die dortigen XSLT-Instruktionen zu benutzen und »xsl« in Zusammenhang mit dem Dummy-Namensraum anzugeben.)

Beispiele:

Beispiel 1 – Mapping eines Namensraums auf den XSLT-Namensraum:

Stylesheet:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:axsl="http://dummy-namespace">
  <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>
  <xsl:template match="/">
    <axsl:stylesheet version="1.0">
      <axsl:template match="/">
        <ausgabe>Namespace-Mapping erfolgreich!</ausgabe>
      </axsl:template>
    </axsl:stylesheet>
  </xsl:template>
</xsl:stylesheet>

Ergebnisdokument (Saxon):

<?xml version="1.0" encoding="utf-8"?>
<axsl:stylesheet xmlns:axsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <axsl:template match="/">
    <ausgabe>Namespace-Mapping erfolgreich!</ausgabe>
  </axsl:template>
</axsl:stylesheet>

Saxon behält das Präfix axsl:, weist ihm jedoch im Ergebnisdokument den XSLT-Namensraum zu. Das Präfix xsl: wird zusätzlich mit gleichem Namens­raum deklariert.

Ergebnisdokument (Xalan):

<?xml version="1.0" encoding="UTF-8"?>
<axsl:stylesheet xmlns:axsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <axsl:template match="/">
    <ausgabe>Namespace-Mapping erfolgreich!</ausgabe>
  </axsl:template>
</axsl:stylesheet>

Xalan behält ebenfalls das Präfix axsl: und weist ihm den XSLT-Namensraum zu. Das Präfix xsl: wird nicht zusätzlich deklariert.

Ergebnisdokument (msxml.NET):

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <ausgabe>Namespace-Mapping erfolgreich!</ausgabe>
  </xsl:template>
</xsl:stylesheet>

Der msxml.NET-Prozessor verwirft das ursprüngliche Präfix und ersetzt es durch das Präfix xsl: mit korrekt zugewiesenem XSLT-Namensraum.

Beispiel 2 – Mapping des Default-Namensraums auf XSLT-Namens­raum:

Stylesheet:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:a="http://literal-result-namespace" xmlns="http://dummy-namespace">
  <xsl:namespace-alias stylesheet-prefix="#default" result-prefix="xsl"/>
  <xsl:template match="/">
    <stylesheet version="1.0">
      <template match="/">
        <a:ausgabe>Namespace-Mapping erfolgreich!</a:ausgabe>
      </template>
    </stylesheet>
  </xsl:template>
</xsl:stylesheet>

In diesem Fall benötigen die »echten« Literal Result Elements einen Namens­raum, der sie von den zukünftigen XSLT-Elementen des Ergebnisstylesheets unterscheidet.

Ergebnisdokument (Xalan):

<?xml version="1.0" encoding="UTF-8"?>
<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://literal-result-namespace" version="1.0">
  <template match="/">
    <a:ausgabe>Namespace-Mapping erfolgreich!</a:ausgabe>
  </template>
</stylesheet>

Xalan weist den XSLT-Namensraum im Ergebnisdokument als Default-Namens­raum zu. Der andere für die Literal Result Elements verwendete Namensraum wird unverändert kopiert.

Elementdefinition:

XSLT 1.0:

<!-- Category: top-level-element -->
<xsl:namespace-alias 
     stylesheet-prefix = prefix | "#default"
     result-prefix = prefix | "#default" 
/>

XSLT 2.0:

<!-- Category: declaration -->
<xsl:namespace-alias
     stylesheet-prefix = prefix | "#default"
     result-prefix = prefix | "#default" 
/>
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