xsl-list
[Top] [All Lists]

Re: [xsl] Multiple/conditional import problem

2011-05-26 09:12:00
Thanks Dave!

The properties will be usually grouped into some classes - and then
one stylesheet per class.

I think for now I'll just import those specific stylesheets I've
developed myself into default.xsl, ant figure out the pre-processing
step later.

Usually specific stylesheet (image.xsl) imports general one
(default.xsl), however in this case it would be the way around - but
it makes sense here?

Can you take a look at the pseudo-code below just to make sure I got it right:

default.xsl:

<xsl:imports href="image.xsl"/>

<xsl:template match="property">
  <dt>
    <xsl:value-of select="@name"/>
  </dt>
  <dd>
    <xsl:apply-templates select="value"/>
    <xsl:apply-imports/>
  </dd>
<xsl:template>

<xsl:template match="property/value">
  <xsl:value-of select="."/>
</xsltemplate>

image.xsl:

<xsl:template match="property[@name = 'image']/value">
  <img src="{.}"/>
<xsl:template>

Do I need <xsl:apply-templates select="value"/> in default.xsl or will
it be called automatically if <xsl:apply-imports/> fails to find match
in image.xsl?

On Thu, May 26, 2011 at 3:19 PM, David Carlisle 
<davidc(_at_)nag(_dot_)co(_dot_)uk> wrote:
On 26/05/2011 13:57, Martynas Jusevicius wrote:

Therefore in general I cannot manually include the references in
default.xsl. Unless I pre-process it when a new specific stylesheet
arrives...

OK then yes.

However it depends on how much customisation you want.
If you allow each property to have its own stylesheet then that's a lot of
power, it could reformat the entire document, and to get that power you'd
need to do as you say and arrange a processing step that builds the
stylesheet as required.

however if you want to constrain things more then you could customise things
based on included input documents rather than stylesheets, eg using the
collection() function to pull in all xml files in a directory them...

make a heading green unless a customisation sets a different color

<xsl:variable name="custom">
 <xsl:copy-of select="collection(....)"/>
</xsl:variable>
<xsl:key name="custom" match="c" use="@x"/>

<xsl:template match="property">
<dt style="color:{
(key($custom,concat(.':color'),$custom),'green')[1]}"

<xsl:value-of select="."/>
</dt>


then

<property>foo</property>

will come out as
<dt style="color:green">foo</dt>

unless somewhere in an xml file pulled in by the collection() function there
is an element of the form

<c x="foo:color">red</c>

in which case

<property>foo</property>

would come out as

<dt style="color:red">foo</dt>

this can work well for simple customisation, but if you start to need
conditional logic etc, it's probably simpler to go back to allowing full
xslt, whiich gets you back to where you started.


David




________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs.
________________________________________________________________________


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--