Tcl/Tk Unix & Shell-Programmierung: xml2html Prof. Dr. Uwe Schmidt FH Wedel

xml2html

weiter

weiter

Gebrauchsanweisung

ist ein Tcl-Skript, mit dem auf einfache Art XML und HTML verarbeitet werden können. Insbesondere ist die Transformation von tags sehr einfach: Beliebige tags können durch Makros ersetzt und in andere tags transformiert werden.
weiter
Ziel
bei dem Einsatz von xml2html ist es, die Trennung von Struktur und Layout wieder zu erreichen. Die Layout-Information wird aus den Inhaltsseiten herausgezogen und isoliert in Formatierungs-Dateien ähnlich der style files in TeX gehalten. Dadurch ist es möglich das Aussehen einer kompletten web site global zu modifizieren ausschließlich durch Änderung einiger style files.
weiter
grundsätzliche
Arbeitsweise
Die Arbeitsweise ist vergleichbar mit der des Präprozessors aus einem C-Sprachsystem und der Makroexpansion aus den Textstatzsystemen TeX und LaTex.
 
Im Gegensatz zu C und auch im Unterschied zu anderen HTML-erzeugenden Systemen wie zum Beispiel PHP wird keine neue eingebettete Sprache verwendet. Es wird ausschließlich die Syntax aus XML/HTML verwendet, um Makros zu definieren.
weiter
Makros
Das Skript analysiert XML/HTML-Seiten und ruft für jeden tag eine Verarbeitungsprozedur auf. Existiert für einen tag keine Prozedur, so wird der tag mit allen Attributen unverändert übernommen. Ist für ein tag eine Verarbeitungsprozedur, ein Makro, definiert, so wird der Makro-Rumpf an die Stelle des tags eingesetzt und der Ersetzungsprozess am Beginn des Rumpfes erneut gestartet.
 
Makrodefinitionen werden in der Syntax von XML definiert. Sie können über tag-Attribute parametrisiert werden.
weiter
Verwendung
Das xml2html-Skript kann sowohl als Komandozeilen-Programm als auch als CGI-Skript eingesetzt werden. In der Kommandozeilen-Variante können fertige statische HTML-Seiten erzeugt werden. Mit der CGI-Variante können sowohl die statischen als auch dynamische Seiten generiert werden. Diese können auf externe Datenbestände wie Dateien und Datenbanken zugreifen.
weiter
Makro-Definitionen
eine Quelle mit einer Makrodefinition mit Namen <dangerous> und </dangerous> für den zugehörigen schließenden tag:
 
<define
  name="dangerous"
  body='<span style="color: red;">'
  end='</span>'
>
...<br>
<dangerous>einige gefährliche Wörter</dangerous><br>
...
 
Der define tag ist in das xml2html-Skript fest eingebaut. Er wird also von dem Skript verarbeitet und durch die leere Zeichenreihe ersetzt. In dem folgenden Text werden aber alle <dangerous> und </dangerous> tags verarbeitet und durch den Text aus dem body-Attribut und dem end-Attribut ersetzt. Der gesammte Text wird also expandiert zu:
 

...<br>
<span style="color: red;">einige gefährliche Wörter</span><br>
...
 
Dieser Text wird in einem Browser dann folgendermaßen dargestellt:
 
...
einige gefährliche Wörter
...
weiter
gut
Hierdurch wird es möglich, die Layout-Information und die Art der verwendeten HTML-tags für die Darstellung eines <dangerous> tags an einer Stelle festzulegen und sie nicht zu vervielfachen. Wollte man wieder die altmodische Variante für Formatieranweisungen in HTML durch FONT-Elemente erzeugen, so müßte nur die Definition ausgewechselt werden.
 
Ziel ist es natürlich, die Makrodefinitionen nicht direkt im Dokument vorzunehmen, sondern diese auszulagern wie bei TeX in style files oder bei C in header-Dateien. Dieses zeigt das folgende Beispiel.
weiter
style files
werden für die Definition von Makros verwendet. Sie können explizit aus einem Dokument geladen werden oder implizit beim Aufruf von xml2html angegeben werden.
style files werden immer in einem Unterverzeichnis styles erwartet.
Sie werden mit dem vordefinierten Makro <style style="file.style"> in ein Dokument einkopiert.
 
Der style file makros.style im Unterverzeichnis styles:
 
<define
  name="dangerous"
  body='<span style="color: red;">'
  end='</span>'
>

 
und die eigentliche XML/HTML-Seite, in der keine Makros mehr stehen, sonder nur noch ein style tag.
 
<style style="makros.style">

...<br>
<dangerous>eine gefährliche Zeile</dangerous><br>
...

 
mit einem Aufruf von xml2html auf Kommandozeile mit Angabe eines default style files kann das style-Makro auch noch aus der Inhaltsseite entfernt werden. Damit ist die Trennung von Makrodefinitionen (Layout-Anweisungen) und Inhalt vollständig.
 
Beispiel-Aufruf:
 
xml2html -file ex1.html -defstyle makros.style
 
Diese Funktion steht bei der Verwendung von xml2html als CGI-Skript ebenfalls zur Verfügung.
weiter
Cascading Style Sheets
bei einfachen Makros, wie in diesem Beispiel kann der Effekt auch mit Cascading Style Sheets (CSS) und dem class Attribut erreicht werden und sollte auch mit CSS und zentralen Formaten gemacht werden. Dieses steht aber nicht im Gegensatz zu dem Makro-Ansatz.
 
Der Ansatz mit Makros zur Transformation von XML ist wesentlich mächtiger und allgemeiner als CSS. Es können Formatvorlagen in Form einer Tabellenstruktur verwendet werden, Navigationsleisten können aus einem zentralen Inhaltsverzeichtnis erzeugt werden. Als Beispiel ist hier die Quelle des Inhaltsverzeichnisses zu diesen Vorlesungsunterlagen.
 
In vielen Teilen dieser Seite werden der Makro-Ansatz und CSS kombiniert.
weiter
Grenzen
Werden komplexere algorithmische Aktionen notwendig, so stößt der Makroexpansionsansatz an seine Grenzen. Makros für Schleifen und andere Kontrollstrukturen zu implementieren ist technisch kein Problem, aber in XML Schleifen zu programmieren ist unhandlich und umständlich und führt zu nicht wartbaren Seiten.
weiter
Erweiterungen
für die oben genannten Aufgaben, wie zum Beispiel eine Datenbankanbindung, Erzeugung von HTML aus SQL-Anfragen und anderen algorithmischen Aufgaben besteht die Möglichkeit, den xml2html-Interpretierer dynamisch um Tcl-Routinen zu erweitern. Diese Routinen werden über XML-tags aufgerufen. Sie enthalten die eigentlichen Berechnungen.
 
Dieser Ansatz hat gegenüber dem Vermischen von Berechnungen und HTML-Code, wie er in PHP und JSP vorkommt, folgende Vorteile: Einmal wird die Stuktur eines Dokuments nicht mit Algorithmenteilen vermischt, zum anderen braucht keine neue Skriptsprache eingeführt werden, als Sprache steht der vollständige Tcl-Umfang zur Verfügung.
 
In JSP gibt es das Konzept der tag libraries, dieses entspricht genau dem xml2html Konzept: Bestimmte tags werden als Prozeduraufruf interpretiert, die über Attributwerte parametrisiert werden.
weiter

Letzte Änderung: 14.02.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel