RE: filter() function: what happened?

> 
> Sorry if this has already been discussed, but can somebody 
> explain (or point to an explanation) of why did the filter() 
> function disappear from the spec in the middle of last year?
> 

The filter() function was very poorly specified, and attempts to specify it
more precisely proved difficult - it appeared that different people had
different ideas what it should do. As specified in the April 2002 draft, it
took an Expression as an argument, which would have made it a second-order
function, something which the language semantics does not allow. Defining
what was meant by "preserving any relationships" was difficult - the idea
seemed to be that this referred to descendant relationships, but not
necessarily sibling relationships, though examples also suggested that
people expected relative ordering to be preserved. No-one had even started
to explore questions about the preservation of namespace nodes or type
annotations; or even to define whether a "shallow copy" of an element should
contain any immediate text node children.

The example in the April draft suggested using a path expression that
selects three nodes X, Y, and Z, in which Y and Z are descendants of X. It's
not actually very convenient to write such a path expression. It becomes
grossly inconvenient if you have to select both the elements you want
copied, and their text nodes.

Another objection was that core XPath functions should not create new nodes.
XPath is used in many contexts where creation of nodes is not appropriate.
When functions do create nodes, questions arise about side effects: if the
function is called twice with the same arguments, does it return the same
nodes or different nodes?

A further objection concerned implementability. Given an arbitrary set of N
nodes, determining all the ancestor-descendant relationships among these
nodes is computationally complex. The effect is that this is a very
inefficient way of doing a selective copy of a tree, compared with
algorithms that rely on recursive descent.


Michael Kay 
Software AG

Received on Tuesday, 21 January 2003 07:08:33 UTC