Archiv für Kategorie Apache Ant
Apache Ant: Initialen Mode und Initiales Template für XSLT 2.0 mit Saxon setzen
Verfasst von Stf unter Apache Ant, XSLT und XPath am 2. April 2011
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
Apache Ant 1.8.2 unter Mac OS X einrichten
Verfasst von Stf unter Apache Ant, Mac OS X am 27. Februar 2011
Weil Ant 1.8.1 im XSLT-Task vergisst, den Classpath auszulesen, funktionieren mit dieser Version keine XSLT-2.0-Stylesheets (näheres siehe Bugzilla). Und weil Apple auch zwei Monate nach Erscheinen von Version 1.8.2 (mit dem Bugfix) noch kein Update durchgeführt hat, musste ich von Hand für Abhilfe sorgen. So geht’s:
- Ant 1.8.2 herunterladen und entpacken
- Ich habe den entpackten Ordner unter
~/Applications
abgelegt, gleich neben der alten 1.8.0-Version. Bei mir sieht das dann so aus:localhost:Applications stf$ ls -F -1 Crane-xslstyle-20100817-0240z/ apache-ant-1.8.0/ apache-ant-1.8.2/ calabash-0.9.24/
- Erzeugen eines SymLinks auf den Ant-Ordner. Dazu ein Terminalfenster öffnen und
ln -s ~/Applications/apache-ant-1.8.2 ~/Applications/ant
eingeben. Durch Umbiegen des SymLinks auf ein anderes Verzeichnis kann man einfach auf andere Ant-Versionen umschalten: auf eine ältere oder später auch auf eine neuere.
- Jetzt muss man
bash
– dem Programm hinter dem Terminalfenster – noch sagen, dass es die neue Ant-Version benutzen soll. Dazu fügt man der PATH-Variablen dem Pfad zum neuen Ant-Verzeichnis hinzu. Ich habe dazu im Benutzerverzeichnis eine Datei./bash_profile
angelegt und folgendes hineingeschrieben:echo running ~/.bash_profile export PATH=~/Applications/ant/bin:$PATH export ANT_HOME=~/Applications/ant
Die erste Zeile gibt bei jedem Konsolenstart eine Statusmeldung aus, die zweite Zeile setzt die PATH-Umgebungsvariable, die dritte Zeile sorgt dafür, das Ant seine Dateien findet.
Da verborgene Dateien (mit Punkt am Anfang des Dateinamens) im Finder standardmäßig ausgeblendet werden, habe ich ganz UNIX-like auf der Konsole gearbeitet. Mitpico ~/.bash_profile
wird der Editor geöffnet, Speichern funktioniert über
CTRL-o
, Verlassen mitCTRL-x
. - Eine neues Terminalfenster starten. In der zweiten Zeile sollte jetzt soetwas wie
running /Users/stf/.bash_profile
stehen. Mit dem Terminal-Kommandoset
lässt sich eine Liste der Umgebunsvariablen ausgeben, hier sollten jetzt für
PATH
undANT_HOME
die neuen Werte angezeigt werden. Schließlich bringt die Versionsangabe mitant -v
Gewissheit, ob alles geklappt hat.
Meine Helferlein auf diesem Weg waren die beiden unten angegebenen Artikel sowie man ln
und man ls
.
Hoffen wir, dass Apple bald auf 1.8.2 aktualisiert und zukünftig solche Workarounds nicht mehr notwendig sind …
Quellen:
- Stackoverflow: How to use an alternate version of Apache Ant on OS X without installing over existing version? (englisch)
- Cameron Hayne: Unix FAQ (for OS X) (englisch) – eine sehr übersichtliche Seite mit dem wichtigsten, was man über UNIX unter Mac OS X wissen muss.