xsl-list
[Top] [All Lists]

RE: Lookup efficiency in XALAN vs. Saxon

2003-11-20 17:07:26
Wendell,
        thanks for the two ideas.... Unfortunately... 

        using a variable, allow it to die much earlier (after 30 records)
with the same 
        "(Location of error unknown)XSLT Error (java.lang.OutOfMemoryError):
null"

        and the second method (with xsl:key) died before processing any
records, again with the same 
        "(Location of error unknown)XSLT Error (java.lang.OutOfMemoryError):
null"

        does Saxon or any other xslt processors deal with this simple table
lookup any better?

Jake


-----Original Message-----
From: Wendell Piez [mailto:wapiez(_at_)mulberrytech(_dot_)com] 
Sent: Thursday, November 20, 2003 3:05 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Lookup efficiency in XALAN?


J,

At 04:45 PM 11/20/2003, you wrote:
I have to do some validation in my xsl.

I'm doing the following type statement 20,000 times, and the lookup 
file is around 50,000  lines of  id's <id key="XXYYZZJ"/>.

<xsl:when 
test="not(document('../master/ids-master.xml')/ids/id[(_at_)key=$id])">

It works for a while, then dies with an out of memory error, and it 
sure is slow!

The first thing you should definitely do is collect the lookup ids into a 
variable, as in

<xsl:variable name="keys" 
select="document('../master/ids-master.xml')/ids/id/@key"/>

Then you can test your local ids against the keys in the variable, without 
parsing your lookup file every time (which it sounds like your processor 
might be doing):

<xsl:when test="not($id = $keys])">

Try that and see if it helps.

If Xalan is already optimizing the document() lookup and parse, you may get 
no gain from this technique -- but there's no way it could hurt.

XSLT keys could also help, but since your keys are in a separate document 
you'd have to switch contexts to use the XSLT key function, like so:

<xsl:key name="keys-by-id" match="id" use="@key"/>

<xsl:variable name="keyfile" select="document('../master/ids-master.xml')"/>

... and then

<xsl:for-each select="$keyfile">
   <xsl:when test="not(key('keys-by-id', $id))">...</xsl:when>
</xsl:for-each>

but whether this helps also will depend on your processor and what kind of 
smarts it has inside.

Cheers,
Wendell


======================================================================
Wendell Piez                            
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
   Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



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