- From: Axel Polleres <axel.polleres@deri.org>
- Date: Wed, 13 May 2009 00:35:17 +0100
- To: Michael Kay <mike@saxonica.com>
- CC: public-qt-comments@w3.org, 'RIF WG Chairs' <team-rif-chairs@w3.org>
Thanks a lot for the quick and helpful reply! Axel Michael Kay wrote: >> I would kindly ask for advice on the following questions >> regarding implicit casts and type promotions in XPath/XQuery functions >> >> >> 1) For instance, fn:year-from-dateTime >> (http://www.w3.org/TR/xpath-functions/#func-year-from-dateTime) >> does not mention any implicit casts in its definition. >> Does that imply a type error if I call >> >> fn:year-from-dateTime(s) >> >> with an xs:string value s as parameter, even if s is in the lexical >> space of xs:dateTime or is a cast here implicit? > > The only implicit conversions on a function call are those described at > > http://www.w3.org/TR/xpath20/#id-function-calls > > that is, > > * atomization of nodes > > * conversion of untypedAtomic values to the required type (by casting) > > * (and in other functions) promotion of numeric values, for example integer > to double. > > There is no implicit casting from xs:string. >> On the other hand, fn:years-from-duration >> (http://www.w3.org/TR/xpath-functions/#func-year-from-dateTime) >> mentions explicitly casting in its definition: >> >> "The result is obtained by casting $arg to an >> xs:yearMonthDuration (see >> 17.1.4 Casting to duration types) and then computing the >> years component >> as described in 10.3.1.3 Canonical representation." >> >> Would that imply that fn:years-from-duration(s) >> would accept an xs:string s castable to xs:yearMonthDuration >> as argument? > > No, this casting is internal to the function, the supplied value must still > conform to the rules given in the function signature, which require the > value to be an instance of xs:duration (after atomization and conversion of > untypedAtomic). >> In this case is this different treatment of the extraction functions >> for years from dateTime and duration intended? >> >> 2) Similarly, >> op:divide-yearMonthDuration >> (http://www.w3.org/TR/xpath-functions/#func-divide-yearMonthDuration) >> accepts as second argument xs:double. >> >> Again the question is whether casting here is implicit, as e.g. the >> example suggests: >> >> op:divide-yearMonthDuration(xs:yearMonthDuration("P2Y11M"), 1.5) >> >> where 1.5 is a decimal value, isn't it? > > The standard function calling rules allow numeric promotion: if the required > type is xs:double, the supplied value can be xs:integer, xs:decimal, or > xs:double. >> >> In general, I would like to find where in the spec I would >> find hints on >> whether conversions in functions and operators are meant to >> be implicit >> or not, and, if they are, then why in some cases, e.g. >> fn:years-from-duration >> casting is mentioned explicitly? >> > > Section 3.1.5 of the XPath language spec. > > Best regards, > > Michael Kay > Saxonica > -- Dr. Axel Polleres Digital Enterprise Research Institute, National University of Ireland, Galway email: axel.polleres@deri.org url: http://www.polleres.net/
Received on Tuesday, 12 May 2009 23:36:00 UTC