<!--
 * 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$ -->
<html>
  <title>Xalan Transformer Package.</title>
  <body>
    <p>In charge of run-time transformations and the production of result trees.</p>
    
    <p>{@link org.apache.xalan.transformer.TransformerImpl} implements the 
    {@link javax.xml.transform.Transformer} interface, and is the core representation 
    of the transformation execution.</p>
    <p>For each node in the XML source, TransformerImpl uses the StylesheetRoot and underlying XSLT schema to determine which
    template to apply: one of the templates in the StylesheetRoot, a default template rule as specified in the XSLT spec, or
    none.</p>
    <p>The Transformer works with {@link org.apache.xml.serializer.SerializationHandler} to 
    forward the SAX-like events produced by the
    transformation to the appropriate output ContentHandler.</p>
    <p>To the degree possible, the parsing of the XML source and application of the Templates object to that source are performed
    concurrently in separate threads. When necessary, the Transformer waits for the parse events that must be in place before a
    given template may be applied.</p>
 </body>
</html>


