| <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
| <html> |
| <head> |
| <title>ASF: Using the JAXP Transform APIs</title> |
| <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> |
| <meta http-equiv="Content-Style-Type" content="text/css" /> |
| <link rel="stylesheet" type="text/css" href="resources/apache-xalan.css" /> |
| </head> |
| <!-- |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| --> |
| <body> |
| <div id="title"> |
| <table class="HdrTitle"> |
| <tbody> |
| <tr> |
| <th rowspan="2"> |
| <a href="../index.html"> |
| <img alt="Trademark Logo" src="resources/XalanJ-Logo-tm.png" width="190" height="90" /> |
| </a> |
| </th> |
| <th text-align="center" width="75%"> |
| <a href="index.html">Xalan XSL Transformer User's Guide</a> |
| </th> |
| </tr> |
| <tr> |
| <td valign="middle">Using the JAXP Transform APIs</td> |
| </tr> |
| </tbody> |
| </table> |
| <table class="HdrButtons" align="center" border="1"> |
| <tbody> |
| <tr> |
| <td> |
| <a href="http://www.apache.org">Apache Foundation</a> |
| </td> |
| <td> |
| <a href="http://xalan.apache.org">Xalan Project</a> |
| </td> |
| <td> |
| <a href="http://xerces.apache.org">Xerces Project</a> |
| </td> |
| <td> |
| <a href="http://www.w3.org/TR">Web Consortium</a> |
| </td> |
| <td> |
| <a href="http://www.oasis-open.org/standards">Oasis Open</a> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| <div id="navLeft"> |
| <ul> |
| <li> |
| <a href="resources.html">Resources</a> |
| <br /> |
| </li> |
| <li> |
| <a href="http://xalan.apache.org/index.html">Home</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="index.html">Xalan-J 2.7.2</a> |
| </li> |
| <li> |
| <a href="charter.html">Charter</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="whatsnew.html">What's New</a> |
| </li> |
| <li> |
| <a href="readme.html">Release Notes</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="overview.html">Overview</a> |
| </li> |
| <li> |
| <a href="downloads.html">Download/Build</a> |
| </li> |
| <li> |
| <a href="getstarted.html">Getting Started</a> |
| </li> |
| <li> |
| <a href="xsltc_usage.html">Using XSLTC</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="faq.html">FAQs</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="samples.html">Sample Apps</a> |
| </li> |
| <li> |
| <a href="commandline.html">Command Line</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="features.html">Features</a> |
| </li> |
| <li>Transform API<br /> |
| </li> |
| <li> |
| <a href="xpath_apis.html">XPath API</a> |
| </li> |
| <li> |
| <a href="usagepatterns.html">Usage Patterns</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="apidocs/index.html">Xalan-J API</a> |
| </li> |
| <li> |
| <a href="public_apis.html">Public APIs</a> |
| </li> |
| <li> |
| <a href="dtm.html">DTM</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="extensions.html">Extensions</a> |
| </li> |
| <li> |
| <a href="extensionslib.html">Extensions Library</a> |
| </li> |
| <li> |
| <a href="extensions_xsltc.html">XSLTC Exts</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="design/design2_0_0.html">Xalan 2 Design</a> |
| </li> |
| <li> |
| <a href="xsltc/index.html">XSLTC Design</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="builds.html">Building a release</a> |
| </li> |
| <li> |
| <a href="http://xml.apache.org/xalan-j/test/overview.html">Testing</a> |
| </li> |
| <li> |
| <a href="bugreporting.html">Bug Reporting</a> |
| </li></ul><hr /><ul> |
| <li> |
| <a href="contact_us.html">Contact us</a> |
| </li> |
| </ul> |
| </div> |
| <div id="content"> |
| <h2>Using the JAXP Transform APIs</h2> |
| <ul> |
| <li> |
| <a href="#intro">Introduction</a> |
| </li> |
| <li> |
| <a href="#terminology">General Terminology</a> |
| </li> |
| <li> |
| <a href="#model">Model</a> |
| </li> |
| <li> |
| <a href="#patterns">Patterns</a> |
| </li> |
| </ul> |
| <a name="intro"></a> |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| <h3>Introduction</h3> |
| <p>This document describes the transformation API for XML (TrAX), the set of APIs contained in |
| <a href="apidocs/javax/xml/transform/package-summary.html">javax.xml.transform</a>, <a href="apidocs/javax/xml/transform/stream/package-summary.html">javax.xml.transform.stream</a>, <a href="apidocs/javax/xml/transform/dom/package-summary.html">javax.xml.transform.dom</a>, and <a href="apidocs/javax/xml/transform/sax/package-summary.html">javax.xml.transform.sax</a>.</p> |
| |
| <p>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, |
| unless the semantic structure is used directly as data. Almost all XML-related |
| applications need to perform transformations. Transformations may be described |
| by Java code, Perl code, <a href="http://www.w3.org/TR/xslt">XSLT</a> |
| Stylesheets, other types of script, or by proprietary formats. The inputs, one |
| or multiple, to a transformation, may be a URL, XML stream, a DOM tree, SAX |
| Events, or a proprietary format or data structure. The output types are |
| pretty much the same types as the inputs, but different inputs may need to be |
| combined with different outputs.</p> |
| |
| <p>The great challenge of a transformation API is how to deal with all the |
| possible combinations of inputs and outputs, without becoming specialized for |
| any of the given types.</p> |
| |
| <a name="terminology"></a> |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| <h3>General Terminology</h3> |
| |
| <p>This section will explain some general terminology used in this |
| document. Technical terminology will be explained in the Model section. In many |
| cases, the general terminology overlaps with the technical terminology.</p> |
| |
| <div class="glossary"> |
| <p class="label"> |
| <em>Tree</em> |
| </p> |
| <blockquote class="item">This term, as used within this document, describes an |
| abstract structure that consists of nodes or events that may be produced by |
| XML. A Tree physically may be a DOM tree, a series of well balanced parse |
| events (such as those coming from a SAX2 ContentHander), a series of requests |
| (the result of which can describe a tree), or a stream of marked-up |
| characters.</blockquote> |
| |
| <p class="label"> |
| <em>Source Tree(s)</em> |
| </p> |
| <blockquote class="item">One or more trees that are the inputs to the |
| transformation.</blockquote> |
| |
| <p class="label"> |
| <em>Result Tree(s)</em> |
| </p> |
| <blockquote class="item">One or more trees that are the output of the |
| transformation.</blockquote> |
| |
| |
| |
| <p class="label"> |
| <em>Transformation</em> |
| </p> |
| <blockquote class="item">The process of consuming a stream or tree to produce |
| another stream or tree.</blockquote> |
| |
| |
| |
| <p class="label"> |
| <em>Identity (or Copy) Transformation</em> |
| </p> |
| <blockquote class="item">The process of transformation from a source to a result, |
| making as few structural changes as possible and no informational changes. The |
| term is somewhat loosely used, as the process is really a copy from one |
| "format" (such as a DOM tree, stream, or set of SAX events) to |
| another.</blockquote> |
| |
| |
| |
| <p class="label"> |
| <em>Serialization</em> |
| </p> |
| <blockquote class="item">The process of taking a tree and turning it into a stream. In |
| some sense, a serialization is a specialized transformation.</blockquote> |
| |
| |
| |
| <p class="label"> |
| <em>Parsing</em> |
| </p> |
| <blockquote class="item">The process of taking a stream and turning it into a tree. In |
| some sense, parsing is a specialized transformation.</blockquote> |
| |
| |
| |
| <p class="label"> |
| <em>Transformer</em> |
| </p> |
| <blockquote class="item">A Transformer is the object that executes the transformation. |
| </blockquote> |
| |
| |
| |
| <p class="label"> |
| <em>Transformation instructions</em> |
| </p> |
| <blockquote class="item">Describes the transformation. A form of code, script, or |
| simply a declaration or series of declarations.</blockquote> |
| |
| |
| |
| <p class="label"> |
| <em>Stylesheet</em> |
| </p> |
| <blockquote class="item">The same as "transformation instructions," except it is |
| likely to be used in conjunction with <a href="http://www.w3.org/TR/xslt">XSLT</a>.</blockquote> |
| |
| |
| |
| <p class="label"> |
| <em>Templates</em> |
| </p> |
| <blockquote class="item">Another form of "transformation instructions." In the TrAX |
| interface, this term is used to describe processed or compiled transformation |
| instructions. The Source flows through a Templates object to be formed into the |
| Result.</blockquote> |
| |
| |
| |
| <p class="label"> |
| <em>Processor</em> |
| </p> |
| <blockquote class="item">A general term for the thing that may both process the |
| transformation instructions, and perform the transformation.</blockquote> |
| |
| |
| |
| |
| <p class="label"> |
| <em>DOM</em> |
| </p> |
| <blockquote class="item">Document Object Model, specifically referring to the <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/">DOM level 3</a> |
| Specification.</blockquote> |
| |
| |
| <p class="label"> |
| <em>SAX</em> |
| </p> |
| <blockquote class="item">Simple API for XML, specifically referring to the |
| <a href="http://www.saxproject.org/">SAX 2.0 |
| release</a>.</blockquote> |
| </div> |
| |
| <a name="model"></a> |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| <h3>Model</h3> |
| |
| <p>The section defines the abstract model for TrAX, apart from the details |
| of the interfaces.</p> |
| |
| <p>A TrAX <a href="#pattern-TransformerFactory">TransformerFactory</a> is an object |
| that processes transformation instructions, and produces |
| <a href="#pattern-Templates">Templates</a> (in the technical |
| terminology). A <a href="#pattern-Templates">Templates</a> |
| object provides a <a href="#pattern-Transformer">Transformer</a>, which transforms one or |
| more <a href="#pattern-Source">Source</a>s into one or more |
| <a href="#pattern-Result">Result</a>s.</p> |
| |
| <p>To use the TrAX interface, you create a |
| <a href="#pattern-TransformerFactory">TransformerFactory</a>, |
| which may directly provide a <a href="#pattern-Transformer">Transformer</a>, or which can provide |
| <a href="#pattern-Templates">Templates</a> from a variety of |
| <a href="#pattern-Source">Source</a>s. The |
| <a href="#pattern-Templates">Templates</a> object is a processed |
| or compiled representation of the transformation instructions, and provides a |
| <a href="#pattern-Transformer">Transformer</a>. The |
| <a href="#pattern-Transformer">Transformer</a> processes a |
| <a href="#pattern-Transformer">Source</a> according to the |
| instructions found in the <a href="#pattern-Templates">Templates</a>, and produces a |
| <a href="#pattern-Result">Result</a>.</p> |
| |
| <p>The process of transformation from a tree, either in the form of an |
| object model, or in the form of parse events, into a stream, is known as |
| <b> |
| <i>serialization</i> |
| </b>.</p> |
| <a name="patterns"></a> |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| <h3>TrAX Patterns</h3> |
| <p>The intent, responsibilities, and thread safety of TrAX objects:</p> |
| <ul> |
| <li> |
| <a href="#pattern-Processor">Processor</a> |
| </li> |
| <li> |
| <a href="#pattern-TransformerFactory">TransformerFactory</a> |
| </li> |
| <li> |
| <a href="#pattern-Templates">Templates</a> |
| </li> |
| <li> |
| <a href="#pattern-Transformer">Transformer</a> |
| </li> |
| <li> |
| <a href="#pattern-Source">Source</a> |
| </li> |
| <li> |
| <a href="#pattern-Result">Result</a> |
| </li> |
| </ul> |
| <a name="pattern-Processor"></a> |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| <h4>Processor</h4> |
| <div class="glossary"> |
| <p class="label"> |
| <em>Intent</em> |
| </p> |
| <blockquote class="item">Generic concept for the |
| set of objects that implement the TrAX interfaces.</blockquote> |
| <p class="label"> |
| <em>Responsibilities</em> |
| </p> |
| <blockquote class="item">Create compiled transformation instructions, transform |
| sources, and manage transformation parameters and |
| properties.</blockquote> |
| <p class="label"> |
| <em>Thread safety</em> |
| </p> |
| <blockquote class="item">Only the Templates object can be |
| used concurrently in multiple threads. The rest of the processor does not do |
| synchronized blocking, and so may not be used to perform multiple concurrent |
| operations.</blockquote> |
| </div> |
| <a name="pattern-TransformerFactory"></a> |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| <h4>TransformerFactory</h4> |
| <div class="glossary"> |
| <p class="label"> |
| <em>Intent</em> |
| </p> |
| <blockquote class="item">Serve as a vendor-neutral Processor interface for |
| <a href="http://www.w3.org/TR/xslt">XSLT</a> and similar |
| processors.</blockquote> |
| <p class="label"> |
| <em>Responsibilities</em> |
| </p> |
| <blockquote class="item">Serve as a factory for a concrete |
| implementation of an TransformerFactory, serve as a direct factory for |
| Transformer objects, serve as a factory for Templates objects, and manage |
| processor specific features.</blockquote> |
| <p class="label"> |
| <em>Thread safety</em> |
| </p> |
| <blockquote class="item">A TransformerFactory may not perform mulitple concurrent |
| operations.</blockquote> |
| </div> |
| <a name="pattern-Templates"></a> |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| <h4>Templates</h4> |
| <div class="glossary"> |
| <p class="label"> |
| <em>Intent</em> |
| </p> |
| <blockquote class="item">The runtime representation of the transformation instructions.</blockquote> |
| <p class="label"> |
| <em>Responsibilities</em> |
| </p> |
| <blockquote class="item">A data bag for transformation instructions; act as a factory |
| for Transformers.</blockquote> |
| <p class="label"> |
| <em>Thread safety</em> |
| </p> |
| <blockquote class="item">Threadsafe for concurrent |
| usage over multiple threads once construction is complete.</blockquote> |
| </div> |
| <a name="pattern-Transformer"></a> |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| <h4>Transformer</h4> |
| <div class="glossary"> |
| <p class="label"> |
| <em>Intent</em> |
| </p> |
| <blockquote class="item">Act as a per-thread |
| execution context for transformations, act as an interface for performing the |
| transformation.</blockquote> |
| <p class="label"> |
| <em>Responsibilities</em> |
| </p> |
| <blockquote class="item">Perform the |
| transformation.</blockquote> |
| <p class="label"> |
| <em>Thread safety</em> |
| </p> |
| <blockquote class="item">Only one instance per thread |
| is safe.</blockquote> |
| </div> |
| <table class="note"> |
| <tr> |
| <td class="noteImg"> |
| <img src="resources/note.gif" alt="note" /> |
| </td> |
| <td class="noteTxt">The Transformer is bound to the Templates |
| object that created it.</td> |
| </tr> |
| </table> |
| <a name="pattern-Source"></a> |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| <h4>Source</h4> |
| <div class="glossary"> |
| <p class="label"> |
| <em>Intent</em> |
| </p> |
| <blockquote class="item">Serve as a |
| single vendor-neutral object for multiple types of input.</blockquote> |
| <p class="label"> |
| <em>Responsibilities</em> |
| </p> |
| <blockquote class="item">Act as simple data holder for System IDs, DOM nodes, streams, |
| etc.</blockquote> |
| <p class="label"> |
| <em>Thread safety</em> |
| </p> |
| <blockquote class="item">Threadsafe concurrently over multiple |
| threads for read-only operations; must be synchronized for edit |
| operations.</blockquote> |
| </div> |
| <a name="pattern-Result"></a> |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| <h4>Result</h4> |
| <div class="glossary"> |
| <p class="label"> |
| <em>Intent</em> |
| </p> |
| <blockquote class="item">Serve |
| as a single object for multiple types of output, so there can be simple process |
| method signatures.</blockquote> |
| <p class="label"> |
| <em>Responsibilities</em> |
| </p> |
| <blockquote class="item">Act as simple data holder for |
| output stream, DOM node, ContentHandler, etc.</blockquote> |
| <p class="label"> |
| <em>Thread safety</em> |
| </p> |
| <blockquote class="item">Threadsafe concurrently over multiple threads for read-only, |
| must be synchronized for edit.</blockquote> |
| </div> |
| |
| |
| <p align="right" size="2"> |
| <a href="#content">(top)</a> |
| </p> |
| </div> |
| <div id="footer">Copyright © 1999-2014 The Apache Software Foundation<br />Apache, Xalan, and the Feather logo are trademarks of The Apache Software Foundation<div class="small">Web Page created on - Thu 2014-05-15</div> |
| </div> |
| </body> |
| </html> |