xsl:attribute-set

(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

 

Das Toplevel-Element xsl:attribute-set dient dazu, Attributlisten zu definieren und zu benennen. Der so entstandene Attributset – eine Sequenz aus Attributknoten – kann als Ganzes einem Output-Element zugewiesen werden.

Klassifizierung Deklaration
Funktionsgruppe Output erzeugen
Einführung XSLT 1.0

Position im Stylesheet und erlaubte Inhalte:

xsl:attribute-set steht als Toplevel-Element unmittelbar innerhalb des Wurzelelements des Stylesheets. Es dürfen beliebig viele Attributsets im gleichen Stylesheet definiert, inkludiert oder importiert werden.

Das Element enthält eine beliebige Anzahl (sinnvollerweise mindestens eine!) von xsl:attribute-Instruktionen. Andere Inhalte, etwa Literal Result Elements, sind nicht gestattet.

Attribute:

Es gelten die Standardattribute. Daneben besitzt die Instruktion xsl:attribute-set ein obligatorisches Attribut name und ein optionales Attribut use-attribute-sets. Attributwert-Templates können für beide Attribute nicht verwendet werden.

name

Wert

QName

Verwendung

Obligatorisch

Einführung

XSLT 1.0

Das name-Attribut der Anweisung ergibt den Bezeichner des erzeugten Attributsets. Es muss sich um einen QName handeln.

use-attribute-sets

Wert

QNames (durch Leerzeichen getrennte Liste)

Verwendung

Optional

Einführung

XSLT 1.0

Das use-attribute-sets-Attribut dient dazu, andere Attributsets in das definierte Attributset zu importieren. Als Werte sind die durch Leerzeichen (Whitespace) getrennten QNames definierter Attributsets gestattet. Zirkelbezüge sind verboten. Bei konkurrierenden, gleichnamigen Attributen in mehreren importierten Attributsets gilt das zuerst importierte; ausschlaggebend ist die Reihenfolge in der QName-Liste.

Hinweis – Bindung von Attributsets an erzeugte oder kopierte Elemente
Ein gleichnamiges Attribut use-attribute-sets dient dazu, mit xsl:attribute-set erzeugte Attributsets an Elementknoten einer Ausgabesequenz zu binden. Dies kann im Rahmen von xsl:copy, xsl:element oder, als xsl:use-attribute-sets, in einem Literal Result Element geschehen.

Verwendungszweck:

Der Vorteil der Verwendung von Attributsets besteht darin, dass Gruppen häufig verwendeter Attributdefinitionen zentral definiert und gegebenenfalls editiert werden können. Eine geläufige Anwen­dung ist die Zuweisung von Darstellungsformatierungen (HTML- oder CSS-Sty­les).

Einem Element im Ergebnisdokument können ein oder mehrere Attributsets zugewiesen werden. Hierfür wird das Attribut use-attribute-sets verwen­det. Als Attributwert wird eine durch Leerzeichen getrennte Liste aus verwen­deten Attributset-Namen übergeben. Wird das Attribut in einem Literal Result Element verwendet, so muss es durch das entsprechende Präfix als im XSL-Namensraum befindlich gekennzeichnet sein: xsl:use-attribute-sets (ein Literal Result Element ist nie im XSL-Namensraum!).

Es ist kein Fehler, wenn gleichnamige Attributsets in einem Stylesheet vorkom­men. Dieser Fall kann auftreten, wenn mehrere Stylesheets über Import oder Inklusion zusammengefasst werden. Entsprechende Attributlisten »addieren« sich einfach, auch wenn sie verschiedene Präzedenzen besitzen

Dies kann in der resultierenden Sequenz aus Attributknoten zu namensglei­chen Dubletten führen, die jedoch zu diesem Zeitpunkt nicht entfernt werden. Erst im Zuge der Serialisierung werden bei doppelt auftretenden Attributkno­ten alle bis auf den letzten verworfen. Erhalten bleibt also entweder der aus dem in Dokumentreihenfolge zuletzt definierten Attributset resultierende oder aber der aus dem Attributset mit der höchsten Importpräzedenz (da dieses zuletzt ausgewertet wird).

Zu beachten ist, dass Attributsets aus inkludierten Stylesheets die gleiche Präze­denz wie die lokalen besitzen, aber als vor diesen geschrieben gelten.

Beispiele:

Beispiel 1 – Attributsetbindung an mit xsl:element erzeugte Ele­mente:

<xsl:element name="ergebnis" use-attribute-sets="set1 set2 set3"/>

Einem erzeugten Element wird eine Attributsammlung einfach mit Hilfe des Attributs use-attribute-sets zugewiesen. In einer Tokenliste sind die Namen der zu verwendenden Attributlistendefinitionen zu nennen.

Beispiel 2 – Attributsetbindung an mit xsl:copy kopierte Ele­mente:

<xsl:template match="ergebnis">
  <xsl:copy use-attribute-sets="set1 set2 set3">
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

Die Instruktion xsl:copy muss auf Elemente, nicht dagegen auf den root-Kno­ten, Attribute o. Ä. angewendet werden, um Attributsets übergeben zu können.

Beispiel 3 – Zuweisung von Attributsets an Literal Result Elements:

<ergebnis xsl:use-attribute-sets="set1 set2 set3"/>

Bei Verwendung in Literal Result Elements muss das Attribut use-attribute-sets als zum XSL-Namespace zugehörig gekennzeichnet werden. Dies geschieht durch das beigefügte Präfix xsl: – andernfalls wird das Attribut nicht als Anweisung verstanden und ebenfalls zusammen mit dem Literal Result Ele­ment in das Ergebnisdokument kopiert.

Beispiel 4 – Addition von zwei gleichnamigen Attributsets:

a) ohne Konflikt bei den Attributdefinitionen

<xsl:attribute-set name="set1">
  <xsl:attribute name="att1">wert1</xsl:attribute>
  <xsl:attribute name="att2">wert2</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="set1">
  <xsl:attribute name="att2">wert3</xsl:attribute>
  <xsl:attribute name="att4">wert4</xsl:attribute>
</xsl:attribute-set>
<xsl:template match="/">
  <ergebnis xsl:use-attribute-sets="set1"/>
</xsl:template>

Beide Attributsets werden, da sie mit dem gleichen Bezeichner benannt sind, zusammengefasst und all ihre Attribute dem Element zugewiesen:

<ergebnis att1="wert1" att2="wert2" att3="wert3" att4="wert4"></ergebnis>

b) Konflikt zweier Attributdefinitionen

<xsl:attribute-set name="set1">
  <xsl:attribute name="att1">wert1</xsl:attribute>
  <xsl:attribute name="att2">wert2</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="set1">
  <xsl:attribute name="att2">anderer wert</xsl:attribute>
  <xsl:attribute name="att4">wert4</xsl:attribute>
</xsl:attribute-set>
<xsl:template match="/">
  <ergebnis xsl:use-attribute-sets="set1"/>
</xsl:template>

Auch hier werden beide Attributsets zusammengefasst. Dabei überschreibt die Attributdefinition aus dem zuletzt geschriebenen Set die entsprechende gleich­namige aus einem vorangegangenen Set.

Für das Attribut att2 wird dementsprechend der Wert aus dem zweiten Set übergeben:

<ergebnis att1="wert1" att2="anderer wert" att4="wert4"></ergebnis>

Beispiel 5 – Import von vorhandenen Attributsets in ein weiteres:

<xsl:attribute-set name="gesamtset" use-attribute-sets="set1 set2">
  <xsl:attribute name="att5">wert5</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="set1">
  <xsl:attribute name="att1">wert1</xsl:attribute>
  <xsl:attribute name="att2">wert2</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="set2">
  <xsl:attribute name="att3">wert3</xsl:attribute>
  <xsl:attribute name="att4">wert4</xsl:attribute>
</xsl:attribute-set>

Die beiden bestehenden Attributsets werden in das Attributset gesamtset importiert und können gemeinsam mit seinen Attributdefinitionen unter die­sem Bezeichner einem Element zugewiesen werden:

<xsl:element name="ergebnis" use-attribute-sets="gesamtset"/>

Elementdefinition:

XSLT 1.0:

<!-- Category: top-level-element -->
<xsl:attribute-set 
     name = qname 
     use-attribute-sets = qnames >

     <!-- Content: xsl:attribute* -->

</xsl:attribute-set>

XSLT 2.0:

<!-- Category: declaration -->
<xsl:attribute-set
     name = qname
     use-attribute-sets? = qnames >

     <!-- Content: xsl:attribute* -->

</xsl:attribute-set>
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