W3C home > Mailing lists > Public > public-rif-wg@w3.org > May 2009

Re: [DTB] issues with numeric casting/built-in functions

From: Jos de Bruijn <debruijn@inf.unibz.it>
Date: Tue, 12 May 2009 11:08:14 +0200
Message-ID: <4A093C7E.6040307@inf.unibz.it>
To: Axel Polleres <axel.polleres@deri.org>
CC: RIF <public-rif-wg@w3.org>
I believe this works. Basically, you define the functions only for those
cases you are sure that F&O defines them.
I think I like this solution better than what I proposed below.

As for the xs:decimal casting function: you could follow the same logic
and include in the domain of the function only those values such that
the result of casting to xs:decimal requires only 16 decimals.
Analogous for the other casting functions coming from F&O.

Best, Jos

Axel Polleres wrote:
> Please check, wheter the following reformulation of the Section 3.5 of DTB
>   http://www.w3.org/2005/rules/wiki/DTB#Numeric_Functions
> works for resolving the issue on numeric functions.
> Axel (apologies for late edits)
> Jos de Bruijn wrote:
>> XPath functions and operators essentially says that each implementation
>> can decide for itself which length for decimals it supports.  For
>> example, implementation A could support decimals of length 16, while
>> implementation B supports decimals of length 20.  In addition, each
>> implementation can use its own rounding algorithm for representing
>> numbers that need larger decimals.  For example, implementation A could
>> truncate numbers, while implementation B rounds them.
>> this poses problems for us when defining things like casting functions
>> and arithmetic operations.
>> for example, according to XPath casting a string
>> "0.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
>> to a decimal results either in an error or a decimal of some length
>> (given by the implementation) that is obtained from the number
>> corresponding to the string by some arbitrary rounding algorithm.
>> It is not possible for us to define this kind of behavior in DTB,
>> because functions are defined as functions: you have some input values
>> that define an output value.
>> In addition, it is really bad for interchange, since some
>> implementations do something, while other implementations do something
>> else, and you get no warning.
>> So, for casting, I propose to define the xs:decimal casting function
>> such that the result of casting a string to a decimal is simply the
>> number with the input string as lexical representation, and so we have
>> no exception behavior.
>> We might define conformance such that implementations only need to
>> support decimals of a particular length.
>> The problem with numeric functions are similar.  With addition,
>> subtraction, and multiplication we run into the same problem.  Again, I
>> propose to define the functions such that the output values are simply
>> the decimals which are the result of the arithmetic operations and not
>> from some implementation-dependent modification.
>> With division it gets a bit more complicated.  For example, there is no
>> decimal that can represent the result of dividing 1 by 3, because there
>> are no infinite-length decimals. If we had owl:real we could still
>> properly defined the division function, although there is no syntactical
>> representation for the result. I have two possible solutions for you:
>> (1) We reintroduce owl:real and use it for the definition of
>> numeric-divide (I think we need it only there).
>> (2) We define the domain of numeric-divide such that only pairs of
>> numbers a,b (if they are decimals) are included if a/b can be
>> represented using a decimal. This means that if 1,3 are the arguments,
>> the value of the function is not specified by DTB and is left up to the
>> implementation.
>> I think these are crucial issues and we need to have at least an idea of
>> where we want to go before DTB can go to last call. Otherwise, it will
>> not be possible to make any RIF implementations.
>> Best, Jos

+43 1 58801 18470        debruijn@inf.unibz.it

Jos de Bruijn,        http://www.debruijn.net/
Many would be cowards if they had courage
  - Thomas Fuller

Received on Tuesday, 12 May 2009 09:09:07 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:47:56 UTC