<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">

<!--
 * The Apache Software License, Version 1.1
 *
 *
 * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights 
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer. 
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:  
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowledgment may appear in the software itself,
 *    if and wherever such third-party acknowledgments normally appear.
 *
 * 4. The names "Xalan" and "Apache Software Foundation" must
 *    not be used to endorse or promote products derived from this
 *    software without prior written permission. For written 
 *    permission, please contact apache@apache.org.
 *
 * 5. Products derived from this software may not be called "Apache",
 *    nor may "Apache" appear in their name, without prior written
 *    permission of the Apache Software Foundation.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation and was
 * originally based on software copyright (c) 1999, Lotus
 * Development Corporation., http://www.lotus.com.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 -->
 
<s1 title="&xslt4j; Overview">
<ul>
<li><link anchor="intro">Introduction</link></li>
<li><link anchor="features">&xslt4j; Features</link></li>
<li><link anchor="towork">Getting to work with &xslt4j;</link></li>
<li><link anchor="uptospeed">Getting up to speed with XSLT</link></li>
<li><link anchor="glossary">Glossary</link></li>
</ul>
<anchor name="intro"/>
<s2 title="Introduction">
<p>&xslt4j; (named after a rare musical instrument) fully implements <resource-ref idref="xslt"/> 
   and the <resource-ref idref="xpath"/>. XSLT is the first part of the XSL stylesheet language for 
   XML. It includes the XSL 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 not part of &xslt4j;. 
      For more information, see <resource-ref idref="xsl"/> 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 (<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>&lt;?xml version="1.0"?>
&lt;doc>Hello&lt;/doc></source>
        <p>foo.xsl:</p>
        <source>&lt;?xml version="1.0"?> 
&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
&lt;xsl:template match="doc">
&lt;out>&lt;xsl:value-of select="."/>&lt;/out>
&lt;/xsl:template>
&lt;/xsl:stylesheet></source>
<p>foo.out:</p>
<source>&lt;out>Hello&lt;/out></source>
<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 stream of XML markup (from a URI, 
   a character or byte stream, or another transformation), a SAX InputStream, 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>Includes an Interpretive processor for use in a tooling and debugging environment and 
      a Compiling processor (XSLTC) for use in a high performance runtime environment.<br/><br/></li>
  <li>Implements the relevant W3C specifications: <resource-ref idref="xslt"/> and 
      <resource-ref idref="xpath"/>.<br/><br/></li>
  <li>Implements <link idref="trax">TrAX (Transformation API for XML)</link>, now part of 
      <resource-ref idref="jaxp12"/>, 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="jaxp12"/> (see <link idref="usagepatterns" anchor="plug">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
      transformations.<br/><br/></li>
  <li>Includes an <link idref="usagepatterns" 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 provides a growing library of extension elements and functions.</li>
</ul> 
</s2>

<anchor name="towork"/>
<s2 title="Getting to work with &xslt4j;">
<p>For instructions and some suggestions about how to get started using the XSLT Interpretive
   processor, see <link idref="getstarted">Getting Started with Interpretive Processing</link>.</p>
<p>For instructions and some suggestions about how to get started using the XSLT Compiling
   processor, see <link idref="xsltc_usage">Getting Started with XSLTC</link>.</p>   
</s2>

<anchor name="uptospeed"/>
<s2 title="Getting up to speed with XSLT">
<p>If you are still working through the details of the XSLT spec (the W3C 1.0 Recommendation), you 
   may want to consult one or more of the following:</p>
<ul>
  <li>XSLT - XSL Transformations in 
      <jump href="http://www.brics.dk/~amoeller/XML/">
      The XML Revolution: Technologies for the future Web</jump> by Anders M&oslash;ller and Michael 
      I. Schwartzbach (Web pages, but designed for sequential reading)</li>
  <li>Crane Softwright's <jump href="http://www.CraneSoftwrights.com/training/">Free preview of 
      Practical Transformation Using XSLT and XPath</jump><br/><br/></li>
  <li>Doug Tidwell's <jump href="http://www.oreilly.com/catalog/xslt/">XSLT</jump>, O'Reilly, 2001
      <br/><br/></li>                 
  <li>Bob Ducharme's <jump href="http://www.manning.com/ducharme/index.html">XSLT Quickly</jump>, 
      Manning Publications, 2001<br/><br/></li>                 
  <li>John Robert Gardner and Zarella Rendon's 
      <jump href="http://vig.prenhall.com/catalog/academic/product/1,4096,0130404462,00.html">XSLT 
      and XPath: A Guide to Transformations</jump>, Prentice-Hall, 2001<br/><br/></li>                 
  <li>Michael Kay's <jump href="http://www.wrox.com/Books/Book_Details.asp?ISBN=1861005067">XSLT 
      Programmer's Reference</jump>, 2nd ed., Wrox Press, 2001<br/><br/></li>
  <li>Steven Holzner's <jump href="http://www.newriders.com/books/title.cfm?isbn=0735711364">Inside 
      XSLT</jump>, New Riders, 2001<br/><br/></li>                 
  <li>Neil Bradley's <jump href="http://www.awlonline.com/product/0,2627,0201674874,00.html">XSL 
      Companion</jump>, Addison-Wesley, 2000<br/><br/></li>                 
  <li>Khun Yee Fung's <jump href="http://www.awlonline.com/product/0,2627,0201711036,00.html">XSLT: 
      Working with XML and HTML</jump>, Addison-Wesley, 2001<br/><br/></li>                 
  <li>Dave Pawson's <resource-ref idref="dpawsonxslfaq"/> to search out particular answers and 
      techniques<br/><br/></li>
  <li>Miloslav Nic's <jump href="http://zvon.vscht.cz/HTMLonly/XSLTutorial/Books/Book1/index.html">XSL 
      Tutorial</jump>, a collection of stylesheet examples<br/><br/></li>
  <li>Elliotte Rusty Harold's <jump href="http://metalab.unc.edu/xml/books/bible/updates/14.html">
      Chapter 14 of the XML Bible: XSL Transformations</jump><br/><br/></li>
  <li>The Mulberry <jump href="http://www.mulberrytech.com/xsl/xsl-list/">XSL-List -- Open Forum on 
      XSL</jump> (of interest to XSL users at all levels)<br/><br/></li>
  <li>Objects by Design's <jump href="http://www.objectsbydesign.com/projects/xmi_to_html.html">
      Transforming XMI to HTML</jump> (oriented towards XMI, "an XML-based, stream representation 
      of a UML model," but also covers "generic" XML transformations) and their related 
      <jump href="http://objectsbydesign.com/projects/xslt/xslt_by_example.html">XSLT by Example</jump>
      <br/><br/></li>         
  <li>OASIS (the Organization for the Advancement of Structured Information Standards): 
      <jump href="http://www.oasis-open.org/cover/xsl.html">Extensible Stylesheet Language (XSL)</jump> 
      by Robin Cover<br/><br/></li>
  <li>Donald Ball's <jump href="http://www.webslingerZ.com/balld/xsl/designer_manual.xml">A Guide to 
      XML and XSL for Designers</jump><br/><br/></li>         
</ul>
<p>When you come across other useful introductory or background materials, please email 
   <human-resource-ref idref="xalandev"/>, so we can add them to this list.</p>
    
</s2><anchor name="glossary"/>
<s2 title="Glossary">
<gloss>
  <label>XSLT Namespace</label>
  <item>The <jump href="http://www.w3.org/TR/REC-xml-names/">XML namespace</jump> for XSLT. An XML 
        namespace is a collection of element and attribute names, identified by a Unique Resource 
        Identifier (URI), which often takes the form of a URL, but is really just a unique string, 
        not a pointer to a web page. The XSLT namespace URI is http://www.w3.org/1999/XSL/Transform. 
        In each XSLT stylesheet, you must declare this namespace in the stylesheet element tag and 
        bind it to a local prefix. Like the XSLT specification, we always use xsl as the XSLT 
        namespace prefix in our descriptions and examples, although you are free to bind any prefix 
        to this namespace.<br/><br/></item>
        
  <label>XSL Instruction</label>
  <item>Any tag associated with the XSLT namespace.<br/><br/></item>
        
  <label>Template</label>
  <item>An element, usually with child elements, that specifies a "rule" or set of 
        instructions to perform when a particular kind of node is encountered in the source 
        tree.<br/><br/></item>
                
  <label>XSL Template Instruction</label>
  <item>Any tag that occurs inside an xsl:template element and is associated with the XSLT 
        namespace.<br/><br/></item>
                   
  <label>Source Tree</label>
  <item>The XML tree input to the XSL process.<br/><br/></item>
        
  <label>Result Tree</label>
  <item>The tree that is output by the XSL process.<br/><br/></item>
                
  <label>Match Pattern</label>
  <item>The part of a template that defines the kind(s) of nodes to which the template 
        applies.<br/><br/></item>

</gloss>
<p>For more definitions of XSLT terminology, see Dave Pawson's 
   <jump href="http://www.dpawson.co.uk/xsl/vocab.html">XSLT Terminology
   Clarification</jump> and the Glossary in Michael Kay's 
   <jump href="http://www.wrox.com/Consumer/Store/Details.asp?ISBN=1861003129">XSLT Programmer's Reference</jump>.</p>
</s2>
</s1> 
