Beim Öffnen von XML-Dateien mit FrameMaker kann ein XSL-Preprocessing angestoßen werden. Dabei wird der mit FrameMaker gelieferte Prozessor Xalan-C verwendet. Mangels einer ausführlichen Dokumentation ist es eine Fleißarbeit herauszufinden, welche Extension Functions unterstützt werden. Diese Arbeit hat Manfred Staudinger erledigt und mit einer leicht modifizierten Form seines available.xml habe ich für FrameMaker 7.2, 8 und 9 folgendes herausgefunden:
Processor implements XSLT 1,
Vendor: Apache Software Foundation
at http://xml.apache.org/xalan-c
- Extension Element:
<xalan:write file="
string" select="
xpath" method="xml | html">…</xalan:write>
- Extension Funktionen:
stringdate:date-time()
objectdyn:evaluate(
string)
node-setexsl:node-set(
object)
stringexsl:object-type(
object)
numbermath:abs(
number)
numbermath:acos(
number)
numbermath:asin(
number)
numbermath:atan(
number)
numbermath:atan2(
number, number)
numbermath:constant(
string, number)
numbermath:cos(
number)
numbermath:exp(
number)
node-setmath:highest(
node-set)
numbermath:log(
number)
node-setmath:lowest(
node-set)
numbermath:max(
node-set)
numbermath:min(
node-set)
numbermath:power(
number, number)
numbermath:random()
numbermath:sin(
number)
numbermath:sqrt(
number)
numbermath:tan(
number)
node-setset:difference(
node-set, node-set)
node-setset:distinct(
node-set)
booleanset:has-same-node(
node-set, node-set)
node-setset:intersection(
node-set, node-set)
node-setset:leading(
node-set, node-set)
node-setset:trailing(
node-set, node-set)
stringstr:align(
string, string, string?)
stringstr:concat(
node-set)
stringstr:decode-uri(
string, string)
stringstr:encode-uri(
string, string, string?)
stringstr:padding(
number, string?)
node-setxalan:difference(
node-set, node-set)
objectxalan:evaluate(
xpath)
booleanxalan:hasSameNodes(
node-set, node-set)
node-setxalan:intersection(
node-set, node-set)
node-setxalan:nodeset(
result tree fragment)
Auch wenn eine echte XSLT-2.0-Unterstützung noch viel eleganter wäre, kann man mit Hilfe dieser Erweiterungen einige sehr nützliche Programmieraufgaben erledigen.
Um diese Erweiterungen nutzen zu können, müssen die folgenden Namespaces in <xsl:stylesheet … >
deklariert werden:
xmlns:xalan="http://xml.apache.org/xalan"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:dyn="http://exslt.org/dynamic"
xmlns:exsl="http://exslt.org/common"
xmlns:math="http://exslt.org/math"
xmlns:set="http://exslt.org/sets"
xmlns:str="http://exslt.org/strings"
Die Dokumentation zu den Extensions finden Sie hier:
Folgende Versionen werden anscheinend verwendet:
- FrameMaker 7.2: Xalan-C 1.8, Xerxes-C 2.5.0
- FrameMaker 8: Xalan-C 1.8, Xerxes-C 2.5.0
- FrameMaker 9: Xalan-C 1.10, Xerxes-C 2.7.0
XSL-Tools von Manfred Staudinger:
Mai 2009, Michael Müller-Hillebrand
Eine konkrete Anwendung des XSL-Preprocessing zur Erzeugung eines Buchs mit Dokumenten aus einer einzigen XML-Datei beschreibe ich in Große XML-Dateien in FrameMaker-Bücher verwandeln.