OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Re: [xml-dev] XPath 1.5? (was RE: [xml-dev] typing and markup)

[ Lists Home | Date Index | Thread Index ]

Hi Mike,

> Either would do. The above are the only template rules in the
> stylesheet. The first template rule is the only thing in the
> stylesheet that can produce any output. Therefore you know that if
> you are processing a node that cannot have row[id='0432'] as a
> descendant, you can skip it and its entire subtree.
>
> As I say, this is an example where schema knowledge could help
> greatly. The rule would be "if none of the descendants of this node
> can match a template rule that produces output, then don't process
> this subtree." The question is, would this rule be triggered
> sufficiently often to justify including it in the optimizer?

As with most of these optimisations, an alternative would be to
perform a kind of linting service for the XSLT authors and point out
that they would get much better performance if they rewrote their
stylesheet. Doing:

  <xsl:apply-templates select="/table/row[id='0432'][1]" />

for example, would speed things up no end.

But looking at it another way -- say that you've looked at the
stylesheet and you've noticed that you only need to process elements
that contain an element that matches row[id='0432']. Then there are
two ways you can use that information:

  - you can look in the schema or DTD to find out what kinds of
    elements can contain a row element with an id child with the value
    '0432' and all their ancestors, and then, while parsing the
    document, flag those elements that are of any of those types

  - while parsing, you can locate the row element with an id with the
    value '0432' and place a flag on it and all its ancestors

Isn't the latter easier to do and more flexible?

> (Alternatively, I might include it anyway because I'm only really
> interested in optimizing the cases that occur in benchmarks).

Quite. I think it's unlikely that this kind of arrangement would occur
in real life. In real life, the '0432' would be a parameter passed
into the stylesheet, and as you know, you can't use parameters in
template matches, so there'd either be the pull approach as above, or
a push approach that looked like:

<xsl:template match="row">
  <xsl:if test="id = $id">
    ...
  </xsl:if>
</xsl:template>

Although I guess since that restriction is lifted in XSLT 2.0, it
could happen.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/





 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS