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

Re: "castable as" explanation

Subject: Re: "castable as" explanation
From: Frans Englich <frans.englich@xxxxxxxxx>
Date: Mon, 28 Aug 2006 15:25:05 +0000
invalid date
On Monday 28 August 2006 14:48, cknell@xxxxxxxxxx wrote:
> I'm using Saxon 8.7.1J.
>
> I have output from a database in the form of an XML document that I
> transform using XSLT. As an expediant, the persons in responsible positions
> decided to encode data in a text field in order to accomplish a goal rather
> than wait until the application and database are upgraded.
>
> Some records will contain this "packed" information and others will not. I
> need to determine if an element in the output XML document contains the
> packed information or does not, and process each type differently.
>
> One of the data items packed into this text field is a date. I have
> substringed the text so as to construct a date (YYYY-MM-DD) if there is
> indeed a date encoded in the field.
>
> I thought to use "castable as" in order to distinguish between those fields
> containing the packed information and those that do not. Here the relevant
> section of my stylesheet:
>
> <xsl:variable name="is-date" select="if(DATE_PACKED_XSD castable as
> xs:date) then '1' else('0')" />
>
> <xsl:choose>
>   <xsl:when test="$is-date = '1'">
>     ... some processing here
>   </xsl:when>
>   <xsl:otherwise>
>     ... some different processing here
>   </xsl:otherwise>
> </xsl:choose>

If a variable is treated as a boolean value, let it be a boolean value. That 
is:

<xsl:variable as="xs:boolean" name="is-date" select="(DATE_PACKED_XSD castable 
as xs:date"/>

<xsl:choose>
 <xsl:when test="$is-date">
	....

The 'as="xs:boolean"' is not strictly necessary, but it makes your code safer 
and more readable, some would say.

> What I expected to happen was that when the stylesheet processed a
> DATE_PACKED_XSD element that could not be cast as a date ($is-date = 0),
> processing would pass to the <xsl:otherwise> branch.
>
> What did happen was this:
>
> stylesheet.xslt:423: Fatal Error! Invalid date "208 2-01-1 2". Non-numeric
> component
>
> What am I misapprehending about "castable as"?

Nothing about 'castable as', but "208 2-01-1 2" simply isn't a valid date. A 
valid text representation for a date is for example "2082-01-12". If you need 
to read dates in some custom format, you will need to text process those 
strings first such that they are valid xs:dateS. Here's the detailed 
description of xs:date:

http://www.w3.org/TR/xmlschema-2/datatypes.html#date


Cheers,

		Frans

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.