Beispielformular

Hello World

Eine XML-Formular-Definition besitzt das Root-Element form. Die XSD-Schemabeschreibung befindet sich in der Distribution im Package de.imatics.forms.schema in der Datei form.xsd. Um bei der Entwicklung eines Formulars die Autovervollständigung eines XML-Editors nutzen zu können, sollte in der Entwicklungsumgebung diese Schema-Datei der Schema-Location http://www.imatics.de/forms/form.xsd zugeordnet werden, die in der XML-Deklaration anzugeben ist. Da es keine Vermischung mit anderen Namespaces gibt, kann auf die Verwendung eines Namespaces durch Angabe von noNamespaceSchemaLocation verzichtet werden.

Das form-Element enthält eine Liste von component, group oder repeat-Elementen. Die letzten beiden können als Kind-Elemente weitere Komponenten, Gruppen oder Repeats enthalten. Das erste Beispiel erzeugt ein einfaches Formular für ein Textfeld, das mit dem Wert "Hello World" vorbelegt ist.

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="http://www.imatics.de/forms/form.xsd">

  <component name="hello" type="text" label="Text">
    <default>Hello World</default>
  </component>
</form>

Eine Komponente kann weitere Elemente enthalten, welche die Constraints für die Komponente definieren. Im Folgenden werden die wichtigsten davon kurz erläutert.

  • validator Enthält weitere Validierer-Unterlemente, welche die Eingaberegeln für die Komponente festlegen. Die Namen der möglichen Elemente entsprechen den Klassennamen der Validierer-Implementierung im Package de.imatics.forms.validator. Großbuchstaben im Klassennamen werden dabei klein geschrieben und durch Bindestriche getrennt. Bei Angabe von <multiple-of .../> wird also der MultipleOfValidator verwendet.
    Logische Verknüpfungen verschiedener Validierer können durch eine hierarchische XML-Struktur mit and- und or-Elementen erzeugt werden. Das validator-Element selbst fungiert selbst als UND-Verknüpfung der enthaltenen Bedingungen.
  • hidden / readonly Diese Elemente enthalten ebenfalls Validierer als Unterlemente. Abhängig vom Ergebnis der Validierung wird die Komponente ausgeblendet oder nicht editierbar dargestellt. Wenn die Elemente keine Validierer enthalten ist das Ergebnis immer true, so dass z.B. <hidden/> ein Feld dauerhaft ausblendet
  • renderer Ein oder mehrere Renderer, die für die Anzeige und Eingabe des Komponentenwertes verwendet werden sollen. Wird kein Renderer-Element angegeben, wird der Standard-Renderer für die Komponente verwendet.
    Das Element renderer besitzt das Attribut type. Damit können konzeptionell Renderer für verschiedene Medien angegeben werden. Für Html-Formulare ist dort der Wert html zu verwenden. Da derzeit nur Renderer für Html-Formulare existieren, kann auch der Default-Render-Type als Attribut im form-Element festgelegt werden
    Als Klasse wird der vollständige Name der zu verwendenden Renderer-Klasse angegeben. Bei Renderern, die sich im Standard-Package für html-Renderer befinden, reicht auch der lokale Klassenname ohne den Namensteil Renderer
  • option-list Definiert die Optionen, die für eine Komponente zur Verfügung stehen. Diese können dann von verschiedenen Renderern zur Auswahl angeboten werden (z.B. DropdownRenderer). Die Optionen können durch eine feste Liste von option-Elemente vorgegeben werden oder durch eine Klasse, die eine OptionListFactory implementiert. Alternativ kann auch ein Calculator angegeben werden, der eine Liste von Werten erzeugt.
    (siehe auch die Beispiele unter Beispiele / Optionen und Bäume)
  • option-list / option-tree Ähnlich der option-list können einige Renderer Optionen in einer Baumstruktur bentötigen. Die hier angegebene Klasse implementiert eine TreeFactory
  • default Enthält ein Calculator-Element, dass den Default-Wert für eine Komponente liefert, falls diese beim Laden des Formulars leer ist. Die Verwendung eines einfachen Textes wird als ConstantCalculator geparst, der den enthaltenen Text liefert.
  • calculator Enthält ein Calculator-Element, das während der Bearbeitung des Formulars den Wert der Komponente auf Basis anderer Komponenten berechnet. Dabei kann ein Calculator als Parameter die Werte anderer Komponenten erhalten. Dieser Calculator wird dann sofort ausgeführt, sobald sich der Wert einer als Parameter referenzierten Komponente ändert.

Das "Hello World"-Beispiel kann auf diese Weise um Validierer und zusätzliche Renderer mit Options-Liste erweitert werden.

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="http://www.imatics.de/forms/form.xsd"
  render-type="html">

  <component name="hello" type="text" label="Text">
    <validator>
      <required/>
      <length min="3"/>
    </validator>
    <renderer type="html" class="Text"/>
    <renderer type="html" class="Dropdown"/>
    <option-list>
      <option value="Hello World"/>
      <option value="Hallo Welt"/>
    </option-list>
    <default>Hello World</default>
  </component>
</form>