- From: Michael Dyck <jmdyck@ibiblio.org>
- Date: Mon, 4 Jan 2016 00:19:02 -0500
- To: Public Joint XSLT XQuery XPath <public-xsl-query@w3.org>
> ACTION A-627-02: Michael Dyck to review bug #29277 and clarify what the > text means. ETA 2016-01. (Despite what the action item says, I'm not reviewing the whole of Bug 29277.) Specifically, "the text" is the paragraph in XPath 3.x section 3.1.5.1 (Evaluating Static and Dynamic Function Calls) that the minutes characterize as "difficult to interpret". To set the stage, FC is a (static or dynamic) function call, F is the function to be called, SC is FC's static context, and DC is the dynamic context against which FC is being evaluated. Then, 5.b.i says: If F's implementation is implementation-dependent (e.g., it is a built-in function or external function or host-language-dependent function, or a partial application of such a function): * F's implementation is invoked with the converted argument values using the contexts it is associated with in F. If these contexts are absent in F, it is associated with SC and DC. * ... (I'll refer to these as the "If paragraph" and the "bullet paragraph".) At meeting 627, I was puzzled by the bullet paragraph's talk of associated contexts. To make sense of this, I needed to go back to the definition of 'function' in the Data Model, which states that: an implementation-dependent function implementation [...] is optionally associated with both a static and a dynamic context. This concept of associated contexts was proposed in 2012 by Ghislain Fourny in the message: https://lists.w3.org/Archives/Member/w3c-xsl-query/2012Apr/0000.html The proposed change to the bullet paragraph is edit #4 in the above message. However, what Ghislain proposed isn't what we have now. Here's a comparison, using curly braces around the differing text: Ghislain's proposed text: F's implementation is invoked with the converted argument values {and with respect to} the contexts it is associated with in F. If {it is not associated with any contexts}, it is {invoked with respect to} SC and DC. current text: F's implementation is invoked with the converted argument values {using} the contexts it is associated with in F. If {these contexts are absent in F}, it is {associated with} SC and DC. The first difference was probably just an editorial change, but I think the second and third differences were unintentional: the sentence "If these contexts are absent in F, it is associated with SC and DC." does appear in Ghislain's proposal, but in edit #3 (re partial function application), not edit #4. So I think the second sentence in the current bullet paragraph is there due to a copy-and-paste error. Changing it to what Ghislain wrote would be an improvement. --- However, that change wouldn't address Mike Kay's concern (raised in https://www.w3.org/Bugs/Public/show_bug.cgi?id=29277#c14), which I believe can be paraphrased thusly: A user-defined stylesheet function in XSLT (i.e., an <xsl:function>) is (from XPath's POV) a "host-language-dependent function", and therefore the condition in the "If" paragraph is true, and therefore the bullet paragraph applies. However, that para seems to indicate that the function's implementation is invoked with the SC and DC of the *call*, which it isn't. (1) One possible way out of this is that the bullet paragraph *doesn't* invoke the function's implementation with the SC and DC of the call if the function's implementation already has associated contexts. So the XSLT spec could assert that, in terms of the Data Model, a stylesheet function is a function with an implementation-defined implementation that is associated with such-and-such contexts. One problem with this approach is that it would contradict XPath 2.1.2 (Dynamic Context), which says: Named functions can include functions with implementation-dependent implementations; these functions do not have a static context or a dynamic context of their own. I'm not sure if that *needs* to be true, or just happens to be true so far. If the latter, we could just remove it. (2) Another approach would be to modify the bullet paragraph to be more laissez-faire, something like: F's implementation is invoked. The processor makes the following information available to that invocation: * the converted argument values; and * a static context and dynamic context. If the implementation is associated with a static and dynamic context, then these, otherwise SC and DC. Note: Whether and how this information is used by the function is, of course, entirely up to semantics that are not defined by this specification. (I'm not thrilled with this particular wording, but it at least makes clear that the XPath spec is *not* dictating the context against which a stylesheet function is evaluated.) (Also, the XPath spec could maybe be more authoritative than the above when it comes to *built-in* (i.e., F+O) functions, but I'm not sure it needs to be.) I think I prefer approach (2). -Michael
Received on Monday, 4 January 2016 05:19:32 UTC