XForms
Definition
Die Beschreibungssprache XForms bietet eine deklarative Entwicklungsart für reichhaltige Webformulare, die XML als Transferformat akzeptieren und den Browser als Prozessknoten ausnutzen. Sie verspricht offensichtliche Schwächen der alten HTML-Formulargeneration zu beheben, ist nahtlos in gängige XML-Formate wie XHTML 1.0 oder SVG integrierbar und wird nativer Bestandteil von XHTML 2.0.
XForms wird im Rahmen des W3C-Konsortiums durch die Forms Working Group als Standard spezifiziert. Die aktuelle Version XForms 1.0 trägt den finalen Status einer W3C Empfehlung und greift massiv auf XPath für Adressierung und Berechnungen zurück.
Designziele
Bei XForms wurden aus den analysierten Schwächen von herkömmlichen HTML-Formularen einige Designziele abgeleitet:
- Eine einfachere, barrierefreie Interpretation auf heterogenen Geräten durch Absichts- statt Präsentationsorientierung.
- Eine strukturierte Entwicklungsform über die Trennung von Formulardaten und Präsentation nach dem MVC-Pattern.
- Ein reichhaltigeres Datenmodell für die Speicherung und den Transfer von Formulardaten durch typisiertes XML.
- Eine dynamischere, interaktive Bedienoberfläche ohne Scripting-Aufwand durch eventgekoppelte Aktions- und Widgetelemente.
- Eine Entlastung für Server und Netz, indem der Browser als Prozessknoten bei Validierung und Berechnungen mitarbeitet.
Formularstruktur nach MVC
Bei XForms werden die Formulardaten (Model) von den korrespondierenden Formularfeldern (View) separiert beschrieben - die Steuerlogik (Controller) realisiert ein XForms-Prozessor im Browser. Mit XHTML als Trägerformat kann folgende repräsentative Struktur befüllt werden:
Beschreibung des XForms Model
Beschreibung der XForms View
Anschauungsbeispiel einer Preisauskunft
Als einführendes Beispiel wird nun für die Erklärung von Model- und View-Elementen eine primitive Preisauskunft für einen Produktkatalog konstruiert. Sie zeigt zu einer eingegebenen Produktnummer nach betätigen des Formular-Buttons den Preis des Produktes an:
Model
Das XForms Model (<xf:model>) beschreibt Daten und Aktionen, die zur Erbringung der Grundfunktion nötig aber unabhängig von einer konkreten Darstellung sind. Beim Modell zur Preisauskunft sind folgende Elemente von zentraler Bedeutung:
<xf:model>
<xf:instance xmlns="" id="transfer">
<product num="1337">
<price>99.99</price>
</product>
</xf:instance>
<xf:bind id="num" nodeset="/product/@num" required="true()" />
<xf:submission id="fetch" action="prices.xql" method="get"
ref="instance('transfer')" replace="instance" instance="transfer" />
</xf:model>
- Instanzen (<xf:instance>): dienen als XML-Templates, die im Zuge der Formularbearbeitung gefüllt, dem Server zugeschickt oder von ihm empfangen und präsentiert werden. Der Server liest aus obigen Transferdaten später z.B. das gesetzte num-Attribut aus, befüllt entsprechend das price-Element und schickt alles zurück zum Formular.
- Übermittlungen (<xf:submission>): legen Transferaktionen fest, die im Laufe der Formularbearbeitung initiiert werden. Attribute konfigurieren die Übermittlung: angesprochene URI (action), verwendete HTTP-Methode (method), mitzusendende XML-Daten (ref), was durch die Serverantwort ersetzt wird (replace) und wie hier bei Instanzersetzung die Zielauswahl (instance).
- Bindings (<xf:bind>): erlauben es mittels XPath (nodeset) Knoten aus den Instanzen auszuwählen und über Attribute an Sonderleistungen zu knüpfen: Festlegen eines Identifizierers (id), Ausweisen als verbindlich (required), Ausweisen als schreibgeschützt (readonly), Zuweisen eines Datentyps zur Validierung (type) oder Berechnung des Knoteninhalts über XPath (calculate).
View
Die XForms View (<xf:view>) bedient sich am vorbereiteten Datenmodell und setzt es in Steuerelemente um. Für das Modell zur Preisauskunft könnten dies mit einem Input-Feld, einem Output-Feld und einem Submit-Button geschehen, mit einigen Besonderheiten:
<xf:group>
<xf:label>Preisauskunft</xf:label>
<xf:input bind="num">
<xf:label>Produktnummer</xf:label>
</xf:input>
<xf:output ref="/product/price">
<xf:label>Produktpreis</xf:label>
</xf:output>
<submit submission="fetch">
<xf:label>Abfrage</xf:label>
</submit>
</xf:group>
- Visuelle Gruppierung (<xf:group>): Steuerelemente lassen sich einfach als Gruppe hervorheben.
- Labels (<xf:label>): Feldbezeichnungen sind in XForms verpflichtend und direkt den Feldern als Kindelement zugeordnet.
- Widgets: Referenzieren die Modelldaten entweder über XPath-Ausdrücke mit (ref bei <xf:output>) oder über im Modell vorgegebene Identifizierer (bind & submission bei <xf:input> und <xf:submit>). Die erste Variante ist weniger sauber, da damit die referenzierte Instanzstruktur bekannt sein muss (engere Kopplung).
Absichtsorientierte Formularelemente
Eventgetriebene Aktionen
Standardisierungsgeschichte
- 10/2001: XML Events - W3C Working Draft
- 08/2002: XForms 1.0 - W3C Working Draft
- 11/2003: XForms 1.0 - W3C Recommendation
- 01/2004: XForms 1.1 - W3C Requirements
- 11/2004: XForms 1.1 - W3C Working Draft
- 10/2005: XForms 1.0 (2nd Edition) - W3C Proposed Recommendation
- 03/2006: XForms 1.0 (2nd Edition) - W3C Recommendation
- 10/2007: XForms 1.0 (3rd Edition) - W3C Recommendation
Quellen
- Dubinko, Micah (2003): XForms Essentials. O’Reilly Media Inc., ISBN 0596003692.
- W3C - XForms 1.0 (Third Edition)
- W3C - The Forms Working Group
- W3Schools.com - XForms Tutorial
- Wikipedia - XForms
Bitte die Regeln der GlossarWiki-Quellenformatierung beachten.