<?xml version="1.0" standalone="no"?>
<!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.
-->
<!-- $Id$ -->
<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>
  
  <p> </p>
  <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>
   <note> The incremental feature is not currently supported by the XSLT Compiling processor, XSLTC.</note>
   <p>Example: setting incremental transforms to true (for the XSLT Interpretive processor):</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>

<s2 title="DTM node location tracking setting">
  <p>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></p>
</s2>
</s1>
