|
|
This work is licensed under a Creative Commons |
HTML Forms are the weakest part of many Web interfaces, they provide limited datatype support, and require a lot of scripting for implementing user-friendly interfaces. XForms are a new technology for form-based data input with a clear separation of data and user interface issues. This way, XForms support device-neutral data input, where devices have a certain degree of freedom for presenting forms and acquiring input data. In addition, XForms are using XML as input and output format, thus making integration into XML-oriented environments easier.
hen and eggproblem
replace="instance" will only replace the instance (sequential editing)replace="none" will not replace anything (sequential creation, multi-submit forms)<model><instance><data xmlns=""><accountnumber/><name/><address/></data></instance> <submission method="get" action="…/prefill" id="prefill" replace="instance"/> <submission method="put" action="…/change" id="change" replace="none"/> </model> … <input ref="accountnumber"><label>Account Number</label></input> <submit submission="prefill"><label>Find</label></submit> <input ref="name"><label>Name</label></input> <textarea ref="address"><label>Address</label></textarea> <submit submission="change"><label>Submit</label></submit>
MM/DD/YY or DD.MM.YY or YYYY-MM-DD are all not very user friendly5 and 05 represent the same value)hidethe model behind bindings and only use these for Controls
<xf:bind nodeset="/data/one" id="one" type="xs:integer" /> <xf:bind nodeset="/data/one" relevant="/data/two != 42" /> <xf:bind nodeset="/data/two" id="two" type="xs:integer" /> <xf:bind nodeset="/data/two" readonly="/data/one = 42" /> <xf:bind nodeset="/data/three" id="three" calculate="/data/one + /data/two" /> <xf:bind nodeset="/data/four" id="four" required="/data/three = 42" relevant="/data/three = 42" type="xs:date" constraint="starts-with(text(), '2007')"/>
<xf:input bind="one" incremental="true" /> <xf:input bind="two" incremental="true" /> <xf:input bind="three" incremental="true" /> <xf:input bind="four" incremental="true" />
<xf:secret bind="four" incremental="true" />
<xf:textarea bind="one" incremental="true" /> <xf:textarea bind="two" incremental="true" /> <xf:textarea bind="three" incremental="true" /> <xf:textarea bind="four" incremental="true" />
<xf:output bind="one" incremental="true" /> <xf:output bind="two" incremental="true" /> <xf:output bind="three" incremental="true" /> <xf:output bind="four" incremental="true" /> <xf:output bind="four" value="string-length(.)" incremental="true" />
<xf:upload ref="/data/five">
<xf:label>General Upload: </xf:label>
<xf:filename ref="@filename"/>
<xf:mediatype ref="@filename"/>
</xf:upload>
<xf:upload ref="/data/five" mediatype="image/*">
<xf:label>Image Upload: </xf:label>
<xf:filename ref="@filename"/>
<xf:mediatype ref="@filename"/>
</xf:upload>
<xf:upload ref="/data/five" mediatype="audio/*">
<xf:label>Audio Upload: </xf:label>
<xf:filename ref="@filename"/>
<xf:mediatype ref="@filename"/>
</xf:upload>
<xf:range bind="one" start="0" end="10" incremental="true"><xf:label>0-10</xf:label></xf:range> <xf:range bind="one" start="0" end="50" incremental="true"><xf:label>0-50</xf:label></xf:range> <xf:range bind="one" start="0" end="100" step="10" incremental="true"><xf:label>0-100@10</xf:label></xf:range>
<xf:trigger bind="one"><xf:label>Button</xf:label></xf:trigger> <xf:trigger bind="six"><xf:label>Button42</xf:label></xf:trigger> <xf:submit submission="save"><xf:label>Save as...</xf:label></xf:submit>
open <xf:select1 bind="one">
<xf:label>Default: </xf:label>
<xf:item><xf:label>One</xf:label><xf:value>1</xf:value></xf:item>
<xf:item><xf:label>Two</xf:label><xf:value>2</xf:value></xf:item>
<xf:item><xf:label>Three</xf:label><xf:value>3</xf:value></xf:item>
<xf:item><xf:label>Four</xf:label><xf:value>4</xf:value></xf:item>
</xf:select1>
<xf:select1 bind="one" appearance="full">
<xf:label>Full: </xf:label>
<xf:item><xf:label>One</xf:label><xf:value>1</xf:value></xf:item>
<xf:item><xf:label>Two</xf:label><xf:value>2</xf:value></xf:item>
<xf:item><xf:label>Three</xf:label><xf:value>3</xf:value></xf:item>
<xf:item><xf:label>Four</xf:label><xf:value>4</xf:value></xf:item>
</xf:select1>
<xf:select1 bind="one" appearance="compact">
<xf:label>Compact: </xf:label>
<xf:item><xf:label>One</xf:label><xf:value>1</xf:value></xf:item>
<xf:item><xf:label>Two</xf:label><xf:value>2</xf:value></xf:item>
<xf:item><xf:label>Three</xf:label><xf:value>3</xf:value></xf:item>
<xf:item><xf:label>Four</xf:label><xf:value>4</xf:value></xf:item>
</xf:select1>
<xf:select1 bind="one" appearance="minimal">
<xf:label>Minimal: </xf:label>
<xf:item><xf:label>One</xf:label><xf:value>1</xf:value></xf:item>
<xf:item><xf:label>Two</xf:label><xf:value>2</xf:value></xf:item>
<xf:item><xf:label>Three</xf:label><xf:value>3</xf:value></xf:item>
<xf:item><xf:label>Four</xf:label><xf:value>4</xf:value></xf:item>
</xf:select1>
<xf:select bind="one">
<xf:label>Default: </xf:label>
<xf:item><xf:label>One</xf:label><xf:value>1</xf:value></xf:item>
<xf:item><xf:label>Two</xf:label><xf:value>2</xf:value></xf:item>
<xf:item><xf:label>Three</xf:label><xf:value>3</xf:value></xf:item>
<xf:item><xf:label>Four</xf:label><xf:value>4</xf:value></xf:item>
</xf:select>
<xf:select bind="one" appearance="full">
<xf:label>Full: </xf:label>
<xf:item><xf:label>One</xf:label><xf:value>1</xf:value></xf:item>
<xf:item><xf:label>Two</xf:label><xf:value>2</xf:value></xf:item>
<xf:item><xf:label>Three</xf:label><xf:value>3</xf:value></xf:item>
<xf:item><xf:label>Four</xf:label><xf:value>4</xf:value></xf:item>
</xf:select>
<xf:select bind="one" appearance="compact">
<xf:label>Compact: </xf:label>
<xf:item><xf:label>One</xf:label><xf:value>1</xf:value></xf:item>
<xf:item><xf:label>Two</xf:label><xf:value>2</xf:value></xf:item>
<xf:item><xf:label>Three</xf:label><xf:value>3</xf:value></xf:item>
<xf:item><xf:label>Four</xf:label><xf:value>4</xf:value></xf:item>
</xf:select>
<xf:select bind="one" appearance="minimal">
<xf:label>Minimal: </xf:label>
<xf:item><xf:label>One</xf:label><xf:value>1</xf:value></xf:item>
<xf:item><xf:label>Two</xf:label><xf:value>2</xf:value></xf:item>
<xf:item><xf:label>Three</xf:label><xf:value>3</xf:value></xf:item>
<xf:item><xf:label>Four</xf:label><xf:value>4</xf:value></xf:item>
</xf:select>
<xf:textarea bind="data" incremental="true">
<xf:label>Your Message (characters remaining: <xf:output bind="length"/>)</xf:label>
<xf:help>Enter the message text you wish to send as an SMS message.</xf:help>
<xf:hint>Message text</xf:hint>
<xf:alert>Additional characters will be truncated!</xf:alert>
</xf:textarea>
on* attributes in HTML <screen>0</screen>
<screenbuffer>0</screenbuffer>
<first>0</first>
<second>0</second>
<memory>0</memory>
<result />
<xf:trigger>
<xf:label>4</xf:label>
<xf:action ev:event="DOMActivate">
<xf:setvalue ref="/equation/screenbuffer" value="/equation/screenbuffer * 10 + 4" />
<xf:setvalue ref="/equation/screen" value="/equation/screenbuffer" />
</xf:action>
</xf:trigger>
<xf:trigger>
<xf:label>+</xf:label>
<xf:action ev:event="DOMActivate">
<xf:setvalue ref="/equation/first" value="/equation/screen" />
<xf:setvalue ref="/equation/screenbuffer" value="0" />
<xf:toggle ev:event="DOMActivate" case="add" />
</xf:action>
</xf:trigger>
<xf:switch>
<xf:case id="add">
<xf:trigger>
<xf:label>=</xf:label>
<xf:action ev:event="DOMActivate">
<xf:setvalue ref="/equation/second" value="/equation/screenbuffer" />
<xf:setvalue ref="/equation/result" value="/equation/first + /equation/second" />
<xf:setvalue ref="/equation/screen" value="/equation/result" />
<xf:setvalue ref="/equation/screenbuffer" value="0" />
</xf:action>
</xf:trigger>
</xf:case>