RELAX NG Schema for Paloose Forms
Author: Hugh Field-Richards
Date: 2007-03-08T19:00
The Paloose Forms Definition. These are (loosely) based on JXForms (themselves based on XForms).
These are the namespaces needed by the Schematron validator.
<pf:form id="addUserForm" flow="addUser" continuation="{flow:continuation.id}" session="{flow:__flowId}"> ... </pf:form>
<define name="paloose.forms"> <element name="pf:form"> <optional> <attribute name="id"/> </optional> <attribute name="flow"/> <attribute name="session"/> <attribute name="continuation"/> <optional> <ref name="paloose.forms.label"/> </optional> <optional> <ref name="paloose.forms.label"/> </optional> <interleave> <zeroOrMore> <ref name="paloose.forms.group"/> </zeroOrMore> <zeroOrMore> <ref name="paloose.forms.input"/> </zeroOrMore> <zeroOrMore> <ref name="paloose.forms.secret"/> </zeroOrMore> <zeroOrMore> <ref name="paloose.forms.output"/> </zeroOrMore> <zeroOrMore> <ref name="paloose.forms.select"/> </zeroOrMore> <zeroOrMore> <ref name="paloose.forms.submit"/> </zeroOrMore> </interleave> </element> </define>
<pf:group ref="address"> <pf:label>Address</pf:label> <pf:output ref="address-line_1"> <pf:label>Line 1</pf:label> <pf:value>{flow:address-line_1}</pf:value> </pf:output> <pf:output ref="address-line_2"> <pf:label>Line 2</pf:label> <pf:value>{flow:address-line_2}</pf:value> </pf:output> <pf:output ref="address-postcode"> <pf:label>Postcode</pf:label> <pf:value>{flow:address-postcode}</pf:value> </pf:output> </pf:group>
<define name="paloose.forms.group"> <element name="pf:group"> <optional> <attribute name="ref"/> </optional> <optional> <ref name="paloose.forms.label"/> </optional> <interleave> <zeroOrMore> <ref name="paloose.forms.group"/> </zeroOrMore> <zeroOrMore> <ref name="paloose.forms.input"/> </zeroOrMore> <zeroOrMore> <ref name="paloose.forms.output"/> </zeroOrMore> <zeroOrMore> <ref name="paloose.forms.select"/> </zeroOrMore> </interleave> </element> </define>
<define name="paloose.forms.select"> <element name="pf:select"> <optional> <attribute name="ref"/> </optional> <optional> <attribute name="appearance"/> </optional> <optional> <ref name="paloose.forms.label"/> </optional> <ref name="paloose.forms.value"/> <zeroOrMore> <ref name="paloose.forms.choices"/> </zeroOrMore> </element> </define>
<define name="paloose.forms.choices"> <element name="pf:choices"> <zeroOrMore> <ref name="paloose.forms.item"/> </zeroOrMore> </element> </define>
<define name="paloose.forms.item"> <element name="pf:item"> <optional> <attribute name="class"/> </optional> <interleave> <optional> <ref name="paloose.forms.label"/> </optional> <optional> <ref name="paloose.forms.hint"/> </optional> <ref name="paloose.forms.value"/> <optional> <ref name="paloose.forms.help"/> </optional> <optional> <ref name="paloose.forms.violations"/> </optional> </interleave> </element> </define>
<pf:submit class="button" id="prev"> <pf:label>Back</pf:label> <pf:hint>Go to previous page</pf:hint> </pf:submit>
<define name="paloose.forms.submit"> <element name="pf:submit"> <attribute name="class"/> <attribute name="id"/> <interleave> <optional> <ref name="paloose.forms.label"/> </optional> <optional> <ref name="paloose.forms.hint"/> </optional> <optional> <ref name="paloose.forms.value"/> </optional> <optional> <ref name="paloose.forms.help"/> </optional> </interleave> </element> </define>
<pf:input ref="email" class="fullnameField"> <pf:label>EMAIL</pf:label> <pf:value>{flow:email}</pf:value> <pf:hint>The user's EMAIL for contact</pf:hint> <pf:violations/> </pf:input>
<define name="paloose.forms.input"> <element name="pf:input"> <attribute name="ref"/> <optional> <attribute name="class"/> </optional> <interleave> <optional> <ref name="paloose.forms.label"/> </optional> <optional> <ref name="paloose.forms.hint"/> </optional> <ref name="paloose.forms.value"/> <optional> <ref name="paloose.forms.help"/> </optional> <optional> <ref name="paloose.forms.violations"/> </optional> </interleave> </element> </define>
<pf:secret ref="email" class="fullnameField"> <pf:label>EMAIL</pf:label> <pf:value>{flow:email}</pf:value> <pf:hint>The user's EMAIL for contact</pf:hint> <pf:violations/> </pf:secret>
<define name="paloose.forms.secret"> <element name="pf:secret"> <attribute name="ref"/> <optional> <attribute name="class"/> </optional> <interleave> <optional> <ref name="paloose.forms.label"/> </optional> <optional> <ref name="paloose.forms.hint"/> </optional> <ref name="paloose.forms.value"/> <optional> <ref name="paloose.forms.help"/> </optional> <optional> <ref name="paloose.forms.violations"/> </optional> </interleave> </element> </define>
<pf:output ref="username"> <pf:label>Username:</pf:label> <pf:value>{flow:username}</pf:value> </pf:output>
<define name="paloose.forms.output"> <element name="pf:output"> <attribute name="ref"/> <optional> <attribute name="class"/> </optional> <interleave> <optional> <ref name="paloose.forms.label"/> </optional> <optional> <ref name="paloose.forms.hint"/> </optional> <ref name="paloose.forms.value"/> <optional> <ref name="paloose.forms.help"/> </optional> </interleave> </element> </define>
<define name="paloose.forms.value"> <element name="pf:value"> <optional> <attribute name="ref"/> </optional> <text/> </element> </define>
<define name="paloose.forms.label"> <element name="pf:label"> <text/> </element> </define>
<define name="paloose.forms.hint"> <element name="pf:hint"> <text/> </element> </define>
<define name="paloose.forms.help"> <element name="pf:help"> <text/> </element> </define>
This will be expanded during the flow through so should be empty — it is merely a placeholder.
<define name="paloose.forms.violations"> <element name="pf:violations"> <empty/> </element> </define>
<define name="text.verticalContent" combine="interleave"> <zeroOrMore> <ref name="paloose.forms"/> </zeroOrMore> </define>