Subject: RE: Design of inheritance in XML and resolving it with XSLT
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 2 Aug 2006 11:03:49 +0100
|
> Two designs come into mind:
>
> Design I:
> <style name="A">
> <style-props prop-1="x" prop-2="y" prop-3="z"/>
> </style>
> <style name="B" parent="A">
> <style-props prop-1="v" prop-22="yy" prop-33="zz"/>
> </style>
>
> Design II:
> <style name="A">
> <style-props prop-1="x" prop-2="y" prop-3="z"/>
> <style name="B">
> <style-props prop-1="v" prop-22="yy" prop-33="zz"/>
> </style>
> </style>
>
>
> In both design the style properties should be interpreted as:
> style 'A': prop-1=x, prop-2=y, prop-3=z
> style 'B': prop-1=v, prop-2=y, prop-3=z, prop-22=yy, prop-33=zz
>
> What do you imagine is a better design?
I would tend to prefer II, but either is quite viable. The advantage of II
is that you can easily search for the nearest attribute using
(ancestor-or-self::style/@prop-1)[last()]
whereas design I needs a recursive function (or template) to do the
navigation.
>
> How can I map it most efficiently to absolute styles?
> Creating a large variable for all mapped styles right at the
> beginning or map them just-in-time when found accepting
> redundancy in multiple mapping of the same style?
With Saxon you could get the best of both worlds with a memo-function.
Otherwise it essentially depends on the average number of times each style
is "computed". If the average is much less than one, do it on-demand, if
it's much greater than one, do it eagerly; otherwise, you'll have to measure
to see where the cut-off comes.
>
> In case the only way is the empiric approach to implement
> both ways and test which is faster in an XSLT engine, any
> links to such performance harness to reuse (preferable Java)?
>
Remember that performance measurements will vary from one XSLT processor to
another. With Java, remember that warm-up time can dominate the measurement
- any measurement run should execute for at least 30 seconds to get
reproducible results.
Michael Kay
http://www.saxonica.com/
|