W3C home > Mailing lists > Public > www-ql@w3.org > January to March 2004

Re: XQuey

From: Mary Fernandez <mff@research.att.com>
Date: 10 Mar 2004 12:27:12 -0500
To: Jan Paredaens <Jan.Paredaens@ua.ac.be>
Cc: Jerome Simeon <simeon@us.ibm.com>, www-ql@w3.org, Jan Hidders <jan.hidders@ua.ac.be>, Philippe Michiels <philippe.michiels@ua.ac.be>
Message-Id: <1078939631.3818.119.camel@squeak.research.att.com>

My email from yesterday was incorrect.  It turns out
that, indeed, the children following an attribute 
are included in the following:: axis applied to that
attribute.  The root of the problem is that the XPath 2.0
data model does not specify the following constraint
(which is specified in the XPath 1.0 data model):

  "The attribute nodes and namespace nodes of an element occur before 
   the children of the element."

Given this constraint, the formal definition for the following:: axis
is incorrect and should be changed to:

[following:: NodeTest] ==
[ancestor-or-self::node()/following-sibling::node()/descendant-or-self::NodeTest
 union
 typeswitch
 case attribute() return parent::node()/child::NodeTest
 default return ()
]
 
I cannot find a prettier way to define following.  If you can,
please let me know.
Thanks,
Mary

On Tue, 2004-03-09 at 16:09, Mary Fernandez wrote:
> Dear Jan,
> 
> The example you give below:
> 
> <elem attr="g"> <b/> </a>
> 
> is not a well-formed element, so I am not exactly sure what 
> the input value is.  I'm going to assume you meant
> that b is a child of the element a:
> 
> let $x := <a attr="g"/><b/></a>
> 
> So then the values of the following expressions are:
> 
> $x/@attr/following-sibling::node() = ()
> $x/following-sibling::node() = ()
> 
> I agree that the prose and formal meanings  of the following expression
> conflict, but I believe the formal semantics is the correct one, i.e.,
> 
> $x/@attr/following::node() = ()
> 
> Thanks for pointing out this problem.  I will raise with the group
> but would appreciate you posting your remark to
> public-qt-comments@w3.org 
> 
> Thanks,
> Mary
> 
> > the following-sibling axis contains the context node's following siblings,
> > those children of the context node's parent that occur after the context
> > node in document order; if the context node is an attribute node or
> > namespace node, the following-sibling axis is empty
> > 
> > the ancestor-or-self axis contains the context node and the ancestors of
> > the context node;
> > 
> > the following axis contains all nodes that are descendants of the root of
> > the tree in which the context node is found, are not descendants of the
> > context node, and occur after the context node in document order
> 
> > Consider now for instance:
> > 
> > <elem attr="g"> <b/> </a>
> > 
> > clearly
> > 
> > <elem>/@attr/following-sibling::node() = empty,
> > <elem>/following-sibling::node() = empty,
> > and <elem>/@attr/following::node() = <b/>
> > 
> > But in
> > 
> > http://www.w3.org/TR/2004/WD-xquery-semantics-20040220/#sec_axes
> > 
> > 4.2.1.1 is written
> > 
> > [following:: NodeTest] ==
> > [ancestor-or-self::node()/following-sibling::node()
> >  /descendant-or-self::NodeTest]
> > 
> > Hence by this definition we have
> > 
> > <elem>/@attr/following::node() = empty.
> > 
> > Can you agree with this inconsistency?
> > 
> > Jan Paredaens
> > Philippe Michiels
-- 
Mary Fernandez <mff@research.att.com>
AT&T Labs - Research
Received on Wednesday, 10 March 2004 12:24:58 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Saturday, 22 July 2006 00:10:19 GMT