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

<!--
 * The Apache Software License, Version 1.1
 *
 *
 * Copyright (c) 1999 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 the <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="xslt"/> 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> 
