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

Failed conversion of xs:integer to xs:double by Saxon

Subject: Failed conversion of xs:integer to xs:double by Saxon 8.11B
From: Dimtre Novatchev <dnovatchev@xxxxxxxxx>
Date: Fri, 17 Dec 2004 22:54:18 +1100
xs double
I have the following code:

testFunc-Map3.xsl
==============

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:f="http://fxsl.sf.net/"
exclude-result-prefixes="f xs"
>
   <xsl:import href="func-map.xsl"/>
   <xsl:import href="func-exp.xsl"/>

   <xsl:output omit-xml-declaration="yes" indent="yes"/>
   <xsl:strip-space elements="*"/>
   
   <xsl:template match="/">
     <xsl:value-of select="f:map(f:exp(), 1 to 10)" separator="&#xA;"/>
   </xsl:template>

</xsl:stylesheet>

func-exp.xsl (the relevant part only):
==========================

<!-- reference to exp()-->  
  <f:exp/>

<!--
 f:exp() -      convenience function,
                returns a reference to f:exp()                                  
                when called with no arguments                                
-->  
  <xsl:function name="f:exp" as="node()">
    <xsl:sequence select="document('')/*/f:exp[1]"/>
  </xsl:function>

  <xsl:template match="f:exp" mode="f:FXSL">
     <xsl:param name="arg1" as="xs:double"/>
     <xsl:param name="arg2" as="xs:double" select=".00000001E1"/>
    
    <xsl:sequence select="f:exp($arg1, $arg2)"/>  
  </xsl:template>


func-map.xsl
==========

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:f="http://fxsl.sf.net/"
exclude-result-prefixes="f"
>
    <xsl:import href="func-apply.xsl"/>
    
    <xsl:function name="f:map" as="item()*">
      <xsl:param name="pFun" as="element()"/>
      <xsl:param name="pList1" as="item()*"/>

      <xsl:sequence select=
       "for $this in $pList1 return
          f:apply($pFun, $this)"
      />
    </xsl:function>
</xsl:stylesheet>



The result of performing the transformation as specified in
testFunc-Map3.xsl is:

"Saxon 8.1.1 from Saxonica
Java version 1.4.2_04
Stylesheet compilation time: 703 milliseconds
Processing file:/C:/xml/msxml/XML%20SDK/Samples/Tests/Generic/FP/Fxsl/XSLT2/marrowtr.xml
Building tree for
file:/C:/xml/msxml/XML%20SDK/Samples/Tests/Generic/FP/Fxsl/XSLT2/marrowtr.xml
using class net.sf.saxon.tinytree.TinyBuilder
Tree built in 0 milliseconds
Tree size: 22 nodes, 20 characters, 0 attributes
Building tree for
file:/C:/xml/msxml/XML%20SDK/Samples/Tests/Generic/FP/Fxsl/XSLT2/func-exp.xsl
using class net.sf.saxon.tinytree.TinyBuilder
Tree built in 47 milliseconds
Tree size: 167 nodes, 3 characters, 217 attributes
Error at function f:map() on line 8 of
file:/C:/xml/msxml/XML%20SDK/Samples/Tests/Generic/FP/Fxsl/XSLT2/func-map.xsl:
  Required type of value of variable $arg1 is xs:double; supplied
value has type xs:integer
Transformation failed: Run-time errors were reported"


When I change the code of  f:exp()  to the following:

<!--
 f:exp() -      convenience function,
                returns a reference to f:exp()                                  
                when called with no arguments                                
-->  
  <xsl:function name="f:exp" as="node()">
    <xsl:sequence select="document('')/*/f:exp[1]"/>
  </xsl:function>

  <xsl:template match="f:exp" mode="f:FXSL">
     <xsl:param name="arg1" as="item()"/>
     <xsl:param name="arg2" as="xs:double" select=".00000001E1"/>
    
    <xsl:sequence select="f:exp(number($arg1), $arg2)"/>  
  </xsl:template>

then the transformation succeeds and produces the expected results.


Now, on page 395 of Mike Kay's XSLT 2.0 book (describing xsl:param and
the allowed type conversions) it is written:

"In summary, this means that the only conversions allowed are:
  <first-bullet/>
 <second-bullet>
   Numeric promotion, for example conversion of xs:integer to xs:double.
</second-bullet>
"

Of course, this is what makes sense and what I expected -- not the
runtime error.

My question is whether this is a Saxon 8.11B bug, or whether the book
is wrong,... or whether neither is wrong, but I completely fail to
understand both.


Cheers,
Dimitre.

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.