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

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Transitive closure for XPath




Christian Nentwich wrote:

> something I really lose sleep over is the lack of a transitive closure
> function in XPath. [...]
> Would you please comment on a little proposal I have written - includes
> an implementation of the operator for Xalan as a freebie:
>
> http://www.cs.ucl.ac.uk/staff/c.nentwich/closure/


This is indeed a very useful feature.

The proposal as described slightly breaks the XPath evaluation
model though: the second argument to 'closure(node-set,node-set)'
has Algol-style call-by-name semantics.  That is, it's not really
a node-set but rather an XPath expression or "thunk" which
is re-evaluated with a different context multiple times.
I think this calls for new syntax, either a new keyword or operator.

Postfix '*' might be suitable -

    closure(/ROOT/node[1], id(./@child))

in your example would be written:

    /ROOT/node[1]/(id(./@child))*

On the other hand this plays merry hell with the XPath grammar,
so maybe not...

> Just imagine what this operator could do for *your* family tree XSLT
> stylesheet.


Not to mention Schematron!  A closure operator is all that's
missing to give XPath the full power of ("caterpilar-") regular
expressions.


--Joe English

  jenglish@flightlab.com