- From: Christophe Marchand <cmarchand@oxiane.com>
- Date: Sun, 13 Dec 2020 00:57:25 +0100
- To: public-xslt-40@w3.org
- Message-ID: <ffe53612-9261-9c05-ea20-102d667d81d4@oxiane.com>
And the groundhog...
Le 12/12/2020 à 22:55, Michael Kay a écrit :
> Indeed, it's an open question what the context for evaluation of a
> default parameter value expression should be.
>
> We've started implementing core functions in XSLT (for portability),
> so we would like to eliminate the situation where core functions can
> depend on the context in a way that is not allowed for user-defined
> functions. A common case is an argument whose default value depends on
> the default collation in the static context of the caller.
>
> A simple rule that default value expressions are evaluated in the
> context of the caller doesn't work, however: we wouldn't want to allow
> it to reference local variables in the caller's context, or (thinking
> XSLT packages) private functions in the calling package.
>
> Michael Kay
> Saxonica
>
>> On 12 Dec 2020, at 11:33, Reece Dunn <msclrhd@googlemail.com
>> <mailto:msclrhd@googlemail.com>> wrote:
>>
>> A ·focus-dependent· function is a function that accepts the current
>> path focus (context item `.`) as a parameter to the function.
>> Currently this is only supported for built-in functions, but could be
>> useful for user-defined functions.
>>
>> Bounded-variadic functions offer a way of doing this succinctly
>> without any extension to the existing syntax. The logic would be:
>>
>> > If an argument has a default expression equal to the context item,
>> or an expression using the context item (e.g. `./test`), the context
>> item is evaluated at the point at which that argument is evaluated
>> (either from a function call, or a partial function application).
>>
>> This would allow the Functions and Operators specification to use
>> this to define the ·focus-dependent· functions like:
>>
>> |fn:string|(|$arg|| as ||item()? := .|)| as ||xs:string|
>>
>> Note #1: I'm not restricting this to just the context item to support
>> things like:
>>
>> declare function to-xsdate($year := ./year, $month := ./month,
>> $day := ./day) {};
>>
>> so the following is possible:
>>
>> to-xsdate(2020, 12, 10), $doc//date/to-xsdate()
>>
>> Note #2: I think it makes sense to have the static context bind at
>> the function declaration, and the dynamic context bind at the call
>> site (where the argument is passed to the parameter).
>>
>> Note #3: I'm not sure whether defaults that depend on parameters
>> declared earlier should be valid or not. For example:
>>
>> declare function f($a, $b := $a * 2) {};
>>
>> Kind regards,
>> Reece
>
Received on Saturday, 12 December 2020 23:57:48 UTC