Subject: RE: XPath 2 sequence item type determination
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 2 Sep 2008 18:00:28 +0100
|
Firstly, a sequence as such does not have its own type: the (dynamic) type
of a sequence is purely a function of the types of the items it contains.
Secondly, it's quite deliberate that there is no function to determine the
"most precise type" of an XPath value, only a function (or operator) to test
whether it conforms to a given type. If there were such a function, it would
enable you to determine and to become dependent on implementation details
that you should not be concerned with, for example that index-of() always
returns a sequence of xs:int values (or perhaps even jx:my17bitInt) whereas
the spec only requires xs:integer. Very often the type would be one that
you've never heard of, and have no way of asking questions about.
"instance of" is not a hack, it is the correct solution.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Justin Johansson [mailto:mail@xxxxxxxxxxxxxxxxxxx]
> Sent: 02 September 2008 18:01
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: XPath 2 sequence item type determination
>
> David, many thanks for the insight, if not a "hack", and no
> disrespect intended.
>
> Though, say, if one wants to stick to standards and not
> proprietary extensions, then surely the suggestion of using a
> series of "if instance of" is problematic in that it is
> relying on the external string representation of the type
> (via xsd schema) to guess the type of the
> (internal) XDM item?
>
> I may be missing something but the XPath et al specs clearly
> spell out the concept of a sequence and it to be a list of
> sorts and that which contains items, and said items of same
> being of either an atomic or node type.
>
> However, having done that, the spec does not enlighten one as
> to how to determine the type *precisely* other than allowing
> one to resort to hacks of the type you suggested.
>
> Am I missing something, or is your opinion that of mine which
> is that the spec is lacking?
>
> Thanks for your input, Justin J
>
>
>
>
> At 04:54 PM 2/09/2008 +0100, you wrote:
> >
> >if (instance of . xs:integer) then 'integer' else if (instance of .
> >xs:boolean) then 'boolean' else ....
> >
> >
> >or, if you don't want to write a big nested set of tests and
> are running
> >saxon,
> >
> >http://www.saxonica.com/documentation/extensions/functions/ty
> peannotation.h
> tml
> >
> >
> >type-annotation(item as item()) ==> xs:QName
> >
> >This function takes an item as argument. If the argument is
> a node, the
> >function returns the type annotation of the node, as a QName. If the
> >type is anonymous, this will be a system-generated internal
> name. If the
> >argument is an atomic value, the function returns the type
> label of the
> >atomic value, again as a QName.
> >
> >David
> >
> >
> >_____________________________________________________________
> ___________
> >The Numerical Algorithms Group Ltd is a company registered in England
> >and Wales with company number 1249803. The registered office is:
> >Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.
> >
> >This e-mail has been scanned for all viruses by Star. The service is
> >powered by MessageLabs.
> >_____________________________________________________________
> ___________
|