[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: [XSLT 2.0] Checking that an element's value has th

Subject: RE: [XSLT 2.0] Checking that an element's value has the desired datatype?
From: "Costello, Roger L." <costello@xxxxxxxxx>
Date: Mon, 16 Oct 2006 11:53:50 -0400
seek node value xslt
Excellent!  With this:

    matches(flt:Aircraft/flt:Altitude, '[0-9]+')

I can do datatype checking, without using XML Schemas.

This will be very handy for Schematron ...

/Roger

-----Original Message-----
From: Michael Kay [mailto:mike@xxxxxxxxxxxx]
Sent: Monday, October 16, 2006 11:47 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE:  [XSLT 2.0] Checking that an element's value has the
desired datatype?

If there's no schema, then the Altitude element is untyped, so applying
data() to it gives an instance of xs:untypedAtomic, not an integer.

The expression you want is

 flt:Aircraft/flt:Altitude castable as xsd:integer

which tests not whether the value is an integer, but whether conversion
to
an integer would succeed.

You could also test this with a regular expression

matches(flt:Aircraft/flt:Altitude, '[0-9]+')

(which in Saxon is probably faster, as "castable as" will tend to throw
and
then catch a Java exception in the "false" path, and throwing
exceptions is
very inefficient in Java).

Michael Kay
http://www.saxonica.com/


> -----Original Message-----
> From: Costello, Roger L. [mailto:costello@xxxxxxxxx]
> Sent: 16 October 2006 16:34
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  [XSLT 2.0] Checking that an element's value
> has the desired datatype?
>
> Hi Folks,
>
> Below is an XML document containing information about the
> Altitude of an Aircraft.
>
> I have written a stylesheet to check the Altitude's value, to
> see if it is an integer.  Below is my stylesheet.
>
> My stylesheet uses this statement:
>
>    <xsl:value-of select="data(flt:Aircraft/flt:Altitude)
> instance of xsd:integer"/>
>
> The output I get is: "false"
>
> (The output I seek is "true", as the Altitude element does
> have an integer value.)
>
> Can someone tell me the correct way to do this?
>
> Thanks!  /Roger
>
> --------------------------------------------------------------
> ---------
> ----------
> <?xml version="1.0"?>
> <Flight xmlns="http://www.aviation.org">
>     <Aircraft>
>         <Altitude>3300</Altitude>
>     </Aircraft>
> </Flight>
> --------------------------------------------------------------
> ---------
> ----------
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>                        xmlns:flt="http://www.aviation.org"
>                        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>                        version="2.0">
>
>     <xsl:output method="html"/>
>
>     <xsl:template match="flt:Flight">
>       <html>
>         <body>
>             Check that the aircraft's altitude is an integer:
>             <xsl:value-of select="data(flt:Aircraft/flt:Altitude)
> instance of xsd:integer"/>
>         </body>
>       </html>
>     </xsl:template>
>
> </xsl:stylesheet>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.