|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] Union typesSrdjan Djuricic sdjuricic at galdosinc.comFri Jan 12 16:32:28 PST 2007
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! 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
|






