Subject: RE: Different results of format-date() when using empty seq. or omitting args for lang/cal/country args
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 2 Oct 2006 15:04:28 +0100
|
> While trying to output a value as ISO calendar using a
> default language, I came across a little niche in the xslt
> specification that I find hard to interpret right. My problem
> is this: when I want to output as ISO calendar, I have to
> provide the last three arguments for format-date().
> The spec says that I can use the empty sequence to use for
> the default value, which value is implementation-defined.
> Fair enough. But when I use the empty sequence for language,
> the processor defaults to language X and outputs with
> [Language: en] somedate, saying in fact that it does not
> support the default language requested! Am I missing
> something, or is this is a processor dependent bug?
Saxon is taking the default from the Java locale, and then falling back to
English if you haven't installed a date localisation for that locale. It
would probably be more sensible to collapse these two steps, which would
mean you didn't get the [Language: en] in the output.
The current behaviour of Saxon is conformant with the spec, but there are
other conformant behaviours that might be more user-friendly.
Michael Kay
http://www.saxonica.com/
>
> My hunch is that the processor takes the current language
> setting from system properties, which is, likely, to vary
> from system to system (in my case 'nl'). What I expected it
> to, is to default to a fixed language code, namely 'en' (or
> any other for that matter). That way, the following two
> statements would be equal:
>
> Ex 1) format-date(current-date(), '[D1]/[Y1]') Ex 2)
> format-date(current-date(), '[D1]/[Y1]', (), (), ())
>
> Output ex. 1) 10/2006
> Output ex. 2) [Language: en] 10/2006
>
> In some way, this feels like violating the specs, but I
> cannot be sure of that. The specs say: "When any of these
> arguments is omitted or is an empty sequence, an
> implementation-defined default value is used."
>
> You can only omit all three last arguments at once. I expect
> the "default value" to be the same all the time, instead
> being different for 'omitting' and 'empty sequence'.
>
> I would like to use the following statement (3), for logging
> my stuff to some system. Unfortunately I have to resort
> statement (4), to get rid of the [Language: en] part in the
> output. But specifying the language does not feel right,
> because I want the default to be used, to be sure the
> processor can support the default (but it doesn't).
>
> Ex 3) format-date(current-date(), '[D1] [MNn] [Y1], (),
> 'ISO', ()) Ex 4) format-date(current-date(), '[D1] [MNn]
> [Y1], 'en', 'ISO', ())
>
> Output ex 3) [Language: en]2 October 2006 Output ex 4) 2 October 2006
>
> Does anybody has some experience with this with other processors?
> Anybody any thoughts on this or on how I should interpret the
> particular part of the specs? Is the spec indeed open to
> implement for different outputs for (1) and (2), or is that
> an error in the processor?
>
> I tested with Saxon 8.7.1
>
> Cheers,
> Abel Braaksma
|