[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