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

xslt 3.0, and use of 'as' attribute with xsl:variable

Subject: xslt 3.0, and use of 'as' attribute with xsl:variable
From: "Mukul Gandhi mukulg@xxxxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 31 Aug 2023 13:46:32 -0000
 xslt 3.0
Hi all,
   I'm trying to understand a simple concept with XSLT 3.0, when we use
'as' attribute with xsl:variable instruction. I'm using Saxon HE 12.2.

I'd like to understand these concepts with a non schema aware XSLT
transformation.

My XSLT stylesheet is as follows (this one doesn't use 'as' attribute on
xsl:variable instruction),

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                         version="3.0">

    <xsl:output method="xml" indent="yes"/>

    <xsl:variable name="var1" select="'4'"/>

    <xsl:template match="/">
         <result>
             <xsl:value-of select="$var1 + 3"/>
         </result>
    </xsl:template>

</xsl:stylesheet>

Running the above XSLT transformation, produces following error,

Error in xsl:value-of/@select on line 13 column 44 of test1.xsl:
  XPTY0004  Arithmetic operator is not defined for arguments of types
(xs:string, xs:integer)

I'm fine with above produced XSLT transformation error.

Now I change the above cited XSLT stylesheet to following (I'm introducing
an 'as' attribute to xsl:variable instruction),

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                         xmlns:xs="http://www.w3.org/2001/XMLSchema"
                         exclude-result-prefixes="xs"
                         version="3.0">

    <xsl:output method="xml" indent="yes"/>

    <xsl:variable name="var1" select="'4'" as="xs:integer"/>

    <xsl:template match="/">
        <result>
            <xsl:value-of select="$var1 + 3"/>
        </result>
    </xsl:template>

</xsl:stylesheet>

When I run this new XSLT transformation, I get following error,

Error at xsl:variable on line 9 column 61 of test1.xsl:
  XTTE0570  The required item type of the value of variable $var1 is
xs:integer. The
  supplied value is of type xs:string

This error confuses me. I think that, the new XSLT transformation that I've
tried should have succeeded.

The XSLT 3.0 spec says following, about xsl:variable instruction,

[1]
<quote>
An optional "as" attribute specifies the required type of the variable. The
value of the "as" attribute is a 'SequenceType'.

If the "as" attribute is specified, then the supplied value of the variable
is converted to the required type. [ERR XTTE0570] It is a type error if the
supplied value of a variable cannot be converted to the required type. If
the "as" attribute is omitted, the supplied value of the variable is used
directly, and no conversion takes place.
</quote>

I think the string value '4' of variable var1, could be easily converted to
an xs:integer value (since, the string value '4', contains all numeric
characters).

By reading the above quoted text [1] from XSLT 3.0 spec, I think that, the
second XSLT transformation that I've cited should have been able to do an
addition $var1 + 3 without issues.

Any thoughts please.


-- 
Regards,
Mukul Gandhi

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.