Vorstellung der W3C-Recommendation XForms 1.0: Reine Formsache
Formulare sind ein essenzieller Bestandteil des WWW. Bei der Eingabe eines Suchbegriffs in den Suchmaschinen, in Foren, Gästebüchern, Onlineshops und selbst im TYPO3-Backend: überall Formulare. Selbst wenn dem W3C inzwischen das Image einer praxisfernen und rein akademischen Einrichtung anhaftet, macht XForms den Eindruck, mehr Probleme lösen zu können als neue zu verursachen. Im neuen XForms-Standard kommen alte Bekannte wie XML Schema und XPath zum Einsatz. Dadurch können Zusatzinformationen auf elegante Weise in Formulare eingebettet werden. Browser werden diesen Mehrwert interpretieren können und entsprechende Funktionen bereitstellen. Das W3C verfolgt strikt seine Strategie, möglichst alle neuen Entwicklungen mit Hilfe von XML zu implementieren. Da verwundert es nicht, dass neben der Formulardefinition auch Formulardaten in XML strukturiert sind. XForms sind keine eigenständigen Dokumente, sondern lassen sich unter Verwendung von Namespaces in fast beliebige andere Dokumente (z. B. SVG) integrieren.
Trennung von Modell und Benutzerschnittstelle
Wie so oft liegen die Hauptvorteile einer Neuentwicklung in der sauberen Trennung verschiedener Ebenen. Mit XForms wird ein Formular in Modell und Benutzerschnittstelle aufgeteilt. Dadurch wird die Trennung zwischen Inhalt und Layout, die Wiederverwendung in verschiedenen Kontexten sowie die Verarbeitung auf unterschiedlichen Ausgabegeräten gewährleistet. XForms hält sich somit an die MVC-Architektur. Das Modell wird im Kopf des Dokumentes durch <model> definiert. Hier werden in gewohnter XML-Manier die eigentlichen Daten (Instance Data), zugehörige Typdefinitionen, eventuelle Abhängigkeiten (Bindings) und Versandinformationen (Submisson) festgelegt. Das schema-Attribut lässt die Herzen von XML-Schema-Freunden höher schlagen. Hier lässt sich ein Schema-Dokument bestimmen, gegenüber dem der XForms-Prozessor die Formulardaten validiert.
Als Beispiel betrachten wir zunächst ein einfaches, traditionelles Suchformular:
<html> <head><title>Suche</title> </head> <body> <form action="http://foo.com/search" method="get">Suchbegriff <input type="text" name="s"><input type="submit" value="Such"> </form></body></html>
Listing 1
Da in XForms das Modell und die Benutzerschnittstelle getrennt werden, definieren wir im <head> zunächst das Modell:
<model> <submission action="http://foo.com/search" method="get" id="s"/> </model>
Listing 2
An einer beliebigen Stelle im <body> wird nun das Formularfeld selbst angegeben. Das <form>-Tag wird nicht mehr benötigt.
<input ref="q"> <label>Suchbegriff </label> </input> <submit submission="s"> <label>Such</label> </submit>
Listing 3
Anhand dieses Beispiels lässt sich erkennen, dass der Umstieg nicht schwer fällt. Hinzu kommen neue Features und Vereinfachungen, die im Folgenden demonstriert werden.
Datenstrukturen und Initialisierungsdaten
Um eine Datenstruktur der über das Formular eingegebenen Daten definieren zu können, wird das <instance>-Tag verwendet. Hierbei handelt es sich um ein XML-Dokument, das beliebig strukturiert sein kann.
<model> <instance> <data xmlns=""><s>Suchbegriff</s></data> </instance> [...]
Listing 4
In diesem Beispiel wird ebenso ein Initialisierungswert angegeben, mit dem das Formularfeld zu füllen ist. Die so definierten Daten müssen nicht zwingend im Formular vorkommen. Auf diese Weise wird das bekannte <input type=“hidden“> abgelöst. Um Initialisierungsdaten von einer externen Quelle einzulesen, reicht ein einfaches Attribut-Wert-Paar im <instance>-Element:
<instance xsrc="http://foo.com/tmp/0815.xml"/>
Listing 5
Würde beispielsweise ein CMS die gesamten Daten in XML-Strukturen speichern und verwalten, würde dieser Ausdruck genügen, um ein Formular mit den editierbaren Werten zu füllen. Mit Hilfe von XPath und dem ref-Attribut können sogar beliebige XML-Dokumente editiert werden. Da XHTML selbst auch XML ist, gilt das auch für solche Dokumente:
<model> <instance xsrc="http://www.foo.com/bar.html"/> <submission action="http://www.foo.com/bar.html" method="put" id="change"/> </model> [...] <select1 ref="/h:html/h:head/h:title"> <label>Wähle den Titel des Dokumentes:</label> <item> <label>Apfel ist der Titel</label> <value>Apfel</value> </item> <item> <label>Banane</label> <value>Banane</value> </item> </select1> <submit submission="change"> <label>Titel ändern</label> </submit>
Listing 6
Um mit XPath arbeiten zu können, muss das angesprochene Dokument natürlich valides XHTML sein. Damit das Dokument auch tatsächlich verändert werden kann, muss der Server die put-Methode akzeptieren.
Controls
Im oben genannten Beispiel wurde das select-Control verwendet. Intuitiv würde man vermuten, dass es sich hierbei um eine klassische Auswahlliste mit <select> und <option> handelt. Hier liegt jedoch ein entscheidender Unterschied. In XForms geht man davon aus, dass es sich grundsätzlich um eine Auswahlmöglichkeit verschiedener Werte handelt. Mittels CSS kann gesteuert werden, ob diese Auswahl in Form von Checkboxen, Radio-Buttons, Drop-Down-Menüs oder ähnlichem präsentiert wird. XForms bietet viele Extras, die ansonsten nur umständlich realisierbar wären. Für einen Kontaktlinsen-Shop ist beispielsweise zur Angabe der benötigen Stärke eine Bereichsdefinition komfortabler als eine Wert-für-Wert-Auflistung:
<range ref="staerke" start="-20" end="20" step="0.25">
Listing 7
Mit Hilfe des ouptput-control-Elements und einem XPath-Ausdruck können innerhalb von Formularen zum Beispiel Berechnungen durchgeführt werden:
Posten: <output value="preis * anzahl "/>
Listing 8
Kontrollstrukturen und Validierung
Da in XForms bestehende XML-Technologien Einzug halten, kann XML Schema zur Definition eigener oder bestehender Datentypen eingesetzt werden. Auf Basis dieser Definitionen kann direkt beim Client eine Validierung der eingegebenen Daten und die Ausgabe von Meldungen erfolgen. Da man für ein ordentliches XML-Dokument auch ein entsprechendes Schema benötigt, kann man dieses wiederverwenden und spart sich gleichzeitig lästigen Skript-Aufwand. Durch vielfältige Kontrollstrukturen, die direkt im <model>-Element definiert werden können, wird Implementierungsaufwand eingespart. Beispielsweise können Pflichtfelder (required), Berechnungen (calculate) und Datentypen (type) direkt angegeben werden. Das ist zwar
auch mit JavaScript zu bewerkstelligen, aber die Probleme damit sind
vielfältig:
<model> <bind nodeset=“ankunft“ type=“xsd:date“ required=“true()“ /> <bind nodeset=“dauer“ calculate=“days-from-date(../abfahrt) – days-from-date(../ankunft)“ /> </model>
Listing 9
Unterstützung
Allen Vorteilen zum Trotz gilt es, eine bittere Pille zu schlucken. Anders als bei neuen serverseitigen Technologien brauchen clientseitige Neuentwicklungen eine halbe Ewigkeit bis zur Praxistauglichkeit. Speziell bei XForms wird dieser Prozess durch den intensiven Einsatz anderer neuer Technologien beeinflusst. Schließlich ist XForms Teil des Standards XHTML 2.0 und auch XPath kann nicht lange ignoriert werden. Auf Seiten der Browserhersteller kann man bisher nicht von einer breiten Unterstützung sprechen. Lediglich der experimentelle und freie X-Smiles Browser bietet eine annehmbare Unterstützung. Firefox muss durch eine eigene Extension erweitert werden und für den Microsoft Internet Explorer gibt es beispielsweise das formsPlayer Plugin. Darüber hinaus gibt es kaum Ernst zu nehmende clientseitige JavaScript- und serverseitge Implementierungen.
Fazit
Die Notwendigkeit für einen neuen Formularstandard sieht man leicht daran, dass parallel zur Entwicklung von XForms bereits andere Standards vorgeschlagen wurden. So haben 2005 Mozilla und Opera „Web Forms 2.0“ als W3C-Standard vorgeschlagen. Auch Microsoft enttäuscht nicht: Mit der Einführung von Office 2003 gab es bereits das XForms-Pendant „InfoPath“. Nicht zuletzt beschäftigt sich Adobe im Rahmen des PDF-Standards ebenfalls seit Jahren mit Formularen. Bis sich dieses Durcheinander etwas sortiert hat und XForms den Status einer Recommendation (letzte Aktualisierung 14. März 2006) verlassen hat, werden wir uns mit alt hergebrachtem Scripting herumschlagen müssen. Einen schnellen Einstieg in die Materie bieten die XForms FAQ [3] und „XForms for HTML Authors“ [4]. Wer sich intensiver mit XForms beschäftigen möchte, findet im Web zahlreiche Informationen oder nimmt sich „XForms Essentials“ von Micah Dubinko zur Hand. Kenntnisse in XPath und XML Schema sollten dabei zumindest rudimentär vorhanden sein.