Summary

  • W3C veröffentlichte XForms 1.0 am 14. Oktober 2003 als Recommendation. Das Konzept trennte Modell, XML-Instanzdaten und Benutzeroberfläche; Bindungen verknüpften Bedienelemente mit ihren Datenknoten.
  • Im Zahlungsbeispiel der Recommendation sind Kartennummer und Ablaufdatum nur bei Kreditkartenzahlung relevant. Die Eigenschaft relevant beeinflusst zugleich die Bedienbarkeit der Felder und die XML-Knoten, die bei der Abgabe serialisiert werden.

Der Kunde legt Bargeld auf den Tresen. Die Kassiererin zählt die Scheine und fragt anschließend nach der Gültigkeit seiner Kreditkarte. Ein Blick auf den Vordruck erklärt den Irrtum: Dort steht nun einmal eine Zeile für das Ablaufdatum. Webformulare können denselben Geschäftssinn haben wie ein schlecht trainierter Stempel. Die XForms-1.0-Recommendation des W3C vom 14. Oktober 2003 gab den Fragen Regeln, die wichtiger waren als ihre bloße Anwesenheit auf dem Bildschirm.

Ein XForms-Formular hatte drei unterscheidbare Teile. Das Modell beschrieb Daten und Bedingungen. Die Instanz enthielt ein XML-Dokument, dessen Werte beim Ausfüllen entstanden. Die Oberfläche bot die Bedienelemente an. Mit ref wurde festgelegt, welchen Knoten einer Instanz ein Element bediente. Die Form des Knopfes und die Bedeutung der Antwort konnten damit getrennt bearbeitet werden. Ein Bildschirm durfte anders aussehen, ohne dass die Zahlungsart plötzlich zum Ablaufdatum wurde.

Die Recommendation zeigt das an einem kleinen Kauf. Eine XML-Instanz beginnt mit Plätzen für Zahlungsmethode, Kartennummer und Ablaufdatum; submission nennt das Ziel. Auf der sichtbaren Seite steht select1 für die Wahl zwischen Bargeld und Kredit, daneben stehen input-Elemente für die Kartendaten. Jedes Bedienelement hat sein eigenes label. Die Bindung zeigt auf den passenden XML-Knoten. Während der Kunde antwortet, verändert sich die Instanz. Zur Abgabe serialisiert der Prozessor sie als XML.

select1 beschrieb die Absicht, eine Option auszuwählen. Ein grafischer Bildschirm und eine Sprachausgabe konnten diese Auswahl unterschiedlich anbieten. Die Bindung an den Datenknoten blieb das gemeinsame Rückgrat. Darin lag der praktische Sinn der Trennung: Die Oberfläche durfte sich dem Gerät anpassen, während der Autor festlegte, welche Antwort in welchem Feld des Ergebnisses landen sollte.

Nun zu der Frage, die bei Bargeld Feierabend hat. Das Beispiel versieht Kartennummer und Ablaufdatum mit bind-Elementen, deren relevant-Ausdruck prüft, ob die Zahlungsmethode cc lautet. In diesem Fall sind die Angaben auch required und haben Typvorgaben. Das Beispiel für die Kartennummer verlangt ein Muster mit 14 bis 18 Ziffern; für das Ablaufdatum steht xsd:gYearMonth. Wechselt der Kunde zur Barzahlung, berechnet der Prozessor die Bedingung neu. Die Kassiererin muss keinen Plastikausweis aus einem Stapel Scheine hervorzaubern.

Die Definition von relevant in der Recommendation reicht bis zum versandten Dokument. Ein nicht relevanter Knoten wird bei der Abgabe nicht serialisiert. Sein Bedienelement ist nicht benutzbar, verschwindet aus der Navigationsfolge und erhält keinen Fokus. Bei Kredit werden die Felder Teil des aktiven Weges; bei Bargeld verlassen die Kartendaten auch das XML-Ergebnis. Der Prozessor ändert damit mehr als die Kulisse.

Gerade das schützt den Zusammenhang zwischen Frage und Akte. Ein Feld lässt sich optisch verstecken, während ein alter Wert im Datensatz liegen bleibt. XForms verband die Anzeige und die XML-Instanz über dieselbe Regel. Das Modell sagte, welche Daten gerade dazugehören; der Prozessor setzte es um; die Oberfläche und das Ergebnis erzählten dieselbe Geschichte. Für einen simplen Kauf war das erstaunlich viel Disziplin auf drei Schreibtischen.

W3C beschrieb die Trennung in seiner Ankündigung von 2003 als Unterscheidung von Zweck, Darstellung und Ergebnis. Das Zahlungsbeispiel liefert die Übersetzung aus dem Konferenzraum: Der Zweck ist die Erfassung der Zahlungsart, die Darstellung passt sich dem Gerät an, das Ergebnis ist die XML-Instanz. Eine gute Frage kennt ihren Anlass. Eine Kreditkartenfrage bei Bargeld hat keinen.