WML-Grundlagen

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:

  • IP (Instruction Pointer): Zeigt auf eine Anweisung, die gerade interpretiert wird.

  • variables: Erhaltung der Funktionsparameter und Variablen.

  • operand stack: Dient der Auswertung von Ausdrücken und der Übergabe von Argumenten zwischen aufgerufenen Funktionen und dem aufrufenden Skript.

  • function call stack: WMLScripts können Funktionen von Bibliotheken aufrufen. Der Stapel hält Informationen der Funktionen und der Rückgabeadresse.

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");
}