xsl-list
[Top] [All Lists]

RE: Decimal precision

2005-02-05 10:20:07
Dimitre,

I notice that in FXSL-for-XSLT2, you're still using this 1.0 idiom:

   <doubleall:doubleall/>
   
   <xsl:template name="doubleall">
     <xsl:param name="pList" select="/.."/>
     
     <xsl:variable name="vFunDouble"
select="document('')/*/doubleall:*[1]"/>

Is this still necessary? It has very poor performance, because the
stylesheet has to be reparsed at run-time. Wouldn't it now be possible to do

   <xsl:variable name="doubleall:doubleall" as="element()"> 
      <doubleall:doubleall/>
   </xsl:variable>
   
   <xsl:template name="doubleall">
     <xsl:param name="pList" select="()"/>
     
     <xsl:variable name="vFunDouble" select="$doubleall:doubleall"/>

I also changed the representation of the empty sequence to something more
direct.

Also, your template rule:

  <xsl:template name="double" match="*[namespace-uri() = 'doubleall']"

would be more efficient in Saxon as

  <xsl:template name="double" match="doubleall:doubleall"/>

(because the hash lookup on template rules works best when the element name
is known statically)

and it would be better to return an atomic value rather than a text node:

  <xsl:value-of select="2 * $arg1"/>

should be

  <xsl:sequence select="2 * $arg1"/>

(I would also like to see some type declarations added, but that requires
some thought.)

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



-----Original Message-----
From: Dimitre Novatchev [mailto:dnovatchev(_at_)gmail(_dot_)com] 
Sent: 05 February 2005 01:43
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Decimal precision

On Sat, 5 Feb 2005 12:13:08 +1100, Dimitre Novatchev
<dnovatchev(_at_)gmail(_dot_)com> wrote:
On Fri, 4 Feb 2005 23:32:03 -0000, Michael Kay 
<mike(_at_)saxonica(_dot_)com> wrote:
x/y/xs:decimal() works only in Saxon 8.2. In earlier 
releases you have to
write it as

for $x in x/y return xs:decimal($x)

Or with FXSL:

  sum(  f:map(f:decimal(),  
/*/*/claim/claim_line/reimbursement_amount)   )


The above was intended to show the solution of the OP.

What in FXSL correspond's to:

                for $x in x/y return xs:decimal($x)

is

               f:map( f:decimal(), x/y )


Cheers,
Dimitre.

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>