The SAX process allows chaining of XSL transforms called a pipeline. In order to perform caching Imago
must insert custom XSLFilters in the process. The ImagoFilter is, in essence, a "tee"; it captures each
SAX event sends a copy to the cache and a copy to the next XSLFilter in the chain. When a request is
made it is the ImagoFilter that checks the cache to see if the result is available. Using the request
example from the caching discussion:
Requested Item |
Requested Processes |
Cacheable State |
A.xml |
Base XML document |
Cachable |
T1.xsl |
Simple transform |
Cachable |
T2.xsl |
Simple transform |
Cachable |
T3.xsl |
Dynamic transform |
Not Cachable |
OutputFormatter |
HTML output formatter |
Not Cachable |
The following steps would be taken.
Process |
On Request
(read bottom to top)
|
On Receiving Result
(read top to bottom)
|
Cache State/Action |
A.XMLReader |
Parses the XML file. |
Is result source |
Cachable |
ImagoFilter |
Calls parent.parse() |
Tees SAX events to Cache |
Stores to Cache |
T1.XSLFilter |
Calls parent.parse() |
Performs XSL transform |
Cachable |
ImagoFilter |
Adds Imago data to filter. Calls parent.parse() |
Tees SAX events to Cache |
Stores to Cache |
T2.XSLFilter |
Calls parent.parse() |
Performs XSL transform |
Cachable |
ImagoFilter |
Adds Imago data to filter. Calls parent.parse() |
Tees SAX events to Cache |
Stores to Cache |
T3.XSLFilter |
Calls parent.parse() |
Performs XSL transform |
Not Cachable |
ImagoFilter |
Adds Imago data to filter. Calls parent.parse() |
Tees SAX events to Cache |
Does not store to cache |
OutputFormatter |
Calls parent.parse() |
HTML output formatter |
Not Cachable |
Imago Servlet |
Checks Cache, Builds chain |
Tees result to cache |
Does not store to cache |
All trademarks and copyrights are the property of their respective owners.
Copyright © 2002-2004 by Xenei.com, All Rights Reserved