dleslie 00/09/29 08:46:31
Modified: java/xdocs/sources/xalan overview.xml samples.xml
usagepatterns.xml whatsnew.xml
Log:
Work in progress for Xalan-J 2 alpha release.
Revision Changes Path
1.2 +3 -2 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- overview.xml 2000/09/15 19:03:20 1.1
+++ overview.xml 2000/09/29 15:46:21 1.2
@@ -72,14 +72,15 @@
Transformation vocabulary and XPath, a language for addressing parts of
XML documents. For links to background materials,
discussion groups, frequently asked questions, and tutorials on XSLT,
see <link anchor="uptospeed">Getting up
to speed with XSLT</link>.</p>
- <note>XSL also includes a vocabulary for formatting documents, which is
still under design and is not part of &xslt4j;.
+ <note>XSL also includes a vocabulary for formatting documents, which is
not part of &xslt4j;.
For more information, see <jump href="http://www.w3.org/TR/xsl/">W3C XSL
Working Draft</jump> and the <jump
href="http://xml.apache.org/fop">Apache XML FOP (Formatting Objects
Project)</jump>.</note>
<p>You use the XSLT language to compose XSL stylesheets. An XSL
stylesheet contains instructions for
transforming XML documents from one document type into another document
type (XML, HTML, or other). In structural
terms, an XSL stylesheet specifies the transformation of one tree of
nodes (the XML input) into another tree of nodes
(the output or transformation result).</p>
- <note>The XSL stylesheet may generate and refer to cascading style
sheets (CSS) as part of its output.</note>
+ <note>The XSL stylesheet may generate and refer to cascading style
sheets (<jump
+ href="http://www.w3.org/Style/CSS/">CSS</jump>) as part of its
output.</note>
<p>In the following example, the foo.xsl stylesheet is used to transform
foo.xml into foo.out:</p>
<p>foo.xml:</p>
<source><?xml version="1.0"?>
1.7 +16 -3 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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- samples.xml 2000/09/25 21:16:30 1.6
+++ samples.xml 2000/09/29 15:46:21 1.7
@@ -63,6 +63,7 @@
<li><link anchor="usestylesheetparam">UseStylesheetParam</link></li>
<li><link anchor="sax2sax">SAX2SAX</link></li>
<li><link anchor="pipe">Pipe</link></li>
+<li><link anchor="usexmlfilters">UseXMLFilters</link></li>
<li><link anchor="applyxpath">ApplyXPath</link></li>
<li><link anchor="appletxmltohtml">AppletXMLtoHTML</link></li>
<li><link anchor="servlet">Servlet</link></li>
@@ -114,14 +115,26 @@
</s2><anchor name="sax2sax"/>
<s2 title="SAX2SAX">
<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>Run this sample from the SAX2SAX subdirectory with</p>
<p><code>java SAX2SAX</code></p>
</s2><anchor name="pipe"/>
<s2 title="Pipe">
- <p>What it does: Chains together a series of 3 transformations by piping
SAX events from one Transformer to
- another. Each Transformer operates as a SAX2 XMLFilter/XMLReader.</p>
+ <p>What it does: Pipes the output from one transformation to a second
transformation, then from the second
+ transformation to the third transformation. Transformer1 is the
ContentHandler for the XMLReader (which parses the
+ input document). Transformer2 provides the ContentHandler for
Transformer1, and Transformer3 for Transformer2.</p>
+ <note>Pipe and UseXMLFilters illustrate two strategies for using the
output of one transformation as the input for
+ another transformation. The Pipe sample incorporates a "push" model --
Transformer1 "pushes" its output to
+ Transformer2, and so on -- whereas in the UseXMLFilters sample,
Transformer3 "pulls" its input from Transformer2,
+ and so on.</note>
<p>Run this sample from the Pipe subdirectory with</p>
<p><code>java Pipe</code></p>
+ </s2><anchor name="usexmlfilters"/>
+ <s2 title="UseXMLFilters"/>
+ <p>What it does: Chains together the same transformations as the
preceding Pipe sample. Using each Transformer
+ object as an extension of the SAX XMLFilter interface, sets the
XMLReader as the parent of Transformer1,
+ Transformer1 as the parent of Transformer2, and Transformer2 as the
parent of of Transformer3.</p>
+ <p>Run this sample from the UseXMLFilters subdirectory with</p>
+ <p><code>java UseXMLFilters</code></p>
</s2><anchor name="applyxpath"/>
<s2 title="ApplyXPath">
<p>What it does: ApplyXPath uses the <jump
href="apidocs/org/apache/xpath/XPathAPI.html">XPathAPI</jump> convenience
methods to
1.4 +17 -10 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- usagepatterns.xml 2000/09/20 14:01:21 1.3
+++ usagepatterns.xml 2000/09/29 15:46:21 1.4
@@ -61,6 +61,7 @@
<li><link anchor="basic">Basic steps</link></li>
<li><link anchor="params">Setting stylesheet parameters</link></li>
<li><link anchor="sax">Explicitly working with SAX</link></li>
+<li><link anchor="outasin">Using transformation output as input for another
transformation</link></li>
<li><link anchor="dom">Processing and producing DOM trees</link></li>
<li><link anchor="xpath">Working with XPath expressions</link></li>
<li><link anchor="applet">Using the &xslt4j; applet wrapper</link></li>
@@ -102,17 +103,16 @@
<s2 title="2. Process the stylesheet, producing a Templates object">
<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. Each Templates object
also incorporates XSLTSchema, which encapsulates the underlying XSLT stylesheet
schema.</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
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>
-<note>Templates and TemplatesBuilder are TRaX interfaces, and XMLReader is a
SAX interface. &xslt4j; uses org.apache.xalan.templates.StylesheetRoot to
implement Templates, and org.apache.xalan.processor.StylesheetHandler to
implement TemplatesBuilder. XMLReader is a SAX interface. The &xslt4j;
StylesheetProcessor uses org.xml.sax.XMLReaderFactory to instantiate an
XMLReader as designated by the org.xml.sax.driver system property. If you are
using &xml4j;, this system property should be set to
org.apache.xerces.parsers.SAXParser</note>
-<p>If you use the processFromNode() method with a DOM representation of the
stylesheet, the processor uses org.apache.xalan.utils.TreeWalker to traverse
the DOM, sending SAX events to the TemplatesBuilder.</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>
</s2><anchor name="transformer"/>
<s2 title="3. Instantiate a Transformer">
<p>To transform an XML document, you need an implementation of the
trax.Transformer interface.</p>
-<p>&xslt4j; implements the Transformer interface with
org.apache.xalan.transformer.TransformerImpl.</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><anchor name="transformation"/>
<s2 title="4. Perform a transformation">
@@ -120,10 +120,11 @@
<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: 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 SAX XMLParser to parse the XML input and sends
parse events to an input SAX ContentHandler,
org.apache.xalan.stree.SourceTreeHandler, which in turn uses
org.apache.xalan.utils.DOMBuilder to assemble 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 and underlying XSLT schema 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 works with org.apache.xalan.transformer.ResultTreeHandler
to forward 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>
-<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>
+<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 ourput method, for example normally requires < and
& 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 in separate
threads. For more information, see xxxx.</p>
</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
trax.Transformer <jump
href="apidocs/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>
@@ -182,6 +183,13 @@
// Parse the XML input document. The input and output ContentHandlers work in
// separate threads to optimize performance.
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>
+<ul>
+ <li><br/>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 XMLParse that reads 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>
+</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>
@@ -199,11 +207,10 @@
org.w3c.dom.Document resultDoc = docBuilder.newDocument();
trax.Result result = new trax.Result(resultDoc);
</source>
-<note>If you are using the Xerces implementation of the <ref>Java API for
XML Parsing</ref> (in xerces.jar), the default value for the
javax.xml.parsers.DocumentBuilderFactory system property is
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl. The Xerces implementations
of DocumentBuilder and DOM Document are
org.apache.xerces.jaxp.DocumentBuilderImpl and
org.apache.xerces.dom.DocumentImpl.</note>
</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>
-<p>XPath is an independent entity, with clients other than XSLT processors
(such as XPointer). Accordingly, &xslt4j2; has packaged XPath as a separate
module (org.apache.xpath and its subpackages), although this module does use
some utility classes packaged in org.apache.xalan.utils. The
org.apache.xpath.XPathAPI class contains convenience methods that you can use
to return single DOM Nodes, NodeIterators, and XObjects. Apart from their own
functionality, these methods also provide a path into the lower-level XPath API
that you may find useful.</p>
+<p>XPath is an independent entity, with clients other than XSLT processors
(such as XPointer). Accordingly, &xslt4j2; has packaged XPath as a separate
module (org.apache.xpath and its subpackages), although concurrently this
module does use some utility classes packaged in org.apache.xalan.utils. The
org.apache.xpath.XPathAPI class contains convenience methods that you can use
to return single DOM Nodes, NodeIterators, and XObjects. Apart from their own
functionality, these methods also provide a path into the lower-level XPath API
that you may find useful.</p>
<p>For an example that uses the XPathAPI convenience methods to execute
XPath expressions against XML source files, see <link idref="samples"
anchor="applyxpath">ApplyXPath</link>.</p>
</s2><anchor name="applet"/>
<s2 title="Using the &xslt4j; applet wrapper">
1.8 +16 -6 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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- whatsnew.xml 2000/09/19 12:52:37 1.7
+++ whatsnew.xml 2000/09/29 15:46:21 1.8
@@ -64,25 +64,35 @@
<s2 title="New Design">
<p>&xslt4j2; represents a fundamental redesign of Xalan. The goal of this
redesign is an easier-to-use, more understandable, and more modular API that
that lends itself to "streaming," the production of transformation output while
the input is still being parsed, and that encourages wider participation in its
ongoing development by the open-source XML developer community.</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 an open-ended
range of XML transformations. We strongly encourage you to use the TRaX
framework and interfaces when you peform XML transformations.</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 a variety of XML
transformations. We strongly encourage you to use the TRaX framework and
interfaces when you perform XML transformations.</p>
<p>The basic organization of TRaX is quite simple: use a Processor to
process transformation instructions (the stylesheet), producing a Templates
object. Use the Templates object to instantiate a Transformer, with which you
can apply the Templates object to XML input, producing a result tree. 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 system properties. System properties, for example, identify the stylesheet
processor and SAX parser to use, and the serializers that are available for
various output methods. The default settings point to the Xalan
StylesheetProcessor, the Xerces SAXParser, and the serializers shipped with
Xerces.</p>
</s2><anchor name="packages"/>
<s2 title="Package layout">
- <p>As the new package structure highlights, the processing of stylesheets
and production of stylesheet templates, the application of stylesheet templates
to source trees and production of output trees, the evaluation of XPath
expressions and XSLT matching patterns, and subsidiary operations and utilities
are more clearly segmented than in &xslt4j; version 1.</p>
-<p>&xslt4j2; is made up of four major and several minor modules. The four
major modules are:</p>
+ <p>The class package structure maps closely to major conceptual modules.
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. Responsibility for
+ evaluating XPath expressions and XSLT matching patterns is centralized in
the XPath packages, and a variety of
+ utilities used by multiple packages are in the utils package.</p>
+ <p>&xslt4j2; is made up of four major and several minor modules. The four
major modules 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 module provides the primary entry point into &xslt4j;.</item>
+ <item>Processes the stylesheet and produces the Templates
object. This module is responsible for
+ implementing the <jump
href="apidocs/trax/Processor.html">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).</item>
+ <item>Defines the structure and content of a stylesheet tree
(which may include multiple imported and
+ included stylesheets). This module is responsible for implementing the
<jump
+ href="apidocs/trax/Templates.html">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.</item>
+ <item>Applies the Templates object to the XML source and
produces the result tree. This module is
+ responsible for implementing the <jump
href="apidocs/trax/Transformer.html">trax.Transformer</jump>
+ interface.</item>
</gloss>
<gloss>
<label><jump
href="apidocs/org/apache/xpath/package-summary.html">org.apache.xpath</jump></label>