<xsl:attribute-set> |
Permet de définir un groupe d'attributs pour le document de sortie. Vous pouvez alors créer une référence pour l'ensemble du groupe d'attributs plutôt que de créer tous les attributs individuellement.
Catégorie
Elément de niveau supérieur
Attributs obligatoires
name Définit le nom de l'ensemble d'attributs.
Attributs facultatifs
use-attribute-sets Répertorie un ou plusieurs ensembles d'attributs qui devraient être utilisés par cet ensemble d'attributs. Si vous indiquez plusieurs ensembles, séparez leurs noms par des espaces blancs. Vous pouvez utiliser cet attribut pour incorporer d'autres < xsl:attribute-set > dans celui-ci, mais notez qu'un < xsl:attribute-set > qui s'incorpore directement ou indirectement génère une erreur. En d'autres termes, si un ensemble d'attributs A incorpore un ensemble d'attributs B, qui à son tour incorpore un ensemble d'attributs C, lui-même incorporant un ensemble d'attributs A, le processeur XSLT signalera une erreur.
Contenu
Un ou plusieurs éléments <xsl:attribute>.
Apparaît dans
<xsl:stylesheet>. L'élément <xsl:attribute-set> est un élément de niveau supérieur ne pouvant apparaître que comme l'enfant de <xsl:stylesheet>.
Défini dans
XSLT section 7.1.4, Ensembles d'attributs nommés.
Exemple
Pour cet exemple, on crée une feuille de style définissant des ensembles d'attributs pour du texte normal, du texte en gras et du texte large. Pour changer simplement, la spécification XSL-FO est utilisée pour convertir le document XML en fichier PDF. La feuille de style est la suivante :
    <?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>
Les deux ensembles d'attributs emphasized-text et large-text utilisent comme base l'ensemble d'attributs regular-text. Dans le cas de l'ensemble large-text, l'attribut font-size défini dans l'ensemble d'attributs large-text remplace l'attribut font-size inclus à partir de l'ensemble d'attributs regular-text. Cette feuille de style est appliquée au document XML suivant :
    <?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>
La feuille de style génère le fichier suivant, d'aspect un peu désordonné, d'objets de formatage qui décrivent la manière dont le texte du document XML source devrait s'afficher :
    <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>
Concernant cette rédaction (mai 2001), la spécification XSL-FO n'est pas définitive, il n'y a donc aucune garantie que ces objets de formatage fonctionnent correctement avec les futurs outils XSL-FO. Voici la méthode utilisée pour invoquer l'outil FOP du projet Apache XML (objets de formatage du traducteur PDF) en vue de créer un PDF :
    java org.apache.fop.apps.CommandLine test.fo test.pdf
L'outil FOP crée un PDF qui ressemble à la Figure A-4. PDF généré à partir d'un fichier XSL-FO