dleslie     00/12/04 09:23:47

  Modified:    java/xdocs/sources entities.ent
               java/xdocs/sources/trax trax.xml
               java/xdocs/sources/xalan BUGS DONE commandline.xml index.xml
                        overview.xml readme.xml resources.xml samples.xml
                        usagepatterns.xml whatsnew.xml
  Log:
  Work in progresss for xalan-j 2.0.d02
  
  Revision  Changes    Path
  1.5       +1 -1      xml-xalan/java/xdocs/sources/entities.ent
  
  Index: entities.ent
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/entities.ent,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- entities.ent      2000/10/20 12:54:08     1.4
  +++ entities.ent      2000/12/04 17:23:36     1.5
  @@ -5,7 +5,7 @@
   <!ENTITY xslt4j-dist "xalan-j_2_0_D02">
   <!ENTITY xslt4j-current "&xslt4j; version 2.0.D02">
   <!ENTITY xml4j "Xerces-Java">
  -<!ENTITY xml4j-used "&xml4j; version 1.2">
  +<!ENTITY xml4j-used "&xml4j; version 1.2.2">
   <!ENTITY xslt4c "Xalan-C++">
   <!ENTITY xml4c "Xerces-C++">
   <!ENTITY download "The &xslt4j-current; download from xml.apache.org 
includes xerces.jar from &xml4j-used;.">
  
  
  
  1.2       +14 -9     xml-xalan/java/xdocs/sources/trax/trax.xml
  
  Index: trax.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/trax/trax.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- trax.xml  2000/11/15 22:35:32     1.1
  +++ trax.xml  2000/12/04 17:23:37     1.2
  @@ -1,7 +1,8 @@
   <?xml version="1.0"?>
   <!DOCTYPE spec SYSTEM "../../style/dtd/spec.dtd">
   <spec> 
  -  <title>Transformation API For XML (TrAX)</title><frontmatter> 
  +  <title>Transformation API For XML (TrAX)</title>
  +  <frontmatter> 
     <pubdate>November 12, 2000</pubdate> 
     <copyright>Copyright 2000 Java Community Process (Sun Microsystems,
         Inc.)</copyright> 
  @@ -11,11 +12,12 @@
         <address> 
                <email>[EMAIL PROTECTED]</email> 
         </address> 
  -  </author></frontmatter> <introduction> 
  +  </author></frontmatter> 
  +  <introduction> 
     <title>Introduction</title> 
     <para>This overview describes the set of APIs contained in
  -      <ulink url="package-summary.html">javax.xml.transform</ulink>. For the 
sake of brevity, these interfaces are referred to
  -      as TrAX (Transformations for XML). </para> 
  +      <ulink url="package-summary.html">javax.xml.transform</ulink>, <ulink 
url="package-summary.html">javax.xml.transform.stream</ulink>, <ulink 
url="package-summary.html">javax.xml.transform.dom</ulink>, and <ulink 
url="package-summary.html">javax.xml.transform.sax</ulink>. For the sake of 
brevity, these interfaces are referred to
  +      as TrAX (Transformation API for XML). </para> 
     <para>There is a broad need for Java applications to be able to transform 
XML
         and related tree-shaped data structures. In fact, XML is not normally 
very
         useful to an application without going through some sort of 
transformation,
  @@ -124,7 +126,8 @@
                         release</termref>.</listitem> 
                </varlistentry> 
         </variablelist> 
  -  </sect2></introduction><requirements> 
  +  </sect2></introduction>
  +  <requirements> 
     <title>Requirements</title> 
     <para>The following requirements have been determined from broad experience
         with XML projects from the various members participating on the 
JCP.</para> 
  @@ -180,7 +183,8 @@
                structure.</listitem> 
         <listitem id="requirement-error-reporting">TrAX must have a mechanism 
for
                reporting errors and warnings to the calling 
application.</listitem> 
  -  </orderedlist> </requirements> <model> 
  +  </orderedlist> </requirements> 
  +  <model> 
     <title>Model</title> 
     <para>The section defines the abstract model for TrAX, apart from the 
details
         of the interfaces.</para> 
  @@ -256,11 +260,12 @@
     must be synchronized for edit.</thread-safety> </pattern> 
</patterns></model> 
     <sect1 id="package"> 
         <title>javax.xml.transform</title> 
  -      <para>This package defines the generic <ulink 
url="trax.html">TrAX</ulink> APIs for processing transformation
  -             instructions, and performing a transformation from source to 
result. These
  +      <para>This package defines the generic APIs for processing 
transformation instructions,
  +             and performing a transformation from source to result. For an 
overview, see 
  +    <ulink url="trax.html">Transformation API for XML (TrAX)</ulink>. The 
TrAX 
                interfaces have no dependencies on SAX or the DOM standard, and 
try to make as
                few assumptions as possible about the details of the source and 
result of a
  -             transformation. It achieves this by defining 
  +             transformation. TrAX achieves this by defining 
                <plink>javax.xml.transform.Source</plink> and 
                <plink>javax.xml.transform.Result</plink> interfaces.</para> 
         <para>To define concrete classes for the user, TrAX defines 
specializations
  
  
  
  1.6       +1 -1      xml-xalan/java/xdocs/sources/xalan/BUGS
  
  Index: BUGS
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/BUGS,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- BUGS      2000/10/17 18:00:48     1.5
  +++ BUGS      2000/12/04 17:23:40     1.6
  @@ -29,7 +29,7 @@
   <li>The unparsed-entity-uri() function fails.<br/><br/></li>
   <li>The @namespace:* pattern is not assigned the appropriate priority for 
conflict resolution.</li>
   </ul>
  -<p>The Apache XML Bug Tracking System is currently not working. If you find 
a bug, please report it (with "Xalan-J 2 bug" in the subject line) to the 
<human-resource-ref idref="xalandev"/>.</p>
  +<p>The Apache XML Bug Tracking System is currently not working. If you find 
a bug, please report it (with "Xalan-J 2 bug" in the subject line) to the 
<human-resource-ref idref="xalandev"/>. We strongly encourage you write patches 
for problems you find and submit them to <human-resource-ref 
idref="xalandev"/>. We review the patches we receive to make sure they do not 
break something else, and (assuming they do not) include them in our next 
release. In the interest of fixing bugs, adding enhancements, and addressing 
outstanding design issues, we sincerely want (and need!) your active 
participation in the ongoing development of Xalan.</p>
   </s3>
   
   
  
  
  
  1.2       +2 -1      xml-xalan/java/xdocs/sources/xalan/DONE
  
  Index: DONE
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/DONE,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DONE      2000/09/15 19:03:20     1.1
  +++ DONE      2000/12/04 17:23:41     1.2
  @@ -1,3 +1,4 @@
   <s3 title="Changes since &xslt4j; version 2.0.D01">
  -<p></p>
  +<p>The Transformation API for XML (TrAX) that &xslt4j2; implements has 
undergone substantial revisions since the release of &xslt4j; 2.0.D01. TrAX has 
joined the Java API for XML Parsing (JAXP) as part of the Sun&reg; 
<resource-ref idref="jsr063"/>. Accordingly, the TrAX package names have 
changed. The conceptual organization has also changed somewhat: The primary 
transformation interfaces are defined in javax.xml.transform, with concrete 
classes for managing stream input/output, SAX parsers and ContentHandler, and 
DOM parsers and DOM trees in javax.xml.transform.stream, 
javax.xml.transform.sax, and javax.xml.transform.dom. For more information, see 
<resource-ref idref="trax"/>, and review <link idref="usagepatterns">Usage 
Patterns</link>.</p>
  +<p>Other changes:</p>
   </s3>
  
  
  
  1.7       +4 -4      xml-xalan/java/xdocs/sources/xalan/commandline.xml
  
  Index: commandline.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/commandline.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- commandline.xml   2000/10/17 12:54:57     1.6
  +++ commandline.xml   2000/12/04 17:23:41     1.7
  @@ -99,11 +99,11 @@
   -HTML (Use HTML formatter)
   -PARAM name value (Set a stylesheet parameter)
   -DIAG put out timing diagnostics</source>
  -      <p>Use -IN to specify the XML source document.</p> 
  -      <p>Use -XSL to specify the XSL stylesheet file.</p>
  -      <p>Use -TEXT if you want the output to include only element values 
(not element tags with element names and
  +      <p>Use <code>-IN</code> to specify the XML source document.</p> 
  +      <p>Use <code>-XSL</code> to specify the XSL stylesheet file.</p>
  +      <p>Use <code>-TEXT</code> if you want the output to include only 
element values (not element tags with element names and
         attributes).</p>
  -      <p>Use -HTML to write 4.0 transitional HTML (some elements, such as 
&lt;br&gt;, are
  +      <p>Use <code>-HTML</code> to write 4.0 transitional HTML (some 
elements, such as &lt;br&gt;, are
         not well formed XML).</p>
         <p>To set stylesheet parameters from the command line, use <br/>
         <code>java org.apache.xalan.xslt.Process -PARAM <ref>name 
value</ref></code></p>
  
  
  
  1.5       +7 -11     xml-xalan/java/xdocs/sources/xalan/index.xml
  
  Index: index.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/index.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- index.xml 2000/11/21 17:40:57     1.4
  +++ index.xml 2000/12/04 17:23:42     1.5
  @@ -63,18 +63,14 @@
        in an applet or a servlet, or as a module in other program.</p>
     </s2>
     <s2 title="I've heard of &xslt4j;, but what is version 2?">
  -    <p>&xslt4j; version 2 recasts Xalan as an implementation of the 
<resource-ref idref="trax"/> interfaces. TRaX provides a
  -    modular framework and a standard API for performing an open-ended range 
of XML transformations.</p>
  -     <p>In conjunction with TRaX, &xslt4j2; relies on system properties to 
configure its operational settings, such as
  -     which stylesheet processor, which SAX parser, and which serializers to 
use. The default settings point to the Xalan
  -     StylesheetProcessor, the serializers shipped with Xalan, and the Xerces 
SAXParser.</p>
  +    <p>&xslt4j; version 2 recasts Xalan as an implementation of the 
<resource-ref idref="trax"/> interfaces, part of the Java API for XML 
Processing. TRaX provides a
  +    modular framework and a standard API for performing XML transformations, 
and it utilizies system properties to determine which Transformer and which XML 
parser to use.</p>
        <p>&xslt4j; version 2 also builds on <resource-ref idref="sax2"/>, 
<resource-ref idref="dom2"/>, and the 
        <resource-ref idref="jaxp"/>.</p>
        <p>For more information, see <link idref="whatsnew">What's new in 
&xslt4j2;</link>.</p>
     </s2>
     <s2 title="How about this release?">
  -    <p>&xslt4j-current; is a beta Developer's release of &xslt4j2;. For 
information about known
  -    limitations and problems, see the <link idref="readme">Release 
notes</link>. Please send your comments, bug reports, and feedback to the 
<human-resource-ref idref="xalandev"/></p>
  +    <p>&xslt4j-current; is an alpha Developer's release of &xslt4j2;. The 
primary change between &xslt4j-current; and &xslt4j; 2.0.D01 is the integration 
of the TrAX interfaces into <resource-ref idref="jaxp"/>. For the details, and 
for information about known limitations and problems with this alpha release, 
see the <link idref="readme">Release notes</link>. Please send your comments, 
bug reports, and feedback to the <human-resource-ref idref="xalandev"/></p>
     </s2> 
     <s2 title="How do I get it?">
       <p>Download and unzip either of the following:</p>
  @@ -87,11 +83,11 @@
     <s2 title="Where do I get Xerces?">
       <p>The Xalan download includes xerces.jar from &xml4j-used;. This is all 
you need to run Xalan with the Xerces XML parser. 
       You can, however, download the complete Xerces distribution from the 
<resource-ref idref="xml4j-distdir"/>.</p>
  -    <note>If you plan to use a different XML parser, see <link 
idref="usagepatterns" anchor="xmlreader">Setting the
  -    XMLReader</link>.</note> 
  +    <note>If you plan to use a different XML parser, see <link 
idref="usagepatterns" anchor="plug">Plugging in a Transformer and
  +    XML parser</link>.</note> 
     </s2>
     <s2 title="What else do I need?">
  -    <p>You need the Java Development Kit or Java Runtime 1.1.8 or 1.2.2, 
which you can obtain from <jump
  +    <p>You need the Java Development Kit or Java Runtime 1.1.8, 1.2.2, or 
1.3, which you can obtain from <jump
       href="http://www.ibm.com/java/jdk";>ibm.com/java/jdk/</jump> or <jump 
href="http://www.java.sun.com";>java.sun.com</jump>.</p> 
     </s2>  
       <s2 title="For more information...">
  @@ -99,4 +95,4 @@
       Started</link>. All of the Xalan documentation on this website is 
included in the Xalan download, as are a number of samples
       to help you start using &xslt4j2; to transform XML documents.</p>
     </s2>  
  -</s1>
  \ No newline at end of file
  +</s1> 
  \ No newline at end of file
  
  
  
  1.6       +10 -10    xml-xalan/java/xdocs/sources/xalan/overview.xml
  
  Index: overview.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/overview.xml,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- overview.xml      2000/11/01 20:12:31     1.5
  +++ overview.xml      2000/12/04 17:23:42     1.6
  @@ -94,19 +94,19 @@
   &lt;/xsl:stylesheet></source>
   <p>foo.out:</p>
   <source>&lt;out>Hello&lt;/out></source>
  -<p>By default, &xslt4j; uses the &xml4j; SAXParser, and it may be configured 
(<link idref="usagepatterns" anchor="xmlreader">with system properties</link>) 
to work with other parsers. The input may be submitted in the form of a SAX 
InputStream (from a URI, a character or byte stream, or another transformation) 
or a DOM Node.</p>
  +<p>By default, &xslt4j; uses &xml4j;, and it may be configured with system 
properties to work with other XML parsers (see <link idref="usagepatterns" 
anchor="plug">Plugging in a Transformer and XML parser</link>). The input may 
be submitted in the form of a SAX InputStream (from a URI, a character or byte 
stream, or another transformation) or a DOM Node.</p>
   <p>&xslt4j; performs the transformations specified in the XSL stylesheet and 
packages a sequence of SAX events that may be serialized to an output stream or 
writer, used to build a DOM tree, or forwarded as input to another 
transformation.</p>
         </s2><anchor name="features"/>
          <s2 title="&xslt4j; Features">
            <ul> 
  -                 <li>Implements the <resource-ref idref="xslt"/> and the 
<resource-ref idref="xpath"/>.<br/><br/></li>
  -        <li>Builds on <resource-ref idref="trax"/>, <resource-ref 
idref="sax2"/>, <resource-ref idref="dom2"/>,
  -            and the <resource-ref idref="jaxp"/>.<br/><br/></li>
  -       <li>May be configured to work with any XMLReader, such as the 
  -        <jump href="http://xml.apache.org/xerces-j/index.html";>&xml4j; 
SAXParser</jump>, that implements the
  -        Java API for XML Parsing (see <link idref="usagepatterns" 
anchor="xmlreader">Setting the
  -        XMLReader</link>).<br/><br/></li>
  -       <li>Can process SAX or DOM input, and output to SAX or 
DOM.<br/><br/></li>
  +                 <li>Implements the relevant W3C specifications: 
<resource-ref idref="xslt"/> and <resource-ref idref="xpath"/>.<br/><br/></li>
  +        <li>Implements <resource-ref idref="trax"/>, now part of 
<resource-ref idref="jaxp"/>, and builds on
  +         <resource-ref idref="sax2"/> and <resource-ref 
idref="dom2"/>.<br/><br/></li>
  +       <li>May be configured to work with any XML parser, such
  +        <jump 
href="http://xml.apache.org/xerces-j/index.html";>&xml4j;</jump>, that 
implements <resource-ref
  +        idref="jaxp"/> (see <link idref="usagepatterns" 
anchor="xmlreader">Plugging in an XML
  +         parser</link>).<br/><br/></li>
  +       <li>Can process Stream, SAX or DOM input, and output to a Stream, SAX 
or DOM.<br/><br/></li>
           <li>Transformations may be chained (the output of one transformation 
may be the input for
            another).<br/><br/></li>
           <li>May be run from the <link idref="commandline">command 
line</link> for convenient file-to-file
  @@ -114,7 +114,7 @@
          <li>Includes an <link idref="getstarted" anchor="applet">applet 
wrapper</link>.<br/><br/></li>
           <li>May be used in a <link idref="samples" 
anchor="servlet">servlet</link> to transform XML documents into
           HTML and serve the results to clients.<br/><br/></li>
  -        <li>Supports the creation of <link idref="extensions">Java and 
scripting language extensions</link> and
  +        <li>Supports the creation of <link idref="extensions">Java and 
scripting language extensions</link>. and
            provides a growing library of extension elements and functions.</li>
            </ul> 
          </s2><anchor name="towork"/>
  
  
  
  1.8       +3 -5      xml-xalan/java/xdocs/sources/xalan/readme.xml
  
  Index: readme.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/readme.xml,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- readme.xml        2000/10/19 11:57:13     1.7
  +++ readme.xml        2000/12/04 17:23:42     1.8
  @@ -62,7 +62,6 @@
    -->
   <s1 title="Release Notes">
   <p>&xslt4j-current; alpha release</p>
  -<p>It is our pleasure to thank two new contributors, Gary Peskin and Costin 
Manolache, for the fantastic help they have provided in producing this first 
release of Xalan-Java 2, and for the new ideas and creative work we are sure 
they will continue to provide in the ongoing &xslt4j; saga.</p>
    <ul>
     <li><link anchor="status">Status</link></li>
     <li><link anchor="build">Build Notes</link></li>
  @@ -71,14 +70,14 @@
    </ul>
     <s2 title="Status">
      <ul>
  -    <!--li><link anchor="done">Changes since version 2.0.D01</link></li-->
  +    <li><link anchor="done">Changes since version 2.0.D01</link></li>
       <li><link anchor="bugs">Open bugs and bug reporting</link></li>
       <li><link anchor="status">Version of Xerces to use</link></li>
       <li><link anchor="notes">Other release notes</link></li>    
       <li><link anchor="to-do">To-do tasks for future &xslt4j; 
releases</link></li>
      </ul>
  -     <!--anchor name="done"/>
  -     &done-j;   -->  
  +     <anchor name="done"/>
  +     &done-j;
        <anchor name="bugs"/>
        &bugs-j;
        <anchor name="status"/>
  @@ -219,6 +218,5 @@
    </s2><!--anchor name="history"/>
    <s2 title="Cumulative history of software changes">
      <note>We started tracking the changes in earlier releases beginning with 
&xslt4j; version 1.1.</note>
  -
    </s2-->
   </s1>
  
  
  
  1.6       +9 -9      xml-xalan/java/xdocs/sources/xalan/resources.xml
  
  Index: resources.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/resources.xml,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- resources.xml     2000/12/01 22:25:11     1.5
  +++ resources.xml     2000/12/04 17:23:43     1.6
  @@ -49,13 +49,8 @@
     
     <resource id="xpath" 
               title="XML Path Language (XPath) Version 1.0" 
  -            location="http://www.w3.org/TR/xpath"/>
  -
  -  <resource id="trax" 
  -            title="TRaX (Transformations for XML)" 
  -            location="apidocs/org/apache/trax/trax.html"/>
  +            location="http://www.w3.org/TR/xpath"/>            
               
  -            
     <resource id="dom" 
               title="DOM" 
               location="http://www.w3.org/DOM"/>
  @@ -71,10 +66,15 @@
               location="http://www.megginson.com/SAX/Java/index.html"/>
     <resource id="jaxp" 
               title="Java API for XML Parsing" 
  -            location="http://java.sun.com/xml/docs/api/index.html"/>         
   
  +            location="http://java.sun.com/xml/docs/api/index.html"/>
  +  <resource id="jsr063"
  +            title="Java Specification Request 63"
  +            
location="http://java.sun.com/aboutJava/communityprocess/review/jsr063"/>
  +  <resource id="trax" 
  +            title="TRaX (Transformation API for XML)" 
  +            location="apidocs/javax/xml/transform/trax.html"/>
               
  -  
     <human-resource id="xalandev" 
                     name="Xalan Development Mailing List" 
                     mailto="[email protected]"/>
  -</resources>
  \ No newline at end of file
  +</resources>         
  \ No newline at end of file
  
  
  
  1.14      +9 -9      xml-xalan/java/xdocs/sources/xalan/samples.xml
  
  Index: samples.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/samples.xml,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- samples.xml       2000/10/20 12:52:34     1.13
  +++ samples.xml       2000/12/04 17:23:43     1.14
  @@ -60,9 +60,9 @@
   <ul>
   <li><link anchor="simpletransform">SimpleTransform</link></li>
   <li><link anchor="usestylesheetpi">UseStylesheetPI</link></li>
  -<li><link anchor="transformtodom">TransformToDom</link></li>
   <li><link anchor="usestylesheetparam">UseStylesheetParam</link></li>
   <li><link anchor="sax2sax">SAX2SAX</link></li>
  +<li><link anchor="domtodom">DomToDom</link></li>
   <li><link anchor="pipe">Pipe</link></li>
   <li><link anchor="usexmlfilters">UseXMLFilters</link></li>
   <li><link anchor="applyxpath">ApplyXPath</link></li>
  @@ -108,14 +108,6 @@
        <p>You can run it from the UseStylesheetPI subdirectory with</p>
        <p><code>java UseStylesheetPI</code></p>
        <p>For more information, see <link idref="usagepatterns" 
anchor="embed">Working with embedded stylesheets</link>.</p>
  -    </s2><anchor name="transformtodom"/>
  -    <s2 title="TransformToDom">
  -    <p>What it does: The TransformToDom class uses the foo.xsl stylesheet to 
transform foo.xml, produces an output
  -     DOM, and traverses the DOM, printing the traversal to System.out. In 
contrast to SimpleTransform,
  -      TransformToDom illustrates the procedure for creating an output DOM 
that is available for further
  -      processing.</p>
  -   <p>You can run it from the TransformToDom subdirectory with</p>
  -    <p><code>java TransformToDom</code></p>
       </s2><anchor name="usestylesheetparam"/>
       <s2 title="UseStylesheetParam">
         <p>What it does: The UseStyleSheetParam class uses foo.xsl and a 
stylesheet parameter to transform foo.xml,
  @@ -128,6 +120,14 @@
     <p>What it does: Explicitly set the SAX XMLReader and SAX ContentHandler 
for processing the stylesheet, processing the XML input, and producing the 
output.</p>
     <p>Run this sample from the SAX2SAX subdirectory with</p>
      <p><code>java SAX2SAX</code></p>
  +    </s2><anchor name="domtodom"/>
  +    <s2 title="DomToDom">
  +    <p>What it does: the DomToDom class uses the foo.xsl stylesheet to 
transform a DOM document derived from foo.xml, produces an output
  +     DOM, and traverses the DOM, printing the traversal to System.out. In 
contrast to SimpleTransform,
  +      DomToDom illustrates the procedure for processing an input DOM and 
creating an output DOM that is available for
  +      further processing.</p>
  +   <p>You can run it from the DomToDom subdirectory with</p>
  +    <p><code>java DomToDom</code></p>
       </s2><anchor name="pipe"/>
       <s2 title="Pipe">
       <p>What it does: Pipes the output from one transformation to a second 
transformation, then from the second
  
  
  
  1.16      +147 -146  xml-xalan/java/xdocs/sources/xalan/usagepatterns.xml
  
  Index: usagepatterns.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/usagepatterns.xml,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- usagepatterns.xml 2000/11/21 17:40:58     1.15
  +++ usagepatterns.xml 2000/12/04 17:23:43     1.16
  @@ -59,7 +59,7 @@
   <s1 title="Basic usage patterns">
   <ul>
   <li><link anchor="basic">Basic steps</link></li>
  -<li><link anchor="xmlreader">Setting the XMLReader</link></li>
  +<li><link anchor="plug">Plugging in the Transformer and XML 
parser</link></li>
   <li><link anchor="embed">Working with embedded stylesheets</link></li>
   <li><link anchor="params">Setting stylesheet parameters</link></li>
   <li><link anchor="sax">Explicitly working with SAX</link></li>
  @@ -79,7 +79,7 @@
       <li><link anchor="transformer">Process the stylesheet and generate a 
Transformer</link></li>
       <li><link anchor="transformation">Perform the transformation</link></li>
     </ol>
  -    <p>The following example highlights the four basic steps involved in 
performing a transformation.</p>
  +    <p>The following example illustrates the three basic steps involved in 
performing a transformation.</p>
       <source>// 1. Instantiate a TransformerFactory.
   javax.xml.transform.TransformerFactory tFactory = 
                     javax.xml.transformerTransformerFactory.newInstance();
  @@ -89,8 +89,8 @@
   javax.xml.transform.Transformer transformer = tFactory.newTransformer
                   (new javax.xml.transform.stream.StreamSource("foo.xsl");
   
  -// 4. Use the Transformer to apply the Templates object to an XML
  -//    Source and send the output to a Result object.
  +// 3. Use the Transformer to transform an XML Source and send the
  +//    output to a Result object.
   transformer.transform
       (new javax.xml.transform.stream.StreamSource("foo.xml"), 
        new javax.xml.transform.stream.StreamResult( new
  @@ -98,165 +98,159 @@
     <note>For a working example of this model at its simplest, see 
SimpleTransform.java in the java/samples/SimpleTransform subdirectory.</note>
     </s2><anchor name="processor"/>
     <s2 title="1. Instantiate a TransformerFactory">
  -  <p>TransformerFactory is an abstract class with a static newInstance() 
method that instantiates the concrete subclass designated by the 
javax.xml.transform.TransformerFactory system property.</p>
  -  <p>The default setting for this system property is  
org.apache.xalan.processor.TransformerFactoryImpl.</p>
  -</s2><anchor name="process"/>
  -  <s2 title="2. Use the TransformerFactory to process the stylesheet Source 
and produce a Transformer">
  -  <p>You may provide the stylesheet Source in the form of a stream of XML 
markup (StreamSource) or a DOM Node (DOMSource). To specify a StreamSource, you 
may use a system ID or file name (using URI syntax), an InputStream, or a 
Reader.</p>
  -<p>The Transformer newTransformer(Source) method processes the stylesheet 
into a Templates object and generates a Transformer that you can use to perform 
a transformation.</p>
  -
  -<p></p>
  -  <p>The Templates object is an immutable runtime representation of the 
structure and content of a stylesheet (which may include
  -  and import multiple stylesheet sources).</p>
  -<p>A given Templates object may be used repeatedly and by multiple 
concurrent threads for the transformation of XML input.</p>
  -  <p>You may provide the stylesheet as a SAX input source (from a file or 
stream) or as a DOM tree.</p>
  -  <p>Use the Processor process() method with a SAX input source (as in the 
example above), or the processFromNode() method with a DOM tree to generate a 
Templates object.</p>
  -<p>To perform this operation with a SAX input source, the processor uses a 
org.apache.trax.TemplatesBuilder (extending the SAX ContentHandler interface) 
and a SAX XMLReader.</p>
  -<p>The XMLReader parses the input, sending parse events to the 
TemplatesBuilder, which responds by building the Templates object.</p>
  -<p>If you use the processFromNode() method with a DOM representation of the 
stylesheet, the processor traverses the DOM, sending SAX events to the 
TemplatesBuilder.</p>
  -<note>You may also provide the Source in the form of SAX ContentHandler 
events from a SAX InputSource or SAX XMLReader (SAXSource), in which case you 
should use a <jump 
href="apidocs/javax/xml/transform/xax/SAXTransformerFactory.html">SAXTransformerFactory</jump>.
 For more information, see xxxxxx.</note>
  +  <p><jump 
href="apidocs/javax/xml/transform/TransformerFactory#html">TransformerFactory</jump>
 is an abstract class with a static newInstance() method that instantiates the 
concrete subclass designated by the javax.xml.transform.TransformerFactory 
system property.</p>
  +  <p>The default setting for this system property is <jump 
href="apidocs/org/apache/xalan/processor/TransformerFactoryImpl.html">org.apache.xalan.processor.TransformerFactoryImpl</jump>.</p>
   </s2><anchor name="transformer"/>
  -<s2 title="3. Instantiate a Transformer">
  -<p>To transform an XML document, you need an implementation of the 
org.apache.trax.Transformer interface.</p>
  -<note>&xslt4j; implements the Transformer interface with 
org.apache.xalan.transformer.TransformerImpl.</note>
  -<p>You can use a Templates object for multiple transformations (even 
performed concurrently), but you should use the Templates object to instantiate 
a separate Transformer for each transformation you perform. The Templates 
object contains the stylesheet structure and data and XSLT schema, which are 
immutable, whereas the Transformer tracks state information as it performs the 
transformation.</p>
  +  <s2 title="2. Use the TransformerFactory to process the stylesheet Source 
and produce a Transformer">
  +<p>The TransformerFactory <jump 
href="apidocs/javax/xml/transform/TransformerFactory.html#newTransformer(javax.xml.transform.Source)">newTransformer(Source
 xslSource)</jump> method processes the stylesheet Source into a Templates 
object and returns a Transformer that you can use to perform a transformation 
(apply the Templates object to an XML Source).</p>
  +<p>You may provide the stylesheet Source in the form of a stream of XML 
markup (<jump 
href="apidocs/javax/xml/transform/stream/StreamSource.html">StreamSource</jump>),
 a DOM Node (<jump 
href="apidocs/javax/xml/transform/dom/DOMSource.html">DOMSource</jump>), or a 
series of SAX ContentHandler events (<jump 
href="apidocs/javax/xml/transform/sax/SAXSource.html">SAXSource</jump>). To 
specify a StreamSource, you may use a system ID or file name (using URI 
syntax), a java.io.InputStream, or a java.io.Reader. The use of DOMSource and 
SAXSource are illustrated in subsequent sections.</p>
  +<note>If you plan to use the stylesheet Source to transform multiple XML 
Sources, you should use the TransformerFactory <jump 
href="apidocs/javax/xml/import/TransformerFactory.html#newTemplates(javax.xml.transform.Source)">newTemplates(Source
 xslSource)</jump> method to explicitly generate a Templates object, which you 
can then use repeatedly to generate a Transformer for performing an individual 
transformation. See <link anchor="multithreading">Multithreading</link>.</note>
   </s2><anchor name="transformation"/>
  -<s2 title="4. Perform a transformation">
  -<p>Supply the XML input, a target or "holder" for the transformation output, 
and instruct the Transformer to perform the transformation.</p>
  -<p>Just as with the stylesheet, you can supply the XML input in the form of 
a SAX input source (from a URL or stream) or a DOM tree.</p>
  -<p>Use the Transformer transform() method with a SAX input source (as in the 
example above), or the transformNode() method with a DOM tree to perform the 
transformation.</p>
  -<p>TRaX provides the holder for the output: org.apache.trax.Result. You can 
set up a Result object to send the transformation result to a file or stream or 
to build a DOM tree.</p>
  -<p>The Transformer uses the XMLParser to parse the XML input and sends parse 
events to a SAX ContentHandler, which assembles the input into a DOM tree. Of 
course this operation is unnecessary if the XML input is submitted as a DOM.</p>
  -<p>For each node in the XML source, the Transformer uses the Templates 
object to determine which template to apply: one of the templates in the 
Templates object, a default template rule as specified in the XSLT spec, or 
none.</p>
  -<p>The Transformer forwards the SAX events produced by this process to the 
appropriate output ContentHandler, a serializer if the Result object has been 
set up to write to a stream or file, a DOMBuilder utility if the output is to 
be a DOM tree.</p>
  -<note>A serializer is a utility that translates a series of SAX events or a 
DOM tree into a stream, performing any character escaping required by the 
output method (the XML output method, for example normally requires &lt; and 
&amp; to be escaped).</note>
  -<p>To the degree possible, the parsing of the XML source and application of 
the Templates object to that source are performed concurrently. This enables 
the Transformer to begin supplying the client with transformation output before 
the parsing has been completed. When necessary, the Transformer waits for the 
XMLReader to provide the input it needs to continue.</p>
  -</s2><anchor name="xmlreader"/>
  -<s2 title="Setting the XMLReader">
  -<p>Unless you are submitting your stylesheet and your XML input in the form 
of DOM trees, &xslt4j; uses an XMLReader to parse the stylesheet and the XML 
input. This XMLReader must implement the <resource-ref idref="jaxp"/>. To 
designate an XMLReader, do one of the following:</p>
  -<ul>
  -  <li>Set the org.xml.sax.driver system property.<br/><br/>
  -  You can set system properties from the command line or within your 
application. You can also edit the setting in 
org/apache/xalan/res/XSLTInfo.properties (in xalan.jar). If the 
org.xml.sax.driver system property is not set, &xslt4j; uses this file to set 
it.<br/><br/></li>
  -  <li>Call the org.apache.trax.Processor.setXMLReader() method.<br/><br/>
  -  If you call this method before you call 
org.apache.trax.Processor.process() to generate a Templates object, &xslt4j; 
uses the XMLReader you designate to process the stylesheet and the XML input, 
and ignores the org.xml.sax.driver property setting (for the current 
transformation).<br/><br/></li>
  -</ul>
  -<p>Be sure the XMLReader is on the classpath. The &xml4j; XMLReader -- 
org.apache.xerces.parsers.SAXParser -- is in xerces.jar.</p>
  -<note>Other system properties: The default serializer system property 
settings are in org/apache/serialize/serializer.properties. The default XSLT 
stylesheet system property setting is in  org/apache/trax/trax.properties. 
These properties files are in xalan.jar.</note>
  +<s2 title="3. Use the Transformer to perform a transformation">
  +<p>Use the Transformer <jump 
href="apidocs/javax/xml/import/Transformer.html#transform(javax.xml.transform.Source,
 javax.xml.transform.Result">transform(Source xmlSource, Result 
transformResult)</jump> method to transform  the XML Source and place the 
transformation output in a Result object.</p>
  +<p>Just as with the stylesheet, you can supply the XML Source in the form of 
a <jump 
href="apidocs/javax/xml/transform/stream/StreamSource.html">StreamSource</jump>,
 <jump href="apidocs/javax/xml/transform/dom/DOMSource.html">DOMSource</jump>, 
or <jump 
href="apidocs/javax/xml/transform/sax/SAXSource.html">SAXSource</jump>. 
Likewise, the Result may be a <jump 
href="apidocs/javax/xml/transform/stream/StreamResult.html">StreamResult</jump>,
 <jump href="apidocs/javax/xml/transform/dom/DOMResult.html">DOMResult</jump>, 
or <jump 
href="apidocs/javax/xml/transform/sax/SAXResult.html">SAXResult</jump>.</p>
  +<p>For each node in the XML source, the Transformer uses the transformation 
instructions in the Templates object to determine which template to apply: one 
of the templates in the Templates object, a default template rule as specified 
in the XSLT spec, or none.</p>
  +</s2><anchor name="plug"/>
  +<s2 title="Plugging in the Transformer and XML parser">
  +<p>The <jump 
href="apidocs/javax/xml/transform/package-summary.html">javax.xml.transform</jump>
 and <jump 
href="apidocs/javax/xml/parsers/package-summary.html">javax.xml.parsers</jump> 
interfaces enable you to isolate your application from the implementation 
details of a given Transformer, SAX parser, or DOM parser. Like 
javax.xml.transform.TransformerFactory, javax.xml.parsers.SAXParserFactory and 
javax.xml.parsers.DocumentBuilderFactory are abstract classes with a static 
newInstance() method that instantiates a concrete "Factory" which in turn wraps 
an implementation. Each of these newInstance() methods, uses a system property 
setting to determine the implementation to instantiate.</p>
  +<p>&xslt4j; is distributed with the following system property settings for 
the Xalan XSLT Transformer and the Xerces DOM and SAX parsers:</p>
  +<gloss>
  +  <label>System property</label>
  +    <item>Default value</item>
  +  <label><code>vax.xml.transform.TransformerFactory</code></label>
  +   
<item><code>org.apache.xalan.proccessor.TransformerFactoryImpl</code></item>    
  +  <label><code>javax.xml.parsers.DocumentBuilderFactory</code></label>
  +   
<item><code>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</code></item>    
  +  <label><code>javax.xml.parsers.SAXParserFactory</code></label>
  +   <item><code>org.apache.xerces.jaxp.SAXParserFactoryImpl</code></item>
  + </gloss>  
  +<p>For information about the mechanism used to determine system property 
values, see "Section 3: Pluggability Layer" in the <ref>Java API for XML 
Processing</ref> at <jump 
href="http://java.sun.com/aboutJava/communityprocess/review/jsr063/index.html";>JSR-000063
 JavaTM API for XML Processing 1.1</jump>.</p> 
   </s2><anchor name="embed"/>
   <s2 title="Working with embedded stylesheets">
  -<p>An XML source document may include an <jump 
href="http://www.w3.org/TR/xml-stylesheet/";>xml-stylesheet processing 
instruction</jump> which identifies the stylesheet to be used to process the 
document. As indicated by the processing instruction <ref>href</ref> attribute, 
the stylesheet itself may be embedded in the XML document or located 
elsewhere.</p>
  +<p>An XML Source may include an <jump 
href="http://www.w3.org/TR/xml-stylesheet/";>xml-stylesheet processing 
instruction</jump> which identifies the stylesheet to be used to process the 
document. As indicated by the processing instruction <ref>href</ref> attribute, 
the stylesheet itself may be embedded in the XML document or located 
elsewhere.</p>
   <p>Suppose you have an XML document (foo.xml) with the following 
xml-stylesheet processing instruction:</p>
   <p><code>&lt;?xml-stylesheet type="text/xml" href="foo.xsl"?&gt;</code></p>
  -<p>The following fragment, uses this instruction to locate the stylesheet 
(foo.xsl in the same directory) and create a Templates object. Note the use of 
the Processor getAssociatedStylesheets() and processMultipleStylesheets() 
methods in steps 2a and 2b.</p>
  -<note>An XML document may include more than one xml-stylesheet processing 
instruction, hence the support for working with multiple stylesheets. If more 
than one stylesheet is returned, the other stylesheets are imported into the 
first stylesheet [awaiting clarification from the W3C].</note>
  -<source>// 1. Instantiate the stylesheet processor.
  -org.apache.trax.Processor processor = 
  -                            org.apache.trax.Processor.newInstance("xslt");
  -
  -// 2a. Get the stylesheet(s) from the XML source (the source may contain
  -//     more than one xml-stylesheet processing instruction).
  +<p>The following fragment, uses this instruction to locate the stylesheet 
(foo.xsl in the same directory as foo.xml) and create a Templates object. Note 
the use of the TransformerFactory getAssociatedStylesheet() in step 2a.</p>
  +<note>An XML document may include more than one xml-stylesheet processing 
instruction, hence the support for working with multiple stylesheets. If more 
than one stylesheet is returned, the other stylesheets are imported into the 
first stylesheet.</note>
  +<source>// 1. Instantiate the TransformerFactory.
  +javax.xml.transform.TransformerFactory tFactory = 
  +                    javax.xml.transform.TransformerFactory.newInstance();
  +// 2a. Get the stylesheet from the XML source.
   String media = null , title = null, charset = null;
  -org.xml.sax.InputSource[] stylesheet = processor.getAssociatedStylesheets
  -         ( new InputSource("file:///xalan/samples/UseStylesheetPI/foo.xml"),
  -           media, title, charset );
  -// 2b. Process the stylesheet(s), producing a Templates object.
  -org.apache.trax.Templates templates = processor.processMultiple(stylesheet);
  +javax.xml.transform.Source stylesheet = tFactory.getAssociatedStylesheet
  +                   (new StreamSource("foo.xml"),media, title, charset);
   
  -// 3. Use the Templates object to instantiate a Transformer.
  -org.apache.trax.Transformer transformer = templates.newTransformer();
  +// 2b. Process the stylesheet and generate a Transformer.
  +Transformer transformer = tFactory.newTransformer(stylesheet);
   
  -// 4. Use the Transformer to apply the Templates object to an XML
  -//&nbsp;&nbsp;&nbsp;&nbsp;source and send the output to a Result object.
  +// 3. Use the Transformer to perform the transformation and send the
  +//    the output to a Result object.
   transformer.transform
  -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(new 
org.xml.sax.InputSource("foo.xml"), 
  -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new 
org.apache.trax.Result(new java.io.FileWriter("foo.out")));</source>
  +             (new javax.xml.transform.stream.StreamSource("foo.xml"),
  +              new StreamResult (new 
java.io.FileOutputStream("foo.out")));</source>
   <p>For a sample that uses this technique, see <link idref="samples" 
anchor="usestylesheetpi">UseStylesheetPI</link>.</p>
   <p>You can also instruct the <link idref="commandline">command-line 
utility</link> to use stylesheet processing
   instructions:</p>
   <ol>
  -  <li>Include the -IN flag with an XML source that contains a stylesheet 
processing instruction.<br/><br/></li>
  -  <li>Do not include the -XSL flag.</li>
  +  <li>Include the <code>-in</code> flag with an XML source that contains a 
stylesheet processing instruction.<br/><br/></li>
  +  <li>Do not include the <code>-xsl</code> flag.</li>
   </ol>
   </s2><anchor name="params"/>
   <s2 title="Setting stylesheet parameters">
  -<p>An XSLT stylesheet may include parameters that are set at run time each 
time a transformation takes place. To set a stylesheet parameter, use the 
org.apache.trax.Transformer <jump 
href="apidocs/org/apache/trax/Transformer.html#setParameter(java.lang.String,java.lang.String,java.lang.Object)">setParameter(String
 name, String namespace, Object value)</jump> method. If the parameter QName 
only includes a local name (as is often the case), the namespace argument is 
null. For a working example, see UseStylesheetParam.java in the  
java/samples/UseStylesheetParam subdirectory.</p>
  -<p>You can also set a parameter with the command-line utility by including 
the -param flag. For example:</p>
  +<p>An XSLT stylesheet may include parameters that are set at run time each 
time a transformation is performed. To set a stylesheet parameter, use the 
Transformer <jump 
href="apidocs/org/apache/trax/Transformer.html#setParameter(java.lang.String,java.lang.Object)">setParameter(String
 name, Object value)</jump> method. For a working example, see 
UseStylesheetParam.java in the samples/UseStylesheetParam subdirectory.</p>
  +<p>You can also set a parameter with the command-line utility by including 
the <code>-param</code> flag. For example:</p>
   <p><code>java org.apache.xalan.xslt.Process -in foo.xml -xsl foo.xsl -param 
param1 foobar</code></p>
   <p>where <code>param</code> is the parameter name and <code>foobar</code> is 
the parameter value. The parameter namespace is null.</p>
   </s2><anchor name="sax"/>
   <s2 title="Explicitly working with SAX">
     <p>&xslt4j; uses the SAX event model to process stylesheets, to parse XML 
input documents, and to produce output. For each of these operations, an 
XMLReader reads input, firing parse events, and a ContentHandler listens to the 
XMLReader and performs parse event methods.</p>
  -<p>When you use the basic procedure described above for performing 
transformations, &xslt4j; takes care of many of the SAX details under the 
covers. You are free to make these details explicit, which simply means that 
you can intervene in the procedure to accommodate any custom conditions in 
which your application operates.</p>
  -<p>Suppose, for example, you are using a custom XMLReader (perhaps doing 
more than just parsing static XML documents) to generate &xslt4j; SAX parse 
events. You can instruct the Transformer to provide the ContentHandler for this 
XMLReader. You might even have a custom reader for producing/processing 
stylesheets, in which case you simply set the org.apache.trax.TemplatesBuilder 
(implemented by the org.apache.xalan.processor.StylesheetHandler) as the 
ContentHandler for this reader.</p>
  +<p>When you use the basic procedure described above for performing 
transformations, &xslt4j; takes care of many of the SAX details under the 
covers. You are free to make these details explicit, which simply means that 
you can intervene in the procedure to accommodate the precise environment in 
which your application operates.</p>
  +<p>Suppose, for example, you are using a custom XMLReader, perhaps doing 
more than just parsing static XML documents) to generate &xslt4j; SAX parse 
events. You might even have a custom reader for producing/processing 
stylesheets. You can cast the TransformerFactory to a SAXTransformerFactory, 
which provides access to a TransformerHandler, which you can set as the 
ContentHandler for this reader.</p>
     <p>The following example explicitly sets up the XMLReader and 
ContentHandlers, and replicates the <link anchor="basic">basic steps</link> 
described above.</p>
  -  <source>// 1. Instantiate  stylesheet processor.
  -org.apache.trax.Processor processor = 
  -                          org.apache.trax.Processor.newInstance("xslt");
  -
  -// 2. Process the stylesheet. producing a Templates object.
  -// Get the XMLReader.
  -org.xml.sax.XMLReader reader = 
  -                 org.xml.sax.helpers.XMLReaderFactory.createXMLReader();
  -// Set the ContentHandler.
  -org.apache.trax.TemplatesBuilder templatesBuilder = 
  -                                         processor.getTemplatesBuilder();
  -reader.setContentHandler(templatesBuilder);
  -// Set the ContentHandler to also function as a LexicalHandler, which
  -// includes "lexical" (e.g., comments and CDATA) events. The Xalan
  -// TemplatesBuilder -- org.apache.xalan.processor.StylesheetHandler -- is
  -// also a LexicalHandler).
  -if(templatesBuilder instanceof org.xml.sax.ext.LexicalHandler)
  -   reader.setProperty("http://xml.org/sax/properties/lexical-handler";, 
  -                       templatesBuilder);
  -// Parse the stylesheet.                       
  -reader.parse("foo.xsl");
  -//Get the Templates object from the ContentHandler.
  -org.apache.trax.Templates templates = templatesBuilder.getTemplates();
  -
  -// 3. Use the Templates object to instantiate a Transformer.
  -org.apache.trax.Transformer transformer = templates.newTransformer();
  -
  -// 4. Perform the transformation.
  -// Set up the ContentHandler (a serializer) for the output.
  -java.io.FileOutputStream fos = new java.io.FileOutputStream("foo.out");
  -org.apache.trax.Result result = new org.apache.trax.Result(fos);
  -org.apache.serialize.Serializer serializer = 
  -               org.apache.serialize.SerializerFactory.getSerializer("xml");
  -transformer.setContentHandler(serializer.asContentHandler());
  -// Set up the ContentHandler for the input.
  -org.xml.sax.ContentHandler chandler = transformer.getInputContentHandler();
  -reader.setContentHandler(chandler);
  -if(chandler instanceof org.xml.sax.ext.LexicalHandler)
  -  
reader.setProperty("http://xml.org/sax/properties/lexical-handler",chandler);
  -else
  -  reader.setProperty("http://xml.org/sax/properties/lexical-handler";, null);
  -// Parse the XML input document. The input and output ContentHandlers work in
  -// separate threads to optimize performance.
  -reader.parse("foo.xml");</source>
  +  <source>// Instantiate a TransformerFactory.
  +javax.xml.transform.TransformerFactory tFactory = 
  +                    javax.xml.transform.TransformerFactory.newInstance();
  +// Verify that the TransformerFactory implementation you are using
  +// supports SAX input and output (&xslt4j; does!).
  +if (tFactory.getFeature(javax.xml.transform.sax.SAXSource.FEATURE) 
&amp;&amp; 
  +    tFactory.getFeature(javax.xml.transform.sax.SAXResult.FEATURE))
  +  { 
  +    // Cast the TransformerFactory to SAXTransformerFactory.
  +    javax.xml.transform.sax.SAXTransformerFactory saxTFactory = 
  +                   ((javax.xml.transform.SAXTransformerFactory) tFactory);
  +    // Create a Templates ContentHandler to handle parsing of the 
  +    // stylesheet.
  +    javax.xml.transform.sax.TemplatesHandler templatesHandler = 
  +                                        saxTFactory.newTemplatesHandler();
  +
  +    // Create an XMLReader and set its ContentHandler.
  +    org.xml.sax.XMLReader reader = 
  +                   org.xml.sax.helpers.XMLReaderFactory.createXMLReader();
  +    reader.setContentHandler(templatesHandler);
  +    
  +    // Parse the stylesheet.                       
  +    reader.parse("foo.xsl");
  +
  +    // Get the Templates object (generated during the parsing of the 
stylesheet)
  +    // from the TemplatesHandler.
  +    javax.xml.transform.Templates templates = 
  +                                          templatesHandler.getTemplates();
  +    // Create a Transformer ContentHandler to handle parsing of 
  +    // the XML Source.  
  +    javax.xml.transform.sax.TransformerHandler transformerHandler 
  +                           = saxTFactory.newTransformerHandler(templates);
  +    // Reset the XMLReader's ContentHandler to the TransformerHandler.
  +    reader.setContentHandler(transformerHandler);
  +
  +    // Set the ContentHandler to also function as a LexicalHandler, which
  +    // can process "lexical" events (such as comments and CDATA). 
  +    reader.setProperty("http://xml.org/sax/properties/lexical-handler";, 
  +                        transformerHandler);
  +
  +    // Set up a Serializer to serialize the Result to a file.
  +    org.apache.xalan.serialize.Serializer serializer = 
  +         org.apache.xalan.serialize.SerializerFactory.getSerializer("xml");
  +    serializer.setOutputStream(new java.io.FileOutputStream("foo.out"));
  +    // The Serializer functions as a SAX ContentHandler.
  +    javax.xml.transform.Result result =
  +      new javax.xml.transform.sax.SAXResult(serializer.asContentHandler());
  +    transformerHandler.setResult(result);
  +      
  +    // Parse the XML input document.
  +    reader.parse("foo.xml");</source>
   </s2><anchor name="outasin"/>
   <s2 title="Using transformation output as input for another transformation">
  -<p>You can chain together a series of two or more transformations such that 
the output of one transformation provides input for the another transformation. 
&xslt4j; supports two basic strategies for chaining a series of 
transformations:</p>
  +
  +<p>You can chain together a series of transformations such that the output 
of each transformation provides input for the next transformation. &xslt4j; 
supports two basic strategies for chaining a series of transformations:</p>
   <ul>
  -  <li>A Transformer uses a SAX ContentHandler to process input, and another 
ContentHandler to process output. Along these lines, you can use the 
Transformer getInputContentHandler() method to make one Transformer the 
ContentHandler for the XMLReader that parses the input, then use the same 
method make a second Transformer the ContentHandler for the output of the first 
Transformer, and so on. For more detail and an example, see the <link 
idref="samples" anchor="pipe">Pipe</link> sample.<br/><br/></li>
  -  <li>A Transformer extends the SAX XMLFilter interface. Using the 
setParent() method this interface supplies, you can set an XMLReader as the 
parent of the Transformer for the first transformation, then set this 
Transformer as the parent for the Transformer performing the second 
transformation, and so on. You launch the series by instructing the last 
Transformer to parse the input. For more detail and an example, see the <link 
idref="samples" anchor="usexmlfilters">UseXMLFilters</link> sample.</li>
  +  <li>Use the SAXTransformerFactory to process the stylesheet and create a 
TransformerHandler for each transformation. Then you can set
  +the first TransformerHandler as the ContentHandler for the XMLReader that 
parses the input, make the second TransformerHandler the ContentHandler for the 
output of the first TransformerHandler, and so on. For more detail and an 
example, see the <link idref="samples" anchor="pipe">Pipe</link> 
sample.<br/><br/></li>
  +  <li>Use the SAXTransformerFactory to process the stylesheet and create a 
SAX XMLFilter for each transformation. Set an XMLReader as the parent of the 
first XMLFilter, the first XMLFilter as the parent of the second XMLFilter, and 
so on. You launch the series of transformations by instructing the last 
XMLFilter to parse the XML Source for the first transformation. For more detail 
and an example, see the <link idref="samples" 
anchor="usexmlfilters">UseXMLFilters</link> sample.</li>
   </ul>
   </s2><anchor name="dom"/>
   <s2 title="Processing and producing DOM trees">
  -  <p>In some cases, the input and/or desired output for a transformation may 
be a DOM tree object,  rather than a file or stream.</p>
  -<p>To process DOM input, use one of the org.apache.trax.Transformer <jump 
href="apidocs/org/apache/trax/Transformer.html#transformNode(org.w3c.dom.Node, 
org.apache.trax.Result)">transformNode()</jump> methods.</p>
  -  <p>To produce a transformation result in the form of a DOM tree, use the 
<jump href="http://java.sun.com/xml/docs/api/index.html";>Java API for XML 
Parsing</jump> as indicated below to instantiate an empty DOM Document to hold 
the result tree.</p>
  -  <ol>
  -    <li>The javax.xml.parsers.DocumentBuilderFactory abstract class contains 
a static newInstance() method for instantiating a factory designated by the 
javax.xml.parsers.DocumentBuilderFactory system property.<br/><br/></li>
  -    <li>In turn, the factory provides a newDocumentBuilder() method with 
which you instantiate a DocumentBuilder.<br/><br/></li>
  -    <li>Use the DocumentBuilder to instantiate an empty DOM 
Document.<br/><br/></li>
  -    <li>Use this DOM Document node to construct the org.apache.trax.Result 
object for the transformation result tree.</li>
  -  </ol>
  -<source>javax.xml.parsers.DocumentBuilderFactory dfactory =
  -                      javax.xml.parsers.DocumentBuilderFactory.newInstance();
  -javax.xml.parsers.DocumentBuilder docBuilder = dfactory.newDocumentBuilder();
  -org.w3c.dom.Document resultDoc = docBuilder.newDocument();
  -org.apache.trax.Result result = new org.apache.trax.Result(resultDoc);
  -</source>
  +  <p>In some cases, the input and/or desired output for a transformation may 
be a DOM tree object. The javax.xml.transform.DOM package provides <jump 
href="apidocs/javax/xml/transform/dom/DOMSource.html">DOMSource</jump> and a 
<jump href="apidocs/javax/xml/transform/dom/DOMResult.html">DOMResult</jump>, 
either or both of which you can use when you perform a transformation.</p>
  +<p>In some cases, your application provides input in the form of a DOM tree, 
which accelerates the transformation process, since the input has in effect 
already been processed. To produce DOM input from a stream, you can use a <jump 
href="apidocs/javax/xml/parsers/DocumentBuilderFactory.html">DocumentBuilderFactory</jump>
 to produce a <jump 
href="apidocs/javax/xml/parsers/DocumentBuilder.html">DocumentBuilder</jump> 
with which you can parse the XML input into a DOM Document, as illustrated 
below.</p>
  +<source>// Instantiate a DocumentBuilderFactory.
  +javax.xml.parsers.DocumentBuilderFactory dfactory =
  +                    javax.xml.parsers.DocumentBuilderFactory.newInstance();
  +// Use the DocumentBuilderFactory to provide access to a DocumentBuilder.    
                
  +javax.xml.parsers.DocumentBuilder dBuilder = dfactory.newDocumentBuilder();
  +// Use the DocumentBuilder to parse the XML input.
  +org.w3c.dom.Document inDoc = dBuilder.Parse("foo.xml");</source>
  +<p>To produce DOM output, simply use a Transformer to transform to a 
DOMResult object.</p>
  +<source>// Generate a Transformer.
  +javax.xml.transform.Transformer transformer = tFactory.newTransformer
  +                  (new javax.xml.transform.Stream.StreamSource("foo.xsl"));
  +// Create an empy DOMResult object for the output.                  
  +javax.xml.transform.dom.DOMResult domResult = 
  +                                   new javax.xml.transform.dom.DOMResult();
  +// Perform the transformation.                                   
  +transformer.transform(new javax.xml.transform.dom.DOMSource(inDoc)
  +                      domResult;
  +// Now you can get the output Node from the DOMResult
  +org.w3c.dom.Node node = domResult.getNode();</source>
  +<p>The <link idref="samples" anchor="domtodom">TransformFromDOMtoDOM</link> 
illustrates both procedures, and serializes the DOMResult to System.out.</p>
   </s2><anchor name="xpath"/>
   <s2 title="Working with XPath expressions">
   <p>XSLT stylesheets use XPath expressions to select nodes, specify 
conditions, and generate text for the result tree. XPath provides an API that 
you can call directly. For example, you may want to select nodes 
programmatically and do your own processing without a stylesheet.</p>
  @@ -284,13 +278,19 @@
   
   </s2><anchor name="servlet"/>
   <s2 title="Using &xslt4j; in a servlet">
  -<p>You can set up a servlet to use &xslt4j; to respond to requests for XML 
documents by transforming those documents into HTML and serving them to 
clients. For a sample of how this might be done, see <link idref="samples" 
anchor="servlet">sample servlet</link>.</p>
  +<p>You can set up a servlet to use &xslt4j; to respond to requests for XML 
documents by transforming those documents into HTML and serving them to 
clients. For a sample of how this can be done, see <link idref="samples" 
anchor="servlet">sample servlet</link>.</p>
   </s2><anchor name="extensions"/>
   <s2 title="Creating and using extensions">
   <p>For those cases where you want to be able to call procedural code from 
within a stylesheet, the &xslt4j; Extensions facility supports the creation of 
extension elements and extension functions. See <link 
idref="extensions">Extensions</link> and <link idref="samples" 
anchor="extensions">Extensions samples</link>.</p>
   </s2><anchor name="multithreading"/>
   <s2 title="Multithreading">
  -<p>A given Templates object may be used concurrently and repeatedly in 
multiple transformations. You must, however, use a separate Transformer object 
to perform each transformation. The Transformer object tracks state information 
and is lightweight. Each time you perform a transformation, use the Templates 
object newTransformer() method to instantiate a Transformer.</p>
  +<p>A given Templates object may be used repeatedly and even in multiple 
threads running concurrently for the transformation of XML input, but you 
should use the Templates object to instantiate a separate Transformer for each 
transformation you perform. The Templates object is an immutable runtime 
representation of the structure and content of a stylesheet (which may include 
and import multiple stylesheet sources). A Transformer, on the other hand, is a 
lightweight object that tracks state information during the transformation, and 
should only be used to perform a single transformation.</p>
  +
  +<p>If you want to perform multiple transformations (sequentialy or 
concurrently) with the same stylesheet instructions, do the following:</p>
  +<ol>
  +  <li>Use the TransformerFactory <jump 
href="apidocs/javax/xml/transform/TransformerFactory.html#newTemplates(javax.xml.transform.Source)">newTemplates(Source
 xslSource)</jump> method to create a Templates object.<br/><br/></li>
  +<li>For each transformation, use the Templates object <jump 
href="apidocs/javax/xml/transform/Templates.html#newTransformer()">newTransformer()</jump>
 method to create a Transformer, and use that Transformer's <jump 
href="apidocs/javax/xml/transform/Transformer.html#transform(javax.xml.transform.Source,
 javax.xml.transform.Result)">transform(Source xmlSource, Result 
transformResult)</jump> method to perform the transformation.</li>
  +</ol>
   </s2><anchor name="debugging"/>
   <s2 title="Debugger Interface">
                <p>&xslt4j; contains a debugger interface in the 
org.apache.xalan.xslt.trace package:</p> 
  @@ -311,7 +311,7 @@
          selection of a stylesheet node.</li>
                </ul>
       <p>The <link idref="commandline">command-line utility</link> uses the 
debugger interface when you include one or more of the
  -     following switches: -TT, -TG, -TS, -TTC.</p>
  +     following switches: <code>-TT</code>, <code>-TG</code>, 
<code>-TS</code>, <code>-TTC</code>.</p>
       <p>Example:</p>
   <source>import org.apache.xalan.transformer.TransformerImpl;
   import org.apache.xalan.trace.TraceManager;
  @@ -331,14 +331,14 @@
   // Print information whenever a template is invoked.
   ptl.m_traceTemplates = true;
   
  -// Set up the transformation
  -org.apache.trax.Processor processor = 
  -                         org.apache.trax.Processor.newInstance("xslt");
  -org.apache.trax.Templates templates = processor.process
  -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(new 
org.xml.sax.InputSource("foo.xsl"));
  -org.apache.trax.Transformer transformer = templates.newTransformer();
  +// Set up the transformation    
  +javax.xml.transform.TransformerFactory tFactory = 
  +                     javax.xml.trnasform.TransformerFactory.newInstance();
  +javax.xml.transform.Transformer transformer = 
  +  tFactory.newTransformer(new javax.xml.transform.stream.StreamSource
  +                                                             ("foo.xsl"));
   
  -// Cast the Transformer object as TransformerImpl.
  +// Cast the Transformer object to TransformerImpl.
   if (transformer instanceof TransformerImpl) {
     TransformerImpl transformerImpl = (TransformerImpl)transformer;
     
  @@ -350,8 +350,9 @@
     // Perform the transformation --printing information to
     // the events log during the process.
     transformer.transform
  -      ( new org.xml.sax.InputSource("foo.xml"), 
  -        new org.apache.trax.Result(new java.io.FileWriter("foo.out")) );
  +      ( new javax.xml.transform.stream.StreamSource("foo.xml"), 
  +        new javax.xml.transform.stream.StreamResult
  +                                    (new java.io.FileWriter("foo.out")) );
   }
   // Close the PrintWriter and FileWriter.
   pw.close();
  
  
  
  1.14      +8 -99     xml-xalan/java/xdocs/sources/xalan/whatsnew.xml
  
  Index: whatsnew.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/whatsnew.xml,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- whatsnew.xml      2000/11/21 17:40:59     1.13
  +++ whatsnew.xml      2000/12/04 17:23:44     1.14
  @@ -57,104 +57,13 @@
    * <http://www.apache.org/>.
    -->
   <s1 title="What's new in &xslt4j2;">
  -<ul>
  -  <li><link anchor="design">New Design</link></li>
  -  <li><link anchor="packages">Package layout</link></li>
  -</ul><anchor name="design"/>
  +
     <s2 title="New Design">
  -  <p>With respect to &xslt4j; 1.x, &xslt4j2; represents a fundamental 
redesign of Xalan. The primary objective of this redesign is an easier-to-use, 
more understandable, and more modular API that that encourages wider 
participation in its ongoing development by the open-source XML developer 
community, and that lends itself to "streaming," the production of 
transformation output while the input is still being parsed.</p>
  -<p>As a result of this redesign, the changes are global in nature. The API 
and the basic usage patterns are different. For the details, see <link 
idref="usagepatterns">Basic Usage Patterns</link>.</p>
  -<p>To start with, &xslt4j2; implements the <resource-ref idref="trax"/> 
interfaces. A number of open-source XML tool developers have collaborated on 
TRaX, a conceptual framework and a standard API for performing XML 
transformations. In November 2000, was incorporated into the Sun Java 
Specification Request 63, the Java API for XMP Procesing Version 1.1. We 
strongly encourage you to use the TRaX framework and interfaces when you use 
&xslt4j2; to perform XML transformations.</p>
  -<p>The basic organization of TRaX is quite simple: use a TransformerFactory 
to process transformation instructions and generate a Transformer, with which 
you can apply  the processed transformation instructions (a Templates object) 
to your XML source, producing a transformation result. For more detail, see 
<link idref="usagepatterns" anchor="basic">Basic steps</link>.</p>
  -    <p>&xslt4j2; builds on <resource-ref idref="sax2"/>, <resource-ref 
idref="dom2"/>, and the <resource-ref idref="jaxp"/>. For example, &xslt4j2; 
incorporates the SAX parsing event model in its support for the incremental 
production of transformation output.</p>
  -    <p>In conjunction with TRaX, &xslt4j; gathers basic operational settings 
from Java system property settings. System properties, for example, identify 
the stylesheet processor and XMLReader to use, and the serializers that are 
available for various output methods. You can set these system properties on 
the command line, in your applications, or by editing the properties files that 
&xslt4j; uses for system properties that you do not set. The default settings 
in these files (as shipped) point to the Xalan StylesheetProcessor, the 
serializers shipped with Xalan, and the Xerces SAXParser.</p>
  -</s2><anchor name="packages"/>
  -  <s2 title="Package layout">
  -  <p>The new class package structure is flatter and maps closely to the TRaX 
framework. For example, you use the
  -  processor package to process stylesheets and produce stylesheet templates 
(the templates package). Then you use the
  -  transformer package to apply the templates to a source tree and produce an 
output tree.</p>
  -  <p>Responsibility for evaluating XPath expressions and XSLT matching 
patterns is centralized in the XPath packages,
  -  serializers for outputting transformation result trees as a stream are in 
the serializers package, and a variety of
  -  utilities used by multiple packages are in the utils package.</p>
  -  <p>&xslt4j2; is made up of four primary and several secondary packages. 
The four primary packages are:</p>
  -  <gloss> 
  -             <label><jump
  -     
href="apidocs/org/apache/xalan/processor/package-summary.html">org.apache.xalan.processor</jump></label>
 
  -             <item>Processes the stylesheet and produces the Templates 
object. This package is responsible for
  -    implementing the <jump 
href="apidocs/org/apache/trax/Processor.html">org.apache.trax.Processor</jump> 
abstract class, which 
  -    provides the primary entry point into &xslt4j;.</item> 
  -      </gloss> 
  -      <gloss> 
  -              <label><jump
  -     
href="apidocs/org/apache/xalan/templates/package-summary.html">org.apache.xalan.templates</jump></label>
 
  -              <item>Defines the structure and content of a stylesheet tree 
(which may include multiple imported and
  -    included stylesheets). This package is responsible for implementing the 
<jump
  -    
href="apidocs/org/apache/trax/Templates.html">org.apache.trax.Templates</jump> 
interface.</item> 
  -      </gloss> 
  -      <gloss> 
  -             <label><jump
  -    
href="apidocs/org/apache/xalan/transformer/package-summary.html">org.apache.xalan.transformer</jump></label>
 
  -             <item>Applies the Templates object to the XML source and 
produces the result tree. This package is
  -     responsible for implementing the <jump 
href="apidocs/org/apache/trax/Transformer.html">org.apache.trax.Transformer</jump>
  -     interface.</item> 
  -      </gloss> 
  -      <gloss> 
  -             <label><jump 
href="apidocs/org/apache/xpath/package-summary.html">org.apache.xpath</jump> 
packages</label> 
  -             <item>Evaluates XPath expressions and XSLT match 
patterns.</item> 
  -      </gloss>
  -   <p>Other packages include:</p>
  -   <gloss>
  -     <label><jump 
href="apidocs/org/apache/xalan/xslt/package-summary.html">org.apache.xalan.xslt</jump></label>
  -      <item>Xalan <link idref="commandline">command-line utility</link> for 
performing transformations.</item>
  -    </gloss>   
  -   <gloss>
  -     <label><jump 
href="apidocs/org/apache/xalan/stree/package-summary.html">org.apache.xalan.stree</jump></label>
  -      <item>Implementation of DOM source tree optimized for node retrieval 
and XSLT processing.</item>
  -    </gloss>
  -    <gloss>
  -               <label><jump 
href="apidocs/org/apache/xalan/utils/package-summary.html">org.apache.xalan.utils</jump></label>
  -      <item>Xalan utilities used by the other packages.</item>
  -      </gloss>
  -   <gloss> 
  -             <label><jump 
href="apidocs/org/apache/xalan/res/package-summary.html">org.apache.xalan.res</jump></label>
  -     <item>&xslt4j; resource files (such as error messages).</item>
  -      </gloss> 
  -   <gloss> 
  -             <label><jump 
href="apidocs/org/apache/xalan/client/package-summary.html">org.apache.xalan.client</jump></label>
  -      <item>Provides an applet interface for performing XSLT 
transformations.</item>
  -      </gloss> 
  -   <gloss> 
  -             <label><jump 
href="apidocs/org/apache/xalan/trace/package-summary.html">org.apache.xalan.trace</jump></label>
  -     <item>Enables XSLT debuggers and similar tools to add trace listeners 
to transformation operations.</item>
  -      </gloss>    
  -  <gloss> 
  -             <label><jump
  -    
href="apidocs/org/apache/xalan/extensions/package-summary.html">org.apache.xalan.extensions</jump></label>
  -      <item>Support for extension elements and extension functions, which 
allow you to call Java code and scripts from
  -       within a stylesheet.</item>
  -      </gloss> 
  -   <gloss> 
  -             <label><jump 
href="apidocs/org/apache/xalan/lib/package-summary.html">org.apache.xalan.lib</jump>
  -     packages</label>
  -      <item>The &xslt4j; library of extension elements and extension 
functions.</item>
  -      </gloss> 
  -   <p>Other packages that are included in the xml-xalan source tree and 
xalan.jar:</p> 
  -       <gloss>
  -    <label><jump 
href="apidocs/org/javax/xml/parsers/package-summary.html">javax.xml.parsers</jump></label>
  -      <item>The xml.apache.org implementation of <resource-ref 
idref="jaxp"/>.</item>
  -      </gloss>
  -   <gloss>
  -      <label><jump 
href="apidocs/org/apache/serialize/package-summary.html">org.apache.serialize</jump>
 and <jump 
href="apidocs/org/apache/xml/serialize/transition/package-summary.html">org.apache.xml.serialize.transition</jump>
 packages</label>
  -      <item>Output transformation result trees as a stream.</item>
  -      </gloss>
  -   <gloss>
  -     <label><jump 
href="apidocs/org/xml/sax/package-summary.html">org.xml.sax</jump> 
packages</label>
  -     <item>SAX 2 interfaces.</item>
  -   </gloss>
  -   <gloss>
  -     <label><jump 
href="apidocs/org/w3c/dom/package-summary.html">org.w3.dom</jump> 
packages</label>
  -     <item>DOM level 2 interfaces.</item>
  -   </gloss>
  -   <note>As actions are taken by the relevant standards organizations, the 
TrAX and serializer packages are subject to change in future releases.</note>
  +  <p>&xslt4j2; represents a fundamental redesign of Xalan. The primary 
objective of this redesign is an easier-to-use, more understandable, and more 
modular API that that encourages wider participation in its ongoing development 
by the open-source XML developer community, and that lends itself to 
"streaming," the production of transformation output while the input is still 
being parsed.</p>
  +<p>&xslt4j2; builds on <resource-ref idref="sax2"/>, <resource-ref 
idref="dom2"/>, and the <resource-ref idref="jaxp"/>. For example, &xslt4j2; 
incorporates the SAX parsing event model in its support for the incremental 
production of transformation output. &xslt4j2; also implements the  standard 
TrAX API (see below) that enables you to code your XML applications without 
reference to the internal details of a given implementation.</p>
  +<p>Given the scope of the redesign, the changes with respect to <jump 
href="http://xml.apache.org/xalan/index.html";>&xslt4j; 1.x</jump> are global in 
nature. For an introduction to &xslt4j2; usage patterns, see <link 
idref="usagepatterns">Basic Usage Patterns</link>.</p>
  +<p>&xslt4j2; implements the <resource-ref idref="trax"/> interfaces. The 
product of extensive open-source collaboration by members of the XML developer 
community, TrAX provides a conceptual framework and a standard API for 
performing XML transformations. During its evolution, the TrAX API has 
undergone several revisions. We believe this API has now reached or is very 
close to final form. In November 2000, TrAX was incorporated into <resource-ref 
idref="jsr063"/>, the Java API for XML Processing Version 1.1, which has been 
published for public review. We strongly encourage you to utilize the TrAX 
framework when you use &xslt4j2; to perform XML transformations.</p>
  +<p>The basic organization of TrAX is quite simple: use a TransformerFactory 
to process transformation instructions and generate a Transformer, with which 
you can apply the processed transformation instructions to your XML Source, 
producing a transformation Result. For more detail, see <link 
idref="usagepatterns" anchor="basic">Basic steps</link>.</p>
  +<p>As part of the Java API for XML Processing, TraX provides a stable 
framework for plugging Transformers (like &xslt4j;) and XML parsers (like 
&xml4j;) into your applications without tying yourself to the internal details 
of those implementations. See <link idref="usagepatterns" 
anchor="plug">Plugging in TrAX, SAX, and DOM implementations</link>.</p>
   </s2>
  -</s1>
  +</s1>
  \ No newline at end of file
  
  
  

Reply via email to