<?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>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="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="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 &xslt4j;, see 
     <link idref="getstarted">Getting Started</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> 
