Difference between revisions of "XSLT Module"

From BaseX Documentation
Jump to navigation Jump to search
Line 11: Line 11:
 
=Conventions=
 
=Conventions=
  
All functions in this module are assigned to the <code><nowiki>http://basex.org/modules/xslt</nowiki></code> namespace, which is statically bound to the {{Code|xslt}} prefix.<br/>
+
{{Mark|Updated with Version 9.0}}:
All errors are assigned to the <code><nowiki>http://basex.org/errors</nowiki></code> namespace, which is statically bound to the {{Code|bxerr}} prefix.
+
 
 +
All functions and errors in this module are assigned to the <code><nowiki>http://basex.org/modules/xslt</nowiki></code> namespace, which is statically bound to the {{Code|xslt}} prefix.<br/>
  
 
=Functions=
 
=Functions=
Line 39: Line 40:
  
 
==xslt:transform==
 
==xslt:transform==
 +
 
{| width='100%'
 
{| width='100%'
 
|-
 
|-
Line 52: Line 54:
 
|-
 
|-
 
| '''Error'''
 
| '''Error'''
|{{Error|BXSL0001|#Errors}} an error occurred during the transformation process.
+
|{{Error|error|#Errors}} an error occurred during the transformation process.
 
|}
 
|}
  
Line 66: Line 68:
 
|-
 
|-
 
| '''Error'''
 
| '''Error'''
|{{Error|BXSL0001|#Errors}} an error occurred during the transformation process.
+
|{{Error|error|#Errors}} an error occurred during the transformation process.
 
|}
 
|}
  
Line 166: Line 168:
  
 
=Errors=
 
=Errors=
 +
 +
{{Mark|Updated with Version 9.0}}:
  
 
{| class="wikitable" width="100%"
 
{| class="wikitable" width="100%"
Line 171: Line 175:
 
|Description
 
|Description
 
|-
 
|-
|{{Code|BXSL0001}}
+
|{{Code|error}}
 
| An error occurred during the transformation process.
 
| An error occurred during the transformation process.
 
|}
 
|}
  
 
=Changelog=
 
=Changelog=
 +
 +
;Version 9.0
 +
 +
* Updated: error codes updated; errors now use the module namespace
  
 
;Version 7.6
 
;Version 7.6
 +
 
* Added: [[#xslt:transform-text|xslt:transform-text]]
 
* Added: [[#xslt:transform-text|xslt:transform-text]]
 
* Updated: [[#xslt:transform|xslt:transform]] returned error code
 
* Updated: [[#xslt:transform|xslt:transform]] returned error code
  
 
;Version 7.3
 
;Version 7.3
 +
 
* Updated: $xslt:processor → [[#xslt:processor|xslt:processor]], $xslt:version → [[#xslt:version|xslt:version]]
 
* Updated: $xslt:processor → [[#xslt:processor|xslt:processor]], $xslt:version → [[#xslt:version|xslt:version]]

Revision as of 18:15, 21 November 2017

This XQuery Module contains functions and variables to perform XSLT transformations. By default, this module uses Java’s XSLT 1.0 Xalan implementation to transform documents. XSLT 2.0 is used instead if Version 9.x of the Saxon XSLT Processor (saxon9he.jar, saxon9pe.jar, saxon9ee.jar) is found in the classpath. A custom transformer can be specified by overwriting the system property javax.xml.transform.TransformerFactory, as shown in the following Java example:

System.setProperty("javax.xml.transform.TransformerFactory", "org.custom.xslt.TransformerFactoryImpl");
Context ctx = new Context();
String result = new XQuery("xslt:transform('...', '...')").execute(ctx);
...
ctx.close();

Conventions

Template:Mark:

All functions and errors in this module are assigned to the http://basex.org/modules/xslt namespace, which is statically bound to the xslt prefix.

Functions

xslt:processor

Signatures xslt:processor() as xs:string
Summary Returns the name of the applied XSLT processor, or the path to a custom implementation (currently: "Java", "Saxon EE", "Saxon PE", or "Saxon HE").

xslt:version

Signatures xslt:version() as xs:string
Summary Returns the supported XSLT version (currently: "1.0" or "2.0"). "Unknown" is returned if a custom implementation was chosen.

xslt:transform

Signatures xslt:transform($input as item(), $stylesheet as item()) as node()
xslt:transform($input as item(), $stylesheet as item(), $params as map(xs:string, xs:string)) as node()
Summary Transforms the document specified by $input, using the XSLT template specified by $stylesheet, and returns the result as node. $input and $stylesheet can be specified as
  • xs:string, containing the stylesheet URI,
  • xs:string, containing the document in its string representation, or
  • node(), containing the document itself.

The $params argument can be used to bind variables to a stylesheet. Only strings are supported when using Saxon (XSLT 2.0).

Error error: an error occurred during the transformation process.

xslt:transform-text

Signatures xslt:transform-text($input as item(), $stylesheet as item()) as xs:string
xslt:transform-text($input as item(), $stylesheet as item(), $params as map(xs:string, xs:string)) as xs:string
Summary Transforms the document specified by $input, using the XSLT template specified by $stylesheet, and returns the result as string. The semantics of $params is the same as for xslt:transform.
Error error: an error occurred during the transformation process.

Examples

Example 1: Basic XSL transformation with dummy document and without parameters

Query:

xslt:transform-text(<dummy/>, 'basic.xslt')

basic.xslt

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
  <xsl:template match="/">123</xsl:template>
</xsl:stylesheet>

Result:

123

Example 2: XSLT transformation of an input document

Query:

(: Outputs the result as html. :)
declare option output:method 'html';
(: Turn whitespace chopping off. :)
declare option db:chop 'no';

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 :=
  <xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
  <xsl:output method='xml'/>
    <xsl:template match="/">
<html>
  <body>
    <div>
      <xsl:for-each select='books/book'>
      • <b><xsl:apply-templates select='title'/></b>: <xsl:value-of select='author'/><br/>
      </xsl:for-each>
    </div>
  </body>
</html>
    </xsl:template>
  </xsl:stylesheet>

return xslt:transform($in, $style)

Result:

<html>
  <body>
    <div>
      • <b>XSLT Programmer’s Reference</b>: Michael H. Kay<br>
      • <b>XSLT</b>: Doug Tidwell<br>
    </div>
  </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, map { "v": 1 })

variable.xsl

<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>

Errors

Template:Mark:

Code Description
error An error occurred during the transformation process.

Changelog

Version 9.0
  • Updated: error codes updated; errors now use the module namespace
Version 7.6
Version 7.3