Changes

Jump to navigation Jump to search
248 bytes removed ,  18:38, 1 December 2023
m
Text replacement - "syntaxhighlight" to "pre"
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 is used if Version 9 or 10 of the [https://www.saxonica.com/ Saxon XSLT Processor] is found in the class path (see e.g. by placing the library files in the [[Startup#Full Distributions|Distributions{{Code|lib/custom}} directory]] for more details). A custom specific transformer can be specified by assigning a class classpath to the system property {{Code|javax.xml.transform.TransformerFactory}}, ewith the [https://docs.oracle.gcom/en/java/javase/11/tools/java. html -D flag] on the command line, or directly in Java:
<syntaxhighlight pre lang="java">
System.setProperty(
"javax.xml.transform.TransformerFactory",
...
ctx.close();
</syntaxhighlightpre>
=Conventions=
{| width='100%'
|-valign="top"| width='120' | '''SignaturesSignature'''|{{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"). If a system property was assigned that points to an existing implementation other than Saxon, the classpath is returned instead.<br />
|}
{| width='100%'
|-valign="top"| width='120' | '''SignaturesSignature'''|{{Code|'''xslt:version'''() as xs:string}}<br />|-valign="top"
| '''Summary'''
|Returns the supported XSLT version (currently: "1.0" or , "3.0"). "Unknown" An empty string is returned if a custom classpath in the system property points to an existing implementation was chosenother than Saxon.<br />
|}
{| width='100%'
|-valign="top"| width='120' | '''SignaturesSignature'''|{{Func|xslt:transform|$input as item(), $stylesheet as item()|node()}}<br /pre>{{Func|xslt:transform|( $input as item(), $stylesheet as item(), $params arguments as map(*)?|node()} := map { }<br />{{Func|xslt:transform|$input as item(), $stylesheet as item(), $args options as map(*)?, $options as := map(*{ })?|as node()}}</pre>|-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 stylesheet URI,
* {{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|$argsarguments}} (only strings are supported when using XSLT 3.0 and Saxon). The following {{Code|$options}} are available:
* {{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' | '''SignaturesSignature'''|{{Func|xslt:transform-text|$input as item(), $stylesheet as item()|xs:string}}<br /pre>{{Func|xslt:transform-text|( $input as item(), $stylesheet as item(), $params arguments as map(*)?|xs :string= map { }}<br />{{Func|xslt:transform-text|$input as item(), $stylesheet as item(), $params options as map(*)?, $options as := map(*{ })?|as xs:string}}</pre>|-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 {{Function||xslt:transform}}.<br />|-valign="top"
| '''Error'''
|{{Error|error|#Errors}} an error occurred during the transformation process.
{| width='100%'
|-valign="top"| width='120' | '''SignaturesSignature'''|{{Func|xslt:transform-report|$input as item(), $stylesheet as item()|xs:string}}<br /pre>{{Func|xslt:transform-report|( $input as item(), $stylesheet as item(), $params arguments as map(*)?|xs :string= map { }}<br />{{Func|xslt:transform-report|$input as item(), $stylesheet as item(), $params options as map(*)?, $options as := map(*{ })?|as xs:string}}</pre>|-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:
* {{Code|result}}: The transformation 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 {{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:'''
<syntaxhighlight pre lang="'xquery"'>
(: Outputs the result as html. :)
declare option output:method 'html';
</xsl:stylesheet>
return xslt:transform($in, $style)</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="xml">
<html>
<body>
</body>
</html>
</syntaxhighlightpre>
'''Example 2: Textual XSL transformation'''
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
xslt:transform-text(<dummy/>, 'basic.xslt')
</syntaxhighlightpre>
'''basic.xslt'''
<syntaxhighlight pre lang="xml">
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="/">123</xsl:template>
</xsl:stylesheet>
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="xml">123</syntaxhighlightpre>
'''Example 3: XSL transformation with variable assignment'''
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
let $in := <dummy/>
let $style := doc('variable.xsl')
return xslt:transform($in, $style, map { "v": 1 })
</syntaxhighlightpre>
'''variable.xsl'''
<syntaxhighlight pre lang="xslt">
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
</xsl:template>
</xsl:stylesheet>
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="xml">
<v>1</v>
<v>1</v>
</syntaxhighlightpre>
'''Example 4: XSL transformation, yielding a result and info messages'''
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
xslt:transform-report(
<_/>,
</xsl:transform>
)
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="'xquery"'>
map {
"messages": ([<msg>START...</msg>], ["4 5 ...END"]),
"result": <xml>123</xml>
}
</syntaxhighlightpre>
=Errors=
! width="110"|Code
|Description
|-valign="top"
|{{Code|error}}
| An error occurred during the transformation process.
Bureaucrats, editor, reviewer, Administrators
13,554

edits

Navigation menu