[xquery-talk] Union types
Srdjan Djuricic
sdjuricic at galdosinc.com
Fri 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:mike at saxonica.com]
Sent: Friday, January 12, 2007 4:11 PM
To: Srdjan Djuricic; talk at x-query.com
Subject: RE: [xquery-talk] 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: talk-bounces at x-query.com
> [mailto:talk-bounces at x-query.com] On Behalf Of Srdjan Djuricic
> Sent: 12 January 2007 21:00
> To: talk at x-query.com
> Subject: [xquery-talk] 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
>
>
>
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
More information about the talk
mailing list