blob: 4aace2bbe08e9e5917df860fd9b69d8731bb2bda [file] [log] [blame]
<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xalan" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 1999, Lotus
* Development Corporation., http://www.lotus.com. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
-->
<s1 title="&xslt4j; DTM">
<ul>
<li><link anchor="intro">Introduction</link></li>
<li><link anchor="settings">Performance settings</link></li>
</ul><anchor name="intro"/>
<s2 title="Introduction">
<p>The Document Table Model (DTM) is an interface to a Document Model designed specifically for the needs of our XPath and XSLT
implementations. The motivation behind this model is to optimize performance and minimize storage.</p>
<p>Specifically, DTM avoids the overhead of instantiating the objects the standard DOM requires to represent a tree of nodes.
DTM uses unique integer "handles" to identify nodes, integer ID values to represent URLs, local names, and expanded names, and
integer index and length references to a string buffer to represent the text value of each node.</p>
<p>In general, the "read" APIs to DTM resemble those of the W3C Document Object Model (<resource-ref idref="dom"/>) interface.
However, in place of the DOM object tree of nodes, DTM uses integer arrays and string pools to represent the structure and content
of the XML document to be transformed. DTM also structures the document's contents slightly differently, to better match the XPath
data model; some details and constraints present in a standard DOM are suppressed, and a few XPath-specific features are added.</p>
<p>DTM is intended to be a read-only model, and so does not attempt to replicate the DOM's write or create-node operations.</p>
<p>The details of constructing a DTM vary depending on which implementation of this API you are using. Two reference implementations are
currently available:</p>
<ul>
<li>SAX2DTM (built via a SAX stream)</li>
<li>DOM2DTM (which provides DTM access to an existing DOM)</li>
</ul>
<p>Both DTMs can be built incrementally (see <link anchor="incremental">incremental transforms</link>). When operating incrementally, the
DTM allows the &xslt4j; processor to begin reading the DTM and performing the transformation while the DTM is still being assembled
(for example, while the parser is still parsing the XML source), and attempts to do only as much work as is needed to support the
read requests actually made by the XPath or XSLT processor.</p>
<p>For the convenience of user-written extensions, a proxy mechanism presents the contents of the DTM as a read-only subset of the DOM.</p>
</s2><anchor name="settings"/>
<s2 title="DTM performance settings">
<p>&xslt4j; implements two DTM performance features that you can control with the TransformerFactory
<jump href="apidocs/javax/xml/transform/TransformerFactory.html#setAttribute(java.lang.String, java.lang.Object)">setAttribute(String name, Object value)</jump>
method.</p>
<table>
<tr>
<th>Attribute name (URL)</th>
<th>Default setting</th>
<th>Description</th>
</tr>
<tr>
<td>"http://xml.apache.org/xalan/features/incremental"</td>
<td>false</td>
<td><link anchor="incremental">incremental transforms</link></td>
</tr>
<tr>
<td>"http://xml.apache.org/xalan/features/optimize"</td>
<td>true</td>
<td><link anchor="optimized">optimized transforms</link></td>
</tr>
</table>
<p>Both of these DTM settings are described below.</p>
<note>The DTM also provides a setting that you can use to track location information for each node in the source document. See
<link idref="features" anchor="source_location">"http://apache.org/xalan/features/source_location"</link></note>
<anchor name="incremental"/>
<s3 title="'http://xml.apache.org/xalan/features/incremental'">
<p>Set this feature to true to enable incremental transformations. If set to false (the default), the transform and the parse
are performed on the same thread.</p>
<note> When set to true: If the parser is Xerces, we perform an
incremental transform on a single thread using the Xerces
"parse on demand" feature. If the parser is not Xerces, we run the
transform in one thread and the parse in another. Exception: if the
parser is not Xerces and the XML source is a DOMSource, setting this
feature to true has no effect.</note>
<p>Example: setting incremental transforms to true:</p>
<source>javax.xml.transform.TransformerFactory tFactory =
javax.xml.transform.TransformerFactory.newInstance();
// setAttribute() takes a String and an Object.
tFactory.setAttribute
("http://xml.apache.org/xalan/features/incremental",
java.lang.Boolean.TRUE);
...</source>
</s3><anchor name="optimized"/>
<s3 title="'http://xml.apache.org/xalan/features/optimize'">
<p>When set to true (the default), this feature enables optimizations that may involve structural rewrites of the stylesheet.
Any tool that requires direct access to the stylesheet structure should set this feature to false.</p>
</s3>
</s2>
</s1>