| <?xml version="1.0" standalone="no"?> |
| <!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd"> |
| <!-- |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| --> |
| <s1 title="Extensions library"> |
| <ul> |
| <li><link anchor="intro">Introduction</link></li> |
| <li><link anchor="exslt">Beta support for EXSLT extensions</link></li> |
| <li><link anchor="xalanns">Xalan namespace</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="evaluate">evaluate</link></li> |
| <li><link anchor="hassamenodes">hasSameNodes</link></li> |
| </ul> |
| |
| <anchor name="intro"/> |
| <s2 title= "Introduction"> |
| <p>Extension 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 &xslt4c;. 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>&xslt4c; supports the <jump href="http://exslt.org/">EXSLT</jump> initiative to provide a set of |
| standard extension functions to XSLT users. &xslt4c; includes beta implementations for |
| functions in four of the EXSLT namespaces (some are calls to extension already in the Xalan namespace).</p> |
| <p>The source files for the implementations are in the XalanEXSLT subdirectory of the source tree. See</p> |
| <ul> |
| <li><jump href="apiDocs/XalanEXSLTCommonImpl_8hpp.html">XalanEXSLTCommonImpl</jump></li> |
| <li><jump href="apiDocs/XalanEXSLTMathImpl_8hpp.html">XalanEXSLTMathImpl</jump></li> |
| <li><jump href="apiDocs/XalanEXSLTSetImpl_8hpp.html">XalanEXSLTSetImpl</jump></li> |
| <li><jump href="apiDocs/XalanEXSLTStringImpl_8hpp.html">XalanEXSLTStringImpl</jump></li> |
| <li><jump href="apiDocs/XalanEXSLTDynamicImpl_8hpp.html">XalanEXSLTDynamicImpl</jump></li> |
| <li><jump href="apiDocs/XalanEXSLTDateTimeImpl_8hpp.html">XalanEXSLTDateTimeImpl</jump></li> |
| </ul> |
| <p>For the function specifications, see:</p> |
| <ul> |
| <li><jump href="http://www.exslt.org/exsl/exsl.html">EXSLT common functions</jump></li> |
| <li><jump href="http://www.exslt.org/math/math.html">EXSLT math functions</jump></li> |
| <li><jump href="http://www.exslt.org/set/set.html">EXSLT set functions</jump></li> |
| <li><jump href="http://www.exslt.org/str/str.html">EXSLT string functions</jump></li> |
| <li><jump href="http://www.exslt.org/dyn/dyn.html">EXSLT dynamic functions</jump></li> |
| <li><jump href="http://www.exslt.org/date/date.html">EXSLT date-time functions</jump></li> |
| </ul> |
| <p>Anyone who would like to participate in the &xslt4c; initiative to support EXSLT by testing these implementations or implementing |
| other EXSLT functions is more than welcome. Please email us at the <human-resource-ref idref="xalandev"/>.</p> |
| </s2> |
| |
| <anchor name="xalanns"/> |
| <s2 title="Xalan namespace"> |
| <p>We are placing the Xalan extension functions in the XalanExtensions module and we have defined a namespace for this module:</p> |
| <p> <code>http://xml.apache.org/xalan</code></p> |
| <p>If you are calling &xslt4c;-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 &xslt4c;-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="nodeset"/> |
| <s2 title= "nodeset"> |
| <p>Implemented in <jump href="apiDocs/classFunctionNodeSet.html">FunctionNodeSet</jump>, <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> |
| <?xml version="1.0"?> |
| <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"> |
| <xsl:template match="/"> |
| <out> |
| <xsl:variable name="rtf"> |
| <docelem> |
| <elem1> |
| <elem1a>ELEMENT1A</elem1a> |
| <elem1b>,ELEMENT1B</elem1b> |
| </elem1> |
| <elem2> |
| <elem2a>ELEMENT2A</elem2a> |
| </elem2> |
| </docelem> |
| </xsl:variable> |
| <xsl:for-each select="xalan:nodeset($rtf)/docelem//*"> |
| <xsl:value-of select="name(.)"/><xsl:text>,</xsl:text> |
| </xsl:for-each> |
| </out> |
| </xsl:template> |
| </xsl:stylesheet> |
| </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/> |
| <code><out>elem1,elem1a,elem1b,elem2,elem2a</out></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/classFunctionIntersection.html">FunctionIntersection</jump>, <code>intersection (node-set1, |
| node-set2)</code> 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/classFunctionDifference.html">FunctionDifference</jump>, <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/classFunctionDistinct.html">FunctionDistinct</jump>, 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="evaluate"/> |
| <s2 title= "evaluate"> |
| <p>Implemented in <jump href="apiDocs/classFunctionEvaluate.html">FunctionEvaluate</jump>, <code>evaluate (xpath-expression)</code> |
| 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="hassamenodes"/> |
| <s2 title= "hasSameNodes"> |
| <p>Implemented in <jump href="apiDocs/classFunctionHasSameNodes.html">FunctionHasSameNodes</jump>, <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> |
| </s1> |