<xsl:attribute-set> |
Diese Anweisung erlaubt Ihnen die Definition einer Gruppe von Attributen für das Ausgabedokument. Danach können Sie auf die gesamte Attributmenge durch ihren Namen verweisen und brauchen nicht alle Attribute einzeln zu erstellen.
Kategorie
Element der obersten Ebene
Obligatorische Attribute
name Dieses Attribut definiert den Namen dieser Attributmenge.
Optionale Attribute
use-attribute-sets Listet eine oder mehrere Attributmengen auf, die von diesem Attribut verwendet werden sollen. Wenn Sie mehrere Attributmengen angeben, sollten Sie die Namen durch Leerraumzeichen trennen. Mit Hilfe dieses Attributs können Sie weitere < xsl:attribute-set > -Anweisungen in diese einbinden, doch sollten Sie sich darüber bewusst sein, dass eine < xsl:attribute-set > -Anweisung, die direkt oder indirekt sich selbst einbettet, in einem Fehler resultiert. Anders ausgedrückt: wenn Attributmenge A die Attributmenge B einbettet, die wiederum die Attributmenge C einbettet, die schließlich wieder die Attributmenge A einbettet, so meldet der XSLT-Prozessor einen Fehler.
Inhalt
Eines oder mehrere <xsl:attribute>-Elemente.
Übergeordnetes Element
<xsl:stylesheet>. <xsl:attribute-set> ist ein Element der obersten Ebene und kann nur dem Element <xsl:stylesheet> untergeordnet werden.
Definition
XSLT-Abschnitt 7.1.4, Benannte Attributmengen
Beispiel
Für dieses Beispiel wird ein Stylesheet erstellt, das die Attributmengen für regulären Text, für betonten Text und für umfangreichen Text erstellt. Zur Abwechslung wird XSL-FO (XSL Formatting Objects) verwendet, um das XML-Dokument in eine PDF-Datei zu konvertieren. Hier das Stylesheet:
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:fo="http://www.w3.org/1999/XSL/Format">

      <xsl:output method="html"/>

      <xsl:attribute-set name="regular-text">
        <xsl:attribute name="font-size">12pt</xsl:attribute>
        <xsl:attribute name="font-family">sans-serif</xsl:attribute>
      </xsl:attribute-set>

      <xsl:attribute-set name="emphasized-text" use-attribute-sets="regular-text">
        <xsl:attribute name="font-style">italic</xsl:attribute>
      </xsl:attribute-set>

      <xsl:attribute-set name="large-text" use-attribute-sets="regular-text">
        <xsl:attribute name="font-size">18pt</xsl:attribute>
        <xsl:attribute name="font-weight">bold</xsl:attribute>
        <xsl:attribute name="space-after.optimum">21pt</xsl:attribute>
      </xsl:attribute-set>

      <xsl:template match="/">
        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
          <fo:layout-master-set>
            <fo:simple-page-master margin-right="75pt" margin-left="75pt"
              page-height="11in" page-width="8.5in"
              margin-bottom="25pt" margin-top="25pt" master-name="main">
              <fo:region-before extent="25pt"/>
              <fo:region-body margin-top="50pt" margin-bottom="50pt"/>
              <fo:region-after extent="25pt"/>
            </fo:simple-page-master>
            <fo:page-sequence-master master-name="standard">
              <fo:repeatable-page-master-alternatives>
                <fo:conditional-page-master-reference master-name="main"
                  odd-or-even="any"/>
              </fo:repeatable-page-master-alternatives>
            </fo:page-sequence-master>
          </fo:layout-master-set>

          <fo:page-sequence master-name="standard">
            <fo:flow flow-name="xsl-region-body">
              <xsl:apply-templates select="list"/>
            </fo:flow>
          </fo:page-sequence>
        </fo:root>
      </xsl:template>

      <xsl:template match="list">
        <fo:block xsl:use-attribute-sets="large-text">
          <xsl:value-of select="title"/>
        </fo:block>
        <fo:list-block provisional-distance-between-starts="0.4cm"
          provisional-label-separation="0.15cm">
          <xsl:for-each select="listitem">
            <fo:list-item start-indent="0.5cm" space-after.optimum="17pt">
              <fo:list-item-label>
                <fo:block xsl:use-attribute-sets="regular-text">*</fo:block>
              </fo:list-item-label>
              <fo:list-item-body>
                <fo:block xsl:use-attribute-sets="emphasized-text">
                  <xsl:value-of select="."/>
                </fo:block>
              </fo:list-item-body>
            </fo:list-item>
          </xsl:for-each>
        </fo:list-block>
      </xsl:template>

    </xsl:stylesheet>
Beachten Sie, dass sowohl die Attributmenge emphasized-text als auch large-text die Attributmenge regular-text als Basis verwenden. Das in der Attributmenge large-text definierte Attribut font-size überschreibt das von der Attributmenge regular-text eingebundene Attribut font-size. Dieses Stylesheet wird auf das folgende XML-Dokument angewendet:
    <?xml version="1.0"?>
    <list>
      <title>A few of my favorite albums</title>
      <listitem>A Love Supreme</listitem>
      <listitem>Beat Crazy</listitem>
      <listitem>Here Come the Warm Jets</listitem>
      <listitem>Kind of Blue</listitem>
      <listitem>London Calling</listitem>
      <listitem>Remain in Light</listitem>
      <listitem>The Joshua Tree</listitem>
      <listitem>The Indestructible Beat of Soweto</listitem>
    </list>
Das Stylesheet generiert eine etwas unordentliche Datei mit Formatierungsobjekten, die beschreiben, wie der Text des XML-Ausgangsdokuments dargestellt werden soll.
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
    <fo:simple-page-master master-name="main" margin-top="25pt"
    margin-bottom="25pt" page-width="8.5in" page-height="11in"
    margin-left="75pt" margin-right="75pt">
    <fo:region-before extent="25pt"/>
    <fo:region-body margin-bottom="50pt" margin-top="50pt"/>
    <fo:region-after extent="25pt"/>
    </fo:simple-page-master>
    <fo:page-sequence-master master-name="standard">
    <fo:repeatable-page-master-alternatives>
    <fo:conditional-page-master-reference odd-or-even="any" master-name="main"/>
    </fo:repeatable-page-master-alternatives>
    </fo:page-sequence-master>
    </fo:layout-master-set>
    <fo:page-sequence master-name="standard">
    <fo:flow flow-name="xsl-region-body">
    <fo:block font-size="18pt" font-family="sans-serif"
    font-weight="bold" space-after.optimum="21pt">A few of my
    favorite albums</fo:block>
    <fo:list-block provisional-label-separation="0.15cm"
    provisional-distance-between-starts="0.4cm">
    <fo:list-item space-after.optimum="17pt" start-indent="0.5cm">
    <fo:list-item-label>
    <fo:block font-size="12pt" font-family="sans-serif">*</fo:block>
    </fo:list-item-label>
    <fo:list-item-body>
    <fo:block font-size="12pt" font-family="sans-serif"
    font-style="italic">A Love Supreme</fo:block>
    </fo:list-item-body>
    </fo:list-item>
    <fo:list-item space-after.optimum="17pt" start-indent="0.5cm">
    <fo:list-item-label>
    <fo:block font-size="12pt" font-family="sans-serif">*</fo:block>
    </fo:list-item-label>
    <fo:list-item-body>
    <fo:block font-size="12pt" font-family="sans-serif"
    font-style="italic">Beat Crazy</fo:block>
    </fo:list-item-body>
    </fo:list-item>
    <fo:list-item space-after.optimum="17pt" start-indent="0.5cm">
    <fo:list-item-label>
    <fo:block font-size="12pt" font-family="sans-serif">*</fo:block>
    </fo:list-item-label>
    <fo:list-item-body>
    <fo:block font-size="12pt" font-family="sans-serif"
    font-style="italic">Here Come the Warm Jets</fo:block>
    </fo:list-item-body>
    </fo:list-item>
    <fo:list-item space-after.optimum="17pt" start-indent="0.5cm">
    <fo:list-item-label>
    <fo:block font-size="12pt" font-family="sans-serif">*</fo:block>
    </fo:list-item-label>
    <fo:list-item-body>
    <fo:block font-size="12pt" font-family="sans-serif"
    font-style="italic">Kind of Blue</fo:block>
    </fo:list-item-body>
    </fo:list-item>
    <fo:list-item space-after.optimum="17pt" start-indent="0.5cm">
    <fo:list-item-label>
    <fo:block font-size="12pt" font-family="sans-serif">*</fo:block>
    </fo:list-item-label>
    <fo:list-item-body>
    <fo:block font-size="12pt" font-family="sans-serif"
    font-style="italic">London Calling</fo:block>
    </fo:list-item-body>
    </fo:list-item>
    <fo:list-item space-after.optimum="17pt" start-indent="0.5cm">
    <fo:list-item-label>
    <fo:block font-size="12pt" font-family="sans-serif">*</fo:block>
    </fo:list-item-label>
    <fo:list-item-body>
    <fo:block font-size="12pt" font-family="sans-serif"
    font-style="italic">Remain in Light</fo:block>
    </fo:list-item-body>
    </fo:list-item>
    <fo:list-item space-after.optimum="17pt" start-indent="0.5cm">
    <fo:list-item-label>
    <fo:block font-size="12pt" font-family="sans-serif">*</fo:block>
    </fo:list-item-label>
    <fo:list-item-body>
    <fo:block font-size="12pt" font-family="sans-serif"
    font-style="italic">The Joshua Tree</fo:block>
    </fo:list-item-body>
    </fo:list-item>
    <fo:list-item space-after.optimum="17pt" start-indent="0.5cm">
    <fo:list-item-label>
    <fo:block font-size="12pt" font-family="sans-serif">*</fo:block>
    </fo:list-item-label>
    <fo:list-item-body>
    <fo:block font-size="12pt" font-family="sans-serif"
    font-style="italic">The Indestructible Beat of Soweto</fo:block>
    </fo:list-item-body>
    </fo:list-item>
    </fo:list-block>
    </fo:flow>
    </fo:page-sequence>
    </fo:root>
Seien Sie sich bewusst, dass zum momentanen Zeitpunkt (May 2001) die XSL-FO-Spezifikation noch nicht abgeschlossen ist, es gibt also keine Garantie, dass diese Formatierungsobjekte mit zukünftigen XSL-FO-Tools korrekt funktionieren. So rufen Sie das FOP-Tool (Formatierungsobjekte-in-PDF-Umwandler) des Apache-XML-Projekts auf, um eine PDF-Datei zu erstellen:
    java org.apache.fop.apps.CommandLine test.fo test.pdf
Das FOP-Tool erstellt eine PDF-Datei, deren Darstellung Sie in Abbildung A-4 sehen können. Aus einer XSL-FO-Datei erzeugte PDF-Datei