Namensraum mit Präfix für Literal Result Elements

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

Die andere Möglichkeit ist mit mehr Schreibaufwand verbunden, dafür aber »sieht« man die Namensraumbindung. Genauso kann nämlich für Literal Result Elements ein weiterer Namensraum mit Präfix vereinbart werden, wobei natürlich weder xsl: als Präfix noch der XSLT-Namensraum-URI verwendet werden darf. Hier ist die Kennzeichnung unmissverständlich, wenn auch umständlicher:

Code-Beispiel: kap01/1.6/stylesheet4.xsl.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <xsl:template match="/">
    <xhtml:html>
      <xhtml:head>
        <xhtml:title>Ergebnisdokument</xhtml:title>
      </xhtml:head>
      <xhtml:body>
        <xhtml:h1>XSLT-Transformation</xhtml:h1>
        <xhtml:p><xsl:value-of select="wurzelelement"/></xhtml:p>
      </xhtml:body>
    </xhtml:html>
  </xsl:template>
</xsl:stylesheet>

Zu beachten ist, dass Elemente ohne Präfix in diesem Fall wiederum im Null-Namensraum wären (ein Ausdruck dafür, dass an ein Element kein Namensraum gebunden ist), da diesmal kein Default-Namensraum vereinbart ist. Ein Ele­ment, das dem »xhtml«-Namensraum angehören soll, muss hier dagegen mit dem Präfix xhtml versehen werden. Das Ergebnis ist jedoch eher noch weniger XHTML als beim vorherigen Versuch. Beachten Sie, dass das erzeugte Meta-Element nun im Null-Namensraum ist! Sehr unschön.

Code-Beispiel: kap01/1.06/transformation4.html (wieder kein XHTML).

<?xml version="1.0" encoding="UTF-8"?>
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <xhtml:head>
    <meta http-equiv="Content-Type"content="text/html; charset=utf-8" />
    <xhtml:title>Ergebnisdokument</xhtml:title>
  </xhtml:head>
  <xhtml:body>
    <xhtml:h1>XSLT-Transformation (Version c)</xhtml:h1>
    <xhtml:p>Das ist ein Testinhalt aus 'dummy.xml'.</xhtml:p>
  </xhtml:body>
</xhtml:html>

Ein kleiner Seitenblick sei hier gestattet: Sinnvoll ist die Festlegung eines Namensraums mit Präfix für Literal Result Elements nur im XML-Kontext. Soll beispielsweise ein XML-Dokument erzeugt werden, dass MathML-Elemente enthält, so können diese als Literal Result Elements im Stylesheet mit Namensraum und Präfix auftreten und erscheinen wie gewünscht ebenso im Ergebnis:

Code-Beispiel: kap01/1.06/stylesheet_math.xsl.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:math="http://www.w3.org/1998/Math/MathML">
  <xsl:template match="/">
    <ergebnis>
      <math:math>
        <math:msup>
          <math:mfenced>
            <math:mrow>
              <math:mi>a</math:mi>
              <math:mo>+</math:mo>
              <math:mi>b</math:mi>
            </math:mrow>
          </math:mfenced>
          <math:mn>2</math:mn>
        </math:msup>
      </math:math>
    </ergebnis>
  </xsl:template>
</xsl:stylesheet>

Beachten Sie, dass das Wurzelelement <ergebnis> des erzeugten XML-Dokuments selbst nicht im MathML-Namensraum ist, da es nicht das entsprechende Präfix trägt.

Code-Beispiel: kap01/1.06/transformation_math.xml.

<?xml version="1.0" encoding="UTF-8"?>
<ergebnis xmlns:math="http://www.w3.org/1998/Math/MathML">
  <math:math>
    <math:msup>
      <math:mfenced>
        <math:mrow>
          <math:mi>a</math:mi>
          <math:mo>+</math:mo>
          <math:mi>b</math:mi>
        </math:mrow>
      </math:mfenced>
      <math:mn>2</math:mn>
    </math:msup>
  </math:math>
</ergebnis>

Die obige Darstellung ist für die Präsentation geschönt. Der Prozessor gibt nämlich eigentlich beim Erzeugen eines XML-Dokuments von sich aus keine Zeilenumbrüche aus. Auch dies soll aber gleich geklärt werden.

Zusammenfassung zu Literal Result Elements

  • Bei jeder Instanzierung einer Template-Regel werden die Literal Result Elements aus ihrem Template-Rumpf »wie sie sind« in das Ergebnisdokument kopiert.
  • Beim Kopieren von Literal Result Elements wird ihr Namensraum mitkopiert. Ohne vereinbarten Default-Namensraum befinden sich präfixlose LRE in keinem Namensraum (auch als Null-Namensraum bezeichnet). Besitzen Literal Result Elements einen Namensraum (Default oder mit Präfix), so wird im Ergebnisdoku­ment ebenfalls eine entsprechende Deklaration erzeugt. (Anmerkung: Sollten im Quelldokument einem Namensraum-URI zwei oder mehrere Präfixe zugeordnet sein, so steht es dem Prozessor frei, welches Präfix er im Ergebnisdokument verwendet.)
  • In Literal Result Elements enthaltener Text wird unverändert mitkopiert. Dies gilt, weniger offensichtlich, auch für Zeilenumbruchzeichen zwischen diesen Ele­menten und zwecks Einrückung eingefügte Leerzeichen.
  • Attribute von Literal Result Elements werden zusammen mit diesen kopiert. Ihr Wert kann dabei statisch vorgegeben sein oder jeweils zur Laufzeit der aktuellen Template-Regel durch einen XPath-Ausdruck innerhalb eines Attri­butwert-Templates dynamisch bestimmt werden.

   

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