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.

Schematron
Declare schematron namespace : page = http://www.hsfr.org.uk/Schema/Page
Schematron
Declare schematron namespace : link = http://www.hsfr.org.uk/Schema/Link
Schematron
Declare schematron namespace : list = http://www.hsfr.org.uk/Schema/List
Schematron
Declare schematron namespace : text = http://www.hsfr.org.uk/Schema/Text
Schematron
Declare schematron namespace : i18n = http://apache.org/cocoon/i18n/2.1
Schematron
Declare schematron namespace : pf = http://www.paloose.org/schemas/Forms/1.0

PForms Definition

   <pf:form id="addUserForm" flow="addUser" continuation="{flow:continuation.id}" session="{flow:__flowId}">
      ...
   </pf:form>
   
define : paloose.forms
element : pf:form
optional
attribute : id
attribute : flow
attribute : session
attribute : continuation
optional
optional
interleave
zeroOrMore
zeroOrMore
zeroOrMore
zeroOrMore
zeroOrMore
zeroOrMore
<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 : paloose.forms.group
element : pf:group
optional
attribute : ref
optional
interleave
zeroOrMore
zeroOrMore
zeroOrMore
zeroOrMore
<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 : paloose.forms.select
element : pf:select
optional
attribute : ref
optional
attribute : appearance
optional
zeroOrMore
<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 : paloose.forms.choices
element : pf:choices
zeroOrMore
<define name="paloose.forms.choices">
   <element name="pf:choices">
      <zeroOrMore>
         <ref name="paloose.forms.item"/>
      </zeroOrMore>
   </element>
</define>
define : paloose.forms.item
element : pf:item
optional
attribute : class
interleave
optional
optional
optional
optional
<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 : paloose.forms.submit
element : pf:submit
attribute : class
attribute : id
interleave
optional
optional
optional
optional
<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 : paloose.forms.input
element : pf:input
attribute : ref
optional
attribute : class
interleave
optional
optional
optional
optional
<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 : paloose.forms.secret
element : pf:secret
attribute : ref
optional
attribute : class
interleave
optional
optional
optional
optional
<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 : paloose.forms.output
element : pf:output
attribute : ref
optional
attribute : class
interleave
optional
optional
optional
<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 : paloose.forms.value
element : pf:value
optional
attribute : ref
Any text
<define name="paloose.forms.value">
   <element name="pf:value">
      <optional>
         <attribute name="ref"/>
      </optional>
      <text/>
   </element>
</define>
define : paloose.forms.label
element : pf:label
Any text
<define name="paloose.forms.label">
   <element name="pf:label">
      <text/>
   </element>
</define>
define : paloose.forms.hint
element : pf:hint
Any text
<define name="paloose.forms.hint">
   <element name="pf:hint">
      <text/>
   </element>
</define>
define : paloose.forms.help
element : pf:help
Any text
<define name="paloose.forms.help">
   <element name="pf:help">
      <text/>
   </element>
</define>

Violations

This will be expanded during the flow through so should be empty — it is merely a placeholder.

define : paloose.forms.violations
element : pf:violations
empty
<define name="paloose.forms.violations">
   <element name="pf:violations">
      <empty/>
   </element>
</define>

Vertical Content Extension

text.verticalContent — Warning! not used within this schema file. (Combine: interleave)
define : text.verticalContent
zeroOrMore
<define name="text.verticalContent" combine="interleave">
   <zeroOrMore>
      <ref name="paloose.forms"/>
   </zeroOrMore>
</define>