The above XPath productions clearly shows that, the following XPath expression
//distinct-values(..)
is allowed by the XPath language.
Yes, that's undisputed, just as (say) //name() is allowed and returns a
sequence containing the names of all nodes.
The signature of 'distinct-values(..)' function is specified as following in
the XPath 2.0 F&O spec,
fn:distinct-values($arg as xs:anyAtomicType*) as xs:anyAtomicType*
The above function signature, allows as argument to the function, a sequence
of atomic values or a sequence of nodes.
The argument to the function is irrelevant. The "//" doesn't affect the
arguments to the function. It affects the dynamic context for the function, but
distinct-values() doesn't depend on the context (except to the extent that its
arguments depend on the context).
Although, the expression //distinct-values(..) seems to be allowed by the
XPath spec, its run-time result looks to me ambiguous & should likely be
treated as implementation dependent, since the expression
//distinct-values(..) does not have any valid semantics.
Sorry, but that's wrong. The semantics are crystal-clear, just as the semantics
of //name() are crystal clear. The expression might be useless, and its effect
might be non-intuitive, but it's a principle of orthogonal language design that
you don't disallow things merely because they are useless or non-intuitive. You
can't allow some function calls after "//" because you think they are useful,
and disallow others because you think they aren't.
(Having said that, it was probably a mistake in XPath 2.0 to allow expressions
on the rhs of "/" (or "//") that returned atomic values. It would have been
better to require both operands of "/' to return nodes, and to have introduced
the "!" operator for the more general case. I remember Scott Boag arguing
strongly for that approach at the time. Eventually "!" was introduced anyway,
but by then the messy rules for "/" had already found their way into the
language).
Michael Kay
Saxonica
XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by
email <>)
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--