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

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

Subject: Re: xslt 3.0, and use of 'as' attribute with xsl:variable
From: "Piez, Wendell A. (Fed) wendell.piez@xxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 31 Aug 2023 13:54:31 -0000
Re:  xslt 3.0
Hello Mukul,

My thought is, why not

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

?

Taken at face value, your question seems to me to be about why doesn't XPath
2.0+ do more implicit casting, which could give more 'intuitive' results in
certain edge cases (such as declaring a string which you actually want to be
treated as a number). But it doesn't. Unlike in XPath 1.0, "1" + 1 does not
equal 2. It's one of the differences between 1.0 and 2.0.

Regards,
Wendell

From: Mukul Gandhi mukulg@xxxxxxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Thursday, August 31, 2023 9:47 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject:  xslt 3.0, and use of 'as' attribute with xsl:variable

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
XSL-List info and archive<http://www.mulberrytech.com/xsl/xsl-list>
EasyUnsubscribe<http://lists.mulberrytech.com/unsub/xsl-list/3302254> (by
email<>)

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.