<?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>
