Allgemeines zur Benutzung


 ... [ xml2html-Tutorial ] ... [ << Navigation ] ... [ Erweiterung um TCL-Skripte >> ] ...    ... [ Referenz ] ... 




Übersicht: Allgemeines zur Benutzung

  Spezielle Tags
  Verzeichnisstrukturen
  Caching von Seiten



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.

<if>  Makros mit Parametern
<get>  Makros und globale Variablen
<set>  Makros und globale Variablen
<definitions>  Stylefiles
<include>  Globale Navigation
<toc>  Globale Navigation
<cache>  Caching von Seiten
<eval-tcl>  TCL in xml-Dateien
<tcl>  Ein simple-Tag Beispiel
<sql-query>  Datenbank-Abfragen
<sql-subquery>  Datenbank-Abfragen
<sql-write>  Datenbank-Änderungen





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.

  Verzeichnisstruktur
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:

<tcl source="dateiname">

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.





 ... [ xml2html-Tutorial ] ... [ << Navigation ] ... [ Erweiterung um TCL-Skripte >> ] ... [ nach oben ] ...   ... [ Referenz ] ...