WML-Grundlagen

26.01.2000 von Holger Reibold
Für die Entwicklung von WAP-Anwendungen wurde eine eigene Auszeichnungssprache geschaffen: Wireless Markup Language, kurz WML. WML basiert auf XML und ist optimal auf niedrige Bandbreiten und die Darstellung auf den Minidisplays von Handys, PDAs, Pager und Telefonen abgestimmt.

WAP unterscheidet sich nicht nur in seiner Architektur von der Webtechnologie, sondern auch in der Art und Weise, wie Inhalte aufgebaut sind. Der herausragende Unterschied: Während HTML seitenorientiert arbeitet, werden WAP-Inhalte in so genannte Cards und Decks zerlegt. Bei den Cards handelt es sich um die grundlegenden Einheiten von WML. In ihnen ist die Interaktion zwischen User Agent und dem Benutzer definiert. Mehrere Cards werden zu einem Deck zusammengefasst. Decks sind somit die übergeordneten Elemente einer WAP-Anwendung. Erreicht ein Deck den WAP-Client, so wird in der Regel die erste Card geöffnet - es sei denn, über den Client wird explizit eine andere Card angesprochen. In Cards werden beispielsweise Auswahl- oder Eingabefelder definiert.

Die wichtigsten Funktionen von WML sind:

WML-Syntax im Überblick

Als XML-basierte Auszeichnungssprache ist WML deutlich restriktiver als HTML. Die syntaktischen Konstrukte stammen überwiegend aus XML. So unterscheidet WML zwischen Groß- und Kleinschreibung. Die wichtigsten Sprachelemente sind Entities, Tags, Elemente, Attribute und Kommentare.

Entities: Zur Strukturierung von Dokumenten werden in XML-basierten Sprachen Speicherungseinheiten verwendet, die so genannten Entities. Ein XML-Dokument kann aus einer Entity oder mehreren Entities bestehen. Über diese Speicherungseinheiten wird ein Dokument in mehrere voneinander unabhängige Teilkomponenten aufgespaltet, die einzeln bearbeitet werden können. In WML werden Entities insbesondere für die Spezifikation der Sonderzeichen verwendet. So wird beispielsweise das "ä" durch das Entity ä repräsentiert. Entities beginnen immer mit dem Und-Zeichen und enden mit einem Strichpunkt. Das &-Zeichen selbst wird durch & dargestellt.

Tags: Sie sind jedem vertraut, der sich schon einmal näher mit Webdokumenten befasst hat. Ein Tag beschreibt ein Element und beinhaltet den Elementnamen und einen eindeutigen Identifier. Ein Tag kann zudem Attribute enthalten, die weitere Eigenschaften eines Elements spezifizieren. Auch bei WML gibt es Start-, End- und leere Tags. Drei Beispiele:

Start-Tag: <tag>
End-Tag: </tag>
Leeres Tag: <tag/>

Elemente: Elemente spezifizieren Markierungen und Strukturinformationen eines WML-Decks. Sie weisen eine von zwei Strukturen auf: <tag> Inhalt </tag> oder <tag/>. Bei nicht leeren Elementen wird die eigentliche Information von Anfangs- und End-Tag eingefasst. Leere Elemente wie beispielsweise <br/> für den Zeilenumbruch besitzen keinen Content. Elemente werden je nach Funktionalität in Kategorien eingeteilt. So unterscheidet man beispielsweise zwischen Textformatierungen und Event-basierten Elementen.

Attribute: Viele WML-Elemente können mit Attributen versehen werden, die zusätzliche Informationen für ein Element bestimmen. Attribute erscheinen immer im Start-Tag eines Elements. Die Syntax lautet:

<tag attribut1="wert1" attribut2="wert2"> Attribut-Wertpaare werden durch eine Leerzeichen voneinander getrennt. Die Werte müssen in Anführungszeichen gesetzt werden. Für den Attributnamen ist Kleinschreibung zwingend vorgeschrieben. Bei einigen Element ist das zugehörige Attribut festgelegt. So verlangt das Element go das Attribut href. Ein Beispiel:

<go href="https://www.tecchannel.de"/> Andere Attribute wiederum sind optional oder aber besitzen Standardwerte. Für das img-Element kann beispielsweise das Attribut align verwendet werden. Ist kein Attribut angegeben, so wird der Standardwert bottom verwendet.

Kommentare: Auch WML-Dokumente können mit "unsichtbaren" Kommentaren versehen werden, die es insbesondere dem Entwickler bei einer späteren Bearbeitung erleichtern, den Quellcode zu lesen. Diese Informationen werden wie bei HTML & Co. nicht vom Client dargestellt. Die Syntax lautet:

<!-- Kommentar -->

Der Aufbau eines WML-Dokuments

Wie XML- oder HMTL-Dokumente weisen auch WML-Dokumente eine definierte Struktur auf. Ein gültiges WML-Deck muss zunächst einmal die XML- und DTD-Deklaration enthalten. Sie besitzt folgende Syntax:

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM/DTD WML 1.1//EN"

Ein WML-Deck wird durch das wml-Element eingefasst. Alle weiteren Elemente werden zwischen das wml-Anfangs- und -End-Tag geschrieben:

<wml>
...alle weiteren Elemente...
</wml>

Nachfolgend ist ein einfaches Beispiel für eine WML-Dokument dargestellt, das eine Card beinhaltet. Die Card trägt den Titel "Hallo Welt!". Damit Cards eindeutig identifizierbar sind, werden sie mit einer ID versehen:

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>
<card id="card1" title="Hallo Welt!">
<p>
<br/>
Der <b>Klassiker </b>im Handy-Emulator.<br/>
</p>
</card>
</wml>

</PARAGRAPH>
<PARAGRAPH>

WMLScript

WMLScript erweitert WML um Skript-Funktionen. Auf diese Weise lassen sich beispielsweise Benutzereingaben überprüfen, Nachrichten ausgeben und vieles mehr.

Obwohl WMLScript und JavaScript sich in den Anwendungsmöglichkeiten ähnlich sind, unterscheidet sich das Konzept der beiden Skriptsprachen erheblich. Der augenfälligste Unterschied: WMLScripts werden nicht wie JavaScripts in WML-Dokumente eingebettet. Vielmehr erfolgt eine Referenzierung auf das Skript. WMLScripts sind also "eigenständige" Einheiten. Ein weiterer Unterschied: WMLScripts müssen vor ihrer Ausführung oder Interpretation durch einen WAP-Browser in ein Bytecode-Format kompiliert werden - ähnlich der Java-Technologie.

Was passiert nun mit einem solchen Skript? Das textbasierte Format eines WMLScripts wird von WMLScript-Bytecode-Interpreter in ein Binärformat kompiliert, bevor es ausgeführt werden kann. Wo der Kompilierungsvorgang durchgeführt wird, schreibt der WAE-Spezifikation nicht vor. Denkbar sind beispielsweise WMLScript-Decoder auf dem Ursprungsserver oder auf dem Gateway.

Während der Ausführung einer Skriptfunktion überwacht der Interpreter vier Statusmeldungen:

Wie bereits erwähnt, unterstützt WMLScript die Verwendung von Bibliotheken, also logisch gruppierten Funktionen. WMLScript kennt eine Reihe von Standardbibliotheken, beispielsweise für das Handling von URLs, den Zugriff auf WML-Inhalte oder typische Funktionen für Benutzerschnittstellen. WMLScript ist so ausgelegt, dass es um Bibliotheken erweitert werden kann.

Das Beispiel zeigt, wie WML-Dokumente und WMLScripts interagieren. Das WML-Dokument mit der Dateibezeichnung zufall.wml besitzt zwei Cards. Die erste Card ruft das WMLScript zufall.wmls auf und übergibt das Ergebnis der Skriptfunktion getRandom an Card 2.

WML-Dokument:

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="card1" title="Beispiel: Zufallsgenerator">
<p align="center">
Select Random
</p>
<do type="accept" label="Random">
<go href="zufall.wmls#getRandom()"/>
</do>
</card>

<card id="card2" title="Ausgabe der Zufallszahl">
<p>
Result: $(RESULT)
</p>
</card>
</wml>

Das WMLScript zufall.wmls erzeugt über die Funktion getRandom eine Zufallszahl zwischen 0 und 100:

extern function getRandom () {
var r = Lang.random(100);
WMLBrowser.setVar("RESULT", r);
WMLBrowser.go("random.wml#card2");
}

Bilder auf dem WAP-Handy

WAP unterscheidet sich nicht nur in seiner Architektur, der Auszeichnungs- und Skriptsprache von HTML & Co., sondern auch im verwendeten Grafikformat.

Traditionelle GIF-, JPEG- oder auch PNG-Grafiken sind schon auf Grund ihrer Dateigröße für WAP-fähige Geräte kaum bis gar nicht zu gebrauchen. Daher hat man ein Format geschaffen, das auf die Darstellung von Grafiken auf Minidisplays abgestimmt ist: das Wireless BitMaP-Format, kurz WBMP.

WBMP-Grafiken weisen einen einheitlichen Aufbau auf. Meta-Informationen sind im Header, die eigentlichen Daten im Body fest gehalten. Der Header beinhaltet insbesondere Informationen über die Größe der Grafik und die WBMP-Versionsbezeichnung. Die eigentlichen Daten werden durch das so genannte TypeField beschrieben. Es enthält folgende Informationen:

Prinzipiell sind farbige Darstellungen, Kompression und Animationen möglich, aber bislang noch nicht spezifiziert. Die Grafikdaten werden durch eine Folge von Bytes beschrieben. Ein Bit repräsentiert dabei ein Pixel. WAP sieht bislang lediglich den WBML-Typ 0. Diese Variante ist nicht komprimiert und bietet ein Bit Farbtiefe (monochrom).

Die Einbindung einer WBMP-Grafik erfolgt nach dem gleichen Schema, wie man es von HTML kennt. Über das img-Element werden Grafiken eingebunden. An Attributen sind beispielsweise align, height, width, hspace, vspace, id und class verfügbar. Ein Beispiel:

<img src="icons/teccchannel.wbmp" alt="<!--techchannel_ALT-->"/>

WBMP-Grafiken lassen sich manuell oder mit Hilfe eines WBMP-fähigen Editors erzeugen. Wie man aus BMP-Files WAP-Grafiken mit einem Editor erzeugt, der die Bearbeitung von Dateien im HEX-Modus erlaubt, beschreibt David Perels.

Inzwischen gibt es verschiedene WBMP-fähige Editoren. Sie sind in nachfolgender Übersicht zusammengefasst.

WBMP-Tools im Überblick

Editor

Entwickler/ Anbieter

Kurzinfo

GraphicConverter

Lemkesoft

Import- und Export von WBMP-Grafiken für den Mac

WBMP Converter

Teraflops

webbasierter Konverter

WBMP-Editor des Nokia-WAP-Toolkit

Nokia

Import von GIF und JPEG, Zeichenwerkzeug

pbmwbmp

Looplab

konvertiert PBM nach WBMP; für Linux-Betriebssysteme

pic2wbmp

GINGCO New Media

"flexible" Bildbearbeitung

UnWired

RCP

Photoshop-5.x- und PaintShopPro-Plug-in

Fazit

WML geht auf die technischen Besonderheiten mobiler Geräte ein. Im Gegensatz zu HTML wird bei WML viel Overhead durch die Einteilung der Seiten in einzelne Decks eingespart. Allerdings gibt es auch hier noch viel zu tun: Vor allem das WBMP-Format mit nur einem Bit Farbtiefe wird nicht lange Bestand haben. Handys mit Farbdisplay sind schließlich schon heute von Siemens erhältlich.

Auch Wysiwyg-Editoren für WML-Seiten sind noch rar: Lediglich Macromedia bietet derzeit einen WML-Extension-Kit für den Dreamweaver an. (mhe)