<?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="Extensions library">
<ul>
<li><link anchor="intro">Introduction</link></li>
<li><link anchor="xalanns">Xalan namespace</link></li>
<li><link anchor="redirect">Redirect</link></li>
<li><link anchor="nodeset">nodeset</link></li>
<li><link anchor="intersection">intersection</link></li>
<li><link anchor="difference">difference</link></li>
<li><link anchor="distinct">distinct</link></li>
<li><link anchor="hassamenodes">hasSameNodes</link></li>
<li><link anchor="sql">SQL library</link></li>
<li><link anchor="pipedocument">PipeDocument</link></li>
<li><link anchor="evaluate">evaluate</link></li>
<li><link anchor="tokenize">tokenize</link></li>
<li><link anchor="groupitem">group and item</link> <ref>(to be done)</ref></li>
<li><link anchor="type">type</link> <ref>(to be done)</ref></li>
<li><link anchor="todate">toDate</link> <ref>(to be done)</ref></li>
<li><link anchor="formatdate">formatDate</link> <ref>(to be done)</ref></li>
<li><link anchor="grep">grep</link> <ref>(to be done)</ref></li>
<li><link anchor="foreachtoken">forEachToken</link> <ref>(to be done)</ref></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">
<p>Extension elements and functions provide a powerful mechanism
for extending and simplifying what you can do with an XLST processor like
Xalan. With input and contributions from the XML open-source developer community, we are working on placing the most useful
extensions in an extensions library distributed with &xslt4j;. If you have ideas and/or contributions you would like to make, please email us at the <human-resource-ref idref="xalandev"/>.</p>
</s2><anchor name="xalanns"/>
<s2 title="Xalan namespace">
<p>Where it makes sense, we are placing the new Xalan extensions in the org.apache.xalan.lib.Extensions class and we have defined a namespace for this class:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>http://xml.apache.org/xalan</code></p>
<p>If you are calling &xslt4j;-supplied extensions, we recommend that you define this namespace in your stylesheet element, and call the extension using the namespace prefix that you have associated with that namespace. That way, if we later reorganize how the &xslt4j;-supplied extensions are stored, you won't have to modify your stylesheet.</p>
<p>For an example that uses this namespace, see <link anchor="ex-nodeset">Example with the nodeset extension function</link>.</p>
</s2><anchor name="redirect"/>
<s2 title= "Redirect">
<p>A standard XSL transformation involves an XSL stylesheet, an XML source tree, and the transformation result tree. The transformation sends the entire result to a single <jump href="apidocs/org/apache/trax/Result.html">org.apache.trax.Result</jump> object.</p> 
<p>The Redirect extension 
(<jump href="apidocs/org/apache/xalan/xslt/extensions/Redirect.html">org.apache.xalan.xslt.extensions.Redirect</jump>) supplies three extension elements that you can use to redirect portions of your transformation output to multiple files: &lt;open&gt;, &lt;write&gt;, and &lt;close&gt;. If you use the &lt;write&gt; element alone, the extension opens a file, writes to it, and closes the file immediately. If you want explicit control over the opening and closing of files, use &lt;write&gt; in conjunction with the &lt;open&gt; and &lt;close&gt; elements.</p>
<p>Each of these elements includes a file attribute and/or a select attribute to designate the output file. The file attribute takes a string, so you can use it to directly specify the output file name. The select attribute takes an XPath expression, so you can use it to dynamically generate the output file name. If you include both attributes, the Redirect extension first evaluates the select attribute, and falls back to the file attribute if the select attribute expression does not return a valid file name.</p>
<anchor name="ex-redirect"/> 
<s3 title="Example with the Redirect extension">
<p>Suppose you are outputting the bulk of your result tree to one file, but you want to output the transformation of all &lt;foo&gt; elements and their children to another file. The following example illustrates the basic structure of the XML source:</p>
<source>&lt;?xml version="1.0"?&gt; 
&lt;doc&gt;
  &lt;foo file="foo.out"&gt;
    Testing Redirect extension:
      &lt;bar&gt;A foo subelement text node&lt;/bar&gt;
  &lt;/foo&gt;
  &lt;main&gt;
    Everything else
  &lt;/main&gt;  
&lt;/doc&gt;</source>
<p>This stylesheet redirects part of the output to a secondary file:</p>
<source>
&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0"
    xmlns:lxslt="http://xml.apache.org/xslt"
    xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
    extension-element-prefixes="redirect"&gt;

  &lt;xsl:template match="/"&gt;
    &lt;standard-out&gt;
      Standard output:
      &lt;xsl:apply-templates/&gt;
    &lt;/standard-out&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="main"&gt;
    &lt;main&gt;
      &lt;xsl:apply-templates/&gt;
    &lt;/main&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="/doc/foo"&gt;
    &lt;redirect:write select="@file"&gt;
      &lt;foo-out&gt;
        &lt;xsl:apply-templates/&gt;
      &lt;/foo-out&gt;
    &lt;/redirect:write&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="bar"&gt;
    &lt;foobar-out&gt;
      &lt;xsl:apply-templates/&gt;
    &lt;/foobar-out&gt;
  &lt;/xsl:template&gt;
  
&lt;/xsl:stylesheet&gt;</source>
<p>The standard output is:</p>
<source>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;standard-out&gt;
  Standard output:
  &lt;main&gt;
    Everything else.
  &lt;/main&gt;
&lt;standard-out&gt;</source>
<p>The output redirected to foo.out is:</p>
<source>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;foo-out&gt;
    Testing Redirect extension:
    &lt;foobar-out&gt;foo subelement text node&lt;/foobar-out&gt;
  &lt;/foo-out&gt;</source>
<p>For more information on using the Redirect extension to send output to multiple files, examine the <link idref="samples" anchor="ext1">SimpleRedirect</link> sample and see the <jump href="apidocs/org/apache/xalan/lib/Redirect.html">Redirect</jump> class Javadoc.</p>  
</s3></s2><anchor name="nodeset"/>
<s2 title= "nodeset">
<p>Implemented in <jump href="apidocs/org/apache/xalan/lib/Extensions.html">org.apache.xalan.lib.Extensions</jump>,<br/>
<code>nodeset (result-tree-fragment)</code>  casts a result tree fragment into a node-set.</p>
<note>When you bind a variable to a template, rather than to the value generated by a select expression, the data type of the variable is result tree fragment. For more information, see <jump href="http://www.w3.org/TR/xslt#section-Result-Tree-Fragments">Result Tree Fragments</jump>.</note>
<anchor name="ex-nodeset"/>
<s3 title="Example with the nodeset extension function">
<p>The following stylesheet uses the nodeset extension function to cast a result tree fragment into a node-set that can then be navigated in standard XPath manner. It uses the http://xml.apache.org/xalan namespace to provide access to the nodeset() method in xml.apache.xalan.lib.Extensions.</p>
<source>&lt;?xml version="1.0"?&gt;
&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                   version="1.0"
                   xmlns:xalan="http://xml.apache.org/xalan"
                   exclude-result-prefixes="xalan"&gt;
&lt;xsl:template match="/"&gt;
  &lt;out&gt;
	  &lt;xsl:variable name="rtf"&gt;
      &lt;docelem&gt;
        &lt;elem1&gt;
          &lt;elem1a&gt;ELEMENT1A&lt;/elem1a&gt;
          &lt;elem1b&gt;,ELEMENT1B&lt;/elem1b&gt;
        &lt;/elem1&gt;
        &lt;elem2&gt;
          &lt;elem2a&gt;ELEMENT2A&lt;/elem2a&gt;
        &lt;/elem2&gt;
      &lt;/docelem&gt;
    &lt;/xsl:variable&gt;     
      &lt;xsl:for-each select="xalan:nodeset($rtf)/docelem//*"&gt;
        &lt;xsl:value-of select="name(.)"/&gt;&lt;xsl:text&gt;,&lt;/xsl:text&gt;
      &lt;/xsl:for-each>
  &lt;/out>
&lt;/xsl:template> 
&lt;/xsl:stylesheet&gt;</source>
<p>The output of running this stylesheet (with any XML input source) is a comma-delimited list of the element names in the node-set<br/>
&nbsp;&nbsp;<code>&lt;out&gt;elem1,elem1a,elem1b,elem2,elem2a&lt;/out&gt;</code></p>
<note>For illustration purposes, the preceding stylesheet pays no attention to the structure and content of the XML input document. Instead, it processes the template (in the stylesheet) bound to the variable named rtf.</note>

</s3>
</s2><anchor name="intersection"/>
<s2 title="intersection">
<p>Implemented in <jump href="apidocs/org/apache/xalan/lib/Extensions.html">org.apache.xalan.lib.Extensions</jump>,<br/>
<code>intersection (node-set1, node-set2)</code>  function returns a node-set with all nodes that are in ns1 and in ns2 .</p>
</s2><anchor name="difference"/>
<s2 title= "difference">
<p>Implemented in <jump href="apidocs/org/apache/xalan/lib/Extensions.html">org.apache.xalan.lib.Extensions</jump>,<br/>
<code>difference(node-set1, node-set2)</code> returns a node-set with the nodes in node-set1 and not in node-set2.</p>
</s2><anchor name="distinct"/>
<s2 title= "distinct">
 <p>Implemented in <jump href="apidocs/org/apache/xalan/lib/Extensions.html">org.apache.xalan.lib.Extensions</jump>,<br/>
 distinct (node-set) returns a node-set containing nodes with distinct string values. If more than one node in the node-set 
 contains the same text node value, distinct only returns the first of these nodes that it finds.</p>
</s2><anchor name="hassamenodes"/>
<s2 title= "hasSameNodes">
<p>Implemented in <jump href="apidocs/org/apache/xalan/lib/Extensions.html">org.apache.xalan.lib.Extensions</jump>,<br/>
<code>hasSameNodes(node-set1, node-set2)</code> returns true if both node-set1 and node-set2 contain exactly the same set of nodes.</p>
</s2><anchor name="sql"/>
<s2 title= "SQL library">
<note>For UML Diagrams of the SQL Library, see <jump href="http://xml.apache.org/xalan-j/Xalan-SQL-Extension/DiagramIndex.html">SQL Library UML Diagrams</jump>.</note>
<ul>
<li><link anchor="sqlconn">Setting up a connection</link></li>
<li><link anchor="sqlparam">Parameterized queries</link></li>
<li><link anchor="ex-sql">SQL library example</link></li>
<li><link idref="samples" anchor="sql">SQL library sample applications</link></li>
</ul>
<p><em>**Experimental**</em> Provides extension functions for connecting to a JDBC data source, executing a query,
and optionally working incrementally through a "streamable" result set. <ref>Due to a bug, caching, not streaming, is currently 
the default mode of operation.</ref> </p>
<note>Many features of the SQL library, including support for connection pools, parameterized queries, caching,  
and added support for extracting connection information and query parameters from XML source documents exist
thanks to John Gentilin (johnglinux@eyecatching.com), who has also added a number of SQL library samples.</note>
<p><em>The SQL extension use in streaming mode of a single row-set node to incrementally return a query result set is experimental. If you use streaming mode, you can only access row elements one at a time moving forward through the result set. The use of XPath expressions in your stylesheet, for example, that attempt to return nodes from the result set in any other manner may produce unpredictable results.</em></p>
<p><jump href="apidocs/org/apache/xalan/lib/sql/XConnection.html">org.apache.xalan.lib.sql.XConnection</jump> provides a number 
of extension functions that you can use in your stylesheet.</p>
    <ol>
      <li>new() -- Use one of the XConnection constructors to connect to a data source, and return an XConnection
       object. You can use one of the constructors creates a connection pool from which stylesheets can obtain connections 
       to a datasource. To support connction pools, SQL library includes a ConnectionPool interface and a implementation:
       DefaultConnectionPool. You can also provide your own ConnectionPool implementation.<br/><br/></li>
      <li>query() -- Use the XConnection object query() method to return a "streamable" result set in the form of a row-set
       node. Work your way through the row-set one row at a time. The same row element is used over and over again, so you can
       begin "transforming" the row-set before the entire result set has been returned.<br/><br/></li>
       <li>pquery(), addParameter(), addParameterFromElement(), clearParameters() -- Use the XConnection pquery() method in 
       conjunction with these other methods to set up and execute parameterized queries.<br/><br/></li>
       <li>Use disableCacheNodes() to use streaming node, and enableCacheNodes() to cache the query result set. <br/><br/></li>
      <li>close() -- Use the XConnection object close() method to terminate the connection.</li>      
    </ol>
    <p>The query() and pquery() extension functions return a Document node that contains (as needed) an array of column-header elements, 
    a single row element that is used repeatedly, and an array of col elements. Each column-header element (one per column in
    the row-set) contains an attribute (ColumnAttribute) for each of the column descriptors in the ResultSetMetaData object. 
    Each col element contains a text node with a textual representation of the value for that column in the current row.</p>
    <anchor name="sqlconn"/>
    <s3 title="Setting up a connection">
    <p>You can place connection information (JDBC driver, datasource URL, and usually user ID and password) in stylesheets or
     in XML source documents.</p> 
     <p>The following stylesheet fragment uses stylesheet parameters to designate a JDBC driver and datasource. The default
     parameter values can be overridden with runtime parameter values.</p>
     <source>&lt;xsl:param name="driver" select="'org.enhydra.instantdb.jdbc.idbDriver'"/&gt;
&lt;xsl:param name="datasource" select="'jdbc:idb:../../instantdb/sample.prp'"/&gt;
&lt;xsl:param name="query" select="'SELECT * FROM import1'"/&gt;</source>
      <p>You can also obtain connection information from the XML source document that you use for the transformationl. Suppose 
      you have the following DBINFO nodeset in an XML document:</p>
      <source>&lt;DBINFO&gt;
  &lt;dbdriver&gt;org.enhydra.instantdb.jdbc.idbDriver&lt;/dbdriver&gt;
  &lt;dburl&gt;jdbc:idb:../../instantdb/sample.prp&lt;/dburl&gt;
  &lt;user&gt;jbloe&lt;/user&gt;
  &lt;password&gt;geron07moe&lt;/password&gt;
&lt;/DBINFO&gt;</source>
       <p>In the stylesheet, you can extract this information as follows:</p>
       <source>&lt;xsl:stylesheet version 1.0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:sql="org.apache.xalan.lib.sql.XConnection"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extension-element-prefixes="sql"&gt;
&nbsp;&nbsp;&lt;xsl:param name="cinfo" select="//DBINFO"/&gt;
&nbsp;&nbsp;&lt;xsl:variable name="db" select="sql:new($cinfo)"/&gt;
....</source> 
      <p>For an example of both approaches, see <link idref="samples" anchor="basic-conn">Basic Connection</link> samples.</p>
      <p>You can also create a named connection pool that is maintained external to &xslt4j;.</p>
      <source>import org.apache.xalan.lib.sql.DefaultConnectionPool;
import org.apache.xalan.lib.sql.XConnectionPoolManager;
...
DefaultConnectionPool cp = new DefaultConnectionPool();
cp.setDriver("org.enhydra.instantdb.jdbc.idbDriver");
cp.setURL("jdbc:idb:../../instantdb/sample.prp");
cp.setUser("jbloe");
cp.setPassword("geron07moe");
// Start with 10 connections.
cp.setMinConnections(10);
cp.enablePool();
// Register the connection pool so stylesheets can use it.
XConnectionPoolManager pm = new XConnectionPoolManager();
pm.registerPool("extpool", cp);</source>
      <p>A stylesheet can use this connection pool as follows:</p>
      <source>&lt;xsl:stylesheet version 1.0
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:sql="org.apache.xalan.lib.sql.XConnection"
     extension-element-prefixes="sql"&gt;
...
  &lt;xsl:variable name="db" select="sql:new($driver, 'extpool')"/&gt;</source>
      <p>For an example, see the <link idref="samples" anchor="ext-conn">ExternalConnection</link> sample.</p>
    </s3><anchor name="sqlparam"/>
    <s3 title="Parameterized queries">
      <p>To define a parameterized query, use a SQL query string with a question mark (?) for each parameter. You can provide 
      the parameter values at runtime with stylesheet parameters or with nodes in the XML source document. For each parameter, 
      you should also designate the SQL data type.</p>
      <p>XConnection provides a number of addParameter() methods and an addParameterFromElement() method that you can use 
      as extension functions to pull in the parameter values (in the order the parameters appear in the query). To
      execute the query and return the result set, call the pquery() method as an extension function. There are two variations 
      of the pquery() method. The one you should ordinarily use includes as arguments the SQL query string and a string list 
      (delimited by the space, tab, or line feeds) of parameter types. For example:</p>
      <source>&lt;xsl:variable name="resultset" 
        select=sql:pquery($XConnectionObj, 
                          'select * from X where Y = ? and Z = ?',
                          'int string')"/&gt;</source>
      <p>For a complete example, see the <link idref="samples" anchor="pquery">Parameterized query</link> sample.</p>
  </s3><anchor name="ex-sql"/> 
    <s3 title="Example with SQL library">
    <p>This example displays the result set from a table in a sample InstantDB database. It is also
    available as a sample application; see <link idref="samples" anchor="ext6">6-sqllib-instantdb</link>.</p>
<source>&lt;?xml version="1.0"?&gt;
&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0"
                xmlns:sql="org.apache.xalan.lib.sql.XConnection"
                extension-element-prefixes="sql"&gt;
  &lt;xsl:output method="html" indent="yes"/&gt;
  &lt;xsl:param name="query" select="'SELECT * FROM import1'"/&gt;
 
  &lt;xsl:template match="/"&gt;
    &lt;!-- 1. Make the connection --&gt;
    &lt;xsl:variable name="products"
                  select="sql:new('org.enhydra.instantdb.jdbc.idbDriver',
                                'jdbc:idb:.\instantdb\sample.prp')"/&gt;
    &lt;HTML&gt;
      &lt;HEAD&gt;
      &lt;/HEAD&gt;
      &lt;BODY&gt;
        &lt;TABLE border="1"&gt;
        &lt;!--2. Execute the query --&gt;
        &lt;xsl:variable name="table" select='sql:query($products, $query)'/&gt;
          &lt;TR&gt;
          &lt;!-- Get column-label attribute from each column-header--&gt;
          &lt;xsl:for-each select="$table/row-set/column-header"&gt;
            &lt;TH&gt;&lt;xsl:value-of select="@column-label"/&gt;&lt;/TH&gt;
          &lt;/xsl:for-each&gt;
          &lt;/TR&gt;
          &lt;xsl:apply-templates select="$table/row-set/row"/&gt;
          &lt;xsl:text&gt;&amp;#10;&lt;/xsl:text&gt;
        &lt;/TABLE&gt;
      &lt;/BODY&gt;
    &lt;/HTML&gt; 
    &lt;!-- 3. Close the connection --&gt;
    &lt;xsl:value-of select="sql:close($products)"/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match="row"&gt;
        &lt;TR&gt;
          &lt;xsl:apply-templates select="col"/&gt;
        &lt;/TR&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match="col"&gt;
    &lt;TD&gt;
      &lt;!-- Here is the column data -->
      &lt;xsl:value-of select="text()"/>
    &lt;/TD>
  &lt;/xsl:template>

&lt;/xsl:stylesheet&gt;
</source>
</s3>
  
  </s2><anchor name="pipedocument"/>
  <s2 title="pipeDocument">
  <p>Implemented in <jump href="apidocs/org/apache/xalan/lib/PipeDocument.html">org.apache.xalan.lib.PipeDocument</jump>,<br/>
  the pipeDocument extension element pipes an XML document through a series of one or more transformations. The output of
  each transformation is piped to the next transformation. The final transofrmation creates a target file.</p>
  
  <p>Suppose, for example,you have a stylesheet that is processing a "book" document with elements designating the 
  documents to be transformed. This primary stylesheet generates a table of contents for the book. For each source 
  document it uses a pipeDocument extension element to pipe the document through a series of one or more transformations.</p>
  <s3 title="Sample: generating a table of contents and an HTML &quot;book&quot;">
    <p>An XML "book" document contains a number of doc elements like the following:<br/>
    <code>&lt;doc source="sources/intro.xml" id="intro" label="Introduction"&gt;</code></p>
    <p>The source attribute identifies the document to be transformed, the id is the output file name, 
    and the primary stylesheet places the label in the table-of-contents link.</p>
    <p>The stylesheet declares the pipeDocument namespace, designates the namespace prefix as an extension element prefix,
    and contains a parameter designating where the output files are to be placed:</p>
  <source>&lt;xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:pipe="xalan://PipeDocument"
   extension-element-prefixes="pipe"&gt;
   
&lt;xsl:param  name="destdir" value="html/output"&gt;
...</source>
<p>This stylesheet contains a template where each doc element is processed. For each doc element, the stylesheet adds an 
entry to the table-of-contents document. The extension element pipes the specified document through a series of two 
transformations, with an stylesheet input parameter for the first transformation. The pipeDocument target attribute 
designates the output from the second transformation.</p>

<source>&lt;xsl:template match="doc"&gt;
  &lt;p&gt;
    &lt;a href={$destdir}&gt;&lt;xsl:value-of select="@label"/&gt;&lt;a&gt;
  &lt;/p&gt;

  &lt;pipe:pipeDocument   source="{@source}" target="{$destdir/@id}"&gt;
    &lt;stylesheet href="ss1.xsl"&gt;
      &lt;param name="doc-id" value="@id"/&gt;
    &lt;/stylesheet&gt;
    &lt;stylesheet href="ss2.xsl"/&gt;   
  &lt;/pipe:pipeDocument&gt;
  
&lt;/xsl:template&gt;</source>
 
   <p>Notes:</p>
   <ul>
   <li>The base URI for the source attribute is the XML "book" document.</li>
   <li>The target attribute is taken as is (the base is the current user directory from which this transformation is being run).</li>
   <li>The stylsheet containg the extension element is the base URI for the stylesheet hrefs.</li>
   </ul>
</s3>
<s3 title="Variation: using pipeDocument in an empty stylesheet">
<p>Suppose you want to pipe a document through a series of transformations. You can use the pipeDocument extension element
to perform this operation by placing the extension element in an otherwise empty stylesheet.</p>
<p>The following stylesheet is used to merge the Xalan documents into a book (the first transformation), and transform the book
into a tree of formatting objects, which can then be used to generate a PDF file. This transformation is invoked as follows:</p>
<p><code>java org.apache.xalan.xslt.Process -in printbook.xml</code><br/>
<code> -param source printbook.xml</code><br/>
<code> -param target xalanbook.fo</code></p>
<p>There is no XML input document or output document for the primary transformation, which does no more than invoke
the extension element.</p>
<source>&lt;?xml version='1.0'?&gt;

&lt;xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:pipe="xalan://org.apache.xalan.lib.PipeDocument"
                extension-element-prefixes="pipe"&gt;

&lt;xsl:param name="source"/&gt;
&lt;xsl:param name="target"/&gt;

&lt;xsl:template match="/"&gt;

  &lt;pipe:pipeDocument 
        source="{$source}"
        target="{$target}"&gt;
    &lt;stylesheet href="printbook_assemble.xsl"/&gt;
    &lt;stylesheet href="bkbook8x11_xalan.xsl"/&gt;
  &lt;/pipe:pipeDocument&gt;
  
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;</source>

</s3>  
  </s2><anchor name="evaluate"/>
  <s2 title= "evaluate">
  <p>Implemented in <jump href="apidocs/org/apache/xalan/lib/Extensions.html">org.apache.xalan.lib.Extensions</jump>,<br/>
<code>evaluate (xpath-expression)</code> function returns the result of evaluating the xpath-expression in the current 
XPath expression context (automatically passed in by the extension mechanism).</p>
<p>Use the evaluation extension function when the value of the expression is not known until run time.</p>
</s2><anchor name="tokenize"/>
<s2 title="tokenize">
<p>Implemented in <jump href="apidocs/org/apache/xalan/lib/Extensions.html">org.apache.xalan.lib.Extensions</jump>,<br/>
<code>tokenize (tokenize-string, delimiters)</code><br/>
or<br/>
<code>tokenize (tokenize-string)</code> function returns a node-set containing one text node for each token in the tokenize-string.</p>
<p>The delimiters determine which characters are used to divide the tokenize-string into individual tokens. If you do not include
the delimiters argument, the function uses tab (&amp;#x09), linefeed (&amp;#x0A), return (&amp;#x0D), and space (&amp;#x20) as delimiters.
If tokenize-string is an empty string or contains only delimiters, the result is an empty node-set.</p>
</s2><anchor name="groupitem"/>
<s2 title= "group and item">
<p><em>To be done.</em> Provides efficient grouping of items with a common value.</p>
</s2><anchor name="type"/>
<s2 title= "type">
<p><em>To be done.</em> Returns a string that represents the Schema or DTD type.</p>
</s2><anchor name="todate"/>
<s2 title="to-date">
<p><em>To be done.</em> Takes a string as input, and returns a long value representing the date.</p>
</s2><anchor name="formatdate"/>
<s2 title="format-date">
<p><em>To be done.</em> Takes a date string, and formats it according to a specification.</p>
</s2><anchor name="grep"/>
<s2 title="grep">
<p><em>To be done.</em> Performs a grep function and returns the substring.</p>
</s2><anchor name="foreachtoken"/>
<s2 title="for-each-token">
<p><em>To be done.</em> Tokenizes a string, treats each token as a DOM Text node, and executes the
sub-template.</p>
</s2>
</s1>
