[Bug 13494] New: Node uniqueness returned from XSLT function.

http://www.w3.org/Bugs/Public/show_bug.cgi?id=13494

           Summary: Node uniqueness returned from XSLT function.
           Product: XPath / XQuery / XSLT
           Version: 2nd Edition Recommendation
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: normal
          Priority: P2
         Component: XSLT 2.0
        AssignedTo: mike@saxonica.com
        ReportedBy: vladimir@nesterovsky-bros.com
         QAContact: public-qt-comments@w3.org


Running my XSLT with the Saxon engine, I've found some ambiguity as for
implementation details of node uniquess returned from a function. That's an
example:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:t="http://www.nesterovsky-bros.com/xslt/public"
  exclude-result-prefixes="t xs">

  <xsl:template match="/" name="main">
    <xsl:variable name="result">
      <root>
        <xsl:for-each select="1 to 3">
          <section-ref name-ref="{t:generate-id()}.s"/>

          <!--
          <xsl:variable name="id" as="xs:string" select="t:generate-id()"/>
          <section-ref name-ref="{$id}.s"/>
          -->
        </xsl:for-each>
      </root>
    </xsl:variable>

    <xsl:message select="$result"/>
  </xsl:template>

  <!-- This is siplified version. -->
  <!--
  <xsl:function name="t:generate-id" as="xs:string">
    <xsl:variable name="element" as="element()">
      <element/>
    </xsl:variable>

    <xsl:sequence select="generate-id($element)"/>
  </xsl:function>
  -->

  <!-- This is more complex version. See spec section 9.2 -->
  <xsl:function name="t:generate-id" as="xs:string">
    <xsl:call-template name="t:generate-id"/> 
  </xsl:function>

  <xsl:template name="t:generate-id" as="xs:string">
    <xsl:param name="name" as="xs:string" select="'a'"/>
    <xsl:param name="element" as="element()">
      <xsl:element name="{$name}"/>
    </xsl:param>

    <xsl:sequence select="generate-id($element)"/>
  </xsl:template>
</xsl:stylesheet>

I thought that the stylesheet should output elements with different values of
name-ref attribute.

Unfortunately, Saxon behaves differently depending on how I write the code:

a) following produces same values:

   <section-ref name-ref="{t:generate-id()}.s"/>

b) this produces different values:

   <xsl:variable name="id" as="xs:string" select="t:generate-id()"/>
   <section-ref name-ref="{$id}.s"/>

In the course of discussion with Michael Kay he pointed that the behaviour is
not strictly defined in the spec, so that's not an implementation bug.

I would like WG to clarify this behaviour.

Originally problem described at:
http://sourceforge.net/projects/saxon/forums/forum/94027/topic/4621860

Thanks.

-- 
Configure bugmail: http://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.

Received on Monday, 1 August 2011 08:45:32 UTC