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

RE: meaning of (salary, bonus)

From: Jerome Simeon <simeon@research.bell-labs.com>
Date: 08 Jan 2003 05:41:43 -0500
To: Howard Katz <howardk@fatdog.com>
Cc: Mary Fernandez <mff@research.att.com>, Michael Kay <Michael.Kay@softwareag.com>, www-ql@w3.org
Message-Id: <1042018892.5132.12.camel@localhost.localdomain>

If I am not mistaken, both:

(salary, 3, bonus)[. > 0]

and

(salary, bonus)[. > 0]

would be treated similarly by *not* ordering by document order, since:

(salary, bonus) is a PrimaryExpr in the XPath grammar.

However, ordering would occur for:

(salary, bonus)/self::node()

and

(salary, 3, bonus)/self::node()

would be a type error since '3' is not a node.

Best,
- Jerome

On Tue, 2003-01-07 at 23:37, Howard Katz wrote:
> What happens in the case of a mixed sequence such as
> 
>         (salary, 3, bonus)[. > 0 ]
> 
> Is the ordering implementation-dependent?
> 
> Howard
> 
> > -----Original Message-----
> > From: www-ql-request@w3.org [mailto:www-ql-request@w3.org]On Behalf Of
> > Mary Fernandez
> > Sent: Tuesday, January 07, 2003 6:55 PM
> > To: Howard Katz
> > Cc: Michael Kay; www-ql@w3.org
> > Subject: RE: meaning of (salary, bonus)
> >
> > In the *sequence* expression:
> >
> >   (salary, bonus)
> >
> > all salary elements will precede all bonus elements.
> >
> > In the *path* expression:
> >
> >   (salary, bonus)[. > 0]
> >
> > the resulting salary and bonus elements whose content is greater
> > than zero will be in document order.  This is because
> > path expressions always yield sequences of nodes in document order
> > whereas sequence expressions yield sequences of nodes in input order.
> >
> > On Tue, 2003-01-07 at 13:59, Howard Katz wrote:
> > >
> > > Thanks Michael and everyone, that's helpful.
> > >
> > > One additional question. I'm unclear about the concept of
> > "document order"
> > > and when that applies in a comma-constructed sequence. Are
> > *all* nodes in
> > > the sequence below in document order, or is the final
> > node-sequence (before
> > > applying the predicate) the result of concatenating all
> > <salary/> nodes in
> > > document order, followed separately by all <bonus/> nodes in
> > document order?
> > >
> > > >   (salary, bonus)[. > 0]
> > >
> > > Howard
> > >
> > > > -----Original Message-----
> > > > From: www-ql-request@w3.org [mailto:www-ql-request@w3.org]On Behalf Of
> > > > Kay, Michael
> > > > Sent: Tuesday, January 07, 2003 7:00 AM
> > > > To: Howard Katz; www-ql@w3.org
> > > > Subject: RE: meaning of (salary, bonus)
> > > > >
> > > > >      (salary, bonus)
> > > > >
> > > > > with the following commentary: "This expression contains all
> > > > > salary children of the context node followed by all bonus children"
> > > > >
> > > > > Can this expression be used outside a location path? I can
> > > > > see returning this expression as a function result, but can
> > > > > someone provide other examples of valid use? And in such a
> > > > > case, what is the meaning of "context node"?
> > > > >
> > > >
> > > > Sure, the expression can be used anywhere, for example
> > > >
> > > >   fn:average((salary, bonus))
> > > >
> > > > returns the average of this sequence - in this case it's
> > actually the same
> > > > as
> > > >
> > > >   fn:average(salary | bonus)
> > > >
> > > > Or you could write:
> > > >
> > > >   (salary, bonus)[. > 0]
> > > >
> > > > to exclude the values that are negative.
> > > >
> > > > In fact, writing the expression within a location path is one
> > of the least
> > > > useful places to use it, since the results of a path
> > expression are always
> > > > in document order. So person/(salary,bonus) actually returns the
> > > > same result
> > > > as person/(salary|bonus).
> > > >
> > > > The "context node" is exactly what it would be if you wrote
> > the expression
> > > > "salary" instead of "(salary, bonus)".
> > > >
> > > > Another common use case is when building a sequence recursively:
> > > >
> > > > <xsl:function name="reverse">
> > > >   <xsl:param name="p"/>
> > > >   <xsl:result select="if ($p)
> > > >                       then (reverse($p[position()!=1]), $p[1])
> > > >                       else ()"/>
> > > > </xsl:function>
> > > >
> > > >
> > > > Michael Kay
> > > >
> > >
> > --
> > Mary Fernandez, Principal Technical Staff Member
> > AT&T Labs - Research, 180 Park Ave., Room E243, Florham Park, NJ
> > 07932-0971
> > phone: 973-360-8679,  fax: 973-360-8187
> > mff@research.att.com, http://www.research.att.com/~mff
> >
> >
-- 
Jerome Simeon <simeon@research.bell-labs.com>
Lucent Technologies
Received on Wednesday, 8 January 2003 10:42:20 GMT

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