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

Union types

Srdjan Djuricic sdjuricic at galdosinc.com
Fri Jan 12 16:32:28 PST 2007


  Union types
Thanks Michael for you answer, I appreciate it.

Just a quick note, I could not resort to the following:
string(pbs:myProp) = "1999-12-31T12:00:00"

In case that this dateTime contained the timeZone then string comparison
would not work.

Srdjan

-----Original Message-----
From: Michael Kay [mailto:http://x-query.com/mailman/listinfo/talk] 
Sent: Friday, January 12, 2007 4:11 PM
To: Srdjan Djuricic; http://x-query.com/mailman/listinfo/talk
Subject: RE:  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.