- From: Jerome Simeon <simeon@us.ibm.com>
- Date: Thu, 17 Mar 2005 11:53:27 -0500
- To: Philippe Michiels <philippe.michiels@ua.ac.be>
- Cc: www-ql@w3.org
Philippe,
The normalization rule you mention applies only to ForwardSteps, which
always
return a sequence of nodes.
There is another normalization rule which applies to PrimaryExpr (See
Section
4.3.2 Filter Expressions):
[PrimaryExpr PredicateList "[" Expr "]"]Expr
==
let $fs:sequence := [PrimaryExpr PredicateList]Expr return
let $fs:last := fn:count($fs:sequence) return
for $fs:dot at $fs:position in $fs:sequence return
if [Expr]Predicates then $fs:dot else ()
Primary expressions can return any kind of items, and that rule does not
force
to sort by document order and remove duplicates.
- Jerome
www-ql-request@w3.org wrote on 03/17/2005 04:48:57 AM:
>
> Hi,
>
> I am confused by the normalization of path expressions that have end
with a
> predicate step (e.g. doc("x")/a/b[c]
>
> The normalization of filter expressions in the FS, enforces the result
of the
> step to be a node sequence (because of the fs:distinct-doc-order call).
> For instance, for a numerical predicate it goes as follows:
>
> [ForwardStep PredicateList "[" Numeric "]"]Expr
> ==
> let $fs:sequence :=
> fs:apply-ordering-mode(fs:distinct-doc-order( [ForwardStep
> PredicateList]Expr )) return
> fn:subsequence($fs:sequence,Numeric,1)
>
> But from the XPath 2.0 draft I understand that the result can be a
> sequence of
> nodes or a sequence of atomic values:
>
> from (http://www.w3.org/TR/xpath20/#id-path-expressions)
>
> Each operation E1/E2 is evaluated as follows: Expression E1 is
evaluated, and
> if the result is not a (possibly empty) sequence of nodes, a type error
is
> raised. Each node resulting from the evaluation of E1 then serves in
turn to
> provide an inner focus for an evaluation of E2, as described in 2.1.2
Dynamic
> Context. The sequences resulting from all the evaluations of E2 are
combined
> as follows:
>
> (1) If every evaluation of E2 returns a (possibly empty) sequence of
nodes,
> these sequences are combined, and duplicate nodes are eliminated based
on
> node identity. The resulting node sequence is returned in document
order.
>
> (2) If every evaluation of E2 returns a (possibly empty) sequence of
atomic
> values, these sequences are concatenated, in order, and returned.
>
> (3) Otherwise (that is, if the multiple evaluations of E2 return at
least one
> node and at least one atomic value), a type error is
raised.[err:XP0018].
>
> I'm wondering wheather the distinct-doc-order call in the FS should
> in fact be
> a distinct-doc-order-or-atomic-sequence call.
>
> Thanks,
> Ph
> --
> Philippe Michiels
> Universiteit Antwerpen
> ADReM (Advanced Database Research and Modelling)
> http://www.adrem.ua.ac.be/~michiels
>
Received on Thursday, 17 March 2005 16:54:00 UTC