Projekt Printweb

Inhaltlich kongruente Print- und Webveröffentlichungen mit XML

Andreas Popper


Inhaltsverzeichnis

Zusammenfassung
1 Projektplanung PrintWeb
Oberziel
Projektziel
Indikatoren
Maßnahmen
XML-Produktionsumgebung
Buchsatzsystem LaTeX
HTML-Webseite
Veröffentlichung
Kommunikation und Dokumentation
2 Ergebnisse
Dynamische Webseiten mit Cocoon
Formatierung für Printerzeugnisse
Zusammenfassung
Die Ergebnisse im Einzelnen
Formatierung der HTML-Site
Zusammenfassung
Die Ergebnisse im Einzelnen:
Skripte für PrintWeb
Zusammenfassung
Die Skripte im Einzelnen
A Die im Projekt verwendeten Files im Source-Code
Dynamische Webseiten aus XML
index.xml
frames.xsl
navigation.xml
navigation.xsl
(text).xml
text.xsl
Statische Webseiten aus XML
~/printweb/html/xalan.xsl
~/printweb/html/xalanhtml
Printausgabe über LaTeX
~/printweb/(text).xml
~/printweb/latex/latex.xsl
~/printweb/latex/printweb.tex
~/printweb/latex/infile.tex
~printweb/latex/xalan.xsl

Zusammenfassung

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.

Kapitel 1. Projektplanung PrintWeb

Oberziel

Aus einer Datenquelle werden inhaltich kongruente Veröffentlichungen in unterschiedlichen Medien generiert.

Projektziel

Inhaltsverzeichnis

Indikatoren

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.

Indikatoren

XML-Produktionsumgebung

  • Alle notwendigen Bestandteile für eine funktionsfähige xml-Produktionsumgebung sind installiert und konfiguriert
  • Die Funktionsfähigkeit der xml-Produktionsumgebung einschließlich aller Module ist sichergestellt.
  • Die xml-Produktionsumgebung läuft auf dem Rechner des Projektführenden.
  • Die xml-Produktionsumgebung mit allen Funktionalitäten ist nach drei Arbeitstagen verfügbar.
  • Die xml-Produktionsumgebung ist im Rahmen der Fortbildung bei der Firma moebius, Kiel, eingerichtet.

Buchsatz mit LaTeX

  • Der Buchsatz mit LaTeX wird beherrscht.
  • Ein LaTeX-Hauptfile mit den für die Druckversion des Berichtes xml2sql notwendigen Formatierungen ist geschrieben.
  • Ein XSLT-Stylesheet zum Parsen der .xml-Dateien nach plaintext/LaTeX ist erstellt.
  • Mit einem Skript werden alle für den Bericht xml2sql benötigten XML-Files gemeinsam in das .tex-Format konvertiert
  • Alle für den Bericht benötigten .tex-Dateien werden an der richtigen Stelle in den Hauptfile eingehängt.
  • Mit dem LaTeX-Hauptfile wird druckfertiges PDF bzw. Postskript erzeugt.

Online-Veröffentlichung

  • Die Auszeichnungssprache HTML wird beherrscht.
  • Eine zur XML-Site passende Verzeichnisstruktur ist erstellt.
  • Ein XSLT-Stylesheet zum Parsen der .xml-Dateien nach HTML ist erstellt.
  • Mit einem Skript werden alle für den Bericht xml2sql benötigten XML-Files gemeinsam in das .html-Format konvertiert. Dabei wird die Struktur der XML-Site übernommen.
  • Die Verlinkung der HTML-Site wird mit demselben Skript von XML auf HTML angepasst.
  • Die erzeugte Webseite wird mit der Adresse:
    http://www.germanxml.de/projekte/xml2sql
    ins Netz gestellt.

Dokumentation

  • Für das Projekt ist eine detaillierte Projektplanung gemacht worden.
  • An jedem Projekttag wird Protokoll über alle Aktivitäten geführt.
  • Die Protokolle sind als XML-Website organisiert und vom Browser ansprechbar
  • Für alle Software-Bestandteile sind detaillierte Installationsanleitungen erstellt
  • Alle verwendeten Dateien, Stylesheets usw. werden dokumentiert

Maßnahmen

XML-Produktionsumgebung

Betriebssystem
Bei der Firma moebius, Kiel wird auf einem PC Athlon 800 mit 128 MB Arbeitsspeicher und einer Windows-NT-Partition Linux SuSE 7.1 eingerichtet.
Dauer: Ein Tag
Apache, Tomcat, Cocoon
Mit aus dem Netz besorgtem SourceCode wird Apache-1.3.14 kompiliert und installiert und darauf in gleicher Weise die Servlet-Engine Tomcat-3.2.1 aufgesetzt.
Das XML-Autorenwerkzeug Cocoon wird als SourdeCode aus dem Netz besorgt und installiert (s. Installation des Autorenwerkzeugs Cocoon).
Dauer: Ein Tag
Website
Für das Projekt wird in xml eine Website erstellt.
Dauer
Vier Tage

Buchsatzsystem LaTeX

Satzprogramm
LaTeX ist Bestandteil der SuSE-Linux-Distribution und wird mitinstalliert. Es handelt sich um ein im universitären Bereich weit verbreitetes Buchsatzprogramm, das ausschließlich skriptbasiert ist.
Es wird ein LaTeX-Formatfile geschrieben, der alle benötigten Formatierungen enthält.
XSLT-Stylesheet
Es wird ein Stylesheet erstellt für die Umwandlung der XML-Quellen in LaTeX-Dokumente.
Verzeichnisse
Es wird ein Verzeichnis angelegt mit der genauen Struktur des XML-Ausgangsverzeichnisses.
Parsen
Jede XML-Datei wird mittels des Java-Programmes Xalan (xml.apache.org/xalan) in das Format plaintext mit den erforderlichen LaTeX-Notationen geparst.
Diese Kommandozeilen werden in einem Skript zusammengefasst, mit dem das gesamte Dokument neu übersetzt wird.
Dauer
Vier Tage.

HTML-Webseite

Verzeichnis
Es wird ein Verzeichnis angelegt mit der genauen Struktur des XML-Ausgangsverzeichnisses.
XSLT-Stylesheet
Es wird ein Stylesheet erstellt für die Umwandlung der XML-Quellen in HTML-Dokumente.
Parsen
Jede XML-Datei wird mittels des Java-Programmes Xalan (xml.apache.org/xalan) in das Format .html mit den erforderlichen HTML-Tags geparst.
Diese Kommandozeilen werden in einem Skript zusammengefasst, mit dem die gesamte Website neu erzeugt wird.
Verlinkung
In dem Parserskript werden mit sed alle Verlinkungen von .xml auf .html geändert.
Mit sed werden je nach Verzeichnistiefe die Verlinkungen auf die .css-Stylesheet-Dateien angepasst.
Dauer
Vier Tage.

Veröffentlichung

Printausgabe
Mit LaTeX werden zwei für den Druck geeignete Ausgaben in Postscript und PDF erzeugt. Die ausgedruckte Fassung wird gebunden.
Webseite
Die HTML-Fassung wird unter der Adresse: www.germanxml.de/projekte/xml2sql ins Netz gestellt.
Dauer
1 Tag

Kommunikation und Dokumentation

Kommunikation
Das Projekt wird in Umrissen zusammen mit dem Betreuer, Herrn Vanhoefer von der Fa. moebius, geplant. Projektbegleitend wird in lockeren Abständen über den Fortgang berichtet, die Ergebnisse vorgeführt und das weitere Vorgehen besprochen.
Protokoll
Von jedem Projekttag wird fortlaufend ein Protokoll angefertigt, Dateiformat: xml. Es wird ein Stylesheet erstellt, das diese Protokolle nach html wandelt. Die Protokolle werden als vom Browser ansprechbare xml-Website organisiert.
Listings
Alle erstellten XSLT-Stylesheets und die Skripte für das Parsen nach plaintext und HTML werden als Listings dokumentiert.
Bericht
Über das gesamte Projekt wird ein Bericht in XML erstellt und daraus analog sowohl eine Website (www.germanxml.de/projekte/PrintWeb)als auch eine gedruckte Ausgabe erzeugt.
Dauer
Acht Tage

Kapitel 2. Ergebnisse

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.

Dynamische Webseiten mit Cocoon

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.

Formatierung für Printerzeugnisse

Für die Erzeugung eines druckfertigen Formates wurde der Weg über das Buchsatzprogramm LaTeX aus mehreren Gründen gewählt:

  1. Der Lernaufwand für die Formatierungssprache XSL ist in der für das Projekt zur Verfügung stehenden Zeit nicht zu leisten gewesen.
  2. XSL befindet sich noch im Stadium der Proposed Recommendation des W3C. Entsprechend implementiert die dafür vorhandene Software (z.B. fop) nicht alle darin ausgewiesenen Funktionen.
  3. Das Buchsatzprogramm LaTeX wird vom Projektausführenden beherrscht.

Zusammenfassung

  1. Es wird ein Stylesheet geschrieben, das sich an die LaTeX-Notation anlehnt.
  2. Es wird ein Stylesheet geschrieben, das aus den vorhandenen Navigationsseiten ein Skript zum Parsen aller XML-Dateien erzeugt.
  3. Die XML-Files werden mit dem Skript und dem entsprechenden Stylesheet ins .tex-Format geparst.
  4. Die so entstandenen .tex-Dateien werden in einen LaTeX-Formatierungsfile eingehängt. Alle für den Druck relevanten Formatierungen finden dort statt.
  5. Mit latex <filename> bzw. pdflatex <filename>werden druckbare .dvi- bzw. .pdf-Files erzeugt.
  6. Mit dvips kann das .dvi-Format in Postscript umgewandelt werden.

Die Ergebnisse im Einzelnen

Das Stylesheet

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

Parserskript aus Navigation

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 xalanlatex

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. Kap. Ergebnisse/Formatierung von HTML-Seiten).
Die vollständige Navigationsseite für das Projekt PrintWeb ist hier dokumentiert:
listings/navigation.xml

Parsen mit Xalan

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.tex

Dazu 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

Der LaTeX-Formatierungsfile

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:

LaTeX ausführen

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.

Formatierung der HTML-Site

Zusammenfassung

  1. Es wird ein Stylesheet geschrieben, das die für den XML-File gewählte LaTeX-Notation nach HTML übersetzt.
  2. Es wird ein Stylesheet geschrieben, das aus den vorhandenen Navigationsseiten ein Skript zum Parsen aller XML-Dateien nach HTML erzeugt.
  3. Die XML-Files werden mit dem Skript und dem entsprechenden Stylesheet ins .html-Format geparst.
    Das Skript ersetzt in allen .html-Files den String: .html" mit .html"
  4. Es entsteht eine komplette, verlinkte HTML-Website, die der XML-Website 1:1 entspricht.

Die Ergebnisse im Einzelnen:

Das Stylesheet

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>

Parsen mit Xalan

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.html

Dazu 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.

Stylesheets für HTML

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!

HTML-Website

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.

Skripte für PrintWeb

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.

Zusammenfassung

Für eine komplette Neudarstellung sowohl der Print- als auch der Webseiten müssen folgende Skripte ausgeführt werden:

printweb/xml/listings/list.shErzeugt aktuelle Listing-Dateien
printweb/html/makexalanErzeugt aus printweb/xml/navigation.xml ein Skript mit Parseranweisungen für alle XML-Dateien: xalanhtml
printweb/html/xalanhtmlParst 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/makexalan2Erzeugt 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

Die Skripte im Einzelnen

Printversion

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:
printweb/latex/makexalan

#! /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 >xalanlatex


Dabei sorgt die Passage sed ... dafür, dass keine unnötig langen und verwirrenden Dateiendungen geschehen, was im Stylesheet selber so nicht möglich ist.
Zum Parsen verwendet wird folgenes Stylesheet:
printweb/latex/xalan.xsl

<?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
fold -s -w 70 auf eine Zeilenlänge von maximal 70 Anschlägen umgebrochen, und zwar möglichst an einem Leerzeichen. Das ist nötig, weil unter den per LaTeX darzustellenden Dateien einige Listings sind; die Umgebung \verbatim von LaTeX stellt Text original dar und kann aus diesem Grunde keinen Umbruch vornehmen. Das muss vorher geschehen, und dazu dient das fold-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.tex

Das dazu benötigte Stylesheet:
printweb/latex/xalan2.xsl

<?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.

Skripte für die Online-Version

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 >xalanhtml

Dafü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 9


Nach dieser Anpassung steht dann die statische HTML-Website einschließlich Verlinkung zur Verfügung.

Erzeugung von Listings

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.xml


Nach Ausführen von list.sh im Verzeichnis: printweb/xml/listings steht eine aktuelle Version aller benötigten Listings zur Verfügung.

Skripte für PrintWeb

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.

Zusammenfassung

Für eine komplette Neudarstellung sowohl der Print- als auch der Webseiten müssen folgende Skripte ausgeführt werden:

printweb/xml/listings/list.shErzeugt aktuelle Listing-Dateien
printweb/html/makexalanErzeugt aus printweb/xml/navigation.xml ein Skript mit Parseranweisungen für alle XML-Dateien: xalanhtml
printweb/html/xalanhtmlParst 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/makexalan2Erzeugt 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

Die Skripte im Einzelnen

Printversion

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:
printweb/latex/makexalan

#! /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 >xalanlatex


Dabei sorgt die Passage sed ... dafür, dass keine unnötig langen und verwirrenden Dateiendungen geschehen, was im Stylesheet selber so nicht möglich ist.
Zum Parsen verwendet wird folgenes Stylesheet:
printweb/latex/xalan.xsl

<?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
fold -s -w 70 auf eine Zeilenlänge von maximal 70 Anschlägen umgebrochen, und zwar möglichst an einem Leerzeichen. Das ist nötig, weil unter den per LaTeX darzustellenden Dateien einige Listings sind; die Umgebung \verbatim von LaTeX stellt Text original dar und kann aus diesem Grunde keinen Umbruch vornehmen. Das muss vorher geschehen, und dazu dient das fold-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.tex

Das dazu benötigte Stylesheet:
printweb/latex/xalan2.xsl

<?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.

Skripte für die Online-Version

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 >xalanhtml

Dafü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 9


Nach dieser Anpassung steht dann die statische HTML-Website einschließlich Verlinkung zur Verfügung.

Erzeugung von Listings

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.xml


Nach Ausführen von list.sh im Verzeichnis: printweb/xml/listings steht eine aktuelle Version aller benötigten Listings zur Verfügung.

Anhang A. Die im Projekt verwendeten Files im Source-Code

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.

Dynamische Webseiten aus XML

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.

index.xml

					
<?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>
					
				

frames.xsl

					
<?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>

					
				

navigation.xml


<?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>

navigation.xsl


<?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>

(text).xml

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>

text.xsl


<?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>

Statische Webseiten aus XML

~/printweb/html/xalan.xsl


<?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>

~/printweb/html/xalanhtml



	# 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
	

Printausgabe über LaTeX

~/printweb/(text).xml


<?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>


~/printweb/latex/latex.xsl


<?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>	

~/printweb/latex/printweb.tex


%__________________________
% 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}

~/printweb/latex/infile.tex



\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}

~printweb/latex/xalan.xsl


<?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>

Home