Changes

Jump to navigation Jump to search
1,946 bytes added ,  14:20, 20 July 2022
no edit summary
This [[Module Library|XQuery Module]] contains functions and variables to perform XSL transformations. By default, this module uses Java’s XSLT 1.0 Xalan implementation to transform documents. XSLT 3.0 will be enabled if Version 9.x of the [http://www.saxonica.com/ Saxon XSLT Processor] ({{Code|saxon9he.jar}}, {{Code|saxon9pe.jar}}, {{Code|saxon9ee.jar}}) is found in the classpath (see [[Startup#Distributions|Distributions]] for more details. A custom transformer can be specified by overwriting the system property {{Code|javax.xml.transform.TransformerFactory}}, as shown in the following Java example:
By default, this module uses Java’s XSLT 1.0 Xalan implementation to transform documents. XSLT 3.0 will be enabled if Version 9 or 10 of the [https://www.saxonica.com/ Saxon XSLT Processor] is found in the class path (see [[Startup#Distributions|Distributions]] for more details). A custom transformer can be specified by assigning a class to the system property {{Code|javax.xml.transform.TransformerFactory}}, e.g. directly in Java: <pre classsyntaxhighlight lang="brush:java">
System.setProperty(
"javax.xml.transform.TransformerFactory",
...
ctx.close();
</presyntaxhighlight>
=Conventions=
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Code|'''xslt:processor'''() as xs:string}}<br />
|-valign="top"
| '''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").<br />
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Code|'''xslt:version'''() as xs:string}}<br />
|-valign="top"
| '''Summary'''
|Returns the supported XSLT version (currently: "1.0" or "3.0"). "Unknown" is returned if a custom implementation was chosen.<br />
==xslt:transform==
 
{{Mark|Updated with Version 9.2}}: {{Code|catalog}} option added.
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|xslt:transform|$input as item(), $stylesheet as item()|node()}}<br />{{Func|xslt:transform|$input as item(), $stylesheet as item(), $params as map(*)?|node()}}<br />{{Func|xslt:transform|$input as item(), $stylesheet as item(), $args as map(*)?, $options as map(*)?|node()}}
|-valign="top"
| '''Summary'''
|Transforms the document specified by {{Code|$input}}, using the XSLT template specified by {{Code|$stylesheet}}, and returns the result as node. {{Code|$input}} and {{Code|$stylesheet}} can be specified as<br />
* {{Code|xs:string}}, containing the document in its string representation, or
* {{Code|node()}}, containing the document itself.
[[Catalog Resolver|XML Catalog files]] will be considered when resolving URIs. Variables can be bound to a stylesheet via {{Code|$args}} (only strings are supported when using XSLT 3.0 and Saxon). The following {{Code|$options}} are available (currently, it is just a single one):* {{Code|catalog}}: path to XML catalog (see [[Catalog Resolver]] for more information)
* {{Code|cache}}: cache XSLT transformer (speeds up repeated transformations, but increases memory consumption)
|-valign="top"
| '''Error'''
|{{Error|error|#Errors}} an error occurred during the transformation process.
{| width='100%'
|-valign="top"
| width='120' | '''Signatures'''
|{{Func|xslt:transform-text|$input as item(), $stylesheet as item()|xs:string}}<br />{{Func|xslt:transform-text|$input as item(), $stylesheet as item(), $params as map(*)?|xs:string}}<br />{{Func|xslt:transform-text|$input as item(), $stylesheet as item(), $params as map(*)?, $options as map(*)?|xs:string}}
|-valign="top"
| '''Summary'''
|Transforms the document specified by {{Code|$input}}, using the XSLT template specified by {{Code|$stylesheet}}, and returns the result as string. The semantics of {{Code|$params}} and {{Code|$options}} is the same as for [[#xslt:transform{{Function||xslt:transform]]}}.<br />|-valign="top"
| '''Error'''
|{{Error|error|#Errors}} an error occurred during the transformation process.
|}
==Examplesxslt:transform-report==
{| width='100%'|- valign="top"| width='Example 1120' | '''Signatures'''|{{Func|xslt:transform-report|$input as item(), $stylesheet as item()|xs:string}}<br />{{Func|xslt:transform-report|$input as item(), $stylesheet as item(), $params as map(*)?|xs:string}}<br />{{Func|xslt:transform-report|$input as item(), $stylesheet as item(), $params as map(*)?, $options as map(*)?|xs:string}}|- valign="top"| '''Summary'''|Transforms the document specified by {{Code|$input}}, using the XSLT template specified by {{Code|$stylesheet}}, and returns a map with the following keys: Basic XSL * {{Code|result}}: The transformation with dummy result: One or more document nodes, or (if the result cannot be converted to XML) an item of type {{Code|xs:untypedAtomic}}.* {{Code|messages}}: Informational output generated by {{Code|xsl:message}} elements: A sequence of arrays. The arrays consist of XML elements, or (for those messages that cannot be converted to XML) items of type {{Code|xs:untypedAtomic}}.The semantics of {{Code|$params}} and without parameters'''{{Code|$options}} is the same as for {{Function||xslt:transform}}.<br />For the moment, messages can only be returned with recent versions of Saxon.* {{Code|error}} (optional): An error string, which would be raised as an error by the other functions of this module.|}
'''Query:'''<pre class="brush:xquery">xslt:transform-text(<dummy/>, 'basic.xslt')</pre>=Examples==
'''basic.xslt'''<pre class="brush:xml"><xsl:stylesheet version='Example 1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:template match="/">123</xsl:template></xsl:stylesheet></pre> '''Result:'''<pre class="brush:xml">123</pre> '''Example 2: XSLT transformation of an input document, with XML and XSL supplied as nodes'''
'''Query:'''
<pre classsyntaxhighlight lang="brush:xquery">
(: Outputs the result as html. :)
declare option output:method 'html';
(: Turn whitespace chopping off. :)
declare option db:chop 'no';
let $in :=
</xsl:stylesheet>
return xslt:transform($in, $style)</presyntaxhighlight>
'''Result:'''
<pre classsyntaxhighlight lang="brush:xml">
<html>
<body>
</body>
</html>
</presyntaxhighlight> '''Example 2: Textual XSL transformation''' '''Query:'''<syntaxhighlight lang="xquery">xslt:transform-text(<dummy/>, 'basic.xslt')</syntaxhighlight> '''basic.xslt'''<syntaxhighlight lang="xml"><xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:template match="/">123</xsl:template></xsl:stylesheet></syntaxhighlight> '''Result:'''<syntaxhighlight lang="xml">123</syntaxhighlight>
'''Example 3: Assigning a XSL transformation with variable to an XSLT stylesheetassignment'''
'''Query:'''
<pre classsyntaxhighlight lang="brush:xquery">
let $in := <dummy/>
let $style := doc('variable.xsl')
return xslt:transform($in, $style, map { "v": 1 })
</presyntaxhighlight>
'''variable.xsl'''
<pre classsyntaxhighlight lang="brush:xslt">
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
</xsl:template>
</xsl:stylesheet>
</presyntaxhighlight>
'''Result:'''
<pre classsyntaxhighlight lang="brush:xml">
<v>1</v>
<v>1</v>
</presyntaxhighlight> '''Example 4: XSL transformation, yielding a result and info messages''' '''Query:'''<syntaxhighlight lang="xquery">xslt:transform-report( <_/>, <xsl:transform version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:template match='/'> <xsl:message><msg>START...</msg></xsl:message> <xml>123</xml> <xsl:message select='4, 5, "...END"'/> </xsl:template> </xsl:transform>)</syntaxhighlight> '''Result:'''<syntaxhighlight lang="xquery">map { "messages": ([<msg>START...</msg>], ["4 5 ...END"]), "result": <xml>123</xml>}</syntaxhighlight>
=Errors=
! width="110"|Code
|Description
|-valign="top"
|{{Code|error}}
| An error occurred during the transformation process.
=Changelog=
 
;Version 9.7
* Added: {{Function||xslt:transform-report}}
;Version 9.2
* AddedUpdated: Support for XML catalog Catalog filesadded.
;Version 9.0
* Updated: [[#xslt:transform{{Function||xslt:transform]]}}, [[#xslt:transform-text{{Function||xslt:transform-text]]}}: {{Code|$options}} argument added.
* Updated: error codes updated; errors now use the module namespace
;Version 7.6
* Added: [[#xslt:transform-text{{Function||xslt:transform-text]]}}* Updated: [[#xslt:transform{{Function||xslt:transform]] }} returned error code
;Version 7.3
* Updated: $xslt:processor → [[#xslt:processor{{Function||xslt:processor]]}}, $xslt:version → [[#xslt:version{{Function||xslt:version]]}}
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu