<?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-current;">
<ul>
  <li><link anchor="whatisit">What is it?</link></li>
  <li><link anchor="current">How about this release?</link></li>
  <li><link anchor="moreinfo">For more information...</link></li>      
  <li><link anchor="license">License</link></li>        
</ul>
<!--note>A later Developer release has been posted in the <resource-ref idref="xslt4j-distdir"/>. 
         For the changes that have occurred since &xslt4j-current;, consult the xml-xalan-cvs@apache.org 
         mailing list, or download the release and consult the release notes.</note-->
         
<anchor name="whatisit"/>
<s2 title="What is it?">
    <p>&xslt4j; is an XSLT processor for transforming XML documents into 
       HTML, text, or other XML document types. It implements <resource-ref idref="xslt"/> and 
       <resource-ref idref="xpath"/>.  It can be used from the command line, in an applet or a 
       servlet, or as a module in other program.</p>
    <p>&xslt4j; recasts &xslt; as an implementation of the <link idref="trax">
       Transformation API for XML (TRaX)</link> interfaces, part of the <resource-ref idref="jaxp12"/>. 
       TRaX provides a  modular framework and a standard API for performing XML transformations, and
       it utilizes system properties to determine which Transformer and which XML parser to use.</p>
    <p>&xslt4j; also builds on <resource-ref idref="sax2"/> and <resource-ref idref="dom2"/>.</p>
  
    <p>For more information, see <link idref="whatsnew">What's new in &xslt4j2;</link>.</p>
    <note>&xslt4j; version 1 is no longer supported and no longer available from xml.apache.org.</note>
</s2>

<anchor name="current"/>
<s2 title="How about this release?">
  <p>&xslt4j-current; works with &xml4j;, and the distribution includes xercesImpl.jar from &xml4j-used;.</p>
  <p>Support for the &xslt4j; release 1 API, which predates the design of the JAXP 1.2/TrAX interfaces, 
     has been dropped.</p>
  <p>The &xslt4j; implementation is in xalan.jar. The SAX, DOM, and JAVAX interfaces are in xml-apis.jar. 
     These interfaces are shared by a number of tools (&xslt4j;, &xml4j;, etc.), so placing them in a 
     separate JAR simplifies coordination and reduces risk of duplication. 
  <em>Be sure to put both JAR files (and xercesImpl.jar or another JAXP 1.2-compliant XML parser) on your classpath!</em></p>
</s2> 

<anchor name="moreinfo"/>  
<s2 title="For more information...">
  <p>For more information, go to <link idref="overview">&xslt4j; Overview</link>, 
   <link idref="downloads">&xslt4j; Downloads</link>, <link idref="getstarted">Getting Started
   with Interpretive Processing</link> and <link idref="xsltc_usage">Getting Started with &xslt4jc-short;</link>.
   All of the &xslt4j; documentation on this website is included in the &xslt4j; download, as are a number of
   <link idref="samples">Samples</link> to help you start using &xslt4j; to transform XML documents.</p>
</s2>

<anchor name="license"/>
<s2 title="The Apache Software License, Version 1.1">
  <p>Copyright (c) 1999-2003 The Apache Software Foundation.  All rights reserved.</p>

  <p>Redistribution and use in source and binary forms, with or without modification, are 
     permitted provided that the following conditions are met:</p>
  <ol>
    <li>Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.</li> 

    <li>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.</li>

    <li>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.</li>

    <li>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.</li>

    <li>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.</li>
  </ol>
  <p>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.</p>
<p> ====================================================================</p>

 <p>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
    &lt;http://www.apache.org/&gt;.</p>
</s2>

<s2 title="Other licenses"> 
 <p>For the licences that apply to the JARs other than xalan.jar, see the LICENSE and 
    associated readme files in the root directory of this distribution.</p>
</s2>
</s1>