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:

  1. {in}: Eingabe-Datei, entspricht dem {out} aus dem vorausgegangenen Schritt
  2. {out}: Ausgabe-Datei, bildet {in} für den Folgeschritt
  3. {trans}: Resource-File, das in den Filter-Schritt hochgeladen wurde
  4. {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:

  1. ZMS_FILTER_IN: Name der Eingabe-Datei
  2. ZMS_FILTER_OUT: Name der Ausgabe-Datei
  3. ZMS_FILTER_TRANS: Name des Transformations-Stylesheets
  4. 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:

  1. exportRes: Übertragung von Resourcen („Add Resources“)
  2. fop: Aufruf von FOP zur PDF-Erzeugung
  3. xslt: Aufruf des XSLT-Prozessors
  4. xsltFinal: Variante des XSLT-Prozessor-Aufrufs
  5. 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 -->