[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Transitive closure for XPath
- From: Joe English <jenglish@flightlab.com>
- To: xml-dev@lists.xml.org
- Date: Thu, 19 Apr 2001 10:06:48 -0700
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