--- /dev/null
+datatypes w = "http://whattf.org/datatype-draft"
+
+# #####################################################################
+## RELAX NG Schema for HTML 5: Basic Prose Markup #
+# #####################################################################
+
+# #####################################################################
+## Paragraph-Level
+
+## Paragraph: <p>
+
+ p.elem =
+ element p { p.inner & p.attrs }
+ p.attrs =
+ ( common.attrs
+ & common.attrs.aria?
+ )
+ p.inner =
+ ( common.inner.phrasing ) # REVISIT lists in span?
+
+ common.elem.flow |= p.elem
+
+## Hint Transition: <hr>
+
+ hr.elem =
+ element hr { hr.inner & hr.attrs }
+ hr.attrs =
+ ( common.attrs
+ & common.attrs.aria.role.separator?
+ )
+ hr.inner =
+ ( empty )
+
+ common.elem.flow |= hr.elem
+
+# #####################################################################
+## Preformatting Blocks
+
+## Preformatted Text: <pre>
+
+ pre.elem =
+ element pre { pre.inner & pre.attrs }
+ pre.attrs =
+ ( common.attrs
+ & common.attrs.aria?
+ )
+ pre.inner =
+ ( common.inner.phrasing )
+
+ common.elem.flow |= pre.elem
+
+# #####################################################################
+## Simple Lists
+
+## Unordered List: <ul>
+
+ ul.elem =
+ element ul { ul.inner & ul.attrs }
+ ul.attrs =
+ ( common.attrs
+ & ( ( common.attrs.aria.role.directory
+ | common.attrs.aria.role.group
+ | common.attrs.aria.role.list
+ | common.attrs.aria.role.listbox
+ | common.attrs.aria.role.menu
+ | common.attrs.aria.role.menubar
+ | common.attrs.aria.role.tablist
+ | common.attrs.aria.role.toolbar
+ | common.attrs.aria.role.tree
+ | common.attrs.aria.role.presentation
+ )
+ | common.attrs.aria.implicit.list
+ )?
+ )
+ ul.inner =
+ ( li.elem*
+ & common.elem.script-supporting*
+ )
+
+ common.elem.flow |= ul.elem
+
+## Unordered List Item: <li>
+
+ li.elem =
+ element li { li.inner & li.attrs }
+ li.attrs =
+ ( common.attrs
+ & ( common.attrs.aria.implicit.listitem
+ | common.attrs.aria.role.listitem
+ | common.attrs.aria.role.menuitem
+ | common.attrs.aria.role.menuitemcheckbox
+ | common.attrs.aria.role.menuitemradio
+ | common.attrs.aria.role.option
+ | common.attrs.aria.role.tab
+ | common.attrs.aria.role.treeitem
+ | common.attrs.aria.role.separator
+ | common.attrs.aria.role.presentation
+ )?
+ )
+ li.inner =
+ ( common.inner.flow )
+
+## Ordered List: <ol>
+
+ ol.elem =
+ element ol { ol.inner & ol.attrs }
+ ol.attrs =
+ ( common.attrs
+ & ol.attrs.start?
+ & ol.attrs.reversed?
+ & ol.attrs.type?
+ & ( ( common.attrs.aria.role.directory
+ | common.attrs.aria.role.group
+ | common.attrs.aria.role.list
+ | common.attrs.aria.role.listbox
+ | common.attrs.aria.role.menu
+ | common.attrs.aria.role.menubar
+ | common.attrs.aria.role.tablist
+ | common.attrs.aria.role.toolbar
+ | common.attrs.aria.role.tree
+ | common.attrs.aria.role.presentation
+ )
+ | common.attrs.aria.implicit.list
+ )?
+ )
+ ol.attrs.start =
+ attribute start {
+ common.data.integer
+ }
+ ol.attrs.reversed =
+ attribute reversed {
+ w:string "reversed" | w:string ""
+ }
+ ol.attrs.type =
+ attribute type {
+ w:string "1" | w:string "a" | w:string "A" | w:string "i" | w:string "I"
+ }
+ ol.inner =
+ ( oli.elem*
+ & common.elem.script-supporting*
+ )
+
+ common.elem.flow |= ol.elem
+
+## Ordered List Item: <li>
+
+ oli.elem =
+ element li { oli.inner & oli.attrs }
+ oli.attrs =
+ ( common.attrs
+ & oli.attrs.value?
+ & ( common.attrs.aria.implicit.listitem
+ | common.attrs.aria.role.listitem
+ | common.attrs.aria.role.menuitem
+ | common.attrs.aria.role.menuitemcheckbox
+ | common.attrs.aria.role.menuitemradio
+ | common.attrs.aria.role.option
+ | common.attrs.aria.role.tab
+ | common.attrs.aria.role.treeitem
+ | common.attrs.aria.role.separator
+ | common.attrs.aria.role.presentation
+ )?
+ )
+ oli.attrs.value =
+ attribute value {
+ common.data.integer
+ }
+ oli.inner =
+ ( common.inner.flow )
+
+# #####################################################################
+## Definition Lists
+
+## Definition List: <dl>
+
+ dl.elem =
+ element dl { dl.inner & dl.attrs }
+ dl.attrs =
+ ( common.attrs
+ & ( common.attrs.aria.implicit.list
+ | common.attrs.aria.role.list
+ )?
+ )
+ dl.inner =
+ ( ( ( dt.elem
+ & common.elem.script-supporting*
+ )+
+ ,
+ ( dd.elem
+ & common.elem.script-supporting*
+ )+
+ )*
+ )
+
+ common.elem.flow |= dl.elem
+
+## Definition Term: <dt>
+
+ dt.elem =
+ element dt { dt.inner & dt.attrs }
+ dt.attrs =
+ ( common.attrs
+ & common.attrs.aria?
+ )
+ dt.inner =
+ ( common.inner.flow )
+
+## Definition Description: <dd>
+
+ dd.elem =
+ element dd { dd.inner & dd.attrs }
+ dd.elem.phrasing =
+ element dd { dd.inner.phrasing & dd.attrs }
+ dd.attrs =
+ ( common.attrs
+ & common.attrs.aria?
+ )
+ dd.inner =
+ ( common.inner.flow )
+ dd.inner.phrasing =
+ ( common.inner.phrasing )
+
+# #####################################################################
+## Miscellaneous Elements
+
+## Generic Container: <div>
+
+ div.elem =
+ element div { div.inner & div.attrs }
+ div.attrs =
+ ( common.attrs
+ & common.attrs.aria?
+ )
+ div.inner =
+ ( common.inner.flow )
+
+ common.elem.flow |= div.elem
+
+## Title or Explanatory Caption: <legend>
+
+ legend.elem =
+ element legend { legend.inner & legend.attrs }
+ legend.attrs =
+ ( common.attrs
+ & ( common.attrs.aria.role.presentation
+ | common.attrs.aria.role.menuitem
+ )?
+ )
+ legend.inner =
+ ( common.inner.phrasing )