<?xml version="1.0" standalone="no"?>  
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * 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.
-->
<!-- $Id$ -->
<s1 title="Getting Started">
<ul>
  <li><link anchor="classpath">Setting up the system classpath</link></li>
  <li><link anchor="samples">Trying out the samples</link></li>
  <li><link anchor="commandline">Performing your own transformations from the command line</link></li>
  <li><link anchor="java-apps">Setting up your own XSLT applications</link></li>
</ul>
<note>Unless otherwise specified, the usage discussed in this section refers to 
the &xslt4j; Interpretive processor. See <link idref="xsltc_usage">Getting Started with XSLTC 
</link> for information on using the &xslt4j; Compiling processor.</note><br></br>
<anchor name="classpath"/>
<s2 title="Setting up the system classpath">
  <p>At the very minimum, you must include <code>xalan.jar</code>, <code>serializer.jar</code>, <code>xml-apis.jar</code>, 
     and <code>&xml4j-jar;</code> -- or another conformant XML parser -- see <link idref="usagepatterns" 
     anchor="plug">Plugging in a Transformer and XML parser</link>) on the system classpath. 
     To run the &xslt4ji; processor sample applications, include <code>xalansamples.jar</code> 
     (all samples other than the servlet) and <code>xalanservlet.jar</code>. All these JAR files are 
     distributed with &xslt4j;. To run Javascript extensions, include <code>bsf.jar</code>, which can
     be obtained from the <jump href="http://jakarta.apache.org/bsf/index.html">Apache Jakarta
     BSF project</jump>. For extensions implemented in other scripting language, see 
     <link idref="extensions" anchor="supported-lang"> extensions language requirements</link> 
     to identify any additional JAR files you must place on the classpath and where you can 
     get them.</p>
     
  <p>If you are using XSLTC, see <link idref="xsltc_usage">Getting Starting with XSLTC</link>.</p>
     
  <p>If you are using JDK or JRE 1.3.x or 1.4.x, include <code>tools.jar</code> on the classpath.  If you
     are using JDK or JRE 1.1.8 (supported for runtime only), then include <code>classes.zip</code> on the 
     classpath.</p>
</s2>

<anchor name="samples"/>
<s2 title="Trying out the samples">
  <p>The &xslt4j; distribution includes a number of basic sample applications. These samples are easy 
     to run, and you can review the source files -- all of which are brief -- to see just how they 
     work.</p>
  <p>To run the samples, do the following:</p>
  <ol>
    <li>Set up your classpath (see above), including <code>xalansamples.jar</code> and (for the servlet) 
        <code>xalanservlet.jar</code>.</li>
    <li>Be sure the java executable is on your path.</li>
    <li>Go to the samples subdirectory containing the sample (use the DOS shell if you are running 
        Windows).</li>
    <li>Use the java executable to run the sample from the command line.</li>
    <li>Examine the application source and result files.</li>
  </ol>
  <p>For example, go to the SimpleTransform subdirectory and issue the following command:</p>
  <p><code>java SimpleTransform</code></p>
  <p>The sample writes the transformation result  to a file (birds.out). To see how the example works, 
     examine the source files: birds.xml, birds.xsl, and SimpleTransform.java.</p>
  <p>The extensions examples require additional JAR files on the classpath, and the procedure for 
     running the sample applet and sample servlet is different. For more information about all the 
     samples, see <link idref="samples">&xslt4j; Samples</link>.</p>
</s2>

<anchor name="commandline"/>
<s2 title="Performing your own transformations from the command line">
  <p>org.apache.xalan.xslt.Process provides a basic utility for performing transformations from 
     the command line. You can use this utility, for example, to run several of the extensions samples. 
     The command line for most standard transformations is as follows:</p>
  <p><code>java org.apache.xalan.xslt.Process -in <ref>xmlSource</ref></code><br/>
     <code>&nbsp;&nbsp;&nbsp;&nbsp;-xsl <ref>stylesheet</ref> -out <ref>outputfile</ref></code></p>
  <p>where <ref>xmlSource</ref> is the XML source file name, <ref>stylesheet</ref> is the XSL 
     stylesheet file name, and <ref>outputfile</ref> is the output file name.</p>
  <p>If you want the output to be displayed on the screen, simply omit the -out flag and argument.</p>
  <p>You can use this utility to try out XSL stylesheets you have written, to make sure they do what 
     you expect with the XML source files they are designed to transform. The utility provides useful 
     messages if the source file or stylesheet is not well formed. For more information, see 
     <link idref="commandline">Command-Line Utility</link>.</p>
</s2>

<anchor name="java-apps"/>
<s2 title="Setting up your own Java applications">
  <p>You can start by using your own XML source files and XSL stylesheets with the sample applications, 
     which illustrate a number of the <link idref="usagepatterns">basic usage patterns</link>.</p>
  <p>Here is the basic procedure to keep in mind when you set up a transformation:</p>
  <ol>
    <li>Use the <jump href="apidocs/javax/xml/transform/TransformerFactory.html">TransformerFactory</jump> static newInstance() method to instantiate a TransformerFactory.<br/><br/></li>
    <li>Use the TransformerFactory newTransformer(Source stylesheet) method to process the 
        transformation instructions in an XSLT stylesheet Source (producing under the covers a 
        <jump href="apidocs/javax/xml/transform/Templates.html">Templates</jump> object) and generate 
        a <jump href="apidocs/javax/xml/transform/Transformer.html">Transformer</jump>.<br/><br/></li>
    <li>Use the Transformer transform(Source xmlSource, Result transformResult) method to apply the 
        transformation instructions (the Templates object) to the XML Source and produce the 
        transformation Result.<br/><br/></li>
  </ol>
  <p>For more information about this procedure and its variations, see <link idref="usagepatterns">Basic 
     Usage Patterns</link>.</p>
</s2>
</s1>
