[Home] [By Thread] [By Date] [Recent Entries]

  • From: Joe English <jenglish@f...>
  • To: xml-dev@l...
  • 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@f...

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member