<xsl:attribute-set> | |
Allows you to define a group of attributes for the output document. You can then reference the entire attribute set with its name, rather than create all attributes individually. | |
Category | |
Top-level element |
|
Required Attributes | |
|
|
Optional Attributes | |
|
|
Content | |
One or more <xsl:attribute> elements. |
|
Appears in | |
<xsl:stylesheet>. <xsl:attribute-set> is a top-level element and can only appear as a child of <xsl:stylesheet>. |
|
Defined in | |
XSLT section 7.1.4, Named Attribute Sets. |
|
Example | |
For this example, we'll create a stylesheet that defines attribute sets for regular text, emphasized text, and large text. Just for variety's sake, we'll use the Extensible Stylesheet Language Formatting Objects (XSL-FO) specification to convert our XML document into a PDF file. Here's our 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> Notice that both the emphasized-text and large-text attribute sets use the regular-text attribute set as a base. In the case of large-text, the font-size attribute defined in the large-text attribute set overrides the font-size attribute included from the regular-text attribute set. We'll apply our stylesheet to the following XML document: <?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> The stylesheet generates this messy-looking file of formatting objects, which describe how the text of our XML source document should be rendered: <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> Be aware that as of this writing (May 2001), the XSL-FO specification isn't final, so there's no guarantee that these formatting objects will work correctly with future XSL-FO tools. Here's how we invoke the Apache XML Project's FOP (Formatting Objects to PDF translator) tool to create a PDF: java org.apache.fop.apps.CommandLine test.fo test.pdf The FOP tool creates a PDF that looks like Figure A-4. PDF generated from an XSL-FO file |