XForms in ixml

Just for fun I defined an ixml grammar for (a tiny subset of) XForms.


The input: 


 title: Example XForm
 style: xform.css 


 model M 
 instance data data.xml 
 submission save put:data.xml replace:none 


 input name "What is your name?" 
 submit "OK"


The output


<html>
    <head>
       <title>Example XForm</title>
       <link type='text/css' rel='stylesheet' href='xform.css'/>
       <model id='M'>
          <instance id='data' resource='data.xml'/>
          <submission id='save' method='put' resource='data.xml' 
replace='none'/>
       </model>
    </head>
    <body>
       <group>
          <input ref='name'>
             <label>What is your name?</label>
          </input>
          <submit>
             <label>OK</label>
          </submit>
       </group>
    </body>
</html>


The grammar


xform>html: form, content.


form>head: title, styling?, model*.
title: -"title:", -" "*, ~[" "; #a], ~[#a]+, -#a.
-styling: -"style:", s, (style; stylelink).
stylelink>link: csstype, cssrel, href.
style: csstype, css.
@csstype>type: +"text/css".
@cssrel>rel: +"stylesheet".
@href: -iri.


model: -"model", s, id, -#a, (instance; bind; submission; Action)+.


instance: -"instance", s, id, resource.
@resource: iri.
@id: IDREF, s.


Action: "action" {todo}.
bind: "bind" {todo}.
css: "css" {todo}.


submission: -"submission", s, id, (method, -":", resource)?, replace?.
@method: "get"; "put".
@replace: -"replace:", name.


content>body: group.


group: control*.
-control: input; submit {more}.


input: -"input", s, ref, label.
@ref: xpath.
label: string.


submit: -"submit", s, submissionid?, label?.
@submissionid>submission: -"submission:", id.


-xpath: ["[]/:"; L]+, s.
-string: -'"', ~['"']*, -'"', s.
-IDREF: [L]+.
-iri: ~[" "; #A]+, s.
-name: [L]+, s.
-s: -[" "; #a]*.




Steven

Received on Friday, 17 January 2025 13:52:37 UTC