mkwan       2002/11/04 11:15:25

  Modified:    java/xdocs/sources xalan-jlocal.xml xalan-jsite.xml
               java/xdocs/sources/xalan commandline.xml extensionslib.xml
  Added:       java/xdocs/sources/xalan commandline_xsltc.xml
                        extensions_xsltc.xml
  Log:
  Added two new documents: Extensions for XSLTC and XSLTC options in the
  Process command line. Added the "XSLTC Exts" item to the main panel.
  
  Revision  Changes    Path
  1.23      +2 -0      xml-xalan/java/xdocs/sources/xalan-jlocal.xml
  
  Index: xalan-jlocal.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan-jlocal.xml,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- xalan-jlocal.xml  11 Jun 2002 15:09:33 -0000      1.22
  +++ xalan-jlocal.xml  4 Nov 2002 19:15:25 -0000       1.23
  @@ -80,11 +80,13 @@
     <separator/>
     <document id="extensions" label="Extensions" 
source="xalan/extensions.xml"/>
     <document id="extensionslib" label="Extensions Library" 
source="xalan/extensionslib.xml"/>
  +  <document id="extensions_xsltc" label="XSLTC Exts" 
source="xalan/extensions_xsltc.xml"/>
     <separator/>
     <document id="readme" label="Release Notes" source="xalan/readme.xml"/>
     <hidden id="history" source="xalan/history.xml"/>
     <hidden id="xsltc_constraints" source="xalan/xsltc_constraints.xml"/>
     <hidden id="xsltc_history" source="xalan/xsltc_history.xml"/>
  +  <hidden id="commandline_xsltc" source="xalan/commandline_xsltc.xml"/>
     <separator/>
     <external href="design/design2_0_0.html" label="Xalan 2 Design"/>
     <external href="xsltc/index.html" label="XSLTC Design"/>
  
  
  
  1.48      +2 -0      xml-xalan/java/xdocs/sources/xalan-jsite.xml
  
  Index: xalan-jsite.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan-jsite.xml,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- xalan-jsite.xml   31 Oct 2002 15:05:32 -0000      1.47
  +++ xalan-jsite.xml   4 Nov 2002 19:15:25 -0000       1.48
  @@ -83,12 +83,14 @@
     <separator/>
     <document id="extensions" label="Extensions" 
source="xalan/extensions.xml"/>
     <document id="extensionslib" label="Extensions Library" 
source="xalan/extensionslib.xml"/>
  +  <document id="extensions_xsltc" label="XSLTC Exts" 
source="xalan/extensions_xsltc.xml"/>
     <separator/>
     <document id="readme" label="Release Notes" source="xalan/readme.xml"/>
     <document id="builds" label="Xalan-Java Builds" source="xalan/builds.xml"/>
     <hidden id="history" source="xalan/history.xml"/>
     <hidden id="xsltc_constraints" source="xalan/xsltc_constraints.xml"/>
     <hidden id="xsltc_history" source="xalan/xsltc_history.xml"/>
  +  <hidden id="commandline_xsltc" source="xalan/commandline_xsltc.xml"/>
     <separator/>
     <external href="design/design2_0_0.html" label="Xalan 2 Design"/>
     <external href="xsltc/index.html" label="XSLTC Design"/>  
  
  
  
  1.21      +46 -23    xml-xalan/java/xdocs/sources/xalan/commandline.xml
  
  Index: commandline.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/commandline.xml,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- commandline.xml   31 Jan 2002 15:55:22 -0000      1.20
  +++ commandline.xml   4 Nov 2002 19:15:25 -0000       1.21
  @@ -60,6 +60,9 @@
    
   
   <s1 title="Command-Line Utility">
  +<ul>
  +<li><link idref="commandline_xsltc">Command line options for 
XSLTC</link></li>
  +</ul>
      
      <s2 title="Using the Command-Line Utility">
         <p>To perform a transformation, you can call &xslt4j; from the command 
line (or script), 
  @@ -70,8 +73,9 @@
                <ol>
       <li>Download &xslt4j;.<br/><br/></li> 
       <li><link idref="getstarted" anchor="classpath">Set the Java 
classpath</link> to include xalan.jar, xml-apis.jar, and
  -    &xml4j-jar; -- or another conformant XML Parser -- see <link 
idref="usagepatterns" anchor="plug">Plugging in 
  -    the Transformer and XML parser</link>).<br/><br/></li>
  +    &xml4j-jar; -- or another conformant XML Parser -- (see <link 
idref="usagepatterns" anchor="plug">Plugging in 
  +    the Transformer and XML parser</link>). Also include xsltc.jar in the 
classpath if you want to use
  +    the XSLTC related options.<br/><br/></li>
       <li>Call java and the Process class with the appropriate flags and
       arguments (described below). The following command line, for example, 
includes the -IN, -XSL,
       and -OUT flags with their accompanying arguments -- the XML source 
document, the XSL
  @@ -79,35 +83,54 @@
       <code>java org.apache.xalan.xslt.Process -IN foo.xml -XSL foo.xsl -OUT 
foo.out</code>
       </li></ol>
       <p>The command line utility can take the following flags and arguments 
(the flags are case insensitive):</p> 
  -      <source>-IN inputXMLURL
  +      <source>
  +                      Common Options
  +
  +-XSLTC (use XSLTC for transformation)
  +-IN inputXMLURL
   -XSL XSLTransformationURL
   -OUT outputFileName
   -V (Version info)
  --QC (Quiet Pattern Conflicts Warnings)
  +-EDUMP [optional filename] (Do stackdump on error.)
  +-XML (Use XML formatter and add XML header.)
  +-TEXT (Use simple Text formatter.)
  +-HTML (Use HTML formatter.)
  +-PARAM name expression (Set a stylesheet parameter)
  +-MEDIA mediaType (use media attribute to find stylesheet associated with a 
document)
  +-FLAVOR flavorName (Explicitly use s2s=SAX or d2d=DOM to do transform)
  +-DIAG (Print overall milliseconds transform took)
  +-URIRESOLVER full class name (URIResolver to be used to resolve URIs)
  +-ENTITYRESOLVER full class name (EntityResolver to be used to resolve 
entities)
  +-CONTENTHANDLER full class name (ContentHandler to be used to serialize 
output)
  +
  +                      Options for the Xalan interpreter
   
  +-QC (Quiet Pattern Conflicts Warnings)
   -TT (Trace the templates as they are being called)
  --TG (Trace each result tree generation event)
  +-TG (Trace each generation event)
   -TS (Trace each selection event)
   -TTC (Trace the template children as they are being processed)
  --EDUMP [optional]FileName (Do stackdump on error)
  --XML (Use XML formatter and add XML header)
  --TEXT (Use simple Text formatter)
  --HTML (Use HTML formatter)
  --PARAM name value (Set a stylesheet parameter)
  --DIAG (Print number of milliseconds transform operation took)
  --FLAVOR flavorName (Transform with SAX for s2s or DOM for d2d)
  --URIRESOLVER fullClassName (Use a custom URIResolver)
  --ENTITYRESOLVER fullClassName (Use a custom EntityResolver)
  --CONTENTHANDLER fullClassName (Use a custom ContentHandler)
  --INCREMENTAL (Request incremental transform by setting
  -  http://xml.apache.org/xalan/features/incremental to true)
  --NOOPTIMIZE (Request no optizimation of stylesheet processing
  -  by setting http://xml.apache.org/xalan/features/optimize to
  -  false)
  --RL recursionLimit (Set numeric limit on depht of stylesheet 
  -  recursion)
  --L (Turn on source_location attribute)
  +-TCLASS (TraceListener class for trace extensions)
  +-L (use line numbers for source document)
  +-INCREMENTAL (request incremental DTM construction by setting 
  +    http://xml.apache.org/xalan/features/incremental to true)
  +-NOOPTIMIMIZE (request no stylesheet optimization proccessing by setting 
  +    http://xml.apache.org/xalan/features/optimize to false)
  +-RL recursionlimit (assert numeric limit on stylesheet recursion depth)
  +
  +                      Options for the Xalan compiler (XSLTC)
  +
  +-XO [optional transletName] (assign the name to the generated translet)
  +-XD destinationDirectory (specify a destination directory for translet)
  +-XJ jarfile (package translet classes into a jar file of name 
&lt;jarfile&gt;)
  +-XP package (specify a package name prefix for all generated translet 
classes)
  +-XN (enable template inlining)
  +-XX (turn on additional debugging message output)
  +-XT (use translet to transform if possible)
   </source>
  +      <p>Use <code>-XSLTC</code> if you want to transform with XSLTC. Please 
refer to 
  +      <link idref="commandline_xsltc">this document</link> for a detailed 
description on
  +      the XSLTC related options.</p>
         <p>Use <code>-IN</code> to specify the XML source document.</p> 
         <p>Use <code>-XSL</code> to specify the XSL stylesheet file.</p>
         <p>Use <code>-TEXT</code> if you want the output to include only 
element values (not element tags with element names and
  
  
  
  1.27      +1 -0      xml-xalan/java/xdocs/sources/xalan/extensionslib.xml
  
  Index: extensionslib.xml
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/xdocs/sources/xalan/extensionslib.xml,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- extensionslib.xml 28 Oct 2002 20:46:31 -0000      1.26
  +++ extensionslib.xml 4 Nov 2002 19:15:25 -0000       1.27
  @@ -68,6 +68,7 @@
   <li><link anchor="pipedocument">PipeDocument</link></li>
   <li><link anchor="evaluate">evaluate</link></li>
   <li><link anchor="tokenize">tokenize</link></li>
  +<li><link idref="extensions_xsltc">Extensions for XSLTC</link></li>
   <li>Examples: <link anchor="ex-redirect">Redirect</link>, <link 
anchor="ex-nodeset">nodeset</link>, <link anchor="ex-sql">SQL 
library</link></li>
   </ul><anchor name="intro"/>
   <s2 title= "Introduction">
  
  
  
  1.1                  xml-xalan/java/xdocs/sources/xalan/commandline_xsltc.xml
  
  Index: commandline_xsltc.xml
  ===================================================================
  <?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 [EMAIL PROTECTED]
   *
   * 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="Command line options for XSLTC">
  <ul>
  <li><link anchor="options">Options</link></li>
  <li><link anchor="examples">Examples</link></li>
  <li><link anchor="faq">Simple FAQs</link></li>
  <li><link anchor="trax">Using the new options from TrAX</link></li>
  </ul>
     
  <anchor name="options"/>
  <s2 title="Options">
  <p>The <code>org.apache.xalan.xslt.Process</code> command line now supports 
XSLTC for transformation. You can use 
  the new <code>-XSLTC</code> option to enable the XSLTC support. The xsltc.jar 
file must be on your CLASSPATH 
  in order to use the <code>-XSLTC</code> option.</p>
  <p>The following existing options can be used with -XSLTC:</p>
  <p><code>-IN, -XSL, -OUT, -V, -EDUMP, -XML, -TEXT, -HTML, -PARAM, <br/>
  -MEDIA, -FLAVOR, -DIAG, -URIRESOLVER, -ENTITYRESOLVER,<br/>
  -CONTENTHANDLER</code></p>
  
  <p>The following existing options do not work with <code>-XSLTC</code>. If 
any of them is used with <code>-XSLTC</code>, 
  a message is printed and the option is ignored.</p>
  <p><code>-QC, -TT, -TG, -TS, -TTC, -TCLASS, -L, -INCREMENTAL, <br/>
  -NOOPTIMIMIZE, -RL</code></p>
  
  <p>We also have a new set of options for <code>-XSLTC</code>. They are all 
two letter options. The first 
  letter is X and the second letter is the same as the corresponding option in 
the XSLTC command line 
  <code>org.apache.xalan.xsltc.cmdline.Compile</code>.</p>
  
  <p>These new options can only be used with <code>-XSLTC</code>. If any of 
them is used with the Xalan 
  interpreter, a message is printed and the option is ignored.</p>
  
  <p>Here is the list of the new options:</p>
  <ul>
    <li><code>-XO [optional translet_name]</code><br/>
    Assign the name to the generated translet. If the translet_name is omitted, 
the translet is 
    generated using the default name (same as the xsl).</li>
    <li><code>-XD destination_directory</code><br/>
    Specify a destination directory for translet. The generated translet 
classes will be put 
    under the specified destination directory.</li>
    <li><code>-XJ jar_name</code><br/>
    Package translet classes into a jar file of name &lt;jar_name&gt;</li>
    <li><code>-XP package_name</code><br/>
    Specify a package name prefix for all generated translet classes</li>
    <li><code>-XN</code><br/>
    Enables template inlining</li>
    <li><code>-XX</code><br/>
    Turns on additional debugging message output</li>
    <li><code>-XT</code><br/>
    Use translet to transform if possible</li>
  </ul>
  </s2>
  
  <anchor name="examples"/>
  <s2 title="Examples">
  
  <p>You can just add the <code>-XSLTC</code> option to your existing option 
list so that it will do the same 
  thing as before, but using XSLTC.</p>
  
  <p>Here is a simple example on how to use XSLTC:</p>
  <p>&gt; <code>java org.apache.xalan.xslt.Process -in test.xml -xsl test.xsl 
-xsltc</code></p>
  <p>XSLTC compiles the stylesheet on the fly and uses the bytecode in memory 
to transform the input xml. 
  No translet class is generated in this simple usage pattern.</p>
  <p>If you want to generate translet classes from the stylesheet, you can use 
the <code>-XO</code> option:</p>
  <p>&gt; <code>java org.apache.xalan.xslt.Process -in test.xml -xsl test.xsl 
-xsltc -xo</code></p>
  
  <p>This example still uses the stylesheet for transformation, but it also 
generates the 
  translet class "test.class".</p>
  
  <p>You can use the <code>-XJ, -XP</code> or <code>-XD</code> options to 
further customize the translet generation behavior. Translets 
  will be generated if any of the options <code>-XO, -XJ</code> or 
<code>-XT</code> is used.</p>
  <p>&gt; <code>java org.apache.xalan.xslt.Process -in test.xml -xsl test.xsl 
-xsltc -xo newTranslet -xd temp -xp org.apache.test -xj translets.jar</code></p>
  
  <p>The above command line uses the xsl for transformation. It also generates 
translet classes in
  the name of <code>newTranslet</code>, using a package prefix of 
<code>org.apache.test</code>, and packages the translets
  into the jar file <code>translets.jar</code> under the <code>temp</code> 
directory.</p>
  
  <p>All of the examples above use the stylesheet to do the transformation. If 
the translets are 
  already generated, you can use the <code>-XT</code> option to specify that 
you want to use the existing translets for transformation. 
  The <code>-XT</code> option has a makefile like feature in that it will 
compare the timestamps of the translet 
  and the stylesheet. If the translet is newer, it is used for the 
transformation, otherwise the stylesheet is 
  used and the translet is regenerated.</p>
  
  <p>The translet is loaded from the specified destination directory or the 
current directory, using
  the specified translet name or the xsl base name, depending on whether the 
<code>-XD</code> or 
  <code>-XO</code> option is used. The options <code>-XO, -XD, -XP</code> and 
<code>-XJ</code>
  can be used with the <code>-XT</code> option to tell XSLTC how to find the 
translet classes. The translets
  are directly read in as bytecode. You do not need to add the translet 
directory or the jar file to your
  classpath.</p>
  <p>Example:</p>
  <p>&gt; <code>java org.apache.xalan.xslt.Process -in test.xml -xsl test.xsl 
-xsltc -xt -xj translets.jar -xd temp</code></p>
  
  <p>This command line will search for the translet <code>test.class</code> 
inside the jar file <code>temp/translets.jar</code>. If it is 
  found and newer than test.xsl, it is used for the transformation; otherwise 
the xsl is used and the
  translet is generated and packaged in the same jar.</p>
  
  <p>Here is how the makefile feature for the <code>-XT</code> option works:</p>
  <ol>
    <li>If the xsl does not exist, use the translet</li>
    <li>If the translet does not exist, use the xsl and generate a new 
translet</li>
    <li>If both exist and the translet is newer, use the translet for 
transformation</li>
    <li>If both exist and the xsl is newer, use the xsl for transformation and 
regenerate the translet</li>
  </ol>
  </s2>
  
  <anchor name="faq"/>
  <s2 title="Simple FAQs">
  
  <p><em>Q:</em> If I use the <code>-XT</code> option, how can I tell if it is 
using the translet or the stylesheet for transformation?</p>
  <p><em>A:</em> Use the <code>-XX</code> option. When XSLTC uses the translet 
for transformation, you will see a debug 
  message like "Tranform using translet ..." or "Tranform using translet ... 
from jar file ...".</p>
  
  <p><em>Q:</em> I want to use a translet for transformation, and I don't have 
the stylesheet.</p>
  <p><em>A:</em> Suppose the translet class is 
<code>c:\translets\myTranslet.class</code>, you can use the following command 
line:</p>
  <p>&gt; <code>java org.apache.xalan.xslt.Process -in test.xml -xsltc -xt -xo 
myTranslet -xd c:\translets</code></p>
  <p>If you use <code>-XT</code> option, the <code>-XSL</code> option can be 
omitted. You have to specify the translet name 
  using the <code>-XO</code> option because there is no default translet name 
in this situation.</p>
  
  <p><em>Q:</em> I only want to compile the stylesheet. I don't want to do a 
transformation.</p>
  <p><em>A:</em> TrAX has no notion of compiling a stylesheet. However, you can 
achieve the same effect by 
  running a dummy transformation and tell XSLTC to save the translet class. 
Example:</p>
  <p>&gt; <code>java org.apache.xalan.xslt.Process -xsl test.xsl -xo</code></p>
  <p>This command runs a transformation on an empty input and generates the 
translet <code>test.class</code>.</p>
  </s2>
  
  <anchor name="trax"/>
  <s2 title="Using the new options from TrAX">
  
  <p>If you use the TrAX interface for XSLTC, you could not tell it to use 
translets before. It always compiled 
  the xsl on the fly and used the bytecode im memory for transformation.  Now 
you can use some of 
  the new attributes in XSLTC's <code>TransformerFactoryImpl</code> class to 
customize the translet behaviors from TrAX.</p>
  
  <p>Here is the list of attributes in 
<code>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</code> and their 
  corresponding Process command line options:</p>
  
  <table>
    <tr>
      <td><em>Attributes</em></td>
      <td><em>Process command line options</em></td>
      <td><em>Default values</em></td>
    </tr>
    <tr>
      <td>translet-name</td>
      <td>-XO</td>
      <td>GregorSamsa</td>
    </tr>
    <tr>
      <td>destination-directory</td>
      <td>-XD</td>
      <td>null</td>
    </tr>
    <tr>
      <td>package-name</td>
      <td>-XP</td>
      <td>null</td>
    </tr>
    <tr>
      <td>jar-name</td>
      <td>-XJ</td>
      <td>null</td>
    </tr>
    <tr>
      <td>generate-translet</td>
      <td></td>
      <td>false</td>
    </tr>
    <tr>
      <td>auto-translet</td>
      <td>-XT</td>
      <td>false</td>
    </tr>
    <tr>
      <td>enable-inlining</td>
      <td>-XN</td>
      <td>false</td>
    </tr>
    <tr>
      <td>debug</td>
      <td>-XX</td>
      <td>false</td>
    </tr>
  </table>
  
  <p>You can set the attributes using the TrAX interface 
<code>TransformerFactory.setAttribute(String name, Object value)</code>. 
  The four attributes <code>translet-name, destination-directory, package-name 
and jar-name</code> are transient. 
  They only apply to the next <code>newTemplates()</code> or 
<code>newTransformer()</code> call. Their values are reset to 
  the default after the call.</p>
  
  <p>The following example shows you how to do the same thing from TrAX for the 
question 2 in the FAQ.</p>
  
  <source>
  // set the system property javax.xml.transform.TransformerFactory in order to 
use XSLTC
  String key = "javax.xml.transform.TransformerFactory";
  String value = "org.apache.xalan.xsltc.trax.TransformerFactoryImpl";
  Properties props = System.getProperties();
  props.put(key, value);
  System.setProperties(props);
  
  TransformerFactory tfactory = null;
  try {
    tfactory = TransformerFactory.newInstance();
  }
  catch (TransformerFactoryConfigurationError pfe) { pfe.printStackTrace(); }
  
  // set the translet name
  tfactory.setAttribute("translet-name", "myTranslet");
  
  // set the destination directory
  tfactory.setAttribute("destination-directory", "c:\\translets");
  
  // use the translet for transformation if possible
  tfactory.setAttribute("auto-translet", "true");
  
  // You can create a Templates object from an empty Source if the translet is 
specified.
  Templates templates = tfactory.newTemplates(new StreamSource());
  </source>
  </s2>
  </s1>
  
  
  
  1.1                  xml-xalan/java/xdocs/sources/xalan/extensions_xsltc.xml
  
  Index: extensions_xsltc.xml
  ===================================================================
  <?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 [EMAIL PROTECTED]
   *
   * 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="Extensions for XSLTC">
  <ul>
  <li><link anchor="intro">Introduction</link></li>
  <li><link anchor="constraints">Constraints</link></li>
  <li><link anchor="java_ext">Java extension</link></li>
  <li><link anchor="exslt_ext">EXSLT extensions</link></li>
  <li><link anchor="nodeset_ext">nodeset</link></li>
  <li><link anchor="redirect_ext">output/redirect</link></li>
  </ul>
  <anchor name="intro"/>
    <s2 title="Introduction">
    <p>XSLTC supports the use of extension functions implemented in external 
Java classes. It also
    supports the <link anchor="nodeset_ext">nodeset</link>, <link 
anchor="redirect_ext">output/redirect</link> 
    and <link anchor="exslt_ext">EXSLT</link> extension functions. Extension 
support in XSLTC is
    still under development. It is currently not as complete as the extension 
support in the
    interpretive Xalan. There are constraints in some areas.</p>
    </s2>
  
  <anchor name="constraints"/>
    <s2 title="Constraints">
    <p>In addition to the constraints listed below for each particular 
extension, extension support
    in XSLTC also has the following limitations:</p>
    <ol>
    <li><link idref="extensions" anchor="ext-elements">Extension element</link> 
is not supported.
    The extension element mechanism is closely related to the internal 
implementation of the XSLT processor.
    The current extension element mechansim is designed for the interpretive 
Xalan. It does not work with XSLTC.</li>
    <li>The <link idref="extensions" anchor="supported-lang">xalan:component 
and xalan:script</link> extension elements are not supported at the moment. 
This has
    the implication that you cannot use scripting languages (e.g. javascript) 
with XSLTC.</li>
    <li><link idref="extensionslib" anchor="sql">The SQL extension</link> is 
not supported in XSLTC at the moment.</li>
    </ol>
    </s2>
    
  <anchor name="java_ext"/>
    <s2 title="Java extension">
    <p>Java extension is supported in XSLTC. Constructors, static and instance 
methods are all supported.
    You can use any of the <link idref="extensions" 
anchor="ext-func-calls">three namespace formats</link>
     (Java, package and class) in your stylesheet.
    </p>
    <p>The official namespace for the Java extension is 
<code>http://xml.apache.org/xalan/java</code>. The old XSLTC Java namespace
    <code>http://xml.apache.org/xalan/xsltc/java</code> and the old Xalan 
namespace <code>http://xml.apache.org/xslt/java</code>
    are also supported for backward compatibility.</p>
    <p>All usage syntax for Xalan also applies to XSLTC with only one 
exception: XSLTC does not support the notion of default object 
    in <link idref="extensions" anchor="ext-func-calls">class format 
namespace</link>. 
    When using instance methods, you should always specify the class instance 
as the first argument
    to the extension function.</p>
    <p>The following example shows you how to call constructors, static, and 
nonstatic functions,
    using different namespace formats:</p>
  
    <source>&lt;xsl:stylesheet version=&quot;1.0&quot;
      xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
      xmlns:date=&quot;http://xml.apache.org/xalan/java/java.util.Date&quot;
      xmlns:java_lang=&quot;http://xml.apache.org/xalan/java/java.lang&quot;
      exclude-result-prefixes=&quot;date java_lang&quot;&gt;
  
    &lt;!--
    * test: construction of Date object using a parameter calculated
    *       by a static call to the java.lang.Math object. Then call
    *       a non-static method (getTime()) on the newly created Date
    *       object. Demonstrates calling constructors, static functions
    *       (Math.max) and non-static functions (getTime()).
    *
    * Output:
    *   &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
    *     Date of object: Sat Nov 30 17:32:41 EST 2002
    *     Time of object: 1038695561000
    *
    --&gt;
  
    &lt;xsl:template match=&quot;/&quot;&gt;
     &lt;!-- create Date object with calculated parameter --&gt;
     &lt;xsl:variable name=&quot;dateObject&quot;
       select=&quot;date:new(
           java_lang:Math.max(1027695561000,1038695561000)
       )&quot;/&gt;
     Date of object: &lt;xsl:value-of select=&quot;$dateObject&quot;/&gt;
     Time of object: &lt;xsl:value-of 
select=&quot;date:getTime($dateObject)&quot;/&gt;
    &lt;/xsl:template&gt;
  
    &lt;/xsl:stylesheet&gt;
    </source>
    <note>Always use the abbreviated syntax for Java extension, because the 
xalan:component/xalan:script
    constructs are not supported in XSLTC.</note>
    </s2>
    
  <anchor name="exslt_ext"/>
    <s2 title="EXSLT extensions">
    <p>The following EXSLT extension modules are supported in XSLTC:</p>
    <ul>
    <li><jump href="apidocs/org/apache/xalan/lib/ExsltCommon.html">EXSLT common 
functions</jump></li>
    <li><jump href="apidocs/org/apache/xalan/lib/ExsltMath.html">EXSLT math 
functions</jump></li>
    <li><jump href="apidocs/org/apache/xalan/lib/ExsltSets.html">EXSLT set 
functions</jump></li>
    <li><jump href="apidocs/org/apache/xalan/lib/ExsltDatetime.html">EXSLT 
date-and-time functions</jump></li>
    <li><jump href="apidocs/org/apache/xalan/lib/ExsltStrings.html">EXSLT 
string functions</jump></li>
    </ul> 
    <p>The functions in the <jump 
href="apidocs/org/apache/xalan/lib/ExsltDynamic.html">dynamic</jump> module 
    (e.g. evaluate) are not supported because of the XSLTC design limitation.
    Work is currently underway on <jump 
href="http://www.exslt.org/func/elements/function/index.html";>user 
    defined EXSLT functions (with the function and result elements)</jump>.</p>
    <p>The <code>nodeset</code> and <code>objectType</code> extension functions 
in the <jump href="apidocs/org/apache/xalan/lib/ExsltCommon.html">common</jump> 
    module are implemented natively in XSLTC. For all other EXSLT extension 
functions,
    XSLTC uses the same implementation as Xalan. The implementation classes are 
under <code>org.apache.xalan.lib</code>.
    Depending on the packaging, these classes can be in a separate jar file 
(e.g. xalan.jar) from
    the XSLTC classes. In this case you need to add the jar file containing the 
EXSLT classes to your
    classpath in order to use EXSLT extensions in XSLTC.</p>
    </s2>
    
  <anchor name="nodeset_ext"/>
    <s2 title="nodeset">
    <p>XSLTC also supports the nodeset() extension function for transforming an 
RTF (result 
      tree fragment) into a node set.</p>
      <p>The nodeset extension can be used as an XSLTC extension function in 
the namespace
      <code>http://xml.apache.org/xalan/xsltc</code>, a Xalan extension 
function in the namespace
      <code>http://xml.apache.org/xalan</code>, an EXSLT extension function in 
the namespace 
      <code>http://exslt.org/common</code> or as a standard XPATH function. 
When it is used as
      an EXSLT extension function, you need to refer to the nodeset extension 
function as 
      <code>node-set</code>.</p>
      <p>The following exmaple shows you how to use the nodeset extension
      function in different namespaces:</p>
      <source>&lt;xsl:stylesheet 
xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;        
    xmlns:xsltc-extension=&quot;http://xml.apache.org/xalan/xsltc&quot;
    xmlns:xalan=&quot;http://xml.apache.org/xalan&quot;
    xmlns:exslt=&quot;http://exslt.org/common&quot;
    version=&quot;1.0&quot;&gt;
    &lt;xsl:template match=&quot;/&quot;&gt;
      &lt;xsl:variable name=&quot;rtf&quot;&gt;
        &lt;docelem&gt;
          &lt;elem1&gt;elem1&lt;/elem1&gt;
          &lt;elem2&gt;elem2&lt;/elem2&gt;
        &lt;/docelem&gt;
      &lt;/xsl:variable&gt;
      &lt;!-- Use nodeset as an XSLTC extension function --&gt;
      &lt;xsl:value-of 
select=&quot;xsltc-extension:nodeset($rtf)/docelem/elem1&quot;/&gt;
      &lt;!-- Use nodeset as a Xalan extension function --&gt;
      &lt;xsl:value-of select=&quot;xalan:nodeset($rtf)/docelem/elem1&quot;/&gt;
      &lt;!-- Use nodeset as an EXSLT extension function --&gt;
      &lt;xsl:value-of 
select=&quot;exslt:node-set($rtf)/docelem/elem1&quot;/&gt;
      &lt;!-- Use nodeset as standard function --&gt;
      &lt;xsl:value-of select=&quot;nodeset($rtf)/docelem/elem1&quot;/&gt;
    &lt;/xsl:template&gt; 
  &lt;/xsl:stylesheet&gt;
  </source><br/>
  <note>The preferred solution is to use the EXSLT node-set function so that it 
can work
  with multiple XSLT processors.</note>
    </s2>
    
  <anchor name="redirect_ext"/>
    <s2 title="output/redirect">
    <p>XSLTC supports the output extension element for redirecting the output 
to one 
    or more files. The output extension element is also aliased to the write 
extension element 
    in the namespace <code>http://xml.apache.org/xalan/redirect</code>. 
Therefore you can use
    it in the same way as the <link idref="extensionslib" 
anchor="redirect">redirect</link> extension in Xalan.</p>
    <p>You can use the file and append attributes with the output/redirect 
extension. The value of the file
    attribute is an attribute value template. If the value of the append 
attribute is true or yes, the
    output is appended to the file rather than overwriting the file.</p>
    <p>The following example shows you how to use the output/redirect 
extension:</p>
      <source> &lt;xsl:stylesheet 
     xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
     xmlns:xsltc=&quot;http://xml.apache.org/xalan/xsltc&quot;
     xmlns:redirect=&quot;http://xml.apache.org/xalan/redirect&quot;
     xsl:version=&quot;1.0&quot;&gt;
     &lt;xsl:template match=&quot;/&quot;&gt;
       &lt;xsl:text&gt;This goes to standard output&lt;/xsl:text&gt;
       &lt;xsltc:output file=&quot;blob.xml&quot;&gt;
         &lt;xsl:text&gt;This ends up in the file 'blob.xml'&lt;/xsl:text&gt;
       &lt;/xsltc:output&gt;
       &lt;redirect:write file=&quot;blob.xml&quot; append=&quot;true&quot;&gt;
         &lt;xsl:text&gt;This is appended to the file 
'blob.xml'&lt;/xsl:text&gt;
       &lt;/redirect:write&gt;
     &lt;/xsl:template&gt;
  &lt;/xsl:stylesheet&gt;</source>  
    </s2>
  
  </s1>
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to