Difference between revisions of "XSLT Module"
Line 1: | Line 1: | ||
− | This module contains [[Querying#Functions|XQuery functions]] and variables to perform XSLT transformations. All functions are preceded by the <code>xslt:</code> prefix, which is linked to the <code><nowiki>http://www.basex.org/xslt</nowiki></code> namespace. By default, this module | + | This module contains [[Querying#Functions|XQuery functions]] and variables to perform XSLT transformations. All functions are preceded by the <code>xslt:</code> prefix, which is linked to the <code><nowiki>http://www.basex.org/xslt</nowiki></code> namespace. |
+ | |||
+ | By default, this module uses the internal XSLT 1.0 implementation of Java to transform documents. XSLT 2.0 is used instead if the [http://www.saxonica.com/ Saxon] XSLT processor (<code>saxon9he.jar<code>, <code>saxon9pe.jar<code>, <code>saxon9ee.jar<code>) is found in the classpath of BaseX. | ||
Note that this module has been introduced with <font color='red'>Version 6.7.1</font> of BaseX. | Note that this module has been introduced with <font color='red'>Version 6.7.1</font> of BaseX. |
Revision as of 14:58, 10 July 2011
This module contains XQuery functions and variables to perform XSLT transformations. All functions are preceded by the xslt:
prefix, which is linked to the http://www.basex.org/xslt
namespace.
By default, this module uses the internal XSLT 1.0 implementation of Java to transform documents. XSLT 2.0 is used instead if the Saxon XSLT processor (saxon9he.jar
,
saxon9pe.jar
,
saxon9ee.jar
) is found in the classpath of BaseX.
Note that this module has been introduced with Version 6.7.1 of BaseX.
$xslt:processor
Signatures
$xslt:processor as xs:string
Summary
This variable returns the name of the applied XSLT processor (currently: Java
or Saxon
).
$xslt:version
Signatures
$xslt:version as xs:string
Summary
This variable returns the supported XSLT version (currently: 1.0
or 2.0
).
xslt:transform
Signatures
xslt:transform($input as item(), $stylesheet as item()) as node()
xslt:transform($input as item(), $stylesheet as item(), $params as item()) as node()
Summary
Transforms the document specified by $input
, using the XSLT template specified by $stylesheet
, and returns the result as node()
instance. $input
and $stylesheet
can be specified as
- an
xs:string
, containing the path to the document,
- an
xs:string
, containing the document itself, or
- a
node()
containing the actual document.
The $params
argument can be used to bind variables to a stylesheet. It can be specified as
element(xslt:parameters)
: <xslt:parameters/>
must be used as root element, and the parameters are specified as child nodes, with the element name representing the key and the text node representing the value:
<xslt:parameters>
<xslt:key1>value1</xslt:key1>
...
</xslt:parameters>
- map structure: all parameters can be directly represented as key/value pairs:
map { "key1" := "value1", ...
}. This variant is more compact, and it facilitates the binding of arbitrary data types. Note, however, that only strings are currently supported when working with Saxon. Next, the map structures are not part of the XQuery language yet, as the standardization is still in progress.
If Saxon is found in the Java classpath, XSLT 2.0
is used. Otherwise, Java’s internal XSLT 1.0
implementation is used to do the transformation.
Examples
Example 1: Basic XSL transformation with dummy document and without parameters
Query:
xslt:transform(<dummy/>, 'basic.xslt')
basic.xslt
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="/">
<result/>
</xsl:template>
</xsl:stylesheet>
Result:
<result/>
Example 2: XSLT transformation of an input document
Query:
let $in :=
<books>
<book>
<title>XSLT Programmer´s Reference</title>
<author>Michael H. Kay</author>
</book>
<book>
<title>XSLT</title>
<author>Doug Tidwell</author>
<author>Simon St. Laurent</author>
<author>Robert Romano</author>
</book>
</books>
let $style :=
<html xsl:version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns='http://www.w3.org/1999/xhtml'>
<body>
<h1>Books</h1>
<ul>
<xsl:for-each select='books/book'>
<li>
<b><xsl:apply-templates select='title'/></b>: <xsl:value-of select='string-join(author, ", ")'/>
</li>
</xsl:for-each>
</ul>
</body>
</html>
return xslt:transform($in, $style)
Result:
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1>Books</h1>
<ul>
<li><b>XSLT Programmer´s Reference</b>: Michael H. Kay</li>
<li><b>XSLT</b>: Doug Tidwell, Simon St. Laurent, Robert Romano</li>
</ul>
</body>
</html>
Example 3: Assigning a variable to an XSLT stylesheet
Query:
let $in := <dummy/>
let $style := doc('variable.xsl')
return (
xslt:transform($in, $style, <xslt:parameters><xslt:v>1</xslt:v></xslt:parameters>),
xslt:transform($in, $style, map { "v" := 1 })
)
variable.xslt
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:param name='v'/>
<xsl:template match='/'>
<v><xsl:value-of select='$v'/></v>
</xsl:template>
</xsl:stylesheet>
Result:
<v>1</v>
<v>1</v>