[Bug 1753] New: The sorting process

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

           Summary: The sorting process
           Product: XPath / XQuery / XSLT
           Version: Last Call drafts
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: XSLT 2.0
        AssignedTo: mike@saxonica.com
        ReportedBy: joannet@ca.ibm.com
         QAContact: public-qt-comments@w3.org


According to section 13.1.1 (The Sorting Process) of the XSLT 2.0 spec, sorting 
is done pairwise for comparable types.  The following stylesheet and input 
document illustrate why comparing values in pairs contradict with other 
requirements.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output method="text"/>
  <xsl:template match="/">
    <xsl:for-each select="doc/e">
      <xsl:sort select="xs:float(@f),xs:integer(@i)" stable="yes"/>
      <xsl:value-of select="."/>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

<doc>
  <e i="100000001">v1</e>
  <e f="100000000.0">v2</e>
  <e i="100000000">v3</e>
</doc>

     The sort key for the first element is the xs:integer value 100000001, for 
the second is the xs:float value 100000000.0 and for the third is the 
xs:integer value 100000000.  The sort keys for the first and third elements 
compare equal to the sort key for the second element, and the sort key 
specification is stable, so the first element must precede the second in the 
sorted sequence and the second must precede the third in the sorted sequence.  
However, the sort key for the third element is less than the sort key for the 
first element, so the third element must precede the first in the sorted 
sequence.

A possible solution to this problem is to align sorting with XQuery's order by:

The third bullet of section 3.8.3 (Order By and Return Clauses) of the XQuery 
spec says:

All the non-empty orderspec values must be convertible to a common type by 
subtype substitution and/or type promotion. The ordering is performed in the 
least common type that has a gt operator.

thanks,

Joanne

Received on Tuesday, 19 July 2005 19:07:07 UTC