|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] Union typesMichael Kay mike at saxonica.comSat Jan 13 00:10:57 PST 2007
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
|






