RE: [xsl] XPath 2 sequence item type determination

Subject: RE: [xsl] 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: [xsl] 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. 
> >_____________________________________________________________
> ___________

Current Thread