Adding Saxon customizations
Plug-ins can contribute XSLT extension functions and collation URI resolvers. These customizations are automatically configured to work with Saxon when transformations are run using the DITA-OT <pipeline>
task with custom XSLT.
Plug-ins can provide the following Saxon extensions:
- Extension functions
- Collation URI resolvers
Extensions are declared in plug-in-provided JAR files using the Java ServiceLoader feature that looks for service-declaring files in JAR files and loads classes. This requires adding one or more files in the META-INF/services
directory in plug-in-provided JAR files.
You can create the file manually or generate it dynamically using <service>
elements in Ant <jar>
tasks. See the topics for the different extension types for details.
These extensions use the DITA Open Toolkit Ant <pipeline>
element to wrap <xslt>
elements. You can do this in plug-ins as shown in this excerpt from the DITA Community I18N plugin’s build.xml
file:
<target name="org.dita-community.i18n-saxon-extension-test">
<pipeline message="Test the DITA Community i18n Saxon extension functions"
taskname="i18n-extension-function-test">
<xslt
in="${dita.plugin.org.dita-community.i18n.dir}/test/xsl/data/test-data.xml"
style="${dita.plugin.org.dita-community.i18n.dir}/test/xsl/test-extension-functions.xsl"
out="${basedir}/out/extension-function-test-results.xml"
>
</xslt>
</pipeline>
</target>
Normal XSLT extensions to built-in transformation types will automatically have the extensions available to them.
The dynamic Saxon configuration is implemented in the class org.dita.dost.module.XsltModule
, which backs the <pipeline>
/<xslt>
element.