[xquery-talk] XQuery - Grammar? Implementations?
Ronald Bourret
rpbourret at rpbourret.com
Fri Jan 30 21:59:03 PST 2009
Hello,
[1] succeeds (correctly) because of the function conversion rules listed
in section 3.1.5 (Function Calls). These "are used to convert an
argument value or a return value to its expected type". The rule that
applies to [1] is that, when a function argument has an atomic type,
argument values are atomized. Atomization (section 2.4.2.) converts
sequences of nodes to sequences of atomic values. For [1], the node
value <X>Y</X> is converted to "Y".
[2] fails (correctly) because $a is declared to be an xs:string and
<X>Y</X> is not a string. Section 3.8.1 (For and Let Clauses) states the
following in the 14th paragraph (not counting examples):
"If the type of a value bound to the variable does not match the
declared type according to the rules for SequenceType matching, a type
error is raised [err:XPTY0004]"
[3] succeeds correctly because casting explicitly converts <X>Y</X> to a
string, which is the type expected by the function. Note that [3] does
explicitly what [1] does implicitly.
-- Ron
Yoshi Okamoto wrote:
> Dear XQuery subscribers,
>
> I am sometimes fighting to understand all the details of the XQuery grammar. If you have some time, I would be delighted if you could have a look at the following example: I have defined a function with a single string argument:
>
> [0] declare function local:f($a as xs:string) { $a };
>
> If I pass on an element as follows:
>
> [1] let $a := <X>Y</X> return local:f($a)
>
> it is accepted by most XQuery implementations which I tried (I am testing with Saxon, BaseX, MonetDB, Zorba, Qizx, Kawa and MXQuery). However, when I cast the element before passing it on:
>
> [2] let $a as xs:string := <X>Y</X> return local:f($a)
>
> some implementations (also Saxon, which I regard as reference implementation) return [XPTY0004] as error. A third version with an explicit cast:
>
> [3] let $a := xs:string(<X>Y</X>) return local:f($a)
>
> is finally accepted by all implementations.
>
> If possible, can someone tell me what the difference are between the versions, especially [1] and [2]? I tried to find the answer in the specification, but I was not successful.
>
> Thank you very much for your attention and help!
>
> Best Regards,
> Yoshi Okamoto
>
>
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
>
>
> ------------------------------------------------------------------------
>
>
> No virus found in this incoming message.
> Checked by AVG - http://www.avg.com
> Version: 8.0.233 / Virus Database: 270.10.16/1926 - Release Date: 1/30/2009 5:31 PM
>
More information about the talk
mailing list