XProc-Steps

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

p:xslt

<p:declare-step type="p:xslt">
   <p:input port="source" sequence="true" primary="true"/>
   <p:input port="stylesheet"/>
   <p:input port="parameters" kind="parameter"/>
   <p:output port="result" primary="true"/>
   <p:output port="secondary" sequence="true"/>
   <p:option name="initial-mode"/> <!-- QName -->
   <p:option name="template-name"/> <!-- QName -->
   <p:option name="output-base-uri"/> <!-- anyURI -->
   <p:option name="version"/> <!-- string -->
</p:declare-step>

Mit Hilfe des Steps <p:xslt> können XSLT-Transformationen durchgeführt werden. Er besitzt drei Input-Ports, welche das einzulesende Dokument, das zu transformierende XSLT-Stylesheet und optionale Parameter angeben. Weiterhin hat der Step zwei Output-Ports. Der Primary-Output (“result“) liefert das primäre Ergebnis der jeweiligen Transformation, der zweite Output-Port (“secondary“) gibt alle anderen Ausgabedokumente aus (falls welche erzeugt wurden). Weiterhin stehen noch Optionen zur Verfügung. So kann der Benutzer unter “inital-mode“ eine Angabe geben, die das Verhalten der Transformation beeinflussen kann. Dieser Modus muss allerdings im zugrundeliegenden XSLT-Stylesheet definiert worden sein. Unter “template-name“ kann der Name eines Named Templates im XSLT-Stylesheet angegeben werden. Das bedeutet, dass die Transformation mit diesem Template beginnt. Durch “output-base-uri“ ist es möglich, eine Angabe zur Ausgabe der XSLT-Transformation im Dateisystem zu geben. “version“ gibt die zu verwendende XSLT-Version an (1.0 oder 2.0). Sämtliche Optionen sind optional.

Beispiel

Es soll ein XSLT-Stylesheet ausgeführt werden, was die einzulesende Datei in eine XHTML-Seite mit Angabe der Filmtitel in einer Liste umwandelt.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" version="2.0">
   <xsl:output method="xhtml"/>
   <xsl:template match="/">
      <html>
         <body>
            <h1>Filmliste</h1>
            <ul>
               <xsl:apply-templates select="//Titel"/>
            </ul>
         </body>
      </html>
   </xsl:template>
   <xsl:template match="Titel">
      <li>
         <xsl:value-of select="."/>
      </li>
   </xsl:template>
</xsl:stylesheet>

Das gezeigte XSLT-Stylesheet erzeugt anhand der Beschaffenheit der eingelesenen XML-Datei eine XHTML-Seite, die eine unsortierte Liste mit den jeweiligen Filmtiteln erstellt. Dieses Stylesheet soll nun Teil des XProc-Dokuments werden.

<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
   <p:input port="source">
      <p:document href="filmsammlung.xml"></p:document>
   </p:input>
   <p:output port="result"/>
   <p:xslt>
      <p:input port="stylesheet">
         <p:document href="xslt_stylesheet.xsl"></p:document>
      </p:input>
      <p:input port="parameters">
         <p:empty/>
      </p:input>
   </p:xslt>
</p:declare-step>

Im Step <p:xslt> werden die benötigten Input-Ports definiert. So wird im Port “stylesheet“ via <p:document> das einzulesende XSLT-Stylesheet angegeben. Im Beispiel wird angenommen, dass die Dateien alle im selben Verzeichnis liegen. Da dem Stylesheet keine Parameter mitgegeben werden, muss dies durch <p:empty> klar angegeben werden (würde sonst zu einem “dynamic error“ führen).

Das Resultat der Transformation sieht folgendermaßen aus:

<html xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl">
   <body>
      <h1>Filmliste</h1>
      <ul>
         <li>Star Wars: Episode IV - A New Hope</li>
         <li>Eraserhead</li>
         <li>Unforgiven</li>
      </ul>
   </body>
</html>
Tipp der data2type-Redaktion:
Zum Thema XProc bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: