[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message]

Union types

Michael Kay mike at saxonica.com
Sat Jan 13 00:10:57 PST 2007


  Union types
There's a bit of a gap in the spec here: support for union types is not
particularly good. It would be nice to allow a cast directly to a union type
(or a castable test, for that matter). It would also be nice if you could
directly compare an element/attribute having a union type with a value
belonging to one of its member types without the risk of a type error.

Doing a sequence of "castable" tests as Jim suggested is one solution but it
does replicate a lot of detail from the schema into the query. 

I thought another way to do it would be to have a global element e declared
in the schema with the required union type as its type, and then do

pbs:myProp = validate{ <e>{"1999-12-31T12:00:00"}</e> }

Unfortunately this give you a type error rather than false if pbs:myProp is
not a dateTime. To get round this, use

index-of(pbs:myProp, validate{ <e>{"1999-12-31T12:00:00"}</e> }) = 1

Of course if the lexical spaces of the member types of the union are
disjoint (for example with union(date, time, dateTime)) a much easier
solution is to do

string(pbs:myProp) = "1999-12-31T12:00:00"

Michael Kay
http://www.saxonica.com/





> -----Original Message-----
> From: http://x-query.com/mailman/listinfo/talk 
> [mailto:http://x-query.com/mailman/listinfo/talk] On Behalf Of Srdjan Djuricic
> Sent: 12 January 2007 21:00
> To: http://x-query.com/mailman/listinfo/talk
> Subject:  Union types 
> 
> Hello,
> 
> I have a question regarding union types and how to deal with 
> them.  The simpleType in question is a union of "time 
> dateTime anyURI decimal date gYearMonth gYear".  When a user 
> performs a query they specify an element name along with the 
> literal value to do the comparison.  Based on the schema we 
> find out the element's primitive type and do a cast on the 
> input literal's value.  For example 
> 
> pbs:myProp = xs:dateTime("1999-12-31T12:00:00") 
> 
> The problem occurs if myProp is a simpleType with an union.  
> I do not know how to cast the input data.  I tried using 
> "instance of" on the literal value operator but quickly found 
> out that "1999-12-31T12:00:00"
> instance of xs:dateTime yields false.  If I don't do any 
> casting I get an exception.  
> 
> Are there any suggestion as to how to deal with this issue?
> 
> Thanks,
> 
> Srdjan
> 
> 
> 
> 
> _______________________________________________
> http://x-query.com/mailman/listinfo/talk
> http://x-query.com/mailman/listinfo/talk



Purchase Stylus Studio Online Today!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2007 All Rights Reserved.