Re: [xsl] Checking for instance of xs:integer

Subject: Re: [xsl] Checking for instance of xs:integer
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Tue, 12 Oct 2004 16:44:19 +0100
Hi Kenneth,

> ...where I'm trying to detect if a variable has an integer value. The
> output that I currently get is :
>
> bash-2.05b$ java net.sf.saxon.Transform intck.xsl intck.xsl 
>
>                                 no
>
> At first I thought that this is because the xsl:value-of that is
> used to assign the value of $var/a was producing either a string or
> an untypedAtomic value. However, changing the "xsl:when" to test for
> xs:string and xsd:untypedAtomic didnt work either. Is there any way
> to get this to work without using a schema aware processor?

The result of the expression "$var/a" is a sequence containing an <a>
element. A sequence of elements is not the same as a sequence of
atomic values. Tests such as:

  $var/a instance of element()
  $var/a instance of element(a)

will evaluate as true.

Note that when you do:

  <xsl:value-of select="xs:integer(2)" />

the value of the select attribute is the integer 2 (there's no
requirement for the explicit cast), in fact. The <xsl:value-of>
instruction creates a text node; text nodes don't have types, so
doing:

  <xsl:value-of select="xs:integer(2)" />

is actually just the same as doing:

  <xsl:text>2</xsl:text>

In:

  <xsl:element name="a">
    <xsl:value-of select="xs:integer(2)" />
  </xsl:element>

The generated <a> element doesn't have any type associated with it.
So, for example:

  $var/a instance of element(*, xs:integer)
  $var/a instance of element(a, xs:integer)
  data($var/a) instance of xs:integer

will be false. The first two test whether the <a> element is typed as
an xs:integer. The second tests whether the typed value of the <a>
element is an xs:integer.

If you want the <a> element to be typed as an integer, and therefore
its typed value to be an instance of xs:integer, you can do (for
example):

  <a xsl:type="xs:integer">2</a>

and then the above instance of tests will be true.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

Current Thread