Re: [xsl] Santa has come early

Subject: Re: [xsl] Santa has come early
From: Abel Braaksma <>
Date: Fri, 21 Dec 2007 15:17:14 +0100
Thanks Santa for you present!

In lieu of today's (tonight's, depending where you live) discussion about performance measurement, which is, as you pointed out, far from trivial, I found the fast startup time of your Gestalt processor remarkable. Your PE executable (yes, I use Windows) has a startup time on my system of way below 0.1 seconds. Which compares to Saxon + JVM which takes about 0.56 seconds to startup.

Yet on larger input it failed (but in all honesty, that "larger input" processing XSLT was optimized with Saxon in mind), from the earlier thread, same link on EE:, Gestalt proofs roughly 2.8x slower. But I don't think it is fair to compare a 1.0 version to a 9.0 version and neither is it fair to compare based on one run with one stylesheet and one input doc, though I believe it is a very good performance indeed (and about 1600 times faster than Altova on selected stylesheets (on many Altova doesn't finish at all...)).

Anyway, enough about performance. I noticed a few little things after running a couple of tests, that you may want to know about:

1. With the experts-exchange stylesheet it makes the uppercase root tag a lowercase root tag on output (it is an uppercase LRE in the XSLT source)
2. The fizzbuzz stylesheet (see below) doesn't run at all, though I believe it is a valid stylesheet. It errors out with:

     TODO: {XM_XPATH_TOKEN_ITERATOR}.another needs to be written
     Call on Void target!
     Unhandled exception

3. I didn't find a way to run a stylesheet with no input document, but with an initial template. Is this possible in a way?

4. The version number output with --version is "3.7", though the software is shipped as "1.0". Which should it be?

If you'd like to have more input, I can run a couple of more tests. Should I post any findings here or do you rather have them on the Gestalt list?

Thanks again Santa! I now know how to spend the "dark days" ;)

-- Abel Braaksma

PS: the fizzbuzz code:

   <?xml version="1.0" encoding="UTF-8"?>
       xmlns:xs = "";
       xmlns:xsl=""; version="2.0">

<xsl:output indent="yes" />
<xsl:variable name="input">
<range>1-200</range> <test>
<mod value="3" test="0">Fizz</mod>
<mod value="5" test="0">Buzz</mod>

       <xsl:template match="/">
           <xsl:apply-templates select="$input/*" />

<xsl:template match="fizzbuzz">
<xsl:value-of separator="&#10;"
for $i in range/xs:integer(tokenize(., '\D')[1])
to range/xs:integer(tokenize(., '\D')[last()])
return ((string-join(test/mod[$i mod @value = @test], ''))[.], $i)[1]" />



Colin Adams wrote:
Gestalt 1.0 was supposed to be released on Christmas Day, but Santa
Claus seems to have decided that there was no point in waiting any

Release notes, documentation, and 32-bit executables for Linux and
Windows NT are available from:

Merry Christmas everybody.

Current Thread