<?xml version="1.0"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->
<s1 title="Xalan-J 2.0 Design">
  <p><img src="xmllogo.gif" alt="xmllogo.gif"/></p>
  <p>Author: Scott Boag<br/>State: In Progress</p>
  <ul> 
	   <li><link anchor="intro">Introduction</link></li>
 	   <li><link anchor="requirements">Xalan Requirements</link></li>
	   <li><link anchor="overarch">Overview of Architecture</link></li>
	   <li><link anchor="process">Process Module</link></li>
	   <li><link anchor="templates">Templates Module</link></li>
	   <li><link anchor="transformer">Transformer Module</link></li>
       <ul>
         <li><link anchor="stree">Stree Module</link></li>
         <li><link anchor="extensions">Extensions Module</link></li>
     </ul>
	   <li><link anchor="xpath">XPath Module</link></li>
       <ul><li><link anchor="xpathdbconn">XPath Database Connection</link></li></ul>
	   <li><link anchor="utils">Utils Package</link></li>         
	   <li><link anchor="other">Other Packages</link></li>         
	   <li><link anchor="compilation">Xalan Stylesheet Complilation to Java</link></li><li><link anchor="optimizations">Future Optimizations</link></li><li><link anchor="coding">Coding Conventions</link></li>
	        
   <li><jump href="../apidocs/index.html">Xalan-J 2.0 Javadoc</jump></li>
  </ul><anchor name="intro"/>
  <s2 title="Introduction"> 
	 <p>This document presents the basic design for Xalan-J 2.0, which is a
		<jump href="http://www.awl.com/cseng/titles/0-201-89542-0/techniques/refactoring.htm">refactoring</jump>
		and redesign of the Xalan-J 1.x processor.   This document will expand and grow over time, and is also incomplete in some sections, though hopefully overall accurate.  The reader should be able to get a good overall idea of the internal design of Xalan, and begin to understand the process flow, and also the technical challenges.</p> 
	 <p>The main goals of this redesign are
		to: </p><ol> 
		<li>Make the design and code more understandable by Open Source
		  people.</li> 
		<li>Reduce code size and complexity.</li>
		<li>By simplifying the code, make optimization easier.</li> 
		<li>Make modules generally more localized, and less tangled with other
		  modules.</li> 
		<li>Conform to the <jump href="http://java.sun.com/aboutJava/communityprocess/jsr/jsr_063_jaxp11.html">javax.xml.transform  (TrAX [Transformations for XML])</jump> interfaces.</li> 
	 <li>Increase the ability to incrementally produce the result tree.</li></ol> 
	 <p>The techniques used toward these goals are to:</p> 
	 <ol> 
		<li>In general, flatten the hierarchy of packages, in order to make the
		  structure more apparent from the top-level view.</li> 
		<li>Break the construction and the validation of the XSLT stylesheet from
		  the stylesheet objects themselves.</li>
		<li>Drive the construction of the stylesheet through a table, so that it
		  is less prone to error.</li> 
		<li>Break the transformation process into a separate package, away from
		  the stylesheet objects.</li> 
		<li>Create this design document, as a starting point for people interested in
		  approaching the code.</li> 
	 </ol> 
	 <p>The goals are not:</p> 
	 <ol> 
		<li>To add more features in the progress of this refactoring. This is
		  design and code clean-up in order to meet the above-named goals. We expect that it will be <em>much</em> easier to add
		  features once this work is completed.</li> 
		<li>To optimize code for the sake of optimization. However, we
		  expect that the code will be faster once this work is complete.</li> 
	 </ol> 
	 <p>How well we've achieved the goals will be measured by feedback from the
		<jump href="http://archive.covalent.net/">Xalan-dev</jump> list, and by software metrics tools.</p> 
	 <p>Please note that the diagrams in this design document are meant to be
		useful abstractions, and may not always be exact.</p> 
  </s2><anchor name="requirements"/> 
  <s2 title="Xalan Requirements">
  <p>These are the concrete general requirements of Xalan, as I understand them, and covering both the Java and C++ versions.  These requirements have been built up over time by experience with product groups and general users.</p><ol><li>Java, C++ Versions.</li><li>XSLT 1.0 conformance, and beyond. (i.e. conform to the current W3C recommendation).</li><li>Have design and Code understandable by Open Source Community.</li><li>Ability to interoperate with standard APIs.  (SAX2, DOM2, JAXP)  [this is currently Less of an issue with C++].</li><li>High Performance (Raw performance, Incremental ability, Scaleability to large documents, Reduction of Garbage Collection for the Java version.)</li><li>Tooling API (Access stylesheet data structures, Access source node from result event, Ask runtime questions, Debugging API).</li><li>Support addressing of XML in standalone fashion (i.e. XPath API).</li><li>Extensibility (Ability to call Java, Ability to call JavaScript, other languages).</li><li>Multiple data sources (JDBC, LDAP, other data sources, Direct XML repository coupling).</li></ol></s2><anchor name="overarch"/> 
  <s2 title="Overview of Architecture"> 
	 <p>The following diagram shows the XSLT abstract processing model.  A transformation expressed in XSLT describes rules for transforming a <jump href="http://www.w3.org/TR/xpath#data-model">Source Tree </jump> into a result tree. The transformation is achieved by associating patterns with templates. A pattern is matched against elements in the source tree. A template is instantiated to create part of the result tree. The result tree is separate from the source tree. The structure of the result tree can be completely different from the structure of the source tree. In constructing the result tree, elements from the source tree can be filtered and reordered, and arbitrary structure can be added.

</p><p>The term "tree", as used within this document, describes an
			 abstract structure that consists of nodes or events that may be produced by
			 XML. A Tree physically may be a DOM tree, a series of well balanced parse
			 events (such as those coming from a SAX2 ContentHander), a series of requests
			 (the result of which can describe a tree), or a stream of marked-up
			 characters.</p><p><img src="xslt_abstract.gif" alt="xslt_abstract.gif"/></p><p>The primary interface for Xalan 2.0 external usage is defined in the <jump href="../apidocs/javax/xml/transform/package-summary.html#package_description">javax.xml.transform</jump> interfaces.  These interfaces define a standard and powerful interface to perform tree-based transformations.</p> 
	 <p>The internal architecture of Xalan 2.0 is divided into four major modules, and various smaller
		modules. The main modules are:</p> 
	 <gloss> 
		<label><jump href="../apidocs/org/apache/xalan/processor/package-summary.html">org.apache.xalan.processor</jump></label> 
		<item>The module that processes the stylesheet, and provides the main
		  entry point into Xalan.</item> 
	 </gloss> 
	 <gloss> 
		<label><jump href="../apidocs/org/apache/xalan/templates/package-summary.html">org.apache.xalan.templates</jump></label> 
		<item>The module that defines the stylesheet structures, including the
		  Stylesheet object, template element instructions, and Attribute Value
		  Templates. </item> 
	 </gloss> 
	 <gloss> 
		<label><jump href="../apidocs/org/apache/xalan/transformer/package-summary.html">org.apache.xalan.transformer</jump></label> 
		<item>The module that applies the source tree to the Templates, and
		  produces a result tree.</item> 
	 </gloss> 
	 <gloss> 
		<label><jump href="../apidocs/org/apache/xpath/package-summary.html">org.apache.xpath</jump></label> 
		<item>The module that processes both XPath expressions, and XSLT Match
		  patterns.</item> 
	 </gloss> 
	 <p>In addition to the above modules, Xalan implements the
		<jump href="../apidocs/javax/xml/transform/package-summary.html#package_description">javax.xml.transform</jump> interfaces, and depends on the
	 <jump href="http://www.megginson.com/SAX/Java/index.html">SAX2</jump> and <jump href="http://www.w3.org/TR/DOM-Level-2/">DOM</jump> packages.
</p><p><img src="trax.gif" alt="trax.gif"/></p><p>There is also a general utilities package that contains both XML utility
	 classes such as QName, but generally useful classes such as
	 StringToIntTable.</p> 
	 <p>In the diagram below, the dashed lines denote visibility. All packages
		access the SAX2 and DOM packages.</p> 
	 <p><img src="xalan1_1x1.gif" alt="xalan1_1x1.gif"/></p> 
	 <p>In addition to the above packages, there are the following additional
		packages:</p> 
	 <gloss> 
		<label><jump href="../apidocs/org/apache/xalan/client/package-summary.html">org.apache.xalan.client</jump></label> 
		<item>This package has a client applet. I suspect this should be moved
		  into the samples directory.</item> 
	 </gloss> 
	 <gloss> 
		<label><jump href="../apidocs/org/apache/xalan/extensions/package-summary.html">org.apache.xalan.extensions</jump></label> 
		<item>This holds classes belonging to the Xalan extensions mechanism,
		  which allows Java code and script to be called from within a stylesheet.</item>
		
	 </gloss> 
	 <gloss> 
		<label><jump href="../apidocs/org/apache/xalan/lib/package-summary.html">org.apache.xalan.lib</jump></label> 
		<item>This is the built-in Xalan extensions library, which holds
		  extensions such as Redirect (which allows a stylesheet to produce multiple
		  output files).</item> 
	 </gloss> 
	 <gloss> 
		<label><jump href="../apidocs/org/apache/xalan/res/package-summary.html">org.apache.xalan.res</jump></label> 
		<item>This holds resource files needed by Xalan, such as error message
		  resources.</item> 
	 </gloss> 
	  
	 <gloss> 
		<label><jump href="../apidocs/org/apache/xalan/trace/package-summary.html">org.apache.xalan.trace</jump></label> 
		<item>This package contains classes and interfaces that allow a caller to
		  add trace listeners to the transformation, allowing an interface to XSLT
		  debuggers and similar tools.</item> 
	 </gloss> 
	 <gloss> 
		<label><jump href="../apidocs/org/apache/xalan/xslt/package-summary.html">org.apache.xalan.xslt</jump></label> 
		<item>This package holds the Xalan2 command line processor.</item> 
	 </gloss> 
  <p>A more conceptual view of this architecture is as follows:</p><p><img src="conceptual.gif" alt="Picture of conceptual architecture."/></p></s2><anchor name="process"/> 
  <s2 title="Process Module"> 
	 <p>The <jump href="../apidocs/org/apache/xalan/processor/package-summary.html">org.apache.xalan.processor</jump> module implements the
		<jump href="../apidocs/javax/xml/transform/TransformerFactory.html">javax.xml.transform.TransformerFactory</jump> interface, which provides a
		factory method for creating a concrete Processor instance, and provides methods
		for creating a <jump href="../apidocs/javax/xml/transform/Templates.html">javax.xml.transform.Templates</jump> instance, which, in
		Xalan and XSLT terms, is the Stylesheet. Thus the task of the process module is
		to read the XSLT input in the form of a file, stream, SAX events, or a DOM
		tree, and produce a Templates/Stylesheet object.</p> 
	 <p>The overall strategy is to define a schema in that dictates the legal
		structure for XSLT elements and attributes, and to associate with those
		elements construction-time processors that can fill in the appropriate fields
		in the top-level Stylesheet object, and also associate classes in the templates
		module that can be created in a generalized fashion. This makes the validation
		object-to-class associations centralized and declarative.</p> 
	 <p>The schema's root class is
		<jump href="../apidocs/org/apache/xalan/processor/XSLTSchema.html">org.apache.xalan.processor.XSLTSchema</jump>, and it is here that the
		XSLT schema structure is defined. XSLTSchema uses
		<jump href="../apidocs/org/apache/xalan/processor/XSLTElementDef.html">org.apache.xalan.processor.XSLTElementDef</jump> to define elements, and
		<jump href="../apidocs/org/apache/xalan/processor/XSLTAttributeDef.html">org.apache.xalan.processor.XSLTAttributeDef</jump> to define attributes.
		Both classes hold the allowed namespace, local name, and type of element or
		attribute. The XSLTElementDef also holds a reference to a
		<jump href="../apidocs/org/apache/xalan/processor/XSLTElementProcessor.html">org.apache.xalan.processor.XSLTElementProcessor</jump>, and a sometimes a
		<code>Class</code> object, with which it can create objects that derive from
		<jump href="../apidocs/org/apache/xalan/templates/ElemTemplateElement.html">org.apache.xalan.templates.ElemTemplateElement</jump>. In addition, the
		XSLTElementDef instance holds a list of XSLTElementDef instances that define
		legal elements or character events that are allowed as children of the given
		element.</p> 
	 <p>The implementation of the <jump href="../apidocs/javax/xml/transform/TransformerFactory.html">javax.xml.transform.TransformerFactory</jump>
		interface is in <jump href="../apidocs/org/apache/xalan/processor/TransformerFactoryImpl.html">org.apache.xalan.processor.TransformerFactoryImpl</jump>,
		which creates a <jump href="../apidocs/org/apache/xalan/processor/StylesheetHandler.html">org.apache.xalan.processor.StylesheetHandler</jump>
		instance. This instance acts as the ContentHandler for the parse events, and is
		handed to the <jump href="../apidocs/org/xml/sax/XMLReader.html">org.xml.sax.XMLReader</jump>, which the StylesheetProcessor
		uses to parse the XSLT document. The <code>StylesheetHandler</code> then receives the parse
		events, which maintains the state of the construction, and passes the events on
		to the appropriate <code>XSLTElementProcessor</code> for the given event, as dictated by the
		<code>XSLTElementDef</code> that is associated with the given event.</p> 
	 </s2><anchor name="templates"/> 
  <s2 title="Templates Module"> 
	 <p>The <jump href="../apidocs/org/apache/xalan/templates/package-summary.html">org.apache.xalan.templates</jump> module implements the
		<jump href="../apidocs/javax/xml/transform/Templates.html">javax.xml.transform.Templates</jump> interface, and defines a set of
		classes that represent a Stylesheet. The primary purpose of this module is to
		hold stylesheet data, not to perform procedural tasks associated with the
		construction of the data, nor tasks associated with the transformation itself.
		</p> 
	 <p>The base class of all templates objects that are associated with an XSLT element is the <jump href="../apidocs/org/apache/xalan/templates/ElemTemplateElement.html">ElemTemplateElement</jump> object, which in turn implements <jump href="../apidocs/org/apache/xml/utils/UnImplNode.html">UnImplNode</jump>.  A <code>ElemTemplateElement</code> object must be immutable once it's constructed, so that it may be shared among multiple threads concurrently.  Ideally, a <code>ElemTemplateElement</code> should be a data object only, and be used via a visitor pattern.  However, in practice this is impractical, because it would cause too much data exposure and would have a significant impact on performance.  Therefore, each <code>ElemTemplateElement</code> class has an <jump href="../apidocs/org/apache/xalan/templates/ElemTemplateElement.html#execute(org.apache.xalan.transformer.TransformerImpl, org.w3c.dom.Node, org.apache.xml.utils.QName)">execute</jump> method where it performs it's transformation duties.  A <code>ElemTemplateElement</code> also knows it's position in the source stylesheet, and can answer questions about current namespace nodes.</p><p>A <jump href="../apidocs/org/apache/xalan/templates/StylesheetRoot.html">StylesheetRoot</jump>, which implements the
		<code>Templates</code> interface, is a type of <jump href="../apidocs/org/apache/xalan/templates/StylesheetComposed.html">StylesheetComposed</jump>,
		which is a <jump href="../apidocs/org/apache/xalan/templates/Stylesheet.html">Stylesheet</jump> composed of itself and all included
		<code>Stylesheet</code> objects. A <code>StylesheetRoot</code> has a global
		imports list, which is a list of all imported <code>StylesheetComposed</code>
		instances. From each <code>StylesheetComposed</code> object, one can iterate
		through the list of directly or indirectly included <code>Stylesheet</code>
		objects, and one call also iterate through the list of all
		<code>StylesheetComposed</code> objects of lesser import precedence.
		<code>StylesheetRoot</code> is a <code>StylesheetComposed</code>, which is a
		<code>Stylesheet</code>.</p> 
	 <p>Each stylesheet has a set of properties, which can be set by various
		means, usually either via an attribute on xsl:stylesheet, or via a top-level
		xsl instruction (for instance, xsl:attribute-set). The get methods for these
		properties only access the declaration within the given <code>Stylesheet</code>
		object, and never takes into account included or imported stylesheets. The
		<code>StylesheetComposed</code> derivative object, if it is a root
		<code>Stylesheet</code> or imported <code>Stylesheet</code>, has "composed"
		getter methods that do take into account imported and included stylesheets, for
		some of these properties.</p> 
	  
  </s2><anchor name="transformer"/> 
  <s2 title="Transformer Module"> 
	 <p>The <jump href="../apidocs/org/apache/xalan/transformer/package-summary.html">Transformer</jump> module is in charge of run-time transformations.  The <jump href="../apidocs/org/apache/xalan/transformer/TransformerImpl.html">TransformerImpl</jump> object, which implements the TrAX <jump href="../apidocs/javax/xml/transform/Transformer.html">Transformer</jump> interface, and has an association with a <jump href="../apidocs/org/apache/xalan/templates/StylesheetRoot.html">StylesheetRoot</jump> object, begins the processing of the source tree (or provides a <jump href="http://www.megginson.com/SAX/Java/javadoc/org/xml/sax/ContentHandler.html">ContentHandler</jump> reference via the <jump href="../apidocs/org/apache/xalan/stree/SourceTreeHandler.html">SourceTreeHandler</jump>), and performs the transformation.  The Transformer package does as much of the transformation as it can, but element level operations are generally performed in the <jump href="../apidocs/org/apache/xalan/templates/ElemTemplateElement.html#execute(org.apache.xalan.transformer.TransformerImpl, org.w3c.dom.Node, org.apache.xalan.utils.QName)">ElemTemplateElement.execute(...)</jump> methods.</p><p>Result Tree events are fed into a <jump href="../apidocs/org/apache/xalan/transformer/ResultTreeHandler.html">ResultTreeHandler</jump> object, which acts as a layer between the direct calls to the result 
tree content handler (often a <jump href="../apidocs/org/apache/xalan/serialize/package-summary.html">Serializer</jump>), and the <code>Transformer</code>.  For one thing, 
 we have to delay the call to
 startElement(name, atts) because of the
 xsl:attribute and xsl:copy calls.  In other words,
 the attributes have to be fully collected before you
 can call startElement.</p><p>Other important classes in this package are:</p><gloss><label>CountersTable and Counter</label><item>The <jump href="../apidocs/org/apache/xalan/transformer/Counter.html">Counter</jump> class does incremental counting for support of xsl:number.
 This class stores a cache of counted nodes (m_countNodes). 
  It tries to cache the counted nodes in document order... 
 the node count is based on its position in the cache list.  The <jump href="../apidocs/org/apache/xalan/transformer/CountersTable.html">CountersTable</jump> class is a table of counters, keyed by <jump href="../apidocs/org/apache/xalan/templates/ElemNumber.html">ElemNumber</jump> objects, each 
 of which has a list of <code>Counter</code> objects.</item></gloss><gloss><label>KeyIterator, KeyManager, and KeyTable</label><item>These classes handle mapping of keys declared with the xsl:key element.  They attempt to work incrementally, locating nodes on request but indexing all as they traverse the tree, and stopping when the requested node is found.  If a requested node is not found, then the entire tree will be traversed.  Such is the nature of xsl:key.</item></gloss><gloss><label>TransformState</label><item>This interface is meant to be used by a consumer of SAX2 events produced by Xalan, and enables the consumer 
 to get information about the state of the transform.  It 
 is primarily intended as a tooling interface.</item></gloss><p>Even though the following modules are defined in the <code>org.apache.xalan</code> package, instead of the transformer package, they are defined in this section as they are mostly related to runtime transformation.</p><anchor name="stree"/>
  <s3 title="Stree Module [and discussions about streaming]">
  <p>The Stree module implements the default <jump href="http://www.w3.org/TR/xpath#data-model">Source Tree </jump> for Xalan, that is to be transformed.  It implements read-only <jump href="http://www.w3.org/TR/DOM-Level-2/">DOM2</jump> interfaces, and provides some information needed for fast transforms, such as document order indexes.  It also attempts to allow an incremental transform by launching the transform on a secondary thread as soon as the SAX2 <jump href="http://www.megginson.com/SAX/Java/javadoc/org/xml/sax/ContentHandler.html#startDocument()">StartDocument</jump> event has occurred.  When the transform requests a node, and the node is not present, the getFirstChild and GetNextSibling methods will wait until the child node has arrived, or an <jump href="http://www.megginson.com/SAX/Java/javadoc/org/xml/sax/ContentHandler.html#endElement(java.lang.String,%20java.lang.String,%20java.lang.String)">endElement</jump> event has occurred.</p><p>Note that the secondary thread is an issue.  It would be better to do the same thing as described above on a single thread, but using the parser in 'pull' mode, or simply with a parseNext method so the parse would occur in blocks.  However, this model would only be possible</p><p>This kind of incrementality is not perfect because it still requires an entire source tree to be concretely built.  There have been a lot of good discussions on the xalan-dev list about how to do static analysis of a stylesheet, and be able to allocate only the nodes needed by the transform, while they are needed (or not allocate source objects at all).</p></s3>
<anchor name="serializer"/>
<s3 title="Serializer Module">
<p>XML serialization is a term used for turning a tree or set of events into a stream, and should not be confused with Java object serialization.  The Xalan serializers implement the <jump href="http://www.megginson.com/SAX/Java/javadoc/org/xml/sax/ContentHandler.html">ContentHandler</jump> to turn parser events coming from the transform, into a stream of XML, HTML, or plain text.  The serializers also implement the <jump href="../apidocs/org/apache/xml/serializer/Serializer.html">Serializer</jump> which allows the transform process to set XSLT output properties and the output stream or Writer.</p></s3><anchor name="extensions"/>
<s3 title="Extensions Module">
<p>This package contains an implementation of Xalan Extension Mechanism, which uses the <jump href="http://oss.software.ibm.com/developerworks/opensource/bsf/">Bean Scripting Framework</jump>.

The Bean Scripting Framework (BSF) is an architecture for incorporating scripting into Java applications and applets.  Scripting languages such as Netscape Rhino (Javascript), VBScript, Perl, Tcl, Python, NetRexx and Rexx can be used to augment XSLT's functionality.  In addition, the Xalan extension mechanism allows use of Java classes.  See the <jump href="http://xml.apache.org/xalan/extensions.html">Xalan-J 2 extension documentation</jump> for a description of using extensions in a stylesheet. Please note that the W3C XSL Working Group is working on a specification for standard extension bindings, and this module will change to follow that specification.  </p><p>[More needed... -sb]</p></s3></s2><anchor name="xpath"/> 
  <s2 title="XPath Module"> 
	 <p>This module is pulled out of the Xalan package, and put in the org.apache package, to emphasize that the intention is that this package can be used independently of the XSLT engine, even though it has dependencies on the Xalan utils module.</p><p><img src="org_apache.gif" alt="xalan ---> xpath"/></p> 
  <p>The XPath module first compiles the XPath strings into expression trees, and then executes these expressions via a call to the XPath execute(...) function.  </p>  <p>Major classes are:</p><gloss><label>XPath</label><item>Represents a compiled XPath.  Major function is <code>XObject execute(XPathContext xctxt, Node contextNode, 
                         PrefixResolver namespaceContext)</code>.</item></gloss><gloss><label>XPathAPI</label><item>The methods in this class are convenience methods into the
 low-level XPath API.</item></gloss><gloss><label>XPathContext</label><item>Used as the runtime execution context for XPath.</item></gloss><gloss><label>DOMHelper</label><item>Used as a helper for handling DOM issues.  May be subclassed to take advantage 
   of specific DOM implementations.</item></gloss><gloss><label>SourceTreeManager</label><item>bottlenecks all management of source trees.  The methods
 in this class should allow easy garbage collection of source 
 trees, and should centralize parsing for those source trees.</item></gloss><gloss><label>Expression</label><item>The base-class of all expression objects, allowing polymorphic behaviors.</item></gloss><p>The general architecture of the XPath module is divided into the compiler, and categories of expression objects.</p><p><img src="xpath.gif" alt="xpath modules"/></p><p>The most important module is the axes module.  This module implements the DOM2 <jump href="http://www.w3.org/TR/DOM-Level-2/traversal.html#Iterator-overview">NodeIterator</jump> interface, and is meant to allow XPath clients to either override the default behavior or to replace this behavior.</p><p>The <jump href="../apidocs/org/apache/xpath/axes/LocPathIterator.html">LocPathIterator</jump> and <jump href="../apidocs/org/apache/xpath/axes/UnionPathIterator.html">UnionPathIterator</jump> classes implement the <jump href="http://www.w3.org/TR/DOM-Level-2/java-binding.html#org.w3c.dom.traversal.NodeIterator">NodeIterator</jump> interface, and polymorphically use <jump href="../apidocs/org/apache/xpath/axes/AxesWalker.html">AxesWalker</jump> derived objects to execute each step in the path.  The whole trick is to execute the <code>LocationPath</code> in depth-first document order so that nodes can be found without necessarily looking ahead or performing a breadth-first search.  Because a document order depth-first search requires state to be saved for many expressions, the default operations create "Waiter" clones that have to wait while the main <code>AxesWalkers</code> traverses child nodes (think carefully about what happens when a "//foo/baz" expression is executed).   Optimization is done by implementing specialized iterators and <code>AxesWalkers</code> for certain types of operations.  The decision as to what type of iterator or walker will be created is done in the <jump href="../apidocs/org/apache/xpath/axes/WalkerFactory.html">WalkerFactory</jump> class.</p><p>[Frankly, the implementation of the default AxesWalker, with it's waiters, is the one totally incomprehensible part of Xalan.  It gets especially difficult because you can not look to the node ahead.  I would be very interested if any rocket scientists out there can come up with a better algorithm.]</p><anchor name="xpathdbconn"/>
<s3 title="XPath Database Connection">
<p>An important part of the XPath design in both Xalan 1 and Xalan 2, is to enable database connections to be used as drivers directly to the XPath <jump href="http://www.w3.org/TR/xpath#location-paths">LocationPath</jump> handling.  This allows databases to be directly connected to the transform, and be able to take advantage of internal indexing and the like.  While in Xalan 1 this was done via the <jump href="http://xml.apache.org/xalan/apidocs/org/apache/xalan/xpath/XLocator.html">XLocator</jump> interface, in Xalan 2 this interface is no longer used, and has been replaced by the DOM2 <jump href="http://www.w3.org/TR/DOM-Level-2/traversal.html#Iterator-overview">NodeIterator</jump> interface.  An application or extension should be able to install their own NodeIterator for a given document.</p><p><img src="data.gif" alt="data.gif"/></p><p>[More to do]</p></s3></s2><anchor name="utils"/> 
  <s2 title="Utils Package"> 
  <p>This package contains general utilities for use by both the xalan and xpath packages.</p></s2><anchor name="other"/>
  <s2 title="Other Packages"> 
	 <gloss><label>client</label><item>Implementation of Xalan Applet [should we keep this?].

</item></gloss> 
		 
		 
		<gloss><label>lib</label><item>Implementation of Xalan-specific extensions.</item></gloss><gloss><label>res</label><item>Contains strings that require internationalization.</item></gloss></s2><anchor name="compilation"/>
<s2 title="Xalan Stylesheet Complilation to Java">
<p>We are doing some work on compiling stylesheet objects to Java.  This is a work in progress, and is not meant for general use yet.  For the moment, we are writing out Java text files, and then compiling them to bytecodes via javac, rather than directly producing bytecodes.  The CompilingStylesheetProcessor derives from TransformerFactoryImpl to produce these classes, which are then bundled into a jar file.  For the moment the full Xalan jar is required, but we're looking at ways to only use a subset of Xalan, so that only a minimal jar would be required.</p><p><img src="compilation.gif" alt="compilation.gif"/></p></s2><anchor name="optimizations"/>
<s2 title="Future Optimizations">
<p>This section enumerates some optimizations that we're planning to do in future versions of Xalan.</p><p>Likely near term optimizations (next six months?):</p><ol><li>By pre-analysis of the stylesheet, prune nodes from the tree that have been processed and can be predicted that they won't be visited again.</li><li>Eliminate redundent expressions (xsl:when, variable sets, rooted patterns, etc.).</li><li>Optimize variable patterns such as &lt;xsl:variable name="foo"&gt;&lt;xsl:variable select="yada"/&gt;&lt;/xsl:variable&gt; into &lt;xsl:variable name="foo" select="string(yada)"/&gt;, in order to reduce result tree fragment creation.</li><li>Reduce size of Stree nodes.</li><li>Implement our own NamespaceSupport class (the SAX2 one is too expensive).</li><li>More specialization of itterators and walkers.</li><li>Full Java compilation support.</li><li>Schema Awareness (if "//foo", the Schema can tell us where to look, but we need standard interface to Schemas).</li></ol><p>Likely longer term optimizations (12-18 months?):</p><ol><li>On-the-fly indexing.</li><li>Predict if nodes won't be processed at all, and so don't build them, achieve full streaming support for a certain class of stylesheets.</li></ol></s2><anchor name="coding"/> 
  <s2 title="Coding Conventions"> 
	 <p>This section documents the coding conventions used in the Xalan
		source.</p> 
	 <ol> 
		<li>Class files are arranged with constructors and possibly an init()
		  function first, public API methods second, package specific, protected, and
		  private methods following (arranged based on related functionality), member
		  variables with their getter/setter access methods last.</li> 
		<li>Non-static member variables are prefixed with "m_".</li> 
		<li>static final member variables should always be upper case, without
		  the "m_" prefix. They need not have accessors.</li> 
		<li>Private member variables that are not accessed outside the class need
		  not have getter/setter methods declared.</li> 
		<li>Private member variables that are accessed outside the class should
		  have either package specific or public getter/setter methods declared. All
		  accessors should follow the bean design patterns.</li> 
		<li>Package-scoped member variables, public member variables, and
		  protected member variables should not be declared.</li> 
	 </ol> 
  </s2><anchor name="open"/> 
  
</s1>
