- From: Tim Mills <tim@cbcl.co.uk>
- Date: Mon, 9 Nov 2015 16:00:56 +0000
- To: public-xsl-query@w3.org
On 09/11/2015 15:00, Michael Kay wrote:
>>> Omitting a global-context-item declaration [in XSLT] is equivalent
>>> to specifying
>>>
>>>> <xsl:global-context-item use=“optional" as="item()" />
>>> This declaration defines the set of possible states of the context
>>> item to include any item, plus absence.
>>>
>>> I don’t find the notion of the static type being “absent” helpful
>>> without a clear understanding of what the absence of a static type
>>> tells us about the set of possible dynamic states.
>> It tells us nothing about the possible dynamic states, because it
>> identifies a static error.
> No, the declaration <xsl:global-context-item use=“optional"
> as="item()" /> says (a) if you supply a global context item then it
> must be an item (trivially true), and (b) if you don't supply a global
> context item then any reference to "." (etc) is a dynamic error XPDY0002.
>
> We can raise the error statically if you specify use="required", but
> not if you leave it at the default use="optional".
>
> We allow users to write:
>
> <xsl:variable name="context-item-if-supplied" as="item()?">
> <xsl:try select=".">
> <xsl:catch errors="*:XPDY0002" select="()"/>
> </xsl:try>
> </xsl:variable>
>
> I'm reluctant to lose that capability.
You won't lose that (unless the above appears within a function, since
the context item isn't in scope inside the function). As I've said, the
global-context-item makes it absolutely clear that the context item
static type is not absent.
Cheers,
Tim
Received on Monday, 9 November 2015 16:01:34 UTC