You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xalan.apache.org by Michael Ludwig <ml...@as-guides.com> on 2009/07/08 10:58:48 UTC

Re: Howto implement a node index extension to be shared across transform invocations on the same source document (DOMSource)

Christoffer Dam Bruun schrieb:

> I have a webapplication  where I hold a large XML tree in memory.  On
> this tree I perform several transforms as response to user requests.
> Each transform declares a <xsl:key> that serves as an index for
> important nodes in the tree.
>
> However, it is expensive to calculate this key and it should be
> possible to reuse it since I know that the source tree has not been
> modified.

Could XSLTC (which I don't have any experience with yet) be used to make
the <xsl:key> persist? Hmm, maybe the <xsl:key> would persist - but that
probably would still require its execution on a document instance.

Could you use the ID feature built into XML to achieve what you want?

<!ATTLIST elm id ID #IMPLIED>

Wouldn't that persist between invocations?

That would make for efficient lookup; however, it would constrain the
values of elm/@id to what's valid for an ID type attribute.

Also, see the following thread related to an XSLT feature related to
ID-typed attributes:

Xalan-J 2.7.1: document() function disregards URI fragment identifier
http://markmail.org/thread/ept5ifkshhjoagf3

Lots of "could" and "would" here. One more: It would be great to get
input from the experts on this one.

Michael Ludwig

Re: Howto implement a node index extension to be shared across transform invocations on the same source document (DOMSource)

Posted by Michael Ludwig <ml...@as-guides.com>.
Christoffer Dam Bruun schrieb:
> Michael Ludwig skrev:
>> Could XSLTC (which I don't have any experience with yet) be used to
>> make the <xsl:key> persist? Hmm, maybe the <xsl:key> would persist -
>> but that probably would still require its execution on a document
>> instance.
> I don't think XSLTC would make any difference since the XSLT processor
> cannot know that the XML document has not been modified since the key
> was last calculated- only I as the programmer knows that.

I see, you'd need the lookup table resulting from applyint the <xsl:key>
on the document, and that doesn't seem to be available.

>> Could you use the ID feature built into XML to achieve what you want?
> I have looked at it - the problem is that I also use an one-to-many
> reverse-id lookup e.g.:
> "All elements that refer to the element with this @id"
> and I don't think I can cram that into the builtin ID feature.

Can't think of a way to achieve that either. Sounds like you really need
<xsl:key>.

I've never used this, but if all else fails, you might want to take a
look at VTD-XML:

http://vtd-xml.sourceforge.net/

Michael Ludwig

Re: Howto implement a node index extension to be shared across transform invocations on the same source document (DOMSource)

Posted by Christoffer Dam Bruun <cd...@flyingpigs.dk>.
Michael Ludwig skrev:
> Christoffer Dam Bruun schrieb:
>
>> I have a webapplication  where I hold a large XML tree in memory.  On
>> ...
>
> Could XSLTC (which I don't have any experience with yet) be used to make
> the <xsl:key> persist? Hmm, maybe the <xsl:key> would persist - but that
> probably would still require its execution on a document instance.
I don't think XSLTC would make any difference since the XSLT processor 
cannot know that the
XML document has not been modified since the key was last calculated- 
only I as the programmer knows that.
>
> Could you use the ID feature built into XML to achieve what you want?
I have looked at it - the problem is that I also use an one-to-many 
reverse-id lookup e.g.:
"All elements that refer to the element with this @id" 
and I don't think I can cram that into the builtin ID feature.

Christoffer Bruun