Re: [xsl] Managing XSLTS for XSLFO - Shared templates and attribute sets

Subject: Re: [xsl] Managing XSLTS for XSLFO - Shared templates and attribute sets
From: Kamal <kbhatt@xxxxxxxxx>
Date: Thu, 27 Mar 2008 22:49:16 +1100
David Carlisle wrote:


This works great, just as long as you don't want to share templates. Unfortunately, I am going to need to share some of those templates in the future, but the attributes used may be different (obviously, these attributes are defining styling).

what do you mean by "share" here (call them from two different places,
by call-template or apply-tempates?)
By share I mean that have a named template that I may call from 2 separate files.
Personally I'd lose the  inflexible attribute set syntax and replace it
by a variable (or named template if you need to be more dynamic)


instead of


<xsl:attribute-set name="title-style">
  <xsl:attribute name="font-size">12pt</xsl:attribute>
  <xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:attribute-set>

have

<xsl:template name="title-style">
  <xsl:attribute name="font-size">12pt</xsl:attribute>
  <xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:template>


then instead of


<foo xsl:use-attribute-sets="title-style">

use

<foo>
<xsl:call-template name="title-style"/>

which has the advantage that you can wrap the call-template in
conditional code, or parameterise it, or make its result depend on the
current context, as required.

I thought about that, the problem is that some of the styling is dependant on XML (some in external files, called in the XSLT) and others are based on hard coded. For example, I may reference an external file for colours, but the external file is constructed based on the XML coming into the XSLT. Also, your syntax will get very messy if you have combinations of attributes (for example, I may have one attribute set for the fonts that is common to most of the styles, and another with the margins). I may have to do what you suggested, but I can see it becoming very messy.

Current Thread