|
[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: limits of the generic
--- Jeni Tennison <jeni@j...> wrote: > > According to the latest XPath 2.0 F&O WD, you can > actually do > xs:duration('P3M') = xs:duration('P90D') and if > they're not "exactly > equal" the answer is false. Our devs actually opposed this since it gives xs:duration an air of legitimacy and people start to ask why they can't do other things with it (in much the same manner you are doing now). > But I think that you're getting at the fact that > it's undefined. I can > think of several ways of dealing with that which > don't rule out > perfectly legitimate uses of durations that mix > years or months and > days or times: I question your usage of the term "perfectly legitimate". The mixing of years, months and days in a single duration type leads to indeterminate order relationships at several points which means that the type is partially ordered. More information about this is available in the W3C XML Schema Datatypes recommendation[0] > We could simply say that if it's undefined it's > false (though I > believe that this leads to optimisation problems > because it means that > it's no longer true that a values must be one of > equal, greater than > or less than another value): > P3M = P90D => false > P3M > P90D => false > P3M < P90D => false Did you write this with a straight face? A type that allows (A < B, A = B, A > B) to all return the same value is confusing to end users and rather unuseful. Also it is a significant, hard-to-find bug waiting to happen in someone's application. > We could introduce three-value logic: > > P3M = P90D => () > P3M > P90D => () > P3M < P90D => () So how would you sort the following durations P13M, P3M, P91D, P367D, P365D, P90D, P89D, and P12M given your 3-valued logic? > We could ban direct comparisons of durations, > forcing users to add > them to dates in order to compare them: > > 2002-09-28 + P3M = 2002-09-28 + P90D => false > 2002-09-28 + P3M > 2002-09-28 + P90D => true > 2002-09-28 + P3M < 2002-09-28 + P90D => false Why is a A + 3M greater than A + 90D? The 3 months range consisting of January (31d), February (28d), and March (31d) is exactly 90 days long. I guess noone is expected to use this type for anything requiring accuracy or correct results then? > Or we could use the current date/time automatically > in a comparison > like the above. Or we could pick a date in the past > and use that > consistently for all duration comparisons. *cough* Hack *cough* > Any of these would be better than making it an error > for people to ask > perfectly legitimate, and answerable, questions and > introducing two > new, more restrictive, data types that users have to > use instead of > xs:duration in order for their schemas to work with > XPath 2.0. For > example, I think that "What is 2002-09-28 plus a > year and a day?" is > also a simple question with a well-defined answer; I > don't think it > should be an error to try to ask it. It isn't a well defined question. Is the year a regular year or a leap year? On the other hand "what is 2002-09-28 plus 366 days?" is a simple question with a well defined answer which is possible in XPath 2.0 [0] http://www.w3.org/TR/xmlschema-2/#duration ===== THINGS TO DO IF I BECOME AN EVIL OVERLORD #59 I will never build a sentient computer smarter than I am. __________________________________________________ Do you Yahoo!? New DSL Internet Access from SBC & Yahoo! http://sbc.yahoo.com
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Cast Your Vote
We need your help – Vote for DataDirect XML Products!
Winners and finalists announced at SOA World Conference in November. Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|
|||||||||







