Inhaltsverzeichnis
Ziel des Projektes PrintWeb ist die simultane und inhaltlich kongruente Formatierung des Projektberichtes xml2sql aus einer XML-Website heraus in einerseits eine Printversion und andererseits als HTML-Website.
Die Printformatierung findet über das Buchsatzprogramm LaTeX statt. Xalan parst die einzelnen XML-Dateien ins .tex-Format, die ihrerseits dem LaTeX-Formatierungsfile bekannt gemacht werden.
Ebenfalls über Xalan werden die XML-Dateien 1:1 nach HTML übersetzt.
Die hier dargelegten Techniken wurden zwar für das Projekt xml2sql entwickelt; alle Beispielfiles und -Skripte entstammen aber dem vorliegenden Projekt.
Inhaltsverzeichnis
Aus einer Datenquelle werden inhaltich kongruente Veröffentlichungen in unterschiedlichen Medien generiert.
Inhaltsverzeichnis
Für das Projekt xml2sql wird ein Bericht im XML-Format geschrieben. Daraus generieren passende Stylesheets inhaltlich übereinstimende Ausgaben für Druck und Internet.
Skripte automatisieren die Generierung.
Inhaltsverzeichnis
Inhaltsverzeichnis
Inhaltsverzeichnis
Das Projekt PrintWeb wurde begonnen, um für das Projekt xml2sql (s. www.germanxml.de/projekte/xml2sql) die Ausgabe sowohl als gedruckte Broschüre als auch auf der genannten Website zu erzeugen.
Im hier vorliegenden Text wird das Vorgehen aber anhand dieses Projektes erläutert, für das in analoger Weise verfahren wird wie für xml2sql.
Mit der XML-Produktionsumgebung Apache-Tomcat-Cocoon können Webseiten aus XML dynamisch generiert und als HTML ausgeliefert werden.
Es werden für jedes Verzeichnis immer drei Dateien angelegt:
index.xml, navigtion.xml, introduction.xml.
Die Datei index.xml enthält Angaben für die Frames:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="../../frames.xsl" type="text/xsl"?> <?cocoon-process type="xslt"?> <frameset frameborder="1" cols="180,*" rows="*,0"> <frame name="links" marginwidth="15" marginheight="15" xml:link="simple" href="navigation.html"></frame> <frame name="rechts" marginwidth="30" marginheight="15" xml:link="simple" href="introduction.html"></frame> </frameset>Entsprechend müssen navigation.xml und introduction.xml immer vorhanden sein.
index.xml wird mit dem dazugehörigen Stylesheet frames.xsl geparst und liefert das Grundgerüst für die HTML-Seiten.
navigation.xml und "text".xml haben jeweils eigene Stylesheets: navigation.xsl und text.xsl.
Das ist durch die unterschiedliche Darstellung von Links und Überschriften begründet, allerdings nicht notwendig: CSS bietet genügend Handhabe, beides über ein Stylesheet abzuwickeln.
Allerdings müssen Übersichtlichkeit eines großen und der Verwaltungsaufwand für zwei statt einem Stylesheet gegeneinander abgewogen werden.
Die Navigation kann über navigation.xml im Grundverzeichnis der Webseite erfolgen, oder sie kann über mehrere Unterverzeichnisse aufgeteilt werden. In diesem Falle wird auf die Datei index.xml in diesem Verzeichnis gelinkt.
Dort kann ein neues Frameset definiert werden.
Textdateien werden mit dem Stylesheet text.xsl geparst. Die darin enthaltenen Formatierungen orientieren sich an der LaTeX-Notation.
In Zukunft werden aber möglichst keine selbst geschriebenen XSL-Stylesheets mehr benutzt, sondern auf solche aus dem DocBook-Projekt zurückgegriffen werden. Es ist sehr ausgereift und ein internationaler Standard.
Inhaltsverzeichnis
Für die Erzeugung eines druckfertigen Formates wurde der Weg über das Buchsatzprogramm LaTeX aus mehreren Gründen gewählt:
Inhaltsverzeichnis
Die einzelnen Bestandteile des XML-Files, wie Überschriften, Absätze, Tabellen usw., werden in Tags eingefasst, deren Namen der LaTex-Notation entsprechen.
Beispiel: Die numerierte Aufzählung weiter oben auf der Seite hat die XML-Form:
<enumerate> <listitem>...</listitem> <listitem>...</listitem> <listitem>...</listitem> </enumerate>Dem entspricht im XSL-Stylesheet:
<!-- Formatierung enumerate: Numerierte Liste -->
<xsl:template match="orderedlist">
\begin{enumerate}
<xsl:apply-templates/>
\end{enumerate}
</xsl:template>
<!-- Einzelner Listeneintrag für listitem und enumerate -->
<xsl:template match="listitem">
\item <xsl:apply-templates/>
</xsl:template>
Nach dem Parsen mit Xalan erzeugt das folgende Passage in der .tex-Datei:
\begin{enumerate}
\item
(...text...)
\item
(...text...)
\item
(...text...)
\end{enumerate}
Das vollständige Stylesheet für die Umwandlung nach LaTeX findet sich unter: ~printweb/latex/latex.xsl
Das Parserskript wird mit einem kurzen XSLT-Stylesheet aus den XML-Navigationsseiten erzeugt.
Jede Navigationsseite braucht ihr eigenes Parserskript. Deren Erzeugung und Ausführung lassen sich wiederum in einem Skript zusammenfassen.
Als einfaches Beispiel ist das hier verwendete XSLT-Stylesheet dokumentiert:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:strip-space elements="*"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="titel"></xsl:template> <xsl:template match="datei"> java org.apache.xalan.xslt.Process -in ../xml/<xsl:value-of select="link/@href"/> \ -xsl latex.xsl \ -TEXT -OUT <xsl:value-of select="link/@href"/>.tex </xsl:template> </xsl:stylesheet>Es wird, wie alle anderen Dateien auch, mit Xalan geparst; hier das Skript makexalan für LaTeX:
#! /bin/sh java org.apache.xalan.xslt.Process -in ../xml/navigation.xml -xsl xalan.xsl -TEXT -OUT xalanlatexVorgegriffen sei an dieser Stelle, dass für die Anwendung der gleichen Technik auf die automatische Erzeugung einer HTML-Website die Navigationsseite vollständig sein muss, d.h., sie muss auch die Dateien index.xml, die nur das Frameset enthält, und introduction.xml, auf die nicht immer explizit gelinkt wird, enthalten (s. Kap. Ergebnisse/Formatierung von HTML-Seiten).
Für das Parsen von XML in verschiedene Ausgabeformate stehen mehrere Parser zur Verfügung: www.xmlsoftware.com/xslt
Für dieses Projekt wurde Xalan verwendet, der zum xml.apache-Projekt gehört:
xml.apache.org/xalan
Xalan ist auch der Parser, der von der installierten XML-Produktionsumgebung verwendet wird (s. www.germanxml.de/install/cocoon). Dieser Parser wird ständig weiterentwickelt und implementiert vollständig die XSLT-Recommendation des W3C.
Für das Parsen nach LaTeX wird Xalan von der Kommandozeile aus benutzt, z.B.:
java org.apache.xalan.xslt.Process \ -in ../xml/files/planung.xml -xsl latex.xsl \ -TEXT -OUT files/planung.texDazu wird parallel zum ~printweb/xml-Verzeichnis ein ~printweb/latex-Verzeichnis mit gleicher Struktur angelegt. Die Gleichheit der Strukturen ist nicht zwingend, erleichtert aber die Orientierung.
Die Kommandozeilen für das Parsen der verschiedenen XML-Dateien mit Xalan werden durch die ausgabe von makexalan in einem Skript zusammengefasst. Damit können alle benötigten LaTeX-Dateien hintereinander erzeugt werden. Dieses Skript findet sich unter: ~printweb/latex/xalan_latex
Das Buchsatzsystem LaTeX ist so konzipiert, dass alle Formatierungen, die für ein Printerzeugnis benötigt werden, in einem Formatierungsfile vorgenommen werden. In diesen File werden dann die einzelnen Textdateien eingehängt. Auf diese Weise wird sowohl die Kongruenz der Formatierungen für das gesamte Printerzeugnis sichergestellt als auch dessen Struktur erzeugt.
Ebenfalls als eigener File wird die Formatierung für die lebenden Kolumnentitel eingehängt.
Aus den XML-Dateien werden nur die jeweils einzuhängenden Textdateien erzeugt. Dabei bildet das Stylesheet die Struktur des .xml-Files auf den dazugehörigen .tex-File ab. Wie diese Strukturen formatiert werden, steht im LaTeX-Formatierungsfile:
Das Programm LaTeX wird auf der Konsole ausgeführt, z.B.: latex printweb, wenn der Formatierungsfile (s.o.) printweb.tex heißt.
Es entsteht der für den Druck formatierte File printweb.dvi, der unter Linux mit xdvi printweb.dvi online angeschaut werden kann.
Sind auf dem Linux-System die Postscript-Utilities installiert, kann aus dem printweb.dvi-File mit dvips printweb.dvi der Postscript-File: printweb.ps generiert werden. Postscript ist das meistverbreitete Druckformat.
Eine andere Möglichkeit, ein Printformat zu erzeugen, ist die Ausführung von pdflatex printweb. Es entsteht der File: printweb.pdf.
Das Format PDF ist Postscript sehr ähnlich und ebenfalls weit verbreitet. Es wird von allen wichtigen Betriebssystem verstanden.
Außerdem besteht noch die Möglichkeit, den .ps-File nach PDF zu formatieren: ps2pdf infile.ps outfile.pdf. Das Konvertierungsprogramm hat aber mit bestimmten Postskipt-Fonts seine Schwierigkeiten. In der Praxis hat sich das Arbeiten mit pdflatex als praktischer erwiesen, wenn es um die Erzeugung von .pdf-Files geht.
Inhaltsverzeichnis
Inhaltsverzeichnis
Die einzelnen Bestandteile des XML-Files, wie Überschriften, Absätze, Tabellen usw., werden in Tags eingefasst, deren Namen der LaTeX-Notation entsprechen.
Das dazugehörige Stylesheet text.xsl erzeugt daraus die HTML-Formatierung.
Beispiel: Die numerierte Aufzählung weiter oben auf der Seite hat die XML-Form:
<orderedlist> <listitem>...</listitem> <listitem>...</listitem> <listitem>...</listitem> </orderedlist>Dem entspricht im XSL-Stylesheet:
<!-- Formatierung itemize: Aufzählung mit Punkten vorweg --> <xsl:template match="itemize"> <p> <ul><xsl:apply-templates select="item"/></ul> </p> </xsl:template> <!-- Formatierung enumerate: Numerierte Listen --> <xsl:template match="orderedlist"> <ol> <xsl:apply-templates/> </ol> </xsl:template> <xsl:template match="listitem"> <li><xsl:apply-templates/></li> </xsl:template>Nach dem Parsen mit Xalan erzeugt das folgende Passage in der .html-Datei:
<ol> <li>... <li>... <li>... </ol>
Für das Parsen von XML in verschiedene Ausgabeformate stehen mehrere Parser zur Verfügung. Eine ziemich vollständige Sammlung findet sich unter: www.xmlsoftware.com/xslt
Für dieses Projekt wurde Xalan verwendet, der zum xml.apache-Projekt gehört:
xml.apache.org/xalan
Xalan ist auch der Parser, der von der installierten XML-Produktionsumgebung verwendet wird (s. www.germanxml.de/install/cocoon). Dieser Parser wird ständig weiterentwickelt und implementiert vollständig die XSLT-Recommendation des W3C (www.w3.org/TR/XSLT).
Für das Parsen nach HTML wird Xalan von der Kommandozeile aus benutzt, z.B.:
java org.apache.xalan.xslt.Process \ -in ../xml/index.xml \ -xsl ../../frames.xsl \ -HTML -OUT ../sed/index.xml.html sed s/'.html"'/'.html"'/g \ ../sed/index.xml.html >index.htmlDazu wird parallel zum ~printweb/xml-Verzeichnis ein ~printweb/html-Verzeichnis mit gleicher Struktur angelegt. Die Gleichheit der Strukturen ist nicht zwingend, erleichtert aber die Orientierung.
Außerdem erledigt das Skript auch gleich die Ersetzung der .xml-Endungen in den Links durch .html mittels sed, dem StreamLineEditor von Unix/Linux.
Die Kommandozeilen für das Parsen der verschiedenen XML-Dateien mit Xalan werden durch ein eigenes Skript erzeugt (s. Abschnitt Skripte). Damit können alle benötigten HTML-Dateien automatisch geparst werden.
Für die Erzeugung der statischen HTML-Website aus der XML-Site ~/printweb/xml werden dieselben Stylesheets verwendet wie für die Erzeugung und Auslieferung der dynamischen HTML-Seiten mit Cocoon.
Xalan schreibt per Defaulteinstellung folgendes Meta-Tag in die erzeugten Dateien:
<head> <META http-equiv="Content-Type" content="text/html; charset=UTF-8">Das führt dazu, dass alle Angaben im CSS-Abschnitt der .html-Dateien falsch interpretiert werden.
Weil sowohl in allen .xml-Dateien als auch in den dazugehörigen Stylesheets die ISO-8859-1 explizit angegeben worden ist, scheint es sich hier um einen Bug zu handeln; zumal Cocoon die korrekten Header ausliefert. Als Workaround erhalten die .xsl-Stylesheets folgenden Zusatz:
<html> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"></meta> <head>Daraus resultieren .html-Dateien mit dem Kopf:
<html> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-8">Der zweite Eintrag wird ignoriert. Nicht schön, aber der Zweck heiligt die Mittel!
Mit den oben dargelegten Techniken wurde eine komplette HTML-Website erzeugt, die der XML-Website 1:1 entspricht. Je nach Stylesheet kann die erzeugte HTML-Site - ob dynamisch generiert über Cocoon oder statisch auf dem oben dargestellten Wege - eine Teilmenge der XML-Website sein.
Die Einbindung von CSS kann auf zwei Wegen erfolgen: Zunächst über die Verlinkung mit einer externen CSS-Datei, die dann aber je nach Verzeichnistiefe über die sed-Passage ersetzt werden muss, z.b. sed -f text1.sed ../sed/files/zeit.html >files/zeit.html, mit text1.sed:
{
s/.html"/.html"/g
s:href="text.css:href="../formate.css:g
}
Diese Vorgehensweise hat den Vorteil, dass die MTML-Website so wenig Speicherplatz wie möglich einnimmt; je nach Verzeichnistiefe wird aber die Verwaltung kompliziert
Hier wurde die andere Vorgehensweise gewählt: Die Stylesheets text.xsl und navigation.xsl fügt die CSS-Passagen in jeden von ihnen geparsten File ein. Da die HTML-Site bei der oben geschilderten Technik jedesmal komplett neu entsteht und etwaige Änderungen nur in der XML-Quelle vorgenommen werden,ist auch in diesem Falle die Konsistenz des CSS-Styles gewahrt.
Inhaltsverzeichnis
Für die Online- und Printversion des Projektes müssen etliche Files geparst werden. Um Arbeitsaufwand und Fehlerquellen zu minimieren, soll das über entsprechende Skripte geschehen.
Für eine komplette Neudarstellung sowohl der Print- als auch der Webseiten müssen folgende Skripte ausgeführt werden:
| printweb/xml/listings/list.sh | Erzeugt aktuelle Listing-Dateien |
| printweb/html/makexalan | Erzeugt aus printweb/xml/navigation.xml ein Skript mit Parseranweisungen für alle XML-Dateien: xalanhtml |
| printweb/html/xalanhtml | Parst XML nach HTML und benennt Links entsprechend um |
| printweb/latex/makexalan | Erzeugt aus printweb/xml/navigation.xml ein Skript mit Parseranweisungen für alle XML-Dateien: xalanlatex |
| printweb/latex/makexalan2 | Erzeugt ebenfalls aus printweb/xml/navigation.xml eine .tex-Datei mit der Gliederung und allen einzuhängenden .tex-Textdateien |
| printweb/latex/xalanlatex | Parst XML nach LaTeX |
Inhaltsverzeichnis
Das Parsen einer XML-Datei in das Format: plaintext geschieht auf der Kommandozeile mit folgender Befehlssequenz:
java org.apache.xalan.xslt.Process -in ../xml/introduction.xml \ -xsl latex.xsl \ -TEXT -OUT introduction.xml.texÜber die Datei: navigation.xml steht ein Zugriff auf alle verwendeten Dateien zur Verfügung. Ebenfalls mit Xalan wird über ein passendes Stylesheet aus der Navigationsdatei ein Skript erzeugt, das sämtliche benötigten Files nach .tex parst:
#! /bin/sh java org.apache.xalan.xslt.Process \ -in ../xml/navigation.xml \ -xsl xalan.xsl \ -TEXT -OUT ../sed/xalanlatex sed s/'.xml.tex'/'.tex'/g \ ../sed/xalanlatex >xalanlatexDabei sorgt die Passage sed ... dafür, dass keine unnötig langen und verwirrenden Dateiendungen geschehen, was im Stylesheet selber so nicht möglich ist.
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:strip-space elements="*"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="titel"> #<xsl:apply-templates/> </xsl:template> <xsl:template match="index"></xsl:template> <xsl:template match="navigation"></xsl:template> <xsl:template match="home"></xsl:template> <xsl:template match="part"> #Part: <xsl:apply-templates/> </xsl:template> <xsl:template match="chapter"> #Chapter: <xsl:apply-templates/> </xsl:template> <xsl:template match="section"> #Section: <xsl:apply-templates/> </xsl:template> <xsl:template match="subsection"> #Subsection:<xsl:apply-templates/> </xsl:template> <xsl:template match="datei"> java org.apache.xalan.xslt.Process -in ../xml/<xsl:value-of select="link/@href"/> \ -xsl latex.xsl \ -TEXT -OUT <xsl:value-of select="link/@href"/>.zw fold -s -w 70 <xsl:value-of select="link/@href"/>.zw ><xsl:value-of select="link/@href"/>.tex </xsl:template> </xsl:stylesheet>Zusätzlich zum Parsen nach .tex werden die Dateien mit dem Linux-Kommando
Es entsteht das Skript:
~/printweb/latex/xalan_latex
#! /bin/sh # # Skript zum Erzeugen von LaTeX-Dateien aus xml # für den Projektbericht PrintWeb # ############################################################## ############################################################## # # Wurzelverzeichnis # ############################################################### ############################################################### # # printweb/latex # ############################################################### java org.apache.xalan.xslt.Process \ -in ../xml/titel.xml -xsl latex.xsl \ -TEXT -OUT titel.tex java org.apache.xalan.xslt.Process \ -in ../xml/introduction.xml -xsl latex.xsl \ -TEXT -OUT introduction.tex # ############################################################### # # printweb/latex/files # ############################################################### # java org.apache.xalan.xslt.Process \ -in ../xml/files/planung.xml -xsl latex.xsl \ -TEXT -OUT files/planung.tex java org.apache.xalan.xslt.Process \ -in ../xml/files/zeit.xml -xsl latex.xsl \ -TEXT -OUT files/zeit.tex java org.apache.xalan.xslt.Process \ -in ../xml/files/ergebnisse.xml -xsl latex.xsl \ -TEXT -OUT files/ergebnisse.tex # ############################################################### # # printweb/latex/listings # ############################################################### # java org.apache.xalan.xslt.Process \ -in ../xml/listings/latex.xsl.xml -xsl latex.xsl \ -TEXT -OUT listings/latex.xsl.tex
Vorgegriffen sei an dieser Stelle, dass für die Anwendung der gleichen Technik auf die automatische Erzeugung einer HTML-Website die Navigationsseite vollständig sein muss, d.h., sie muss auch die Dateien index.xml, die nur das Frameset enthält, und introduction.xml, auf die nicht immer explizit gelinkt wird, enthalten (s. Formatierung von HTML-Seiten).
Die vollständige Navigationsseite für das Projekt PrintWeb ist hier dokumentiert:
navigation.xml
Die erzeugten .tex-Files werden nun in den LaTeX-Formatierungsfile printweb/latex/printweb.tex eingehängt. Da LaTeX eine beliebige Tiefe der Schachtelung mittels \input{} gestattet, kann hier ebenfalls per Xalan aus dem File: printweb/xml/navigation.xml einen .tex-File erzeugt werden, der wiederum alle benötigten Files enthält:
printweb/latex/makexalan2
#! /bin/sh java org.apache.xalan.xslt.Process \ -in ../xml/navigation.xml \ -xsl xalan2.xsl \ -TEXT -OUT ../sed/infiles.tex sed s/'.xml.tex'//g \ ../sed/infiles.tex >infiles.texDas dazu benötigte Stylesheet:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="titel">
\input{<xsl:value-of select="link/@href"/>}
\thispagestyle{empty}
\newpage
\input{files/fancysty}
\raggedbottom
\tableofcontents
</xsl:template>
<xsl:template match="index"></xsl:template>
<xsl:template match="navigation"></xsl:template>
<xsl:template match="home"></xsl:template>
<xsl:template match="part">
\part{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="chapter">
\chapter{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="section">\section{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="subsection">\subsection{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="datei">\input{<xsl:value-of
select="link/@href"/>.tex}
</xsl:template>
</xsl:stylesheet>
Das Stylesheet erledigt außerdem die Erzeugung der Gliederung, soweit sie aus printweb/xml/navigation.xml abzuleiten ist.
Es wird die .tex-Datei: printweb/latex/infiles.tex erzeugt und in den LaTeX-Formatfile: printweb/latex/printweb.tex eingehängt. Nach dem zweimaligen Ausführen von latex printweb im Verzeichnis: printweb/latex steht die komplette Printfassung als .dvi-Format zur Verfügung.
In analoger Weise wird auch die Online-Version erstellt. Bemerkt sei, dass Cocoon aus der XML-Site dynamisch HTML ausliefert; weil aber die gesamte Seite auf einen Server gestellt werden soll, der nicht über Cocoon oder eine andere XML-Engine verfügt, muss aus der XML-Quelle eine komplette, statische HTML-Site generiert werden.
Zu beachten ist, dass die HTML-Site, im Gegensatz zur Printausgabe, auch die Dateien index.html und navigation.html generieren muss. Damit das für die HTML-Site, aber nicht für die Printausgabe geschieht, bekommen die Links auf index.xml und navigation.xml in der Datei: printweb/xml/navigation.xml statt dem Tag: <datei> die beiden Tags: <index>, <navigation>
In gleicher Weise wie oben bei der Printfassung geschildert, wird zunächst aus der xml-Navigationsdatei das Skript zum Parsen der XML-Dateien nach HTML erzeugt mit dem Skript:
printweb/html/makexalan
#! /bin/sh java org.apache.xalan.xslt.Process \ -in ../xml/navigation.xml \ -xsl xalan.xsl \ -TEXT -OUT ../sed/xalanhtml sed s/'.xml.html'/'.html'/g \ ../sed/xalanhtml >xalanhtmlDafür wird das Stylesheet: printweb/html/xalan.xsl verwendet.
Es entsteht das Skript zum Parsen aller XML-Dateien nach HTML: printweb/html/xalanhtml
Mit diesem Skript werden außerdem in allen geparsten Dateien die .xml-Links gegen .html-Links ausgetauscht mit: sed s/'.html"'/'.html"'/g (s. xalan.xsl und xalanhtml).
Nach Ausführen von ./xalanhtml im Verzeichnis: printweb/html muss in der Datei: printweb/listings/navigation.xsl.xml noch eine Anpassung vorgenommen werden: In der Originaldatei kommt ein CDATA-Abschnitt vor. Die gesamte Datei wird nun zur Erzeugung des Listings ihrerseits als CDATA-Element gekapselt; eine Schachtelung ist aber in der Stylesheet-Sprache XSLT nicht vorgesehen.
Entsprechend muss vor dem originären CDATA-Abschnitt der übergeordnete CDATA-Abschnitt mit ] ]> beendet und nach dessen Ende mit <! [CDATA[ wieder begonnen werden. Andernfalls erzeugt Xalan die Fehlermeldung:
file:/usr/local/jakarta/dist/tomcat/webapps/cocoon/xml/printweb/html/ ../xml/listings/navigation.xsl.xml; Line 103; Column -1; XSLT Error (javax.xml.transform.TransformerException): org.apache.crimson.parser/P-034 code 9Nach dieser Anpassung steht dann die statische HTML-Website einschließlich Verlinkung zur Verfügung.
Als Listings werden für das Projekt PrintWeb verwendete Files zitiert. Deren Modifikationen müssen aber ebenfalls in die Listings einfließen, also wird ein Vorgehen gebraucht, mit dem alle Listings auf den aktuellen Stand gebracht werden können.
Das oben angewandte Verfahren der Erzeugung des Skriptes aus einem XML-Navigationsfile kann hier nicht angewendet werden, weil Dateien aus verschiedenen Verzeichnissen gebraucht werden. Die als Listings benötigten Dateien müssen einzeln in das benötigte Skript eingetragen werden.
Das Skript ist ein Shell-Skript unter Linux. Es Erzeugt XML-Dateien mit dem adäquaten Header, dem Inhalt der als Listing wiederzugebenden Datei in einen CDATA-Abschnitt gefasst und ein Dateiendefür wohlgeformtes XML, d.h. es werden die geöffneten Tags <programlisting> und <satzspiegel> auch wieder geschlossen. Auch hier erfolgt ein Umbruch auf 70 Zeichen pro Zeile für die Printversion.
list.sh
### xml/printweb/html/xalanhtml echo '<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="../../../text.xsl" type="text/xsl"?> <?cocoon-process type="xslt"?> <satzspiegel> <subsect3>~/printweb/html/xalanhtml</subsect3> <programlisting> <![CDATA[' >xalanhtml.zw cat ../../html/xalanhtml >>xalanhtml.zw echo ']> </programlisting> </satzspiegel>' >>xalanhtml.zw fold -w 70 -s xalanhtml.zw >xalanhtml.xmlNach Ausführen von list.sh im Verzeichnis: printweb/xml/listings steht eine aktuelle Version aller benötigten Listings zur Verfügung.
Inhaltsverzeichnis
Für die Online- und Printversion des Projektes müssen etliche Files geparst werden. Um Arbeitsaufwand und Fehlerquellen zu minimieren, soll das über entsprechende Skripte geschehen.
Für eine komplette Neudarstellung sowohl der Print- als auch der Webseiten müssen folgende Skripte ausgeführt werden:
| printweb/xml/listings/list.sh | Erzeugt aktuelle Listing-Dateien |
| printweb/html/makexalan | Erzeugt aus printweb/xml/navigation.xml ein Skript mit Parseranweisungen für alle XML-Dateien: xalanhtml |
| printweb/html/xalanhtml | Parst XML nach HTML und benennt Links entsprechend um |
| printweb/latex/makexalan | Erzeugt aus printweb/xml/navigation.xml ein Skript mit Parseranweisungen für alle XML-Dateien: xalanlatex |
| printweb/latex/makexalan2 | Erzeugt ebenfalls aus printweb/xml/navigation.xml eine .tex-Datei mit der Gliederung und allen einzuhängenden .tex-Textdateien |
| printweb/latex/xalanlatex | Parst XML nach LaTeX |
Inhaltsverzeichnis
Das Parsen einer XML-Datei in das Format: plaintext geschieht auf der Kommandozeile mit folgender Befehlssequenz:
java org.apache.xalan.xslt.Process -in ../xml/introduction.xml \ -xsl latex.xsl \ -TEXT -OUT introduction.xml.texÜber die Datei: navigation.xml steht ein Zugriff auf alle verwendeten Dateien zur Verfügung. Ebenfalls mit Xalan wird über ein passendes Stylesheet aus der Navigationsdatei ein Skript erzeugt, das sämtliche benötigten Files nach .tex parst:
#! /bin/sh java org.apache.xalan.xslt.Process \ -in ../xml/navigation.xml \ -xsl xalan.xsl \ -TEXT -OUT ../sed/xalanlatex sed s/'.xml.tex'/'.tex'/g \ ../sed/xalanlatex >xalanlatexDabei sorgt die Passage sed ... dafür, dass keine unnötig langen und verwirrenden Dateiendungen geschehen, was im Stylesheet selber so nicht möglich ist.
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:strip-space elements="*"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="titel"> #<xsl:apply-templates/> </xsl:template> <xsl:template match="index"></xsl:template> <xsl:template match="navigation"></xsl:template> <xsl:template match="home"></xsl:template> <xsl:template match="part"> #Part: <xsl:apply-templates/> </xsl:template> <xsl:template match="chapter"> #Chapter: <xsl:apply-templates/> </xsl:template> <xsl:template match="section"> #Section: <xsl:apply-templates/> </xsl:template> <xsl:template match="subsection"> #Subsection:<xsl:apply-templates/> </xsl:template> <xsl:template match="datei"> java org.apache.xalan.xslt.Process -in ../xml/<xsl:value-of select="link/@href"/> \ -xsl latex.xsl \ -TEXT -OUT <xsl:value-of select="link/@href"/>.zw fold -s -w 70 <xsl:value-of select="link/@href"/>.zw ><xsl:value-of select="link/@href"/>.tex </xsl:template> </xsl:stylesheet>Zusätzlich zum Parsen nach .tex werden die Dateien mit dem Linux-Kommando
Es entsteht das Skript:
~/printweb/latex/xalan_latex
#! /bin/sh # # Skript zum Erzeugen von LaTeX-Dateien aus xml # für den Projektbericht PrintWeb # ############################################################## ############################################################## # # Wurzelverzeichnis # ############################################################### ############################################################### # # printweb/latex # ############################################################### java org.apache.xalan.xslt.Process \ -in ../xml/titel.xml -xsl latex.xsl \ -TEXT -OUT titel.tex java org.apache.xalan.xslt.Process \ -in ../xml/introduction.xml -xsl latex.xsl \ -TEXT -OUT introduction.tex # ############################################################### # # printweb/latex/files # ############################################################### # java org.apache.xalan.xslt.Process \ -in ../xml/files/planung.xml -xsl latex.xsl \ -TEXT -OUT files/planung.tex java org.apache.xalan.xslt.Process \ -in ../xml/files/zeit.xml -xsl latex.xsl \ -TEXT -OUT files/zeit.tex java org.apache.xalan.xslt.Process \ -in ../xml/files/ergebnisse.xml -xsl latex.xsl \ -TEXT -OUT files/ergebnisse.tex # ############################################################### # # printweb/latex/listings # ############################################################### # java org.apache.xalan.xslt.Process \ -in ../xml/listings/latex.xsl.xml -xsl latex.xsl \ -TEXT -OUT listings/latex.xsl.tex
Vorgegriffen sei an dieser Stelle, dass für die Anwendung der gleichen Technik auf die automatische Erzeugung einer HTML-Website die Navigationsseite vollständig sein muss, d.h., sie muss auch die Dateien index.xml, die nur das Frameset enthält, und introduction.xml, auf die nicht immer explizit gelinkt wird, enthalten (s. Formatierung von HTML-Seiten).
Die vollständige Navigationsseite für das Projekt PrintWeb ist hier dokumentiert:
navigation.xml
Die erzeugten .tex-Files werden nun in den LaTeX-Formatierungsfile printweb/latex/printweb.tex eingehängt. Da LaTeX eine beliebige Tiefe der Schachtelung mittels \input{} gestattet, kann hier ebenfalls per Xalan aus dem File: printweb/xml/navigation.xml einen .tex-File erzeugt werden, der wiederum alle benötigten Files enthält:
printweb/latex/makexalan2
#! /bin/sh java org.apache.xalan.xslt.Process \ -in ../xml/navigation.xml \ -xsl xalan2.xsl \ -TEXT -OUT ../sed/infiles.tex sed s/'.xml.tex'//g \ ../sed/infiles.tex >infiles.texDas dazu benötigte Stylesheet:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="titel">
\input{<xsl:value-of select="link/@href"/>}
\thispagestyle{empty}
\newpage
\input{files/fancysty}
\raggedbottom
\tableofcontents
</xsl:template>
<xsl:template match="index"></xsl:template>
<xsl:template match="navigation"></xsl:template>
<xsl:template match="home"></xsl:template>
<xsl:template match="part">
\part{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="chapter">
\chapter{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="section">\section{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="subsection">\subsection{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="datei">\input{<xsl:value-of
select="link/@href"/>.tex}
</xsl:template>
</xsl:stylesheet>
Das Stylesheet erledigt außerdem die Erzeugung der Gliederung, soweit sie aus printweb/xml/navigation.xml abzuleiten ist.
Es wird die .tex-Datei: printweb/latex/infiles.tex erzeugt und in den LaTeX-Formatfile: printweb/latex/printweb.tex eingehängt. Nach dem zweimaligen Ausführen von latex printweb im Verzeichnis: printweb/latex steht die komplette Printfassung als .dvi-Format zur Verfügung.
In analoger Weise wird auch die Online-Version erstellt. Bemerkt sei, dass Cocoon aus der XML-Site dynamisch HTML ausliefert; weil aber die gesamte Seite auf einen Server gestellt werden soll, der nicht über Cocoon oder eine andere XML-Engine verfügt, muss aus der XML-Quelle eine komplette, statische HTML-Site generiert werden.
Zu beachten ist, dass die HTML-Site, im Gegensatz zur Printausgabe, auch die Dateien index.html und navigation.html generieren muss. Damit das für die HTML-Site, aber nicht für die Printausgabe geschieht, bekommen die Links auf index.xml und navigation.xml in der Datei: printweb/xml/navigation.xml statt dem Tag: <datei> die beiden Tags: <index>, <navigation>
In gleicher Weise wie oben bei der Printfassung geschildert, wird zunächst aus der xml-Navigationsdatei das Skript zum Parsen der XML-Dateien nach HTML erzeugt mit dem Skript:
printweb/html/makexalan
#! /bin/sh java org.apache.xalan.xslt.Process \ -in ../xml/navigation.xml \ -xsl xalan.xsl \ -TEXT -OUT ../sed/xalanhtml sed s/'.xml.html'/'.html'/g \ ../sed/xalanhtml >xalanhtmlDafür wird das Stylesheet: printweb/html/xalan.xsl verwendet.
Es entsteht das Skript zum Parsen aller XML-Dateien nach HTML: printweb/html/xalanhtml
Mit diesem Skript werden außerdem in allen geparsten Dateien die .xml-Links gegen .html-Links ausgetauscht mit: sed s/'.html"'/'.html"'/g (s. xalan.xsl und xalanhtml).
Nach Ausführen von ./xalanhtml im Verzeichnis: printweb/html muss in der Datei: printweb/listings/navigation.xsl.xml noch eine Anpassung vorgenommen werden: In der Originaldatei kommt ein CDATA-Abschnitt vor. Die gesamte Datei wird nun zur Erzeugung des Listings ihrerseits als CDATA-Element gekapselt; eine Schachtelung ist aber in der Stylesheet-Sprache XSLT nicht vorgesehen.
Entsprechend muss vor dem originären CDATA-Abschnitt der übergeordnete CDATA-Abschnitt mit ] ]> beendet und nach dessen Ende mit <! [CDATA[ wieder begonnen werden. Andernfalls erzeugt Xalan die Fehlermeldung:
file:/usr/local/jakarta/dist/tomcat/webapps/cocoon/xml/printweb/html/ ../xml/listings/navigation.xsl.xml; Line 103; Column -1; XSLT Error (javax.xml.transform.TransformerException): org.apache.crimson.parser/P-034 code 9Nach dieser Anpassung steht dann die statische HTML-Website einschließlich Verlinkung zur Verfügung.
Als Listings werden für das Projekt PrintWeb verwendete Files zitiert. Deren Modifikationen müssen aber ebenfalls in die Listings einfließen, also wird ein Vorgehen gebraucht, mit dem alle Listings auf den aktuellen Stand gebracht werden können.
Das oben angewandte Verfahren der Erzeugung des Skriptes aus einem XML-Navigationsfile kann hier nicht angewendet werden, weil Dateien aus verschiedenen Verzeichnissen gebraucht werden. Die als Listings benötigten Dateien müssen einzeln in das benötigte Skript eingetragen werden.
Das Skript ist ein Shell-Skript unter Linux. Es Erzeugt XML-Dateien mit dem adäquaten Header, dem Inhalt der als Listing wiederzugebenden Datei in einen CDATA-Abschnitt gefasst und ein Dateiendefür wohlgeformtes XML, d.h. es werden die geöffneten Tags <programlisting> und <satzspiegel> auch wieder geschlossen. Auch hier erfolgt ein Umbruch auf 70 Zeichen pro Zeile für die Printversion.
list.sh
### xml/printweb/html/xalanhtml echo '<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="../../../text.xsl" type="text/xsl"?> <?cocoon-process type="xslt"?> <satzspiegel> <subsect3>~/printweb/html/xalanhtml</subsect3> <programlisting> <![CDATA[' >xalanhtml.zw cat ../../html/xalanhtml >>xalanhtml.zw echo ']> </programlisting> </satzspiegel>' >>xalanhtml.zw fold -w 70 -s xalanhtml.zw >xalanhtml.xmlNach Ausführen von list.sh im Verzeichnis: printweb/xml/listings steht eine aktuelle Version aller benötigten Listings zur Verfügung.
Inhaltsverzeichnis
Alle verwendeten Dateien, Stylesheets und Skripte sind hier noch einmal aufgeführt, nach Gruppen zusammengefasst.
Als Beispiele dienen Dateien, Stylesheets und Skripte, die zur Neufassung der Webseite im DocBook-Format verwendet worden sind, und nicht mehr die älteren Versionen aus dem Projekt PrintWeb. Sie sind im praktischen Einsatz entstanden, und entsprechend ist ihre Funktion gewährleistet.
Inhaltsverzeichnis
Als dynamisch werden hier Webseiten bezeichnet, die direkt aus XML-Sourcen generiert werden. Voraussetzung ist ein entsprechend ausgestatteter Provider, die leider noch ausgesprochen selten sind. Mir ist kein kommerzieller bekannt.
| XML-Files | XSL-Stylesheets |
|---|---|
| index.xml | frames.xsl |
| navhaupt.xml | navigation.xsl |
| (text).xml | text.xsl |
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="../stylesheets/eigene/frames.xsl" type="text/xsl"?> <?cocoon-process type="xslt"?> <frameset frameborder="1" cols="180,*" rows="*,0"> <frame name="links" marginwidth="15" marginheight="15" xml:link="simple" src="navigation/navhaupt.html"></frame> <frame name="rechts" marginwidth="30" marginheight="15" xml:link="simple" src="einleitung.html"></frame> </frameset>
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"></meta> <meta name="description" content="Präsentations-Website des Moebius-Teilnehmers Andreas Popper"></meta> <meta name="author" content="Andreas Popper"></meta> <meta name="keywords" content="Webpräsentation, Webserver, Programmieren, Programmiersprachen,Programmiersprache, Software-Engineering, Software, Java, Perl, PHP, PHP4, Python, Betriebssystem, Betriebssysteme, Linux, Apache, Tomcat, mod_jk, mod_jserv, Cocoon, XML, XSL, XSLT, XPATH, sql, PostgreSQL, Mysql, SQL-Server, Datenbank, Datenbanken"></meta> <meta name="language" content="german"></meta> <meta name="date" content="03.11.2001"></meta> </head> <xsl:apply-templates/> </html> </xsl:template> <xsl:template match="frameset"> <frameset> <xsl:attribute name="frameborder"> <xsl:value-of select="@frameborder"/> </xsl:attribute> <xsl:if test="@cols"> <xsl:attribute name="cols"> <xsl:value-of select="@cols"/> </xsl:attribute> </xsl:if> <xsl:if test="@rows"> <xsl:attribute name="rows"> <xsl:value-of select="@rows"/> </xsl:attribute> </xsl:if> <xsl:apply-templates/> </frameset> </xsl:template> <!-- autoatische Datumsangabe --> <xsl:template match="datum">16.05.2001</xsl:template> <xsl:template match="frame"> <frame> <xsl:attribute name="name"> <xsl:value-of select="@name"/> </xsl:attribute> <xsl:attribute name="marginwidth"> <xsl:value-of select="@marginwidth"/> </xsl:attribute> <xsl:attribute name="marginheight"> <xsl:value-of select="@marginheight"/> </xsl:attribute> <xsl:attribute name="src"> <xsl:value-of select="@src"/>#<xsl:value-of select="@idref"/> </xsl:attribute> </frame> </xsl:template> </xsl:stylesheet>
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="../../navigation.xsl" type="text/xsl"?> <?cocoon-process type="xslt"?> <page> <!-- Navigationsseite --> <kopf> </kopf> <url> <titel><link xml:link="simple" href="titel.html"> </link></titel> <!-- Dateinamen, die von Xalan gebraucht werden:--> <index><link xml:link="simple" href="index.html">index</link></index> <navigation><link xml:link="simple" href="navigation.html">navigation</link></navigation> <!-- Wenn auf eine Datei innerhalb eines Verzeichnisses gelinkt wird:--> <part>Projekt Printweb</part> <datei><link xml:link="simple" href="introduction.html">Zusammenfassung </link></datei> <datei><link xml:link="simple" href="files/zeit.html">Zeittafel </link></datei> <datei><link xml:link="simple" href="files/planung.html">Projektplanung </link></datei> <part>Ergebnisse</part> <datei><link xml:link="simple" href="files/dynxml.html">XML-Website </link></datei> <datei><link xml:link="simple" href="files/skripte.html">Skripte </link></datei> <datei><link xml:link="simple" href="files/latex.html">Printerzeugnis </link></datei> <datei><link xml:link="simple" href="files/html.html">HTML-Website </link></datei> <part>Listings</part> <chapter>XML</chapter> <datei><link xml:link="simple" href="listings/index.xml.html">index.xml</link></datei> <datei><link xml:link="simple" href="listings/frames2.xsl.html">frames2.xsl</link></datei> <datei><link xml:link="simple" href="listings/navigation.xml.html">navigation.xml</link></datei> <datei><link xml:link="simple" href="listings/navigation.xsl.html">navigation.xsl</link></datei> <datei><link xml:link="simple" href="listings/zeit.xml.html">"text".xml</link></datei> <datei><link xml:link="simple" href="listings/text.xsl.html">text.xsl</link></datei> <chapter>LaTeX</chapter> <datei><link xml:link="simple" href="listings/makexalan.html">makexalan </link></datei> <datei><link xml:link="simple" href="listings/xalanlatex.xsl.html">xalan.xsl </link></datei> <datei><link xml:link="simple" href="listings/makexalan2.html">makexalan2 </link></datei> <datei><link xml:link="simple" href="listings/xalanlatex2.xsl.html">xalan2.xsl </link></datei> <datei><link xml:link="simple" href="listings/xalanlatex.html">xalanlatex </link></datei> <datei><link xml:link="simple" href="listings/latex.xsl.html">latex.xsl </link></datei> <datei><link xml:link="simple" href="listings/printweb_tex.html">printweb.tex </link></datei> <datei><link xml:link="simple" href="listings/infiles_tex.html">infiles.tex </link></datei> <datei><link xml:link="simple" href="listings/zeit_tex.html">"text".tex </link></datei> <chapter>HTML</chapter> <datei><link xml:link="simple" href="listings/makexalanhtml.html">makexalan </link></datei> <datei><link xml:link="simple" href="listings/makexalanhtml.xsl.html">xalan.xsl </link></datei> <datei><link xml:link="simple" href="listings/xalanhtml.html">xalanhtml </link></datei> <datei><link xml:link="simple" href="listings/indexhtml.html">index.html </link></datei> <datei><link xml:link="simple" href="listings/navigationhtml.html">navigation.html </link></datei> <datei><link xml:link="simple" href="listings/zeithtml.html">"text".html </link></datei> <!-- Wenn auf ein Verzeichnis mit eigenem Frameset gelinkt wird:--> <verzeichnis><link xml:link="simple" href="listings/index.html"> </link></verzeichnis> <!-- Zurück zur Startseite--> <home><link xml:link="simple" href="../../index.html"> Home</link></home> </url> </page>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="page">
<html>
<meta content="text/html; charset=iso-8859-1"
http-equiv="Content-Type"></meta>
<head>
<title>
Startseite projekt_anp
</title>
<style>
<![CDATA[
H1 {margin-top:2cm; align:center; font-size: 32pt; color: black;
font-weight: bold; font-family:helvetica; }
H2,h2 { align:center; margin-top:4mm; margin-bottom:0pt; font-size:
24pt; color: black; font-weight: bold; font-family:Helvetica; }
H3,h3 {margin-top:6pt; margin-bottom:0pt; align:center;
font-size: 18pt; color: black; font-weight: bold;
font-family:Helvetica; }
H4 {margin-bottom:2pt; font-size: 16pt; color: black;
font-weight: bold; font-family:Helvetica; width:90%;
text-align:left; }
H5 { margin-bottom:0pt; font-size: 14pt; color: black;
font-weight: bold; font-family:Helvetica; text-align:left; }
a { margin-top:2pt; margin-bottom:0pt; font-size: 14pt;
font-weight:bold; font-family: Helvetica; }
PRE {font-size:12pt; margin-top:-10pt; margin-bottom:-10pt;
font-family:Courier; text-align:left;}
p.1 {font-size:24pt; margin-top:10pt; margin-bottom:10pt;
font-family:Courier; font-weight:bold; text-align:left;}
p.2 {font-size:12pt; margin-top:-10pt; margin-bottom:-10pt;
font-family:Courier; text-align:left;}
p.3 {font-size:12pt; margin-top:-10pt; margin-bottom:-10pt;
font-family:Courier; text-align:left;}
<!-- <p style="background-image:url(back.gif);">Text</p>-->
body { background-color:#FDF5E6;}
p,ul,ol,blockquote,img,ul,li, { font-size:14pt;
font-family:Helvetica; font-weight:400; margin-top:5pt;
margin-bottom:7pt}
hr { margin-left:0pt; }
table, tr, td, { font-size:14pt; font-family:Helvetica;
font-weight:400; }
p.gross {margin-top:25pt; margin-bottom:6pt}
p.mittel {margin-top:20pt; margin-bottom:0pt}
p.klein {margin-top:2pt; margin-bottom:0pt}
b { font-size:16pt; }
br {margin-top:5pt; margin-bottom:7pt}
br.minus {margin-top:-5pt; margin-bottom:-0pt}
a.sehrgross { font-size:24pt; font-weight:bold;}
p.al,ul.al,ol.al,blockquote.al,table.al,img.al,ul.al,li.al, tr.al,
td.al, b.al { font-size:14pt; font-family:Times; font-weight:600;}
div { font-size:14pt; font-family:Times; font-weight:600;}
code {font-family:Courier; font-size:14pt; }
]]>
</style>
</head>
<body bgcolor="#FDF5E6">
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<!-- stylesheet fuer navigation.xml-->
<xsl:template match="kopf">
<xsl:apply-templates select="titel"/>
<xsl:apply-templates select="text"/>
</xsl:template>
<xsl:template match="index"></xsl:template>
<xsl:template match="navigation"></xsl:template>
<!--xsl:template match="titel">
<p class="mittel">
<center>
<font size="6">
<b>
<xsl:apply-templates/>
</b>
</font>
</center>
</p>
</xsl:template-->
<xsl:template match="part">
<p class="gross">
<font size="5">
<b>
<xsl:apply-templates/>
</b>
</font>
</p>
</xsl:template>
<xsl:template match="chapter">
<p class="mittel">
<b>
<xsl:apply-templates/>
</b>
</p>
</xsl:template>
<xsl:template match="section">
<p class="mittel">
<font size="4">
<b>
<xsl:apply-templates/>
</b>
</font>
</p>
</xsl:template>
<xsl:template match="subsection">
<p class="mittel">
<font size="3">
<b>
<xsl:apply-templates/>
</b>
</font>
</p>
</xsl:template>
<xsl:template match="titel">
<p class="klein">
<a class="sehrgross" target="rechts">
<xsl:attribute name="HREF">
<xsl:value-of select="link/@href"/>
</xsl:attribute>
<xsl:value-of select="link"/>
</a>
</p>
</xsl:template>
<xsl:template match="datei">
<p class="klein">
<a target="rechts">
<xsl:attribute name="HREF">
<xsl:value-of select="link/@href"/>
</xsl:attribute>
<xsl:value-of select="link"/>
</a>
</p>
</xsl:template>
<xsl:template match="verzeichnis">
<p class="klein">
<a target="_top">
<xsl:attribute name="HREF">
<xsl:value-of select="link/@href"/>
</xsl:attribute>
<xsl:value-of select="link"/>
</a>
</p>
</xsl:template>
<xsl:template match="home">
<p align="right">
<font size="5">
<b>
<a target="_top">
<xsl:attribute name="HREF">
<xsl:value-of select="link/@href"/>
</xsl:attribute>
<xsl:value-of select="link"/>
</a>
</b>
</font>
</p>
</xsl:template>
<xsl:template match="intro">
<p class="klein">
<a target="rechts">
<xsl:attribute name="HREF">
<xsl:value-of select="link/@href"/>
</xsl:attribute>
<xsl:value-of select="link"/>
</a>
</p>
</xsl:template>
</xsl:stylesheet>
Als Beispiel für eine XML-Textdatei wird hier die Seite über dynamisches XML mittels Cocoon gewählt:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="../../../text.xsl" type="text/xsl"?> <?cocoon-process type="xslt"?> <satzspiegel> <chapter>Website Printweb</chapter> <abs> Das Projekt PrintWeb wurde begonnen, um für das Projekt xml2sql (s. <verweis xml:link="simple" href="http://www.germanxml.de/projekte/xml2sql">www.germanxml.de/projekte/xml2sql</verweis>) die Ausgabe sowohl als gedruckte Broschüre als auch auf der genannten Website zu erzeugen. </abs> <abs> Im hier vorliegenden Text wird das Vorgehen aber anhand dieses Projektes erläutert, für das in analoger Weise verfahren wird wie für xml2sql. </abs> <section>Dynamische Webseiten mit Cocoon</section> <abs> Mit der XML-Produktionsumgebung Apache/Tomcat/Cocoon können Webseiten aus XML dynamisch generiert und als HTML ausgeliefert werden. </abs> <abs> Es werden für jedes Verzeichnis immer drei Dateien angelegt:<br/> <fett>index.xml, navigtion.xml, introduction.xml</fett>. </abs> <abs> Die Datei <fett>index.xml</fett> enthält Angaben für die Frames: <code> <![CDATA[ <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="../../frames.xsl" type="text/xsl"?> <?cocoon-process type="xslt"?> <frameset frameborder="1" cols="180,*" rows="*,0"> <frame name="links" marginwidth="15" marginheight="15" xml:link="simple" href="navigation.html"></frame> <frame name="rechts" marginwidth="30" marginheight="15" xml:link="simple" href="introduction.html"></frame> </frameset> ]]> </code> Entsprechend müssen <fett>navigation.xml</fett> und <fett>introduction.xml</fett> immer vorhanden sein. </abs> <abs> <fett>index.xml</fett> wird mit dem dazugehörigen Stylesheet <verweis xml:link="simple" href="../listings/frames2.xsl.html">frames.xsl</verweis> geparst und liefert das Grundgerüst für die HTML-Seiten. </abs> ... ... </satzspiegel>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Projekt Printweb</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></meta>
<meta name="description"
content="Projektbericht Printweb"></meta>
<meta name="author" content="Andreas Popper"></meta>
<meta name="keywords" content="Web, Apache,
Cocoon, Tomcat, mod_jk XML XSLT"></meta>
<style>
H1 {margin-top:2cm; margin-bottom:16pt; align:center;
font-size: 32pt; color: black; font-weight: bold;
font-family:helvetica; }
H2.gross {margin-top:12mm; align:center; font-size: 32pt;
color: black; font-weight: bold; font-family:Helvetica; }
H2,h2 {margin-top:12mm; margin-bottom:12pt; font-size: 24pt;
color: black; font-weight: bold; font-family:Helvetica; }
H3 {margin-top:1cm;
font-size: 18pt; color: black;
font-weight: bold; font-family:Helvetica; }
H4 {margin-bottom:2pt; font-size: 16pt; color: black;
font-weight: bold; font-family:Helvetica; width:90%; text-align:left; }
H5 { margin-bottom:-20pt; font-size: 14pt; color: red;
font-weight: bold; font-family:Helvetica; width:90%; text-align:left; }
a { font-size: 14pt; font-weight:bold; font-family: Helvetica; }
PRE {font-size:12pt; margin-top:-10pt; margin-bottom:-10pt;
font-family:Courier; text-align:left;}
<!-- <p style="background-image:url(back.gif);">Text</p>-->
body { background-color:#FDF5E6;}
p,ul,ol,blockquote,img,ul,li, { font-size:14pt;
font-family:Helvetica; font-weight:400; margin-top:5pt;
margin-bottom:7pt}
hr { margin-left:0pt; }
table, tr, td, { font-size:14pt; font-family:Helvetica;
font-weight:400; }
p.klein {margin-top:5pt; margin-bottom:0pt}
b { font-size:16pt; }
p.gross { font-size:16pt; font-family:Helvetica; font-weight:600;}
div { font-size:14pt; font-family:Times; font-weight:600;}
code {font-family:Courier; font-size:12pt; }
</style>
<!-- stylesheet fuer textseiten.xml-->
<!-- Artikelanfang -->
</head>
<body >
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="br">
<br>
<xsl:apply-templates/>
</br>
</xsl:template>
<xsl:template match="titel">
<h1 align="center">
<xsl:apply-templates/>
</h1>
</xsl:template>
<xsl:template match="titel2">
<h3>
<center>
<xsl:apply-templates/>
</center>
</h3>
</xsl:template>
<xsl:template match="subtitel">
<h3>
<xsl:apply-templates/>
</h3>
</xsl:template>
<xsl:template match="autor">
<h2 align="center">
<xsl:apply-templates/>
</h2>
</xsl:template>
<xsl:template match="klappentext">
<p style="width:50%">
<font size="3"><b>
<xsl:apply-templates/>
</b></font>
</p>
</xsl:template>
<xsl:template match="ixtract">
<h3>iXtrakt</h3>
<font size="3"><b>
<p style="width:50%">
<xsl:apply-templates/>
</p>
</b></font>
</xsl:template>
<xsl:template match="footnote">
<br>
<font size="2">
Bemerkung:
<xsl:apply-templates/>
</font>
</br>
</xsl:template>
<!-- ================================================ -->
<!-- Templates für den Satzspiegel;
Gliederung entlang der LaTeX-Konventionen -->
<xsl:template match="text">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="chapter">
<h1>
<xsl:apply-templates/>
</h1>
</xsl:template>
<xsl:template match="section">
<h2>
<xsl:apply-templates/>
</h2>
</xsl:template>
<xsl:template match="subsection">
<h3 >
<xsl:apply-templates/>
</h3>
</xsl:template>
<xsl:template match="subsubsection">
<p></p><br></br>
<font style="font-size:18pt; font-weight:bold">
<xsl:apply-templates/>
</font><br></br>
</xsl:template>
<xsl:template match="paragraph">
<br/><b>
<xsl:apply-templates/>
</b><br/>
</xsl:template>
<xsl:template match="abs">
<p>
<xsl:apply-templates/>
</p>
<xsl:for-each select="footnote">
<a target="rechts">
<xsl:attribute name="HREF">
<xsl:value-of select="link/@href"/>
</xsl:attribute>
<xsl:value-of select="link"/>
</a>
</xsl:for-each>
</xsl:template>
<!-- <lit> dient der Wiedergabe von Druck- und Onlinequellen -->
<xsl:template match="lit">
<br>
<xsl:apply-templates/>
</br>
</xsl:template>
<!-- <code> dient der verbatimen Wiedergabe längerer Passagen-->
<xsl:template match="code">
<pre><xsl:apply-templates/></pre>
</xsl:template>
<!-- <verb> dient der verbatimen Wiedergabe kurzer Passagen-->
<xsl:template match="verb">
<code>
<xsl:apply-templates/>
</code>
</xsl:template>
<!-- Formatierung itemize: Aufzählung mit Punkten vorweg -->
<xsl:template match="itemize">
<p>
<ul><xsl:apply-templates select="item"/></ul>
</p>
</xsl:template>
<!-- Formatierung enumerate: Numerierte Listen -->
<xsl:template match="enumerate">
<ol>
<xsl:apply-templates/>
</ol>
</xsl:template>
<xsl:template match="item">
<li><xsl:apply-templates/></li>
</xsl:template>
<!-- Formatierung description: Stichwort in fett vorweg -->
<xsl:template match="description">
<table>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="itemb">
<tr>
<td valign="top">
<b>
<xsl:value-of select="@name"/>
</b>
</td>
<td>
<xsl:apply-templates/>
</td>
</tr>
</xsl:template>
<!-- Für fett Gedrucktes -->
<xsl:template match="fett">
<b>
<xsl:apply-templates/>
</b>
</xsl:template>
<!-- Für kursiv Gedrucktes -->
<xsl:template match="wr">
<i>
<xsl:apply-templates/>
</i>
</xsl:template>
<!-- Wörtliche Rede -->
<xsl:template match="anf">
"<xsl:apply-templates/>"
</xsl:template>
<!-- Der Schriftzug LaTeX, wie es sich gehört -->
<xsl:template match="latex">LaTeX
</xsl:template>
<!-- Darstellung von Links, Webadressen -->
<xsl:template match="verweis">
<xsl:for-each select=".">
<a target="rechts">
<xsl:attribute name="HREF">
<xsl:value-of select="@href"/>
</xsl:attribute>
<xsl:value-of select="."/>
</a>
</xsl:for-each>
</xsl:template>
<!-- Templates fuer die Navigation -->
<xsl:template match="url">
<xsl:for-each select="zeile">
<a target="_top">
<xsl:attribute name="HREF">
<xsl:value-of select="link/@href"/>
</xsl:attribute>
<font size="5"><b>
<xsl:value-of select="link"/>
</b>
</font>
</a>
</xsl:for-each>
<xsl:for-each select="home">
<p align="center">
<font size="5">
<b>
<a target="_top">
<xsl:attribute name="HREF">
<xsl:value-of select="link/@href"/>
</xsl:attribute>
<xsl:value-of select="link"/>
</a>
</b>
</font>
</p>
</xsl:for-each>
</xsl:template>
<xsl:template match="emailurl">
<xsl:for-each select="zeile">
<a target="_top">
<xsl:attribute name="HREF">
<xsl:value-of select="link/@href"/>
</xsl:attribute>
<font size="5"><b>
<xsl:value-of select="link"/>
</b>
</font>
</a>
</xsl:for-each>
</xsl:template>
<xsl:template match="kontakt">
<p>
<center>
<font size="4"><b>
Für eigene Beiträge, Kritik, Anregungen, Fragen...
</b>
</font>
<div style="position:relative; top:30px">
<a href="teilnahme.html"><h4>Kontakt</h4></a>
</div>
<p></p>
</center>
</p>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
Inhaltsverzeichnis
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:strip-space elements="*"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="titel"> # Titel: <xsl:apply-templates/> </xsl:template> <xsl:template match="part"> # Part: <xsl:apply-templates/> </xsl:template> <xsl:template match="chapter"> # Chapter: <xsl:apply-templates/> </xsl:template> <xsl:template match="section"> # Section: <xsl:apply-templates/> </xsl:template> <xsl:template match="subsection"> # Subsection: <xsl:apply-templates/> </xsl:template> <xsl:template match="home"></xsl:template> <xsl:template match="index"> java org.apache.xalan.xslt.Process -in ../xml/<xsl:value-of select="link/@href"/> \ -xsl ../../frames2.xsl \ -HTML -OUT ../sed/<xsl:value-of select="link/@href"/>.html sed s/'.html"'/'.html"'/g ../sed/<xsl:value-of select="link/@href"/>.html ><xsl:apply-templates/>.html </xsl:template> <xsl:template match="navigation"> java org.apache.xalan.xslt.Process -in ../xml/<xsl:value-of select="link/@href"/> \ -xsl ../../navigation.xsl \ -HTML -OUT ../sed/<xsl:value-of select="link/@href"/>.html sed s/'.html"'/'.xml.html"'/g ../sed/<xsl:value-of select="link/@href"/>.html ><xsl:apply-templates/>.html </xsl:template> <xsl:template match="datei"> java org.apache.xalan.xslt.Process -in ../xml/<xsl:value-of select="link/@href"/> \ -xsl ../../text.xsl \ -HTML -OUT ../sed/<xsl:value-of select="link/@href"/>.html sed s/'.html"'/'.html"'/g ../sed/<xsl:value-of select="link/@href"/>.html ><xsl:value-of select="link/@href"/>.html </xsl:template> <xsl:template match="verzeichnis"> java org.apache.xalan.xslt.Process -in ../xml/<xsl:value-of select="link/@href"/> \ -xsl ../../frames2.xsl \ -HTML -OUT ../sed/<xsl:value-of select="link/@href"/>.html sed s/'.html"'/'.html"'/g ../sed/<xsl:value-of select="link/@href"/>.html ><xsl:value-of select="link/@href"/>.html </xsl:template> </xsl:stylesheet>
# Titel: java org.apache.xalan.xslt.Process -in ../xml/index.xml \ -xsl ../../frames2.xsl \ -HTML -OUT ../sed/index.html sed s/'.html"'/'.html"'/g ../sed/index.html >index.html java org.apache.xalan.xslt.Process -in ../xml/navigation.xml \ -xsl ../../navigation.xsl \ -HTML -OUT ../sed/navigation.html sed s/'.html"'/'.html"'/g ../sed/navigation.html >navigation.html # Part: Projekt Printweb java org.apache.xalan.xslt.Process -in ../xml/introduction.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/introduction.html sed s/'.html"'/'.html"'/g ../sed/introduction.html >introduction.html java org.apache.xalan.xslt.Process -in ../xml/files/zeit.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/files/zeit.html sed s/'.html"'/'.html"'/g ../sed/files/zeit.html >files/zeit.html java org.apache.xalan.xslt.Process -in ../xml/files/planung.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/files/planung.html sed s/'.html"'/'.html"'/g ../sed/files/planung.html >files/planung.html # Part: Ergebnisse java org.apache.xalan.xslt.Process -in ../xml/files/dynxml.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/files/dynxml.html sed s/'.html"'/'.html"'/g ../sed/files/dynxml.html >files/dynxml.html java org.apache.xalan.xslt.Process -in ../xml/files/skripte.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/files/skripte.html sed s/'.html"'/'.html"'/g ../sed/files/skripte.html >files/skripte.html java org.apache.xalan.xslt.Process -in ../xml/files/latex.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/files/latex.html sed s/'.html"'/'.html"'/g ../sed/files/latex.html >files/latex.html java org.apache.xalan.xslt.Process -in ../xml/files/html.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/files/html.html sed s/'.html"'/'.html"'/g ../sed/files/html.html >files/html.html # Part: Listings # Chapter: XML java org.apache.xalan.xslt.Process -in ../xml/listings/index.xml.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/index.xml.html sed s/'.html"'/'.html"'/g ../sed/listings/index.xml.html >listings/index.xml.html java org.apache.xalan.xslt.Process -in ../xml/listings/frames2.xsl.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/frames2.xsl.html sed s/'.html"'/'.html"'/g ../sed/listings/frames2.xsl.html >listings/frames2.xsl.html java org.apache.xalan.xslt.Process -in ../xml/listings/navigation.xml.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/navigation.xml.html sed s/'.html"'/'.html"'/g ../sed/listings/navigation.xml.html >listings/navigation.xml.html java org.apache.xalan.xslt.Process -in ../xml/listings/navigation.xsl.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/navigation.xsl.html sed s/'.html"'/'.html"'/g ../sed/listings/navigation.xsl.html >listings/navigation.xsl.html java org.apache.xalan.xslt.Process -in ../xml/listings/zeit.xml.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/zeit.xml.html sed s/'.html"'/'.html"'/g ../sed/listings/zeit.xml.html >listings/zeit.xml.html java org.apache.xalan.xslt.Process -in ../xml/listings/text.xsl.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/text.xsl.html sed s/'.html"'/'.html"'/g ../sed/listings/text.xsl.html >listings/text.xsl.html # Chapter: LaTeX java org.apache.xalan.xslt.Process -in ../xml/listings/makexalan.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/makexalan.html sed s/'.html"'/'.html"'/g ../sed/listings/makexalan.html >listings/makexalan.html java org.apache.xalan.xslt.Process -in ../xml/listings/xalanlatex.xsl.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/xalanlatex.xsl.html sed s/'.html"'/'.html"'/g ../sed/listings/xalanlatex.xsl.html >listings/xalanlatex.xsl.html java org.apache.xalan.xslt.Process -in ../xml/listings/makexalan2.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/makexalan2.html sed s/'.html"'/'.html"'/g ../sed/listings/makexalan2.html >listings/makexalan2.html java org.apache.xalan.xslt.Process -in ../xml/listings/xalanlatex2.xsl.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/xalanlatex2.xsl.html sed s/'.html"'/'.html"'/g ../sed/listings/xalanlatex2.xsl.html >listings/xalanlatex2.xsl.html java org.apache.xalan.xslt.Process -in ../xml/listings/xalanlatex.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/xalanlatex.html sed s/'.html"'/'.html"'/g ../sed/listings/xalanlatex.html >listings/xalanlatex.html java org.apache.xalan.xslt.Process -in ../xml/listings/latex.xsl.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/latex.xsl.html sed s/'.html"'/'.html"'/g ../sed/listings/latex.xsl.html >listings/latex.xsl.html java org.apache.xalan.xslt.Process -in ../xml/listings/printweb_tex.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/printweb_tex.html sed s/'.html"'/'.html"'/g ../sed/listings/printweb_tex.html >listings/printweb_tex.html java org.apache.xalan.xslt.Process -in ../xml/listings/infiles_tex.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/infiles_tex.html sed s/'.html"'/'.html"'/g ../sed/listings/infiles_tex.html >listings/infiles_tex.html java org.apache.xalan.xslt.Process -in ../xml/listings/zeit_tex.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/zeit_tex.html sed s/'.html"'/'.html"'/g ../sed/listings/zeit_tex.html >listings/zeit_tex.html # Chapter: HTML java org.apache.xalan.xslt.Process -in ../xml/listings/makexalanhtml.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/makexalanhtml.html sed s/'.html"'/'.html"'/g ../sed/listings/makexalanhtml.html >listings/makexalanhtml.html java org.apache.xalan.xslt.Process -in ../xml/listings/makexalanhtml.xsl.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/makexalanhtml.xsl.html sed s/'.html"'/'.html"'/g ../sed/listings/makexalanhtml.xsl.html >listings/makexalanhtml.xsl.html java org.apache.xalan.xslt.Process -in ../xml/listings/xalanhtml.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/xalanhtml.html sed s/'.html"'/'.html"'/g ../sed/listings/xalanhtml.html >listings/xalanhtml.html java org.apache.xalan.xslt.Process -in ../xml/listings/indexhtml.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/indexhtml.html sed s/'.html"'/'.html"'/g ../sed/listings/indexhtml.html >listings/indexhtml.html java org.apache.xalan.xslt.Process -in ../xml/listings/navigationhtml.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/navigationhtml.html sed s/'.html"'/'.html"'/g ../sed/listings/navigationhtml.html >listings/navigationhtml.html java org.apache.xalan.xslt.Process -in ../xml/listings/zeithtml.xml \ -xsl ../../text.xsl \ -HTML -OUT ../sed/listings/zeithtml.html sed s/'.html"'/'.html"'/g ../sed/listings/zeithtml.html >listings/zeithtml.html java org.apache.xalan.xslt.Process -in ../xml/listings/index.xml \ -xsl ../../frames2.xsl \ -HTML -OUT ../sed/listings/index.html sed s/'.html"'/'.html"'/g ../sed/listings/index.html >listings/index.html
Inhaltsverzeichnis
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="../../../text.xsl" type="text/xsl"?> <?cocoon-process type="xslt"?> <satzspiegel> <titel> Listings für PrintWeb </titel> <text> <abs> Alle Listings, die für das Projekt PrintWeb benötigt werden, unterteilt nach XML, <latex/>, HTML und Skripte. </abs> </text> </satzspiegel>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="br"><xsl:apply-templates/>\\</xsl:template>
<xsl:template
match="brake"><xsl:apply-templates/>\\[12pt]</xsl:template>
<xsl:template
match="brake2"><xsl:apply-templates/>\\[4pt]</xsl:template>
<xsl:template
match="nopagebreak"><xsl:apply-templates/>\nopagebreak</xsl:template>
<xsl:template match="titel">
\vspace{12pt}
\begin{center}
\textbf{\Huge <xsl:apply-templates/>}
\vspace{24pt}
\end{center}
</xsl:template>
<xsl:template match="titel2">
\vspace{12pt}
\begin{center}
\textbf{\Large <xsl:apply-templates/>}
\vspace{8pt}
\end{center}
</xsl:template>
<xsl:template match="subtitel">
\vspace*{6pt}
\textbf{\large <xsl:apply-templates/>}\nopagebreak
</xsl:template>
<xsl:template match="autor">
</xsl:template>
<!-- ================================================ -->
<!-- Templates für den Satzspiegel
Gliederung entlang der LaTeX-Konventionen -->
<xsl:template match="klappentext">
\bigskip\textsl{\large <xsl:apply-templates/>}
</xsl:template>
<xsl:template match="newpage">
<xsl:apply-templates/>\newpage
</xsl:template>
<xsl:template match="text">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="chapter">
\chapter{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="section">
\section{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="subsection">\subsection{<xsl:apply-templates/>}
</xsl:template>
<xsl:template
match="sect2">\sect2{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="paragraph">
\sect2{\textsl{<xsl:apply-templates/>}}
</xsl:template>
<xsl:template match="abs">
\smallskip
<xsl:apply-templates/>
\smallskip
</xsl:template>
<xsl:template match="verweis[@art='link']">
\textbf{<xsl:value-of select="text()"/>}
</xsl:template>
<xsl:template match="footnote">
\footnote{<xsl:apply-templates/>}
</xsl:template>
<xsl:template match="verweis[@art='kasten']">\textbf{Listing:
<xsl:value-of select="text()"/>}</xsl:template>
<!--\kasten{
\begin{center}\textbf{Listing: <xsl:value-of select="text()"/>\\}
\rule{0.95\textwidth}{0.2pt}\end{center}
\footnotesize\input{<xsl:value-of select="@href"/>.tex}\normalsize}-->
<!-- <lit> dient der Wiedergabe von Druck- und Onlinequellen -->
<xsl:template match="lit/verweis">
<xsl:apply-templates/>
</xsl:template>
<!-- <programlisting> dient der verbatimen Wiedergabe längerer Passagen-->
<xsl:template match="programlisting">
\footnotesize
\vspace{-12pt}
\begin{verbatim}
<xsl:apply-templates/>
\end{verbatim}
\vspace{-12pt}
\normalsize
</xsl:template>
<!-- Wörtliche Rede -->
<xsl:template match="anf">
\ein <xsl:apply-templates/>\aus{}
</xsl:template>
<!-- <verb> dient der verbatimen Wiedergabe kurzer Passagen-->
<xsl:template
match="verb">\verbä<xsl:apply-templates/>ä</xsl:template>
<!-- dollar dient der Maskierung von $ mit \ -->
<xsl:template match="dollar">\<xsl:apply-templates/></xsl:template>
<!-- ustrich dient der Maskierung von _ mit \ -->
<xsl:template match="ustrich">\<xsl:apply-templates/></xsl:template>
<!-- gatter dient der Maskierung von _ mit \ -->
<xsl:template match="gatter">\<xsl:apply-templates/></xsl:template>
<xsl:template
match="slash">\verbä<xsl:apply-templates/>ä</xsl:template>
<!-- Formatierung itemize: Aufzählung mit Punkten vorweg -->
<xsl:template match="itemize">
\begin{itemize}<xsl:apply-templates select="item"/>
\end{itemize}
</xsl:template>
<!-- Formatierung enumerate: Numerierte Liste -->
<xsl:template match="enumerate">
\begin{enumerate}
<xsl:apply-templates/>
\end{enumerate}
</xsl:template>
<!-- Einzelner Listeneintrag für itemize und enumerate -->
<xsl:template match="item">
\item <xsl:apply-templates/>
</xsl:template>
<!-- Formatierung description: Stichwort in fett vorweg -->
<xsl:template match="description">
\begin{description}
<xsl:apply-templates/>
\end{description}
</xsl:template>
<!-- Einzelner Listeneintrag für description -->
<xsl:template match="itemb">
\item[<xsl:value-of select="@name"/>]
<xsl:apply-templates/>
</xsl:template>
<!-- Der Schriftzug LaTeX, wie es sich gehört -->
<xsl:template match="latex">\LaTeX
</xsl:template>
<!-- Für fett Gedrucktes -->
<xsl:template
match="fett">\textbf{<xsl:apply-templates/>}</xsl:template>
<!-- Für kursiv Gedrucktes -->
<xsl:template match="wr">
\textit{<xsl:apply-templates/>}
</xsl:template>
<!-- Einige Zeichen brauchen für LaTeX ein \ als Escape -->
<xsl:template match="esc">\<xsl:apply-templates/></xsl:template>
<!-- Darstellung von Links, Webadressen -->
<xsl:template match="verweis[@art='url']">
\textbf{<xsl:value-of select="text()"/>}
</xsl:template>
<!--xsl:template match="verweis[@art='kasten']">
\kasten{\begin{center}\textbf{Listing: <xsl:value-of
select="text()"/>}\end{center}
\input{<xsl:value-of select="@href"/>}}
</xsl:template>
<xsl:template match="verweis[@art='link']">
<xsl:value-of select="text()"/>\nolinebreak\endnote{<xsl:value-of
select="@href"/>}
</xsl:template-->
</xsl:stylesheet>
%__________________________
% Dokumentenklasse, Pakete
%__________________________
%
\documentclass[10pt,openany]{book}
\usepackage{times}
\usepackage{german}
\usepackage[latin1]{inputenc}
\usepackage{picinpar}
\usepackage{shadow}
\usepackage{ulem}
\usepackage{endnotes}
\usepackage{pifont}
\usepackage{fancyheadings}
\usepackage{fancybox}
\usepackage{multicol}
\usepackage{ulem}
\usepackage{epic}
\usepackage{eepic}
\usepackage{portland}
%____________________________
% Eigene Kommandos, Vorspann
%____________________________
%
%
%______________________________________
% Seitenaufteilung, Layoutvorschriften
%______________________________________
\setlength{\textwidth}{14cm}
\setlength{\textheight}{23,2cm}
%\addtolength{\headheight}{2pt}
%\setlength{\headsep}{26pt}
\setlength{\oddsidemargin}{12mm}
\setlength{\evensidemargin}{12mm}
\widowpenalty=10000
\clubpenalty=10000
\tolerance=3000
\emergencystretch=10pt
\setcounter{secnumdepth}{3}
\setcounter{tocdepth}{3}
\setlength{\parskip}{0.9ex}
\setlength{\parindent}{0pt}
%
%____________________
%
% Einstellungen für korrekte Druckpositionierung
%
%\setlength{\oddsidemargin}{5mm}
%\setlength{\topmargin}{85mm}
%
%___________________
%
% Layout Seitenkopf
%___________________
%
\usepackage{fancyheadings}
%____________________________
%
% Trennungsliste
%____________________________
%
\hyphenation{Pro-duk-tions-um-ge-bung}
%____________
%
% Textanfang
%____________
%
\begin{document}
%\setcounter{page}{0}
%\thispagestyle{empty}
%\rule{10mm}{0mm}
%\newpage
%__________________
%
% Eigene Kommandos
%__________________
\renewcommand{\chaptermark}[1]{\markboth{#1}{#1}}
%###############################################################
%# Umformatierung von Gliederungsüberschriften: Kein Absatz
%# bei der zweiten Zeile etc.
%###############################################################
\makeatletter % Zur Verwendung von @ nötig
%\renewcommand{\chapter}{\@startsection{chapter}
%{0}{-20,4pt}{8ex}{12mm}
%{\huge\bfseries\newpage}}
\renewcommand{\section}{\@startsection{section}
{1}
{-13pt}
{-\baselineskip}
{0.8\baselineskip}
{\vspace*{12pt}\Large\bfseries}}
\renewcommand{\subsection}{\@startsection
{subsection} % Name
{2} % Gliederungsebene
{-11.5pt} % Einzug; linksbündig
{-\baselineskip} % Vorabstand; negativ == kein Absatz
{0.5\baselineskip} % Nachabstand zu folgendem Text
{\vspace*{9pt}\large\bfseries}} % Stil
\renewcommand{\subsubsection}{\@startsection
{subsubsection} % Name
{2} % Gliederungsebene
{-10.0pt} % Einzug; linksbündig
{-\baselineskip} % Vorabstand; negativ == kein Absatz
{0.5\baselineskip} % Nachabstand zu folgendem Text
{\vspace*{1pt}\bfseries}} % Stil
\makeatother
%###############################################################
%###############################################################
%###########################################################
%# Vermeidung von Zahlen vor den Gliederungsüberschriften
%###########################################################
\newcommand{\kapitel}[1]{\chapter{ #1} \thispagestyle{empty}}
\renewcommand{\thesection}{\thesection\,}
\renewcommand{\thesubsection}{\thesubsection\,}
\renewcommand{\chaptername}{}
\renewcommand{\thechapter}{}
%\renewcommand{\thepart}{}
\renewcommand{\thesection}{}
\renewcommand{\thesubsection}{}
\renewcommand{\thesubsubsection}{}
\renewcommand{\Huge}{\huge}
\renewcommand{\footnoterule}{\vspace{2mm}}
\renewcommand{\thefootnote}{\fnsymbol{footnote}}
%############################################################
%############################################################
%
\newcommand{\aus}{\nolinebreak\hspace{0,6pt}"'\,}
\newcommand{\ein}{"`\nolinebreak\hspace{0,6pt}}
%
%
\newenvironment{lquote}{\begin{list}{}%
{\setlength{\leftmargin}{15pt}
\setlength{\rightmargin}{15pt}}
\sl\item[]}
{\end{list}}
%_________________________
%
% Einzuhängende Textfiles
%_________________________
\input{infiles}
\end{document}
\input{titel.xml}
\thispagestyle{empty}
\newpage
\input{files/fancysty}
\raggedbottom
\tableofcontents
\part{Projekt Printweb}
\input{introduction}
\input{files/zeit}
\input{files/planung}
\part{Ergebnisse}
\input{files/dynxml}
\input{files/skripte}
\input{files/latex}
\input{files/html}
\part{Listings}
\chapter{XML}
\input{listings/index.xml}
\input{listings/frames2.xsl}
\input{listings/navigation.xml}
\input{listings/navigation.xsl}
\input{listings/zeit.xml}
\input{listings/text.xsl}
\chapter{LaTeX}
\input{listings/makexalan}
\input{listings/xalanlatex.xsl}
\input{listings/makexalan2}
\input{listings/xalanlatex2.xsl}
\input{listings/xalanlatex}
\input{listings/latex.xsl}
\input{listings/printweb.tex}
\input{listings/infiles.tex}
\input{listings/zeit.tex}
\chapter{HTML}
\input{listings/makexalanhtml}
\input{listings/makexalanhtml.xsl}
\input{listings/xalanhtml}
\input{listings/indexhtml}
\input{listings/navigationhtml}
\input{listings/zeithtml}
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:strip-space elements="*"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="titel"> #<xsl:apply-templates/> </xsl:template> <xsl:template match="index"></xsl:template> <xsl:template match="navigation"></xsl:template> <xsl:template match="part"> #Part: <xsl:apply-templates/> </xsl:template> <xsl:template match="chapter"> #Chapter: <xsl:apply-templates/> </xsl:template> <xsl:template match="section"> #Section: <xsl:apply-templates/> </xsl:template> <xsl:template match="subsection"> #Subsection:<xsl:apply-templates/> </xsl:template> <xsl:template match="home"></xsl:template> <xsl:template match="datei"> java org.apache.xalan.xslt.Process -in ../xml/<xsl:value-of select="link/@href"/> \ -xsl latex.xsl \ -TEXT -OUT <xsl:value-of select="link/@href"/>.zw fold -s -w 70 <xsl:value-of select="link/@href"/>.zw ><xsl:value-of select="link/@href"/>.tex </xsl:template> </xsl:stylesheet>