|
Übersicht: Allgemeines zur Benutzung
Spezielle Tags
xml2html stellt eine Reihe von speziellen Tags zur Verfügung, die weniger das Layout einer html-Seite
bestimmen, sondern vielmehr die Art, wie definierte Makros verarbeitet werden.
|
|
Der <block>-Tag
Der <block>-Tag erlaubt es, bestimmte xml2html-Funktionen auf umfangreichere Textpassagen anzuwenden.
Näheres zu den Funktionen wird aber erst im folgenden
Kapitel TCL erklärt, da zum Verständnis einige TCL-Kenntnisse
benötigt werden.
Hier soll erstmal nur die einfachste Variante des <block>-Tags erläutert werden.
Der <block>-Tag wird dabei mit dem Ziel verwendet, dass ein Makro ausnahmsweise
keine Anwendung findet.
Wenn also ein Makro <h1>:
<define name="h1"
body='<center><h2><font color="#FFA500">'
end='</font></h2></center>'
>
|
alle h1 Überschriften zu zentrierten, orangenen h2 Headlines verändert:
<h1>eine orangene, zentrierte Überschrift</h1>
|
eine orangene, zentrierte Überschrift
dann verhindert die block-Anweisung die Anwendung des Makros:
<block><h1>eine orangene, zentrierte Überschrift</h1></block>
|
eine orangene, zentrierte Überschrift
|
|
Der <escape-xml>-Tag
Der <escape-xml>-Tag ist der wohl am häufigsten in diesem Tutorium verwendete spezial-Tag.
Er führt wie der <block>-Tag dazu, dass Makros nicht ausgeführt werden.
Zusätzlich wird der durch <escape-xml> umschlossene Bereich als "normales" html dargestellt,
d.h Sonderzeichen werden in die entsprechenden html-konformen Sequencen umgewandelt (aus < wird lt; usw.).
So ist es sehr einfach möglich, die im Tutorium verwendeten Beispiele darzustellen. Die oben dargestellte Makrodefinition
von <h1> sieht intern also folgendermassen aus:
<escape-xml>
<define name="h1"
body='<center><h2><font color="#FFA500">'
end='</font></h2></center>'
>
</escape-xml>
|
|
|
Der <eval-and-escape-xml>-Tag
In einigen Fällen möchte man das Ergebnis einer Makroexpansion darstellen.
Dafür stellt xml2html den <eval-and-escape-xml>-Tag zur Verfügung. Alle Tags innerhalb von
<eval-and-escape-xml> werden durch das xml2html-Tool expandiert und das Ergebnis wird als "normales" html,
analog dem <escape-xml>-Tag, dargestellt.
Der Aufruf von:
<eval-and-escape-xml><h1>eine orangene, zentrierte Überschrift</h1></eval-and-escape-xml>
|
liefert somit als Ergebnis:
<div align="center"><h2><font color="#FFA500">eine orangene, zentrierte Überschrift</font></h2></div>
|
|
|
Der <append>-Tag
Der <append>-Tag hängt an das body-Attribut eines definierten Makros
einen Text an.
In der Datei essentials.style ist der Tag <allmetatags> definiert:
<define name="allmetatags"
author=""
body='
<metactype>
<metaauthor author="$AUTHOR">'
>
|
Das Makro enthält Meta-Angaben zum content-type sowie zum author des Dokumentes.
Möchte man diese Standardangaben um z.B. den Metatag description erweitern,
ist das über folgenden Aufruf möglich:
<append name="allmetatags"
body='<META NAME="description" CONTENT="Spezielle Makros des xml2html-Tools">'
>
|
name enthält dabei den Namen des zu erweiternden Makros, im body-Attribut
steht der Text um den das Makro ergänzt werden soll.
Bei jedem weiteren Aufruf von <allmetatags> wird neben den Informationen über
content-type und author ab jetzt auch description
mit in die html-Seite eingefügt.
|
|
Der <tag>-Tag
Der <tag>-Tag ermöglicht es, auch auf Parameter-Position xml-Tags zu verwenden.
Bis jetzt war es mit xml2html nicht möglich, einen Tag der folgenden Art zu definieren:
<define name="farbe" body='#FFA500'>
<define name="my_color"
body='<font color="<farbe>">'
end='</font>'
>
|
da die Verwendung eines Tags (<farbe>) als Parameter nicht möglich war.
Der <tag>-Tag behebt diese Einschränkung:
<define name="farbe" body='#FFA500'>
<define name="my_color"
body='<tag>font color="<farbe>"</tag>'
end='</font>'
>
|
Durch die <tag>-Anweisung bearbeitet xml2html auch alle Tags innerhalb der Makrodefinition.
Der Ergebnis von:
<my_color>ein bischen bunte Schrift</my_color>
|
sieht dann so aus: ein bischen bunte Schrift
Bei diesem einfachen Beispiel ist der Vorteil des <tag>-Tags nur schwierig
einzusehen, man könnte die Farbe ja auch als normalen Parameter übergeben.
Die Möglichkeiten die der <tag>-Tag bietet, werden aber sicherlich
deutlicher, nachdem das Kapitel TCL durchgearbeitet wurde.
In dem Kapitel wird beschrieben, wie man einem Tag eine komplexe TCL-Routine zuweisen kann. Das Ergebnis der
Berechnung kann dann mit Hilfe des <tag>-Tags auf Parameter-Position genutzt werden.
|
|
Weitere spezielle Tags
Neben den bisher erklärten Tags gibt es noch ein Reihe weiterer spezieller Tags. Diese sind aber
für ein bestimmtes Einsatzgebiet entwickelt worden und werden von daher in den entsprechenden
Kapiteln erklärt.
|
|
Verzeichnisstrukturen
Grafiken, Style- und TCL-Files suchen
xml2html sucht Dateien, wie Grafiken, Style und TCL-Files, automatisch im Verzeichnisbaum. Dies ermöglicht das Umkopieren
ganzer Verzeichnisteile ohne das Pfadangaben zu den Dateien geändert werden müssen.
Die Grafik wurde mit dem <icon>-Tag eingefügt:
<icon icon="path_screen.gif" alt="Verzeichnisstruktur">
|
Im Attribut icon wurde nur der Name der Datei (path_screen.gif)
angegeben. Auf die Pfadangabe zur Grafik kann komplett verzichtet werden, obwohl sich die Grafik nicht wie diese xml-Datei
im Verzeichnis xml/, sondern im Verzeichnis icons/ befindet.
xml2html expandiert den <icon>-Tag zu:
<img SRC="../icons/path_screen.gif" ALT="Verzeichnisstruktur">
|
und ergänzt dabei automatisch den Dateinamen um den entsprechenden Verzeichnispfad: ../icons/.
Wo eine Datei liegen muss, damit sie von xml2html gefunden wird, soll jetzt an der oberen Grafik erklärt werden.
Zu Beginn ist zu sagen, dass alle Grafiken in einem Ordner icons/ liegen müssen. Dieser Ordner
kann natürlich zur besseren Strukturierung auch Unterordner enthalten. Diese Unterordner sind dann allerdings im
<icon>-Tag mit anzugeben:
<icon icon="unterordner/test.gif" alt="test">
|
xml2html würde in diesem Beispiel die Datei test.gif in einem Ordner
icons/unterordner/ suchen.
Das Verzeichnis icons/ wird dabei von xml2html auf folgende Weise gesucht:
Zuerst wird das aktuelle Verzeichnis durchsucht, in unserem Fall xml/.
Sollte das icons-Verzeichnis dort nicht gefunden werden,
wird immer im nächst höheren Verzeichnis bis hin zu Document-Root
(hier: public_html/) gesucht.
In diesem Beispiel würde also als zweites das Verzeichnis tutorial/ durchsucht werden,
in dem sich ja auch icons/ befindet.
xml2html geht bei seiner Suche im Verzeichnisbaum allerdings nur aufwärts. Würde icons/
wie lib/ im styles-Verzeichnis liegen, könnte es xml2html nicht finden,
da ein Abstieg in der Struktur notwendig wäre. xml2html müsste aus dem tutorial-Verzeichnis
abwärts in das styles-Verzeichnis wechseln, um dann die darin vorhandenen Ordner zu erreichen.
Sollten mehrere Grafiken mit dem selben Namen im Verzeichnisbaum existieren, wird die Datei verwendet, die zuerst
gefunden wird.
Neben Grafiken werden auch style- und TCL-Dateien durch xml2html gesucht.
Für Stylefiles wird der Tag:
<style style="dateiname">
|
und für TCL der Tag:
verwendet.
Der Suchmechanismus ist analog zu Grafiken, wobei Stylefiles im Verzeichnis styles/
und TCL-Dateien in tcl/ liegen müssen.
|
|
Alle weiteren Dateitypen suchen
xml2html erlaubt natürlich auch das automatische Suchen aller weiteren Dateitypen, wie z.B. xml- oder html-Dateien.
Der Unterschied zu den oben genannten Typen besteht darin, dass das Verzeichnis, in dem die Dateien liegen müssen,
nicht vorgegeben ist.
xml2html stellt für die Suche zwei spezielle Attribute zur Verfügung:
- parsedref="" => href=""
- iconref="" => src=""
Die beiden Attribute können in jedem xml- bzw. html-Tag verwendet werden, in dem die zu referenzierende Datei entweder
über ein href="" oder ein src="" Attribut eingebunden werden.
<defin e="myframeset"
body='
<FRAMESET cols="20%, 80%">
<FRAME iconref="datei1.html">
<FRAME iconref="datei2.html">
</FRAMESET>'
>
|
<defin e="mylink"
body='<a parsedref="datei1.html">seite1</a>'
>
|
xml2html würde als geparstes Ergebnis für das Frameset
<frameset cols="20%, 80%">
<frame src="../datei1.html">
<frame src="../../datei2.html">
</frameset>'
|
und für den Link:
<a href="../datei1.html">seite1</a>
|
liefern, wenn die html-Seite datei1.html ein
und die Seite datei2.html zwei Verzeichnisse oberhalb des aktuellen
Verzeichnisses liegt.
iconsrc wird dabei durch src und
parsedref durch href ersetzt.
Der Suchmechanismus nach dem xml2html dabei vorgeht, ist identisch zu dem oben beschriebenen,
wobei nocheinmal erwähnt werden soll, dass immer die erste gefundene Datei genommen wird,
wenn mehr als eine Datei mit dem selben Namen vorhanden ist.
|
|
Caching von Seiten
Das "on-the-fly"-Generieren von html-Seiten durch den Apache ist, wie bereits im Abschnitt
Aufruf des xml2html-Skriptes beschrieben,
bzgl. der Geschwindigkeit kritisch zu betrachten.
Um dieses Problem zu entschärfen, speichert ein in xml2html integrierter Caching-Mechanismus
mit Rücksicht auf Serverlast und Antwortzeiten bereits generierte Seiten solange, bis die Quelldatei der Seite verändert wird.
Um den Cache zu nutzen, muss zuerst ein Verzeichnis cache/ in der Verzeichnisstruktur
oberhalb des Verzeichnisses in dem die zu verarbeitenden Seiten liegen, angelegt werden.
Hierbei ist zu beachten, dass der Webserver sowohl schreibenden als auch lesenden Zugriff auf das
cache-Verzeichnis hat.
Man hat also entweder die Möglichkeit das cache-Verzeichnis mit Schreib- und Leserechten
für alle zu versehen:
tobyto@linux:~/public_html/xml2html > mkdir cache
tobyto@linux:~/public_html/xml2html > chmod 766 cache/
tobyto@linux:~/public_html/xml > ls -ld cache/
drwxrw-rw- 2 tobyto users 4096 Mai 25 16:31 cache/
|
oder dieses Verzeichnis der Gruppe des HTTP-Prozesses zuzuordnen.
Damit die generierte Seite auch wirklich gecacht wird, muss zu Anfang des Quelltextes - oder im Stylefile -
das <cache>-Tag eingefügt werden.
Zusammen mit der CGI-Variablen valid:
<set var="VALID" value="time">
|
lässt sich dann steuern, welche Seiten ständig neu generiert oder aber aus dem Cache geliefert werden.
Der Wert von time gibt dabei in Sekunden an, wie lange eine Seite gültig ist,
d.h. wie lange sie aus dem cache-Verzeichnis ausgeliefert wird.
Nach Ablauf der Zeit wird die Seite bei einem Abruf neu generiert und im cache-Verzeichnis
abgespeichert.
Bei
<set var="VALID" value="86400">
|
würde die Seite einmal pro Tag neu generiert werden.
Seiten bei denen VALID=-1 ist
<set var="VALID" value="-1">
|
werden nicht gecacht und immer neu generiert.
Vorsicht während des Entwickelns und Testens! Dort ist das cache-Verzeichnis eher hinderlich,
da man ja immer die wirklich aktuelle Version sehen möchte.
Tipp: Zusätzlich sollte der Cache im Browser, zum Beispiel im Netscape, während der Entwicklung gelöscht und auf 0k
Grösse gesetzt werden, da oft im Browser trotz Neuladens die Seite aus dem Browsercache angezeigt wird.
|
|
|