Da die Prozess-Schritte auch externe Software-Komponenten steuern, müssen diese in der Regel rechnerspezifisch parametrisiert werden. Denn die Komponenten (z.B. Windows-Help-compiler) können sich natürlich in einem beliebigen Systemverzeichnis befinden. Den Aufruf einer externen Anwendung kann man grundsätzlich auf zwei Arten durchführen:
- Als Prozess-Schritt mit den betriebssystemnahen Aufrufen oder
- als DTML-Methode für Zope/ZMS-nahe Aufrufe
Im Prinzip wird jedem Prozess-Schritt als Eingabe-Datei (Variable in) die Ausgabedatei (Variable out) des vorangegangen Transformations-Schrittes übergeben; das (XSL-) Template für die Transformation als Bestandteil des Filters wird mit der Variablen trans bezeichnet. Ein ensprechend abstrahierter Kommandozeilen-Aufruf für den java-basierten XSL-Transformer saxon lautet dann z.B.:
java -jar C:\saxon\saxon.jar {in} {trans} > {out.xml}
Folgende Variablen stehen für den Kommandozeilenaufruf zur Verfügung - in geschweiften Klammern:
- {in}: Eingabe-Datei, entspricht dem {out} aus dem vorausgegangenen Schritt
- {out}: Ausgabe-Datei, bildet {in} für den Folgeschritt
- {trans}: Resource-File, das in den Filter-Schritt hochgeladen wurde
- {cur_dir}: temporäres Sytem-Verzeichnis, in dem die exportierten Dateien verarbeitet werden
Für einen DTML-basierten Prozessschritt-Typ stehen analog folgende Variablen zur Verfügung:
- ZMS_FILTER_IN: Name der Eingabe-Datei
- ZMS_FILTER_OUT: Name der Ausgabe-Datei
- ZMS_FILTER_TRANS: Name des Transformations-Stylesheets
- ZMS_FILTER_CUR_DIR: Name es aktuellen temporären Arbeits-Verzeichnisses
Für die Ausführung von Kommando-Zeilen-Operationen stehen über das Pythonmodul ZMSGlobals diverse Funktionen zur Verfügung, von denen die flexibelste localfs_command() ist:
- localfs_command(self, command): führt ein Shell-Kommando aus, z.B:
- getZipArchive(self, f):extrahiert ein Zip-Archiv und gibt eine Liste der entsprechenden Dateien zurück
- localfs_tempfile(self)
- localfs_read(self, filename, mode='b', REQUEST=None)
- localfs_write(self, filename, v, mode='b')
- localfs_readPath(self, filename, data=False, recursive=False)
Ein DocBook-basiertes Filterset setzt sich üblicherweise aus folgenden Prozessschritt-Typen zusammen:
- exportRes: Übertragung von Resourcen („Add Resources“)
- fop: Aufruf von FOP zur PDF-Erzeugung
- xslt: Aufruf des XSLT-Prozessors
- xsltFinal: Variante des XSLT-Prozessor-Aufrufs
- Weitere: hhc, zipWordRessources
Achtung: Bei Migration der Filter auf ein anderes System müssen die java-classpathes bzw. Pfade für Helpcompiler oder Zip-Applikation angepasst werden.
exportRes
Dieser Prozessschritt-Typ kopiert lediglich die Filter-Resources (Logo-Grafiken und/oder CSS-Dateien) in das aktuelle temporäre Arbeitsverzeichnis:
fop
Kommandozeilen-Aufruf des Formatting Object Processors FOP, z.B, unter Windows:
C:\Programme\fop-0.92beta\fop.bat {in} {out.pdf}
xslt und xsltFinal
Prozessschritt-Typen zur Steuerung des XSLT-Prozessors XALAN. Beispiel-Kommando unter Windows samt aller classpathes, z.B. unter Windows:
java -classpath C:\Programme\xalan-j_2_6_0\bin\xalan.jar; C:\Programme\xalan-j_2_6_0\bin\xml-apis.jar; C:\Programme\xalan-j_2_6_0\bin\xercesImpl.jar; C:\Programme\xalan-j_2_6_0\bin\xalansamples.jar org.apache.xalan.xslt.Process -in {in} -xsl {trans} -out {out}
Achtung: unter Linux werden die classpath-Items per Doppelpunkt statt per Semikolon wie unter Windows separiert):
hhc
DTML-Methode für den Aufruf des HTML-Help-Compilers und den Aufruf der ZIP-Applikation. Beispiel:
<!-- BO hhc --> <dtml-call "REQUEST.set( 'helpfilename', 'htmlhelp.zip')"> <dtml-call "localfs_command( 'C:\Programme\HTMLHelp/hhc.exe %s/htmlhelp.hhp '%(ZMS_FILTER_CUR_DIR))"> <dtml-call "localfs_command( 'C:/Programme/zip/zip.exe %s/htmlhelp.zip %s/htmlhelp.chm'%(ZMS_FILTER_CUR_DIR,ZMS_FILTER_CUR_DIR))"> <dtml-call "REQUEST.set('ZMS_FILTER_OUT','%s/%s'%(ZMS_FILTER_CUR_DIR, helpfilename))"> <!-- EO hhc -->
zipWordRessources
DTML-Methode für den Aufruf der Zip-Applikation zur Erzeugung
<!-- BO zipWordResources --> <dtml-call "REQUEST.set( 'wordmlname', 'wordml.zip')"> <dtml-call "localfs_command( 'C:/Programme/zip/zip.exe %s/wordml.zip -r %s/*'%(ZMS_FILTER_CUR_DIR,ZMS_FILTER_CUR_DIR))"> <dtml-call "REQUEST.set('ZMS_FILTER_OUT','%s/%s'%(ZMS_FILTER_CUR_DIR, wordmlname))"> <!-- EO zipWordResources -->