- From: Michael Rys <mrys@microsoft.com>
- Date: Mon, 23 Aug 2004 09:47:05 -0700
- To: "Jens Teubner" <Jens.Teubner@uni-konstanz.de>, <public-qt-comments@w3.org>
Thanks for the comment.
Let me address your comments about XMark 11's validity.
The static rules for numeric operations expect ?. So your expression
below is a static error anyway.
You would have to write one of
(for $t in $i/text() return 5000 * $t)
(5000 * exact-one($i/text())
(5000 * zero-or-one($i/text())
(5000 * ($i/text())[1]
Depending on what you want the behaviour to be.
HTH
Michael
> -----Original Message-----
> From: public-qt-comments-request@w3.org [mailto:public-qt-comments-
> request@w3.org] On Behalf Of Jens Teubner
> Sent: Monday, August 23, 2004 8:20 AM
> To: public-qt-comments@w3.org
> Subject: Formal Semantics: fs:convert-operand() erroneous?
>
>
> Hi,
>
> the latest XQuery Formal Semantics defines the fs:convert-operand()
> function in Section 6.1.3 [1]. In a nutshell, fs:convert-operand()
> casts its first argument to the type of a given sencond argument, if
it
> had been a subtype of xdt:untypedAtomic before. Otherwise the first
> argument is returned unchanged.
>
> The type of fs:convert-operand(), however, is defined as
>
> fs:convert-operand($actual as item *,
> $expected as xdt:anyAtomicType)
> as xdt:anyAtomicType ? .
>
> Note that it allows an arbitrarily long sequence of items as its first
> argument. The return value, however, is a sequence of at most length
> one.
>
> The specifications only consider the case where $actual has a length
no
> longer than one. So the return value for $actual being a longer
> sequence remains undefined.
>
> fs:convert-operand() could easily be fixed by restricting $actual to
an
> optional item (item?). This, however, would make queries such as
XMark
> 11 [2] illegal:
>
> for $p in fn:doc("auction.xml")/site/people/person return
> let $l :=
> for $i in
> document("auction.xml")/site/open_auctions/open_auction/initial
> where $p/profile/@income > (5000 * $i/text())
> return $i
> return
> element items {
> attribute name { $p/name/text() }
> text { count ($l) }
> }
>
> Note the `5000 * $i/text()'. $i/text() evaluates to node*. The
Formal
> Semantics rule for Arithmetics [3] applies fn:data(), returning an
> xdt:untypedAtomic* on the non-validated document. If the first
argument
> of fs:convert-operand() were restricted to item? it could not be
applied
> to `$i/text()', making the above query illegal.
>
> Regards
>
> Jens Teubner
>
> [1] http://www.w3.org/TR/xquery-semantics/#sec_convert_operand
> [2] http://www.ins.cwi.nl/projects/xmark/Assets/xmlquery.txt
> [3] http://www.w3.org/TR/xquery-semantics/#sec_arithmetic
>
> --
> Jens Teubner
> University of Konstanz, Department of Computer and Information Science
> D-78457 Konstanz, Germany
> Tel: +49 7531 88-4379 Fax: +49 7531 88-3577
> http://www.inf.uni-konstanz.de/~teubner
>
> Statistics show that most people are in
> the majority, while a few are in the minority.
> -- Nitin Borwankar
>
Received on Monday, 23 August 2004 16:47:55 UTC