W3C home > Mailing lists > Public > public-qt-comments@w3.org > July 2005

[Bug 1753] New: The sorting process

From: <bugzilla@wiggum.w3.org>
Date: Tue, 19 Jul 2005 19:07:02 +0000
To: public-qt-comments@w3.org
Message-Id: <E1DuxQk-0002NB-3h@wiggum.w3.org>


           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 

<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="."/>

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

     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 

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.


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

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:45:25 UTC