XSL Preprocessing mit Xalan-C

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:
    string date:date-time()
    object dyn:evaluate(string)
    node-set exsl:node-set(object)
    string exsl:object-type(object)
    number math:abs(number)
    number math:acos(number)
    number math:asin(number)
    number math:atan(number)
    number math:atan2(number, number)
    number math:constant(string, number)
    number math:cos(number)
    number math:exp(number)
    node-set math:highest(node-set)
    number math:log(number)
    node-set math:lowest(node-set)
    number math:max(node-set)
    number math:min(node-set)
    number math:power(number, number)
    number math:random()
    number math:sin(number)
    number math:sqrt(number)
    number math:tan(number)
    node-set set:difference(node-set, node-set)
    node-set set:distinct(node-set)
    boolean set:has-same-node(node-set, node-set)
    node-set set:intersection(node-set, node-set)
    node-set set:leading(node-set, node-set)
    node-set set:trailing(node-set, node-set)
    string str:align(string, string, string?)
    string str:concat(node-set)
    string str:decode-uri(string, string)
    string str:encode-uri(string, string, string?)
    string str:padding(number, string?)
    node-set xalan:difference(node-set, node-set)
    object xalan:evaluate(xpath)
    boolean xalan:hasSameNodes(node-set, node-set)
    node-set xalan:intersection(node-set, node-set)
    node-set xalan: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

Ein Kommentar

  1. 16.12.2011, 22:48h | Permalink

    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.