- From: Michael Kay <mike@saxonica.com>
- Date: Fri, 19 Feb 2016 11:28:42 +0000
- To: Florent Georges <fgeorges@fgeorges.org>
- Cc: "Liam R. E. Quin" <liam@w3.org>, Public XSLWG <public-xsl-wg@w3.org>
Another way of satisfying the requirement would be: (a) the user must specify a value for override-extension-function (b) if the specified value is "yes", and the processor has an implementation of the function available, then the processor has the option of rejecting the overriding function (with a static error) because its built-in implementation cannot be overridden. (And perhaps the attribute should become override-system-function?) Example: <xsl:function name="fn:normalize-unicode" _override-system-function="{system-property('xsl:vendor') = 'altova'}"> ... </xsl:function> Michael Kay Saxonica > On 19 Feb 2016, at 10:21, Florent Georges <fgeorges@fgeorges.org> wrote: > > Hi, > > We discussed this briefly earlier this week in Prague, and the > consensus was something like: "it is going to be very costly if the > user can override any standard function." The typical example is that > an optimisation such as replacing fn:true() with the actually constant > value "true" (whatever it is in the implementation) during parsing or > compiling would become illegal. A user could always override it to > return false. Not even mentioning a sequence of nodes. > > This is all very sensible. There is one specific case we might want > to consider though... > > I was trying to use the XPath 3.0 function fn:unparsed-text-lines() > yesterday on MarkLogic. But it is not implemented. And it would have > been nice to be able to provide my own. > > So maybe, if we do not want the user to override existing fn:* > functions, we still might consider to allow users to define a function > in the fn:* namespace, but *only if it is not a function implemented > by the processor*. > > That would solve the problem of partial standard library > implementation, as well as functions defined in the future or outside > F&O (note: "new functions" includes indeed "new arities" for an > existing function name). Without sacrificing intensive optimisation > in early stages of the static phase. > > The one issue I see to be solved though: what to do in case the > function already exists? Is it an error or does the processor ignore > it? In XSLT, an error would make sense as we can have use-when to > prevent the processor to even see it in case it provides the function. > But would be harder to achieve in XQuery, if they ever wanted to adopt > the same mechanism. > > -- > Florent Georges > http://fgeorges.org/ > http://h2oconsulting.be/ > > > On 8 February 2016 at 11:26, Liam R. E. Quin wrote: >> On Mon, 2016-02-08 at 08:47 +0000, Michael Kay wrote: >>> >> [...] >>> Because this change does not require any changes to existing >>> implementations or stylesheets (it permits such changes but does not >>> require them), I see no difficulty with making it during CR. >> >> +1 -- although it should be tested for. >> >> Liam >
Received on Friday, 19 February 2016 11:30:59 UTC