Ein schönes Feature von XSLT 2.0 ist, dass man ein Stylesheet in einem initialen Mode oder mit einem initialen Template starten kann (siehe Standard). Ich benutze diese Möglichkeit gern, um Selbsttests direkt im Stylesheet unterzubringen und über einen initialen Mode auszuführen – ohne die eigentliche Logik des Stylesheets zu beeinflussen.
In OxygenXML kann man den initialen Mode oder das initiale Template prima im Transformationsszenario einstellen, der kleine Button mit dem rasenden Zahnrädchen neben der Auswahlliste für die Transformations-Engine öffnet den passenden Einstellungs-Dialog (siehe Dokumentation).
Schon vor geraumer Zeit wollte ich diese Feature auch mit Apache Ant nutzen, bin aber wegen fehlender Unterstützung durch Saxon und einen zwischenzeitlichen Ant-Bug in Version 1.8.1 nicht weitergekommen. Inzwischen wurden Saxon und Ant aktualisiert, so dass es Zeit für einen neuen Anlauf war. Die größte Herausforderung war, die jeweils passende URI für die beiden Features zu finden, letztendlich habe ich in die Saxon-Quelltexte geschaut. So geht’s:
<target name="test"> <xslt in="input.xml" out="output.xml" style="stylesheet.xsl"> <!-- Pfad zu Saxon an lokale Installation anpassen! --> <classpath location="saxon9he.jar" /> <factory name="net.sf.saxon.TransformerFactoryImpl"> <!-- hier ggfs. "http://saxon.sf.net/feature/initialTemplate" einsetzen --> <attribute name="http://saxon.sf.net/feature/initialMode" value="MyMode"/> </factory> </xslt> </target> |
Über die Factory-Attribute können auch viele weitere Saxon-Optionen – die oft auch über die Kommandozeile zu erreichen sind – von Ant aus gesteuert werden, etwa der Umgang mit Whitespace (http://saxon.sf.net/feature/strip-whitespace
) oder die Zeilennummerierung (http://saxon.sf.net/feature/linenumbering
). Das habe ich allerdings nicht getestet.
Quellen:
- http://ant.apache.org/manual/Tasks/style.html (unter »factory (‚trax‘ processors only)« und »Using factory settings«)
- http://saxonica.com/documentation/configuration/config-interfaces/jaxp-configuration.xml
- http://saxonica.com/documentation/javadoc/constant-values.html in Verbindung mit http://saxonica.com/documentation/javadoc/net/sf/saxon/TransformerFactoryImpl.html und http://saxonica.com/documentation/javadoc/net/sf/saxon/lib/FeatureKeys.html