Teil von SELFHTML aktuell Teil von Artikel Teil von HTML/XHTML

Niklas Deutschmann
Website Meta Language - ein HTML-Präprozessor für Unix

nach unten Über den Autor
nach unten Einleitung
nach unten So arbeitet WML
nach unten Include-Dateien
nach unten Eigene Tags
nach unten Projekt-Templates
nach unten Mehrsprachige Seiten
nach unten Eingebettete Perl-Skripte
nach unten Weitere Funktionen
nach unten Zusammenfassung, Links

Über den Autor

E-Mail: E-Mail nickel.de@gmx.de?subject=Zu%20deinem%20WML-Artikel
Homepage-URL: deutschsprachige Seite http://www.niklas-deutschmann.de/

Schreiben Sie mir ruhig, wenn Sie Fragen oder Verbesserungsvorschläge haben!
Es kann allerdings vorkommen, dass ich etwas Zeit zum Antworten brauche.

Einige Beispiele in diesem Artikel basieren auf Code von der englischsprachige Seite WML-Homepage

Laden Sie die Beispiele herunter: ZIP-Datei Beispieldateien als ZIP

nach obennach unten

Einleitung

Achtung: Wenn Sie Informationen zur Seitenbeschreibungssprache für WAP-Handys suchen, sind Sie auf dieser Seite falsch. Diese Sprache heißt leider auch WML!

Vielleicht kennen Sie das Problem: Sie entwickeln ein größeres Web-Projekt und möchten auf jeder Seite ein einheitliches Layout haben. Also entwickeln Sie eine Template-Seite, die diejenigen Elemente enthält, die auf jeder Seite gleich sind. Diese Seite kopieren und überschreiben Sie immer dann, wenn Sie dem Projekt eine neue Seite hinzufügen. Aber was machen Sie, wenn Sie nachträglich am Template etwas ändern möchten? Sie müssen wahrscheinlich jede davon abgeleitete Seite einzeln bearbeiten.

Ein anderes Problem: Eine bestimmte Formatierung kommt immer wieder vor und Sie möchten diese gerne zentral definieren, so dass Sie schnell Änderungen vornehmen können. Bei einfachen Elementen können Sie dafür CSS verwenden, aber diese Methode scheitert spätestens dann, wenn zusammen mit der Formatierung sich auch Inhalte wiederholen. Es wird vielmehr eine Methode benötigt, um das Grundgerüst einer Seite oder einzelner Elemente automatisch zu generieren, wobei nur die veränderlichen Teile als "Parameter" übergeben werden.

Vielleicht möchten Sie auch eine Seite in mehreren Sprachversionen schreiben. Das Layout ist überall exakt dasselbe, nur die Texte unterscheiden sich. Vielleicht möchten Sie aber auch abhängig von der Sprache verschiedene Grafiken einbinden, wie z.B. Buttons mit Beschriftungen in der passenden Sprache oder Flaggen als Symbole für die jeweils anderen Sprachversionen.

Alle diese Beispiele sollen ein wesentliches Problem der Sprache HTML deutlich machen: HTML ist für die Beschreibung eines einzelnen Dokuments gedacht, es fehlen Elemente oder Tags, die die Verwaltung eines größeren Projekts mit mehreren Dokumenten erleichtern. Es gibt keine Modul-Fähigkeit wie in den meisten Programmiersprachen, wo Sie häufig vorkommende Teile als eigenes "Paket" schreiben und dann einbinden können.

Abhilfe für dieses Problem kann von mehreren Seiten kommen. Wenn Sie einen eigenen Webserver betrieben, können Sie bereichsübergreifende Seite Server Side Includes verwenden. Damit stecken sie wiederkehrende Elemente, wie z.B. die Navigationsleiste, in eine eigene Datei, die sie überall einbinden können. bereichsübergreifendes Kapitel Cascading Style Sheets (CSS) erlauben es, wie schon erwähnt, Formatierungen zentral zu definieren. Teurere HTML-Editoren haben teilweise eigene Projektmanagementfunktionen, so dass sie dort z.B. Seiten-Templates anlegen können.

Wünschenswert wäre jedoch eine Lösung, die transparent in die HTML-Dateien integriert werden kann, mit jedem Editor funktioniert, keinen eigenen Webserver benötigt und keine zusätzlichen, proprietären Dateiformate verwendet. Gerade an diesem Punkt setzt das Tool englischsprachige Seite Website Meta Language (WML) von Ralf S. Engelschall an. Es besteht aus einem Präprozessor, der einige in die HTML-Datei geschriebene Anweisungen und Tags vorverarbeitet und erst daraus eine reine HTML-Datei erzeugt. Genauer gesagt, besteht WML sogar aus 9 (!) Filterprogrammen, die nacheinander abgearbeitet werden. Damit wird es z.B. möglich, nach unten Include-Dateien zu verwenden, aus einer Seite mehrere nach unten Sprachversionen zu erzeugen, oder nach unten eigene Tags zu definieren. Ganz nebenbei werden auch noch so nützliche Aufgaben wie das Umschreiben von Umlauten und das Hinzufügen von Größenangaben zu Bildern übernommen.

Dieser Artikel soll einige Features dieser "Metasprache" vorstellen und demonstrieren, dass es sich dabei um eine extrem flexible Lösung für die Verwaltung größerer Webprojekte handelt. Es ist sicherlich etwas Einarbeitungszeit nötig, aber dafür bieten sich fast unbeschränkte Möglichkeiten für jeden Webdesigner, der vor dem Bearbeiten von Textdateien und vor Kommandozeilenwerkzeugen nicht zurückschreckt. Oder, wie der Autor von WML selbst sagt:

"It operates as a powerful offline HTML generation toolkit for webmasters. While not trivial and idiot proof it provides most of the features real hackers always wanted for HTML generation."

nach obennach unten

So arbeitet WML

WML ist ein Programmpaket, das für diverse Unix-Systeme verfügbar ist und unter der GNU General Public License (GPL) steht. Es entspricht auch genau der Unix-Philosphie, mehrere kleine Programme zu verknüpfen, die eine genau definierte Aufgabe verrichten. Die Eingabedatei wird nacheinander von 9 Filterprogrammen verarbeitet:

Programm typische Features
1. Include-Präprozessor (ipp) Verarbeitung von Include-Dateien
2. HTML-Makros (mp4h) Definiton eigener Tags
3. Eingebetter Perl-Interpreter (eperl) Ausführung beliebiger Perl-Funktionen
4. m4-Makros (gm4) eine weitere Möglichkeit zur Definition von Makros
5. Umleitungs-Filter (divert) Umordnen von Datenbereichen in der Ausgabeseite
6. Zeichen- und String-Ersetzung (asubst) Ersetzungsoperationen wie z.B. das Codieren von Umlauten
7. HTML-Fixup (htmlfix) Ersetzen veralteter Tags, Hinzufügen von Größenangaben bei Bildern
8. Komprimierung der Ausgabe (htmlstrip) Entfernen überflüssiger Zeilen und Leerzeichen
9. Aufteilen der Ausgabe (slice) Schreiben mehrerer HTML-Dateien aus einer Quelltextdatei

Aus dieser Beschreibung wird sicherlich schon klar, dass es sich bei WML um ein mächtiges Werkzeug handelt, dass man nicht "mal eben kurz" verwenden kann. WML ist auch sicher nicht für eher grafisch orientierte Webdesigner geeignet, die ihre HTML-Seiten am Windows-PC oder Macintosh mit dem WYSIWYG-Editor zusammenklicken. Es ist vielmehr das perfekte Programm für alle, die schon etwas Erfahrung mit den Kommandozeilenwerkzeugen von Unix gesammelt haben und jetzt nervtötende Routineaufgaben bei der Entwicklung eines größeren Webprojekts dem Computer überlassen wollen.

nach obennach unten

Include-Dateien

Fangen wir jetzt mit einem ersten kurzen Beispiel an.

Anmerkung: WML laden Sie am besten von der englischsprachige Seite WML-Homepage herunter. Dort finden Sie die Quelltextarchive und auch Binärpakete für einige Linux-Distributionen. Dieser Artikel kann leider keine Einführung in die Installation von Software unter Unix sein, lesen Sie bei weiteren Fragen bitte die README-Dateien oder die Dokumentation auf der WML-Homepage.

Beispiel 1 (meta-include.wml)

<html><head>
#include "metatags.wmi"
<title>Beispiel für Include-Dateien</title>
</head>
<body>Der kleine grüne Frosch springt über den großen blauen Zaun.</body>
</html>

Include-Datei für Beispiel 1 (metatags.wmi)

<meta name="author" content="Niklas Deutschmann">
<meta name="description" content="erstes Beispiel für Include-Dateien">
<meta name="keywords" content="HTML, WML, Website Meta Language, Webdesign, Projektmanagement">

Erläuterung:

Die Datei meta-include.wml bindet durch die #include-Anweisung die Datei metatags.wmi im gleichen Verzeichnis ein, in der die Meta-Informationen zum Dateiinhalt wie Autor, Stichworte usw. stehen. Das bedeutet, dass Sie zukünftig die Meta-Informationen in eine eigene Datei schreiben können, die dann automatisch in viele HTML-Seiten eingefügt werden kann!

Mit wml -o meta-include.html meta-include.wml erzeugen Sie daraus die fertige HTML-Datei meta-include.html. Mit Include-Dateien können Sie aber noch mehr anstellen:

Beispiel 2 (footer-include.wml)

<html>
<head><title>Beispiel für Include-Dateien mit Parametern</title></head>
<body>
Eine völlig überflüssige Seite ohne jeden Inhalt.<br>
#include "footer.wmi" mailadr="blabla@hahaha.com"
</body>
</html>

Include-Datei für Beispiel 2 (footer.wmi)

<hr>
Verfasserin dieser Seite: <a href="mailto:$(mailadr)">Susi Schlumpf</a>, letzte Änderung: 27.01.2002

Erläuterung:

Bei einer Include-Anweisung können sie mit #include "dateiname" variable=wert auch Parameter übergeben. In diesem Beispiel wird eine E-Mail-Adresse als Parameter an eine Include-Datei übergeben, die die Fußzeile der HTML-Datei darstellt. Der Inhalt der Variablen mailadr wird in der Include-Datei mit $(mailadr) eingefügt.

Parameter für Include-Dateien müssen jedoch nicht nicht unbedingt in der WML-Datei definiert werden. Sie können auch mit der Option -D variable=wert auf der Kommandozeile übergeben werden:

wml -D mailadr=blabla@hahaha.com -o footer-include.html footer-include.wml

Außerdem können Sie in dem Verzeichnis, in dem die WML-Datei liegt, auch eine zentrale Konfigurationsdatei .wmlrc anlegen, mit folgendem Inhalt:

-D mailadr=blabla@hahaha.com

WML liest diese Datei ein und setzt die darin enthaltenen Optionen so, als ob sie auf der Kommandozeile angegeben worden wären. Es gibt noch mehr Möglichkeiten im Umgang mit Include-Dateien, als in diesem Artikel vorgestellt werden können. Variablen können sich an den aktuellen Verzeichnispfad anpassen, d.h. sie können automatisch um einen Pfad relativ zu einem Wurzelverzeichnis verlängert werden. Beim Einfügen von Variablen kann auch der Fall behandelt werden, dass der Variableninhalt nicht definiert ist, d.h. es sind Standardwerte und sogar richtige if-then-else-Konstruktionen möglich. Ein Beispiel für die Verwendung von Standardwerten sehen Sie im nach unten Kapitel "Projekt-Templates".

nach obennach unten

Eigene Tags

Häufig kommt es bei größeren Websites vor, dass eine bestimmte Formatierung oder eine bestimmte Kombination von HTML-Elementen auf vielen verschiedenen Seiten immer wieder vorkommt. In solchen Fällen ist es praktisch, die sich wiederholenden HTML-Tags als eine Art Textbaustein oder Makro an zentraler Stelle einmal zu definieren und dann das Makro als einen neues Tag zu benutzen. Dadurch werden die Seiten auch wesentlich übersichtlicher.

Mit WML können sehr einfach eigene Tags definiert werden. Einfachstes Beispiel ist die Erstellung eines Textbausteins für die eigene E-Mail-Adresse:

Beispiel 3 (simple-tag.wml)

<define-tag my_email whitespace=delete>
<a href="mailto:blah@blubb.de">blah@blubb.de</a>
</define-tag>

<html>
<head><title>Definition eines Textbausteins</title></head>
<body>
Meine E-Mail-Adresse: <my_email>
</body>
</html>

Erläuterung:

Mit define-tag my_email wird ein neues Tag mit dem Namen my_email angelegt. whitespace=delete bedeutet, dass Leerzeichen am Anfang und Ende der Tag-Definition sowie Zeilenumbrüche nicht übernommen werden.

Eigene Tags können selbstverständlich auch mit Parametern versehen werden. Als nächstens entwickeln wir ein Tag <extlink> für externe Links, das wir für alle externen Links verwenden, damit diese in einem neuen Fenster geöffnet werden:

Beispiel 4 (extlink-tag.wml)

<define-tag extlink whitespace=delete endtag=required>
<a href="%0" target="_blank">%body</a>
</define-tag>

<html>
<head><title>Definition eines Tags mit Parametern</title></head>
<body>
<extlink "http://de.selfhtml.org">Link zu SELFHTML</extlink>
</body>
</html>

Erläuterung:

Das Tag extlink hat nicht nur einen Parameter (die Link-Adresse), sondern benötigt auch einen Text, der zwischen öffnendem und schließendem Tag steht. Dies wird durch die Option endtag=required ausgedrückt. Innerhalb der Tag-Definition kann dann mit %body auf den eingeschlossenen Text und mit %0, %1 usw. auf die Parameter zugegriffen werden.

Zum Schluss noch ein längeres Beispiel. Wir möchten ein Tag für die Beschreibung eines Programms auf einer Shareware-Seite entwickeln. Die Beschreibung soll aus einer Tabelle bestehen, bei der im linken Teil das Programm-Icon erscheinen soll. Der rechte Teil soll mehrere Zellen enthalten, in der der Name des Programms, eine Beschreibung, der Download-Link und der Link auf die Homepage des Autors stehen.

Include-Datei für Beispiel 5 (sw-descr.wmi)

<define-tag extlink whitespace=delete endtag=required>
  <a href="%0" target="_blank">%body</a>
</define-tag>

<define-tag software-description whitespace=delete endtag=required>
  <preserve icon name download homepage />
  <set-var %attributes />
  <table border="0">
  <tr>
    <td rowspan="4" width="40">
      <img src="<get-var icon />" width="32" height="32" vspace="10" hspace="10">
    </td>
    <td><b><get-var name /></b></td>
  </tr>

  <tr>
    <td>%body</td>
  </tr>
  <tr>
    <td><a href="<get-var download />">Download</a></td>
  </tr>
  <tr>
    <td><extlink "<get-var homepage />">Homepage der Software</extlink></td>
  </tr>
  </table>
  <restore icon name download homepage />
</define-tag>

Beispiel 5 (sw-descr.wml)

#include "sw-descr.wmi"

<html><head><title>Beispielseite für komplexe Makros</title></head>

<body>
<software-description icon="sw-icon.gif" name="NoteTab Light" download="http://www.notetab.ch/ftp/ntfree.zip"
homepage="http://www.notetab.ch">
Ein flexibler Texteditor für Windows 9x/NT
</software-description>
</body>
</html>

Erläuterung:

In diesen Beispiel sehen wir, wie ein Tag mit benannten Attributen definiert werden kann. Bei Tags mit mehreren Attributen ist es wesentlich übersichtlicher, wenn wir nicht raten müssen, für was jetzt das erste, zweite usw. Attribut steht. In HTML haben Attribute auch Namen, wie z.B. in <img src="julia.gif" alt="meine Schwester Julia" width="120" height="260">. Das gleiche ist auch bei selbstdefinierten Tags möglich. Zuerst müssen wir erreichen, dass innerhalb der Tag-Definition die Attribute als "lokale Variablen" zur Verfügung stehen. Das wird durch die folgenden beiden Zeilen erreicht:

<preserve icon name download homepage />
<set-var %attributes />

Die preserve-Anweisung ist für jedes Attribut erforderlich, hier also für icon, name, download und homepage. Mit der set-var-Anweisung wird ein Array mit den lokalen Variablen angelegt.

Danach können wir mit <get-var attr /> auf den Inhalt des Attributs attr zugreifen. Der Schrägstrich am Ende des Tags gehört zur XML-Syntax, sie kann bei den Tags, die Anweisungen für den HTML-Makroprozessor darstellen, verwendet werden, um den Unterschied zu normalen HTML-Tags deutlich zu machen. Weiter unten wird in der Definition von software-description das vorher definierte Tag extlink benutzt. In der Definition eigener Tags können also auch schon woanders definierte eigene Tags verwendet werden!

Am Ende einer Tag-Definition, die Attribute verwendet, ist schließlich noch folgende Zeile für jedes Attribut attr nötig:

<restore attr />

Wie bei der preserve-Anweisung können wir auch hier statt <restore attr1 />, <restore attr2 />, ... auch <restore attr1 attr2 ... /> schreiben.

Wie Sie an diesem Beispiel sehen, können wir schon mit den bisher bekannten Techniken die Verwaltung komplexer, häufig wiederkehrender HTML-Elemente bei großen Webprojekten stark vereinfachen. Die bis jetzt vorgestellten Funktionen gehen bereits weit über das hinaus, was mit CSS, Server Side Includes oder grafischen HTML-Editoren möglich ist.

nach obennach unten

Projekt-Templates

Bis jetzt fehlt uns noch eine bequeme Möglichkeit, ein längeres Stück mitten in ein Template hineinzuschreiben. Wenn wir ein vorgefertigtes Seitenlayout mit Seitenkopf und Fußzeile haben wollen, müssen wir für beide Teile je eine Include-Datei definieren, diese am Anfang und am Ende der Seite einfügen und dazwischen den variablen Inhalt unterbringen. Es gibt jedoch noch eine elegantere Möglichkeit:

Include-Datei für Beispiel 6 (page-template.wmi)

<html>
<head><title>$(title:-Homepage von Udo Schlumpf)</title></head>
<body>
{#CONTENT#}
<hr>
Copyright © 2000-2005 Udo Schlumpf, <a href="mailto:$(email:-schlumpf@blubb.com)">E-Mail</a>
</body>
</html>

{#CONTENT#:

Beispiel 6 (page-template.wml)

#include "page-template.wmi"

Hi Fans,<br>
Leider ist diese Seite noch leer :-(

Erläuterung:

In der Include-Datei erreichen wir mit {#CONTENT#}, dass an dieser Stelle der Inhalt des Datenbereichs CONTENT eingefügt wird. Dieser Datenbereich wird aber erst später mit Inhalt "gefüllt", nämlich nach der Zeile {#CONTENT#:. dass hier die schließende geschweifte Klammer fehlt, ist kein Fehler, sondern weist WML an, alle nach dieser Zeile gelesenen Zeilen als Inhalt für den Datenbereich CONTENT aufzufassen.

Um genau zu verstehen, was hier passiert, muss man das Ebenenkonzept von WML kennen nach oben (siehe Kapitel "so arbeitet WML"). Die Include-Datei wird schon vom Include-Prozessor, also im ersten Durchlauf, eingefügt. Die Anweisungen für die Verarbeitung von Datenbereichen werden dagegen erst in Schritt 5 (divert-Filter) ausgewertet. Das bedeutet, wenn dieser Filter aktiv wird, ist der Inhalt von page-template.wmi schon eingefügt worden und CONTENT wird mit dem Inhalt von page-template.wml, der nach der #include-Zeile kommt, aufgefüllt.

Zusätzlich zur Definition von Projekt-Templates sehen Sie in diesem Beispiel auch, wie in Include-Dateien bei undefinierten Variablen Standardwerte verwendet werden können. Mit dem Ausdruck $(var:-ein Text) wird der Inhalt von var eingefügt, falls dieser definiert ist, ansonsten "ein Text" (ohne die Anführungszeichen!).

Zur Standardbibliothek von WML gehört bereits ein Tag <page>, das ein Template für eine leere Seite anlegt. Dafür muss mit #include wml::std::page die Include-Datei, in der dieses Tag definiert ist, eingefügt werden. Um eine neue Seite mit einem Titel anzulegen, verwenden wir ab sofort also folgende Notation:

Anlegen einer neuen, leeren Seite mit WML

#include wml::std::page
<page title="Noch eine sinnlose Seite ohne Inhalt">

<!--
Ab hier dann der Inhalt
//-->

Nähere Einzelheiten dazu können in der englischsprachige Seite WML-Dokumentation nachgelesen werden.

nach obennach unten

Mehrsprachige Seiten

Für eine Seite mit mehreren Sprachversionen brauchen wir noch eine Methode, um aus einer WML-Datei mehrere Ausgabeseiten zu erzeugen. Genau dies leistet das letzte Filterprogramm, durch das eine WML-Datei bei der Übersetzung geschickt wird. Der slice-Filter erlaubt es, abhängig von zuvor definierten Teilabschnitten mehrere HTML-Seiten zu erzeugen. Und so funktioniert es in der Praxis:

Beispiel 7 (multilang.wml)

#!wml -o (ALL-LANG_*)+LANG_EN:multilang_en.html -o (ALL-LANG_*)+LANG_DE:multilang_de.html

#use wml::std::page
#use wml::std::lang

<lang:new id=en short>
<lang:new id=de short>

<page>

<h1><en: Welcome><de: Willkommen>!</h1>

<en>
This is Susi Schlumpf's home page.<br>
And here is a silly link:
</en>
<de>
Das ist die Homepage von Susi Schlumpf.<br>
Und hier ist ein blödsinniger Link:
</de>
<a href="<lang:star: multilang_*.html>"><lang:star: multilang_*.html></a>

Erläuterung:

Um diese Seite zu übersetzen, benutzen wir nicht das Programm wml, sondern rufen wmk -f multilang.wml auf. wmk ist eigentlich für das Übersetzen ganzer Projekte zuständig, ählich wie make bei einem C-Compiler. Mit der Option -f dateiname kann wmk aber auch nur eine Datei übersetzen. Der Clou dabei ist, dass wmk für die angegebene Datei wml mit den Optionen ausführt, die in der ersten Zeile der WML-Datei hinter den Zeichen #! angegeben sind:

#!wml -o (ALL-LANG_*)+LANG_EN:multilang_en.html -o (ALL-LANG_*)+LANG_DE:multilang_de.html

Diese Zeile bedeutet, dass zwei HTML-Dateien, multilang_en.html und multilang_de.html, erzeugt werden sollen. Die Datei multilang_en.html soll dabei aus denjenigen Teilen der WML-Datei bestehen, die entweder in keinem definierten Sprachabschnitt - (ALL-LANG_*) - oder innerhalb des EN-Abschnitts stehen, der hier mit LANG_EN bezeichnet werden muss. In der deutschen Ausgabedatei multilang_de.html landet analog dazu alles, was entweder in keinem definierten Abschnitt steht oder im DE-Abschnitt.

Die Sprachabschnitte werden dann mit dem in der WML-Standardbibliothek vorhandenen Makro <lang> definiert. Beachten Sie, dass die Abschnittsnamen auf der Kommandozeile in Großbuchstaben angegeben werden müssen, auch wenn in der restlichen WML-Datei Kleinbuchstaben verwendet werden! Nun können Sie den Namen eines Abschnitts wie ein normales Tag verwenden, um die sprachabhängigen Teile ihrer Seite zu kennzeichnen. Es gibt auch eine Kurzform ohne schließendes Tag, die in diesem Beispiel innerhalb des h1-Tags verwendet wird. Die mit diesen Tags markierten Teile werden dann nur in die dafür auf der Kommandozeile angegeben Ausgabedateien geschrieben.

In der letzten Zeile des Beispiels sehen Sie noch eine Möglichkeit, wie man einen Dateinamen passend zur jeweiligen Sprachversion erzeugt. Das Makro <lang:star> erzeugt aus seinem Parameter einen Block für jedem Sprachabschnitt und ersetzt das Zeichen "*" jeweils durch den Namen des Abschnitts.

Mit dieser Funktion von WML können wir jetzt auch die kleinsten Textschnipsel in einer HTML-Seite, z.B. Meta-Tags, Alternativ-Texte bei Bildern und Links "internationalisieren". Natürlich können wir die Abschnitte nicht nur benutzen, um verschiedene Sprachversionen zu schreiben, sondern auch um z.B. aus einer WML-Datei eine grafische Version und eine Textversion einer Seite zu erstellen. Abschnitte können auch ineinander geschachtelt sein oder sich überlappen. Auf der Kommandozeile können mit den Abschnitten beliebige Mengenoperationen durchgeführt werden (Schnitt, Vereinigung, Differenz usw.) um zu bestimmen, was in welche Datei geschrieben werden soll. Auch hier finden Sie die Feinheiten in der englischsprachige Seite WML-Dokumentation.

Um an den Anwender automatisch die passenden Sprachversion auszuliefern, kann entweder eine bereichsübergreifende Seite .htaccess-Datei eingesetzt werden, oder man behilft sich mit bereichsübergreifendes Kapitel JavaScript.

nach obennach unten

Eingebettete Perl-Skripte

Einen großen Teil von wml haben wir bis jetzt ausgelassen: Den integrierten Perl-Interpreter (eperl), der im Übersetzungsschritt 3 aufgerufen wird. Dieser Interpreter ermöglicht es, in die WML-Datei beliebigen Perl-Code zu schreiben, dessen Ausgabe dann in der HTML-Datei erscheint. Eine einfache Anwendung dafür besteht z.B. darin, immer das Datum der letzten Änderung (Übersetzung der WML-Datei) in die HTML-Seite zu schreiben:

Beispiel 8 (writedate.wml)

#include wml::std::all

<perl>
  sub get_date {
    my ($time) = @_;
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isds) = localtime($time);
    my ($str) = sprintf("%02d.%02d.%04d, %02d:%02d:%02d", $mday, $mon+1, $year+1900, $hour, $min, $sec);
    return $str;
  }
</perl>

<define-tag print_date>
<:= &get_date(time()) :>
</define-tag>

<page title="Demoseite für Perl-Funktionen">
Letzte Änderung am: <print_date>

Erläuterung:

Anmerkung: Perl sollten Sie natürlich beherrschen, um ePerl richtig auszunutzen, wenn nicht, finden Sie z.B. bei SELFHTML im Kapitel über bereichsübergreifendes Kapitel CGI/Perl eine Einführung.

Im <perl>-Block steht der Code einer Funktion, die Datum und Uhrzeit ermittelt und in einem String formatiert zurückgibt. Auch das <perl>-Tag ist schon in der WML-Standardbibliothek definiert. Die Zeile

<:= &get_date(time()) :>

gibt dann das Ergebnis von get_date aus. Wir verwenden nicht direkt die Perl-Funktion print, da diese bei ineinander verschachtelten WML-Makros im Zusammenspiel mit dem Perl-Interpreter merkwürdige Ergebnisse produzieren kann, die sehr schwer zu debuggen sind. Näheres dazu wiederum in der englischsprachige Seite WML-Dokumentation.

Obwohl gerade eine WML-Datei mit eingebetteten Perl schnell zu einem kryptischen Zeichensalat wird, eröffnen sich damit auch völlig neue Möglichkeiten, die hier alle nur angedeutet werden können:

nach obennach unten

Weitere Funktionen

Der Funktionsumfang von WML ist so groß, dass viele weitere Features hier nur kurz angedeutet werden können:

Die Nachteile von WML sollen auch nicht ganz verschwiegen werden:

nach obennach unten

Zusammenfassung, Links

WML ist ein äußerst mächtiges Werkzeug für die automatische Generierung von HTML-Code und die Verwaltung komplexer Websites. Der Funktionsumfang sieht zuerst furchterregend aus, aber die Möglichkeiten der einzelnen Filterprogramme können unabhängig voneinander erschlossen werden, so dass man schon mit der Benutzung weniger Funktionen viel erreichen kann. Um an WML Freude zu haben, sollte man etwas Unix-Erfahrung mitbringen und die Philosophie dieses Betriebssystems kennen und mögen.

Links:

englischsprachige Seite WML-Homepage Hier finden Sie immer die neueste Version, die gesamte Doku, ein Tutorial, Beispielseiten und vieles mehr.

englischsprachige Seite gFont-Homepage Ein Zusatzprogramm für WML, mit dem man Schriftzüge dynamisch als Grafik erzeugen kann.

englischsprachige Seite GTML Ein anderer HTML-Präprozessor, mit geringerem Funktionsumfang.

deutschsprachige Seite Artikel über WML im Linux-Magazin 06/98 Eine kurze Einführung ähnlich wie diese hier.

deutschsprachige Seite noch ein Artikel über WML im Linux-Magazin 08/01 Noch eine Einführung.

englischsprachige Seite "Web Factory" der ETH Zürich Enthält Links auf Sites, die mit WML erstellt wurden.

Teil von SELFHTML aktuell Teil von Artikel Teil von HTML/XHTML

© 2007 bereichsübergreifende Seite Impressum