<?xml version="1.0" standalone="no"?> 
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * Copyright 1999-2004 The Apache Software Foundation.
 *
 * Licensed 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="Extensions library">
<ul>
<li><link anchor="intro">Introduction</link></li>
<li><link anchor="exslt">EXSLT extensions</link></li>
<li><link anchor="xalanns">&xslt; namespace</link></li>
<li><link anchor="redirect">Redirect</link></li>
<li><link anchor="nodeset">nodeset</link></li>
<li><link anchor="nodeinfo">NodeInfo extension functions</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 idref="extensions_xsltc">Extensions for &xslt4jc-short;</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>

<note>Unless otherwise specified, the &xslt4j; extensions library discussed in this section refers to 
the &xslt4j; Interpretive processor. See <link idref="extensions_xsltc">Extensions for XSLTC</link> for 
more information.</note><br></br>

<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
&xslt;. 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="exslt"/>
<s2 title="EXSLT extensions">
 <p>&xslt4j; supports the <jump href="http://exslt.org/">EXSLT</jump> initiative to provide a set of
standard extension functions and elements to XSLT users. &xslt4j; includes implementations for the 
following EXSLT extension modules:</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/ExsltDynamic.html">EXSLT dynamic functions</jump></li>
<li><jump href="apidocs/org/apache/xalan/lib/ExsltStrings.html">EXSLT string functions</jump></li>
<li>The EXSLT func:function and func:result elements (see 
<jump href="http://www.exslt.org/func/elements/function/index.html">EXSLT - func:function)</jump></li>
</ul>
<p>All EXSLT extensions use namespaces specified in the EXSLT specification. For example, to use the 
EXSLT math functions, specify a namespace URI as follows:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>xmlns:math="http://exslt.org/math"</code></p>
<p>Anyone who would like to help by implementating other EXSLT extensions is more than welcome. Please 
email us at the <human-resource-ref idref="xalandev"/>.</p>
</s2>
<anchor name="xalanns"/>
<s2 title="&xslt; namespace">
<p>The &xslt; extensions are implemented in one of the classes under org.apache.xalan.lib. The main 
extension class is <jump href="apidocs/org/apache/xalan/lib/Extensions.html">
org.apache.xalan.lib.Extensions</jump>. Some extension
functions (e.g. intersection, difference, etc.) used to be in this class are now moved to the 
corresponding <link anchor="exslt">EXSLT</link> modules. All &xslt; extensions use namespace URIs 
starting with:</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 the corresponding 
namespace in your stylesheet, 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/javax/xml/transform/Result.html">javax.xml.transform.Result</jump> object.</p> 
<p>The namespace for the <jump href="apidocs/org/apache/xalan/lib/Redirect.html">Redirect</jump> 
extension is:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>http://xml.apache.org/xalan/redirect</code></p>
<p>It 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>The &lt;open&gt; and &lt;write&gt; elements include 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>
<p>The &lt;open&gt; and &lt;write&gt; elements also support an append attribute. If the append attribute 
is set to true or yes, then the result is appended to the output file.</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:redirect="http://xml.apache.org/xalan/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>
<p>To use the nodeset extension, you can either use the <code>nodeset</code> function in the 
namespace <code>xmlns:xalan="http://xml.apache.org"</code> or the <link anchor="exslt">EXSLT</link> 
extension function <code>node-set</code> in the namespace 
<code>xmlns:common="http://exslt.org/common"</code>.</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="nodeinfo"/>
<s2 title="NodeInfo">
<p><jump href="apidocs/org/apache/xalan/lib/NodeInfo.html">org.apache.xalan.lib.NodeInfo</jump> provides 
extension elements that you can use to get information about the location of nodes in the source 
document:</p>
<ul>
<li><link anchor="systemid">systemId</link></li>
<li><link anchor="publicid">publicId</link> (to be done)</li>
<li><link anchor="linenumber">lineNumber</link></li>
<li><link anchor="columnnumber">columnNumber</link></li>
</ul>
<note>If you want to use the NodeInfo extension elements, you MUST set the TransformerFactory 
<link idref="features" anchor="source_location">source_location</link> attribute to true. 
You can use the <link idref="commandline">command-line utility</link> -L flag or the 
<jump href="apidocs/javax/xml/transform/TransformerFactory.html#setAttribute(java.lang.String, java.lang.Object)">TransformerFactory.setAttribute()</jump> method to set this attribute.</note>

<anchor name="systemid"/>
<s3 title="systemId">
<p>Implemented in <jump href="apidocs/org/apache/xalan/lib/NodeInfo.html">
org.apache.xalan.lib.NodeInfo</jump>,
<code>systemId()</code> returns the system ID for the current node, and
<code>systemId(node-set)</code> returns the system ID of the first node in the node-set.</p>
</s3>

<anchor name="publicid"/>
<s3 title="publicId">
<p><em>To be done.</em> Implemented in <jump href="apidocs/org/apache/xalan/lib/NodeInfo.html">
org.apache.xalan.lib.NodeInfo</jump>,
<code>publicId()</code> will return the public ID for the current node, and
<code>publicId(node-set)</code> will return the public ID of the first node in the node-set.</p>
</s3>

<anchor name="linenumber"/>
<s3 title="lineNumber">
<p>Implemented in <jump href="apidocs/org/apache/xalan/lib/NodeInfo.html">
org.apache.xalan.lib.NodeInfo</jump>,
<code>lineNumber()</code> returns the line number in the source document for the current node, and
<code>lineNumber(node-set)</code> returns the line number in the source document for the first node 
in the node-set.</p>
<note>This function returns -1 if the line number is not known (for example, the source is a 
DOM Document).</note>
</s3>

<anchor name="columnnumber"/>
<s3 title="columnNumber">
<p>Implemented in <jump href="apidocs/org/apache/xalan/lib/NodeInfo.html">
org.apache.xalan.lib.NodeInfo</jump>, <code>columnNumber()</code> returns the column number in the 
source document for the current node, and <code>columnNumber(node-set)</code> returns the column 
number in the source document for the first node in the node-set.</p>
<note>This function returns -1 if the column number is not known (for example, the source is a DOM 
Document).</note>
</s3>
</s2>

<anchor name="sql"/>
<s2 title= "SQL library">
<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>The namespace for the SQL extension is:</p>
  <code>http://xml.apache.org/xalan/sql</code>
<p>
 The SQL extension provides extension functions for connecting to a JDBC data source, 
 executing a query, and working incrementally through a "streamable" result set. Streaming 
 (reuse of a single row node to traverse the result set) is the default mode of operation. 
 if you want unlimited access to the entire result set, you can cache the query result set 
 (1 row node for each row in the result set).</p>
<p><em>If you use streaming mode (the default), 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>
 <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 <link idref="samples" anchor="sql">SQL library samples</link>.
</note>
<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 connection 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 enableStreamingMode() to use a single row node to "stream" through the result set, and 
disableStreamingMode() to cache the query result set. <br/><br/>
<note>
enableStreamingMode and disableStreamingMode() are depricated
See <link idref="extensionslib" anchor="sql-ext-features">SQL Extension Features</link>.
</note><br/></li>
<li>close() -- Use the XConnection object close() method to terminate the connection.</li>      
</ol>

<anchor name="sql-ext-features"/>
<s3 title="SQL Extension Feature Settings">
<p>The SQL Extension allows features of the extension to be set through the setFeature / getFeature interface.</p>
<p>To set a feature, use: <br/>
    <code>
      <![CDATA[<xsl:value-of select="]]><br/>
      <![CDATA[sql:setFeature($db, 'feature-name', 'feature-value')"/>]]>
    </code><br/><br/>
    To retrive the current value of the feature, use: <br/>
     <code>
      <![CDATA[<xsl:value-of select="]]><br/>
      <![CDATA[sql:getFeature($db, 'feature-name')"/>]]>
      </code><br/> 
    </p>
    <table>
     <tr>
      <th>Feature</th>
      <th>Valid Values</th>
      </tr>
      <tr>
       <td>streaming</td>
       <td>true or false</td>
      </tr>
    </table>
</s3>
   
<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>
      <p>&lt;xsl:param name=&quot;driver&quot; select=&quot;'org.apache.derby.jdbc.EmbeddedDriver'&quot;/&gt;</p>
      <p>&lt;xsl:param name=&quot;datasource&quot; select=&quot;'jdbc:derby:sampleDB'&quot;/&gt;</p>
      <p>&lt;xsl:param name=&quot;query&quot; select=&quot;'SELECT * FROM import1'&quot;/&gt;<br /></p>
</source>
<p>You can also obtain connection information from the XML source document that you use for the 
transformation. Suppose you have the following DBINFO nodeset in an XML document:</p>
<source>
      <p>&lt;DBINFO&gt;</p>
      <p>&lt;dbdriver&gt;org.apache.derby.jdbc.EmbeddedDriver&lt;/dbdriver&gt; </p>
      <p>&lt;dburl&gt;jdbc:derby:sampleDB&lt;/dburl&gt; </p>
      <p>&lt;user&gt;jbloe&lt;/user&gt; </p>
      <p>&lt;password&gt;geron07moe&lt;/password&gt; </p>
      <p>&lt;/DBINFO&gt;</p>
</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="http://xml.apache.org/xalan/sql"
      &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.apache.derby.jdbc.EmbeddedDriver");
        cp.setURL("jdbc:derby:sampleDB");
        cp.setUser("");
        cp.setPassword("");
        // 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="http://xml.apache.org/xalan/sql"
       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 Derby database. It is also
available as a sample application; see <link idref="samples" anchor="sql">SQl Extension Samples</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="http://xml.apache.org/xalan/sql"
          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.apache.derby.jdbc.EmbeddedDriver',
             'jdbc:derby:sampleDB')"/&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/sql/metadata/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/sql/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 transformation creates a target file.</p>
<p>The namespace for the pipeDocument extension is:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>http://xml.apache.org/xalan/PipeDocument</code></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="http://xml.apache.org/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 &xslt; 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="http://xml.apache.org/xalan/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>
<note>Although you can still use the evaluate extension function in the main Extensions class, the 
preferred solution is to use the same function in the EXSLT dynamic package. This will make your 
stylesheet more portable across XSLT processors that support EXSLT extensions.</note>
</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>
<note>Although you can still use the tokenize extension function in the main Extensions class, the 
preferred solution is to use the same function in the EXSLT strings package. This will make your 
stylesheet more portable across XSLT processors that support EXSLT extensions.</note>
</s2>
</s1>
