Archiv für Kategorie Apache Ant

Apache Ant: Initialen Mode und Initiales Template für XSLT 2.0 mit Saxon setzen

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:

Keine Kommentare

Apache Ant 1.8.2 unter Mac OS X einrichten

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:

  1. Ant 1.8.2 herunterladen und entpacken
  2. 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/
  3. 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.

  4. 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. Mit

    pico ~/.bash_profile

    wird der Editor geöffnet, Speichern funktioniert über CTRL-o, Verlassen mit CTRL-x.

  5. Eine neues Terminalfenster starten. In der zweiten Zeile sollte jetzt soetwas wie running /Users/stf/.bash_profile stehen. Mit dem Terminal-Kommando
    set

    lässt sich eine Liste der Umgebunsvariablen ausgeben, hier sollten jetzt für PATH und ANT_HOME die neuen Werte angezeigt werden. Schließlich bringt die Versionsangabe mit

    ant -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:

Keine Kommentare