blob: b38361395ae3cd8bbdc873387ebb54ed22720dc9 [file] [log] [blame]
<?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="XSLTC Documentation">
<s2 title="User Documentation">
<p>The following user documentation is currently available:</p>
<ul>
<li>Command-line <jump href="README.xsltc">compiler</jump> and
<jump href="README.xslt">runtime</jump> man pages.</li>
<li><link idref="xsltc_native_api">XSLTC Native API reference</link></li>
<li><link idref="xsltc_trax_api">XSLTC TrAX API reference</link></li>
<li><link idref="xsltc_performance">XSLTC Performance Hints</link></li>
</ul>
</s2>
<s2 title="Design Documents">
<p>The following design documents are currently available:</p>
<ul>
<li><link anchor="overall">XSLTC overall design</link></li>
<li><link anchor="compiler">XSLTC compiler design</link></li>
<li><link anchor="runtime">XSLTC runtime library design</link></li>
<li><link anchor="runtime">XSLTC internal DOM design</link></li>
<li><link anchor="trax">XSLTC TrAX implementation design</link></li>
</ul>
<!--========================= OVERALL DESIGN ==========================-->
<anchor name="overall"/>
<s3 title="XSLTC overall design">
<p>The figure below describes the overall design of XSLTC's compiler:</p>
<p><img src="overall_design.gif" alt="overall_design.gif"/></p>
<p><ref>Figure 1: Architectural overview of XSLTC</ref></p>
<p>A client application can use XSLTC either through its
<link idref="xsltc_native_api">native API</link> or through or
implementation of the <link idref="xsltc_trax_api">TrAX API</link>. The
<link anchor="compiler">compiler</link> generates one or more Java classes
(we have chosen to call them 'translets').
The <link anchor="runtime">runtime library</link> contains classes that
can load these translets and use them to transform XML documents to some
markup language or plain text. There is also a detailed document describing
<link idref="xsltc_namespace">namespace handling</link> in all parts of
XSLTC (compiler, internal DOM, and output handler).</p>
</s3>
<!--========================= COMPILER DESIGN =========================-->
<anchor name="compiler"/>
<s3 title="XSLTC compiler design">
<p>The figure below describes the overall design of XSLTC's compiler:</p>
<p><img src="compiler_design.gif" alt="compiler_design.gif"/></p>
<p><ref>Figure 2: Compiler architecture overview</ref></p>
<p>There is also a <link idref="xsltc_compiler">high-level design</link>
document for XSLTC's compiler. Apart from that you can also find separate
design documents for some XSL elements and XPath expressions, patterns
and functions:</p>
<s4 title="XSL elements">
<ul>
<li><link idref="xsl_sort_design">&lt;xsl:sort&gt;</link></li>
<li><link idref="xsl_key_design">&lt;xsl:key&gt;</link></li>
<li><link idref="xsl_whitespace_design">&lt;xsl:preserve-space&gt;</link></li>
<li><link idref="xsl_whitespace_design">&lt;xsl:strip-space&gt;</link></li>
<li><link idref="xsl_comment_design">&lt;xsl:comment&gt;</link></li>
<li><link idref="xsl_comment_design">&lt;xsl:message&gt;</link></li>
<li><link idref="xsl_if_design">&lt;xsl:if&gt;</link></li>
<li><link idref="xsl_choose_design">&lt;xsl:choose&gt;</link></li>
<li><link idref="xsl_variable_design">&lt;xsl:variable&gt;</link></li>
<li><link idref="xsl_variable_design">&lt;xsl:param&gt;</link></li>
<li><link idref="xsl_include_design">&lt;xsl:include&gt;</link></li>
<li><link idref="xsl_include_design">&lt;xsl:import&gt;</link></li>
</ul>
</s4>
<s4 title="XPath functions">
<ul>
<li><link idref="xsl_key_design">key()</link></li>
<li><link idref="xsl_lang_design">lang()</link></li>
<li><link idref="xsl_unparsed_design">unparsed-entity-uri()</link></li>
</ul>
</s4>
<s4 title="XPath expressons">
<ul>
<li><link idref="xsltc_predicates">Predicates</link></li>
</ul>
</s4>
<s4 title="XPath patterns">
<ul>
<li><jump href="xsltc_predicates.html#step-pattern">StepPattern</jump></li>
<li><jump href="xsl_key_design.html#patterns">IdPattern</jump></li>
<li><jump href="xsl_key_design.html#patterns">KeyPattern</jump></li>
</ul>
</s4>
</s3>
<!--========================= RUNTIME DESIGN ==========================-->
<anchor name="runtime"/>
<s3 title="XSLTC runtime library design">
<p>The runtime portion of XSLTC has four main components; the internal DOM
implementation (not W3C), the translet class(es), the runtime
library and the output processor:</p>
<p><img src="runtime_design.gif" alt="runtime_design.gif"/></p>
<p><ref>Figure 3: Runtime library architecture overview</ref></p>
<p>The <link idref="xsltc_runtime">runtime library design</link> document
describes the structure of the compiled translet as well as the translet
runtime library.</p>
<p>The <link idref="xsltc_dom">Internal DOM design</link> document
describes the components and structure of the internal DOM, support for
DOM2 navigation, the DOM adapter, DOM multiplexer, and DOM builder.</p>
<p>The <link idref="xsltc_iterators">iterator design</link> document
describes the general design of the internal DOM iterators and describes
some of the more complicated iterators in detail.</p>
</s3>
<!--========================== TRAX DESIGN ===========================-->
<anchor name="trax"/>
<s3 title="XSLTC TrAX Implementation">
<p>An implementation of the JAXP/ TrAX interface was added on to XSLTC
at a late stage. Special care was taken to preserve the small footprint
and high performance of XSLTC. The following design was used to wrap
XSLTC behind a lightweight (but complete) TrAX implementation:</p>
<p><img src="trax_translet_wrapping.gif" alt="trax_translet_wrapping.gif"/></p>
<p><ref>Figure 4: XSLTC TrAX interface implementation</ref></p>
<p>The <link idref="xsltc_trax">TrAX design</link> document contains
details of XSLTC's TrAX implementation.</p>
<p>XSLTC also has a 'smart' TrAX <code>TransformerFactory</code> class
that will alternate between using XSLTC and Xalan for transformations.
This factory class will make its choices based on usage patterns. This will
be described in a separate design document.</p>
</s3>
</s2>
<p><ref>Design documents by <jump href="mailto:morten@xml.apache.org">Morten J&oslash;rgensen</jump> - updated 13.12.2001</ref></p>
</s1>