blob: 65af1f7e73dc73e92f8770d388bb18f1b1fad7d1 [file] [log] [blame]
<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed 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="What's new in &xslt4j2;">
<p>&xslt4j; 2.5 contains the following new features:</p>
<ul>
<li><link anchor="XSLTC-DTM">Integration of DTM into the Xalan Compiled processor (XSLTC)</link></li>
<li><link anchor="common_serializer">Integration of Xalan Interpretive and Xalan Compiled Serializers</link></li>
</ul>
<p>These new features have been driven by the need to have a closer integration
and better code reuse between the Xalan Interpretive and the Xalan Compiled (XSLTC)
processors. Prior to this release, the processors did not share much code and they
had different underlying models for the input xml document. Xalan Interpretive used
the <link idref="dtm">Document Table Model (DTM)</link> to model the input xml, while
XSLTC used its own DOMImpl implementation. The serializers used by the processors were
also different. As the project matures sharing more components between the processors
becomes increasingly important. This will make the code more maintainable in the future and
also eliminate some subtle behavioral differences between the Interpretive and the
Compiled processors.</p>
<p>In addition to these design benefits, the integration of DTM with XSLTC and the common
serializer provide conformance and performance improvements to our users. In a practical
environment, the performance improvement for most stylesheets in XSLTC is likely to be
in the range of 10-20%. Stylesheets that use a lot of small result tree fragments (RTF) can
be a few times faster because of the new light-weight RTF model. Although the performance
improvement work focused mainly on the XSLTC side, the enhancements introduced also
contributed to performance benefits for the Xalan Interpretive processor. As a result, the
Interpretive processor is roughly 5-10% faster in this release.</p>
<anchor name="XSLTC-DTM"/>
<s2 title="Integration of DTM into the Xalan Compiled processor (XSLTC)">
<p>As of the &xslt4j; 2.5 release, both the Xalan Interpretive and Xalan Compiled (XSLTC)
processors use the same <link idref="dtm">Document Table Model (DTM)</link>. XSLTC's
underlying document model, DOMImpl, was replaced with DTM and the original DTM was extended
so that it could be used more efficiently with XSLTC. Many of the DOM-related classes in
XSLTC were adapted to work with the new DTM model and only a few changes were made in the
compiler-related classes. However, because of the changes in the core component, the
translets generated by the XSLTC in this release are not binary compatible with the
translets generated by previous releases of XSLTC (up to and including Xalan Java 2.5.D1).
You'll need to recompile your stylesheets when you switch to this new release.</p>
</s2>
<anchor name="common_serializer"/>
<s2 title="Integration of Xalan Interpretive and Xalan Compiled Serializers">
<p>As of the &xslt4j; 2.5 release, a common serializer is shared between the
Xalan Interpretive and Xalan Compiled (XSLTC) processors. The common serializer
code resides in the org.apache.xml.serializer package. The new serializer is
designed to take the benefits of the old serialization mechanisms from both sides.
By using the common serializer, many of the output differences between the
Interpretive and the Compiled processor go away, and maintenance effort is
reduced.</p>
<p>During the merge of the Xalan Interpretive and XSLTC serializers, an
effort was made to use the best performing features from each serializer.
The new class hierarchy is similar to the one used by XSLTC. At the highest
level the serializer classes split based on the output handler type
("Stream" or "SAX"). At the next level, the hierarchy branches are based on
the output type (XML, HTML or TEXT). This allows each flavor of serializer
to do optimizations based on the output type and whether that output is going
to a "Stream" or a "SAX" handler.</p>
<p>From a functional point of view, the new serializer's output matches the
behavior of the Interpretive processor's old serializer, such as the choice of
which HTML entities to write out, and how to escape attribute values in
documents written to a stream. </p>
</s2>
</s1>