xsl-list
[Top] [All Lists]

Re: [xsl] In XSLT 3.0, should the "document" function be available in xsl:evaluate?

2017-01-16 13:40:38
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(_dot_)honnen(_at_)gmx(_dot_)de 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)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/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>