xsl-list
[Top] [All Lists]

Re: [xsl] Restrictions on XPath expressions in <xsl:key>

2007-12-19 15:00:43
At 2007-12-19 16:39 -0500, Nassar, Anthony wrote:
Does someone know a reason why this won't compile:

<xsl:key name="templates"
match="/onm:NetworkModel/onm:Graph/(onm:Nodes|onm:Links)/(onm:Link|onm:N
ode)/onm:Templates/onm:Template" use="@Name" />

Because match= attributes are restricted to be XPath patterns, not all XPath expressions.

...but this will:

<xsl:template match="onm:Graph">
    <xsl:copy>
        <xsl:if
test="(onm:Nodes/onm:Node|onm:Links/onm:Link)/onm:Attributes/onm:Attribu
te">

Because test= is not restricted to only being a pattern.

In other words, why can't an XPath expression in an <xsl:key> element
include parentheses and union operators?

Because patterns are restricted expressions that promote compile-time algorithms for detecting patterns of nodes in the source tree. Not all expressions are like this, so the XPath designers categorized a subset of all XPath expressions, called them patterns, and they are the only ones allowed in a match= attribute.

By the way, what is the order
of precedence between '/' and '|'? I'd understand '\' to have higher
precedence, in which case the latter expression above is actually wrong,
though it's been working for me.

A step separator "/" has higher precedence in the syntax than the expression separator "|", which is why the parentheses are needed to tell a processor that the step is made up of two separate expressions.

Note that in XPath 1.0 the expression separator and parentheses are only allowed in the first step of a multiple-step location path.

I'm using .NET 2.0, so let me know if this is a platform question, in
which case I'll post elsewhere.

It is an XSLT 2.0 question, not a platform-dependent question.

I hope this helps.

. . . . . . . . . . . . . Ken

--
Comprehensive in-depth XSLT2/XSL-FO1.1 classes: Austin TX,Jan-2008
World-wide corporate, govt. & user group XML, XSL and UBL training
RSS feeds:     publicly-available developer resources and training
G. Ken Holman                 mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0    +1(613)489-0999 (F:-0995)
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal


--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>