- From: <bugzilla@wiggum.w3.org>
- Date: Tue, 10 May 2005 10:49:52 +0000
- To: public-qt-comments@w3.org
- Cc:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=1318
Summary: Comparing durations for equality
Product: XPath / XQuery / XSLT
Version: Last Call drafts
Platform: PC
OS/Version: Windows XP
Status: NEW
Severity: normal
Priority: P2
Component: Functions and Operators
AssignedTo: ashok.malhotra@oracle.com
ReportedBy: mike@saxonica.com
QAContact: public-qt-comments@w3.org
ACTION: A-252-01 - Michael Kay will file a separate LC comment on "Specify an
equality comparison for xs:duration values" and proposing a comparison
mechanism. Bug 1208 should be dependent on the new bug, and when we resolve the
new bug we will revisit 1208.
We should define an equality comparison for xs:duration values.
(a) There's no good reason not to. Although ordering of durations is
problematical, there's no problem defining equality. Admittedly there is more
than one possible definition, but that's true of many of our data types.
(b) Not having an equality operation for durations causes implementation
difficulties with other operations such as distinct-values(), deep-equal(), and
(in XSLT) sorting and grouping. For example, distinct-values() treats all
durations as distinct from each other, which makes it hard to come up with a
suitable hashing function; similarly, deep-equal() has to search a document to
arbitrary depth, because if it contains a duration anywhere then it is not
deep-equal to any other document, not even itself.
The proposed definition is that two durations $d1 and $d2 are equal if and only
if xdt:dayTimeDuration($d1) eq xdt:dayTimeDuration($d2) and
xdt:yearMonthDuration($d1) eq xdt:yearMonthDuration($d2).
To implement this:
(a) in the language books, add two lines to the operator mapping table in B.2:
A eq B | xs:duration | xs:duration | op:duration-equal(A, B) | xs:boolean
A ne B | xs:duration | xs:duration | fn:not(op:duration-equal(A, B)) | xs:boolean
(b) Add a new function to F+O:
10.4.x op:duration-equal
op:duration-equal( $arg1 as xs:duration,
$arg2 as xs:duration) as xs:boolean
Summary: Returns true if and only if $arg1 is equal to $arg2. Returns false
otherwise.
This function backs up the "eq" and "ne" operators on xs:duration values.
The function returns true if xdt:dayTimeDuration($arg1) eq
xdt:dayTimeDuration($arg2) and xdt:yearMonthDuration($arg1) eq
xdt:yearMonthDuration($arg2); otherwise it return false.
Examples:
xs:duration("P1Y") eq xs:duration("P12M") returns true.
xs:duration("PT24H") eq xs:duration("P1D") returns true.
xs:duration("P1Y") eq xs:duration("P365D") returns false.
Michael Kay
Received on Tuesday, 10 May 2005 10:49:59 UTC