ACTION-2018 - Confirm that min() and max() are compatible with the ones in xpath 2


This action item is about the min/max functions. The current status is
as follows:

- XForms 1.1 defines min/max functions in an XPath 1.0 context.
- XPath 2.0 defines standard min/max functions.
- XForms 2.0 takes the XForms 1.0 functions and kind of adapts them to
XPath 2.0.

I think that it comes down to this:

1. Either XForms 2.0 *doesn't* define the min/max functions anymore
(or only in the context of XPath 1.0 compatibility), and delegates
this to XPath 2.0.
2. Or XForms 2.0 defines its own min/max functions *in addition* to
the XPath 2.0 ones, maybe only in the xf: namespace.

Either way, the XPath 2.0 functions should be available in the default

The XForms 1.1 functions have the following signature:

    number min(node-set)
    number max(node-set)

With the rule "If the parameter is an empty node-set, or if any of the
nodes evaluate to NaN, the return value is NaN.".

The XPath 2.0 functions work slightly differently:

- They don't return NaN, except if one of the value passed is NaN.
- Instead they raise a type error if a value cannot be converted to a
number (by default, `xs:double`).

So with the following, assuming untyped element nodes:


and the expression:


The XForms 1.1 functions returns NaN, but the XPath 2.0 functions
raise a type error.

In addition, the XPath 2.0 functions can deal with other types, such
as `xs:integer`, `xs:decimal`, etc. For example:

    min((xs:integer("42"), xs:decimal("1.2")))

returns a value of type `xs:decimal`. Any comparable type is
supported, even `xs:string`:

    min(("a", "b"))

In practice, I think the main compatibility issue arises with
`xs:double`, which would probably be the most common case when
migrating a form from XForms 1.0/XPath 1.0 to XForms 2.0/XPath 2.0.

I am not absolutely sure if the incompatibilities warrant having two
sets of functions, because that would be quite confusing!


Received on Wednesday, 1 April 2015 05:53:09 UTC