[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: XPath 1.5? (was RE: typing and markup)
At 12:52 PM -0700 5/7/02, Jonathan Robie wrote: >One use case is the Use Case R, which is currently too complex >precisely because it lacks a schema, which forces us to use casts to >get some things to come out right. Here are some examples: > >1.4.4.2 Q2 - as is: > ><result> > { > for $i in document("items.xml")//item_tuple > let $b := document("bids.xml")//bid_tuple[itemno = $i/itemno] > where contains($i/description, "Bicycle") > return > <item_tuple> > { $i/itemno } > { $i/description } > <high_bid>{ max(for $z in $b/bid return decimal($z)) }</high_bid> > </item_tuple> > sortby(itemno) > } ></result> > >Without the cast, max() would sort according to the string value, >not the decimal value. I would propose more simply that max() and similar functions always treat their arguments as numbers. I personally have never heard of a max() function that operates on strings anyway. Even if you tried to define it as the last in sort-order or some such, it really depends on the sort order, so you need an additional argument, not that this is a natural thing to do in the first place. I suppose you might have a more logical max on date and time types, but again it's not common. I propose instead a latest() and earliest() which would always treat their arguments as dates. This seems much more natural to me than either of the solutions you propose. Similarly, the avg() function should convert all nodes passed to it to numbers, as if by the XPath 1.0 number() function. >You can pick through the whole Use Case R and see many examples like >this. Every single cast is superfluous in these use cases, present >only because there is no schema. > I skimmed them. Nothing jumped out at me that couldn't be handled by my proposal, but maybe I missed something. In brief, I suggest if you pass something to a function that expects a number, it's converted to a number. If you pass something to a function that expects a date, it's converted to a date. No muss, no fuss. What am I missing? >There are two reasons I don't like these casts. One is that it is >tedious. The other is that when I cast, I tell the static type >system that I think I'm smarter than it is, and it will simply >believe me that $z is a decimal. If I'm wrong, this may result in an >error which I will not encounter until run time. > Casting presumes types. If we eliminate static typing from the language casting is no longer needed, just like in XSLT 1.0 where all the conversions are automatic. -- +-----------------------+------------------------+-------------------+ | Elliotte Rusty Harold | elharo@m... | Writer/Programmer | +-----------------------+------------------------+-------------------+ | The XML Bible, 2nd Edition (Hungry Minds, 2001) | | http://www.cafeconleche.org/books/bible2/ | | http://www.amazon.com/exec/obidos/ISBN=0764547607/cafeaulaitA/ | +----------------------------------+---------------------------------+ | Read Cafe au Lait for Java News: http://www.cafeaulait.org/ | | Read Cafe con Leche for XML News: http://www.cafeconleche.org/ | +----------------------------------+---------------------------------+
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! 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
|