Re: [xsl] testing for string and number in XSLT 2.0 was Re: [xsl] Test For Numeric Values?

Subject: Re: [xsl] testing for string and number in XSLT 2.0 was Re: [xsl] Test For Numeric Values?
From: James Fuller <jim.fuller@xxxxxxxxxxxxxx>
Date: Sat, 09 Apr 2005 11:27:15 +0200
Michael Kay wrote:

>>take for example xsl:sort
>>
>><xsl:sort select="." data-type="number"/>
>>
>>what does 'number' mean here?
>>    
>>
>
>It's retained for backwards compatibility with XSLT 1.0; the "native" way of
>doing this in 2.0 would be
>
><xsl:sort select="xs:double(.)"/>
>
>if they are doubles, or more likely
>
><xsl:sort select="xs:integer(.)"/>
>
>if they are integers.
>
>  
>
thx for clarification and generally letting me indulge...its much easier
to fire off questions whilst reading the specs..

>>and if we are comfortable with this type of ambiguity of identifying
>>something purely as a 'number'....then why not have some fairly useful
>>functions such as is-number() and is-string() that exist in 
>>this no mans land.
>>    
>>
>
>You're welcome to write your own function is-string($x) that has the same
>effect as the expression ($x instance of xs:string), but the WG wants to
>avoid bloating the language with redundant ways of doing the same thing.
>  
>
agree with avoiding bloat, esp if we are duplicating
functionality....just a final point....

using Saxon 8.1b

EX. XML
<?xml version="1.0" encoding="UTF-8"?>
<example>
    <test>132131</test>
</example>


EX. XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    version="2.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema";>
   
    <xsl:output method="xml" indent="yes"/>
   
    <xsl:variable name="x" select="example/test" as="xs:integer"/>
    <xsl:variable name="y" select="example/test"/>
   
    <xsl:template match="example">

        $y variable value: <xsl:value-of select="$y"/>
        Test as string:<xsl:value-of select="$y instance of xs:string"/>
        Test as integer:<xsl:value-of select="$y instance of xs:integer"/>
       
        I would expect this to be true as I have explicitly cast x as an
integer
        $x variable value: <xsl:value-of select="$y"/>
        Test as an integer: <xsl:value-of select="$x instance of
xs:integer"/>     
           
    </xsl:template>             

</xsl:stylesheet>

I get the following result;

        y variable value(so we know we are selecting it): 132131
        Test y as string:false
        Test y as integer:false
       
        I would expect this to be true as I have explicitly cast x as an
integer
        x variable value:132131
        test x as integer: true

not sure if this is what I would expect normally, the issue is related
to an element if if has no explicitly declared data-type..

the above behavior works the same way if I just reference the element
(example/test) and dont use a variable...though I wanted to highlight
that there are a few steps where an XSLT Processor may have to *decide*
what datatype it is.

it doesnt make much sense to me to *have* to declare something as an
integer datatype to test if its a value is a number...whats the point?

I know this is quite a speculative thread and apologies to list for
going on...

cheers, Jim Fuller

Current Thread