[prev in list] [next in list] [prev in thread] [next in thread]
List: xsl-list
Subject: Re: [xsl] In XSLT 3.0, should the "document" function be available in xsl:evaluate?
From: "Michael Kay mike () saxonica ! com" <xsl-list-service () lists ! mulberrytech ! com>
Date: 2017-01-16 19:41:08
Message-ID: 20170116144033.73788 () lists ! mulberrytech ! com
[Download RAW message or body]
Actually, the spec of fn:function-lookup says:
If the arguments to fn:function-lookup identify a function that is present in the \
static context of the function call, the function will always return the same \
function that a static reference to this function would bind to. If there is no such \
function in the static context, then the results depend on what is present in the \
dynamic context, which is ·implementation-defined ·.
I seem to recall there was a fair bit of discussion about situations that might lead \
to the dynamic context containing functions not present in the static context, but I \
don't recall the details - I think a number of people had different reasons for \
suggesting this could be useful. For Saxon, certainly, it's useful not to have to \
impose what would be a completely artificial restriction.
Michael Kay
Saxonica
> On 16 Jan 2017, at 14:35, Martin Honnen martin.honnen@gmx.de \
> <xsl-list-service@lists.mulberrytech.com> wrote:
>
> Both the latest internal draft of the XSLT 3.0 spec in \
> https://www.w3.org/XML/Group/qtspecs/specifications/xslt-30/html/#dynamic-xpath as \
> well as the official https://www.w3.org/TR/xslt-30/#element-evaluate say about the \
> function signatures in the context of dynamic XPath evaluation using xsl:evaluate: \
> "Note that this set deliberately excludes XSLT-defined functions in the standard \
> function namespace".
> Based on that I would expect the XSLT "document" function not to be available in \
> dynamic XPath evaluation using xsl:evaluate. So I wrote a test case doing
> <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:xs="http://www.w3.org/2001/XMLSchema" \
> xmlns:fn="http://www.w3.org/2005/xpath-functions" \
> xmlns:math="http://www.w3.org/2005/xpath-functions/math" \
> xmlns:array="http://www.w3.org/2005/xpath-functions/array" \
> xmlns:map="http://www.w3.org/2005/xpath-functions/map" \
> exclude-result-prefixes="array fn map math xs">
> <xsl:output method="xml"/>
>
> <xsl:template name="main" match="/">
> <xsl:sequence
> select="
> let $f := function-lookup(xs:QName('fn:document'), 1)
> return
> if (exists($f)) then
> $f('')
> else
> 'not found'"/>
> <xsl:variable name="path" as="xs:string">
> let $f := function-lookup(xs:QName('fn:document'), 1)
> return
> if (exists($f)) then
> $f('')
> else
> 'not found'</xsl:variable>
> <xsl:evaluate xpath="$path"/>
> </xsl:template>
>
> </xsl:stylesheet>
>
> and expected that to return the stylesheet code for the xsl:sequence and 'not \
> found' for the xsl:evaluate.
> However, only Exselt gives me that result, both Saxon 9.7 EE as well as Altova \
> XMLSpy return the stylesheet code twice which seems to indicate they make the \
> 'document' function available to xsl:evaluate. Isn't that a bug? Or does the spec \
> need to allow it if an implementer wants to go beyond pure XPath support?
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/651070
or by email: xsl-list-unsub@lists.mulberrytech.com
--~--
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic