854 lines
25 KiB
XML
854 lines
25 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0">
|
|
<!-- ##################################################################### -->
|
|
<define name="common-form.attrs">
|
|
<a:documentation> RELAX NG Schema for HTML 5: Web Forms 1.0 markup #</a:documentation>
|
|
<!-- ##################################################################### -->
|
|
<a:documentation>Shared attributes for form controls</a:documentation>
|
|
<interleave>
|
|
<optional>
|
|
<ref name="common-form.attrs.name"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common-form.attrs.disabled"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="common-form.attrs.name">
|
|
<attribute name="name">
|
|
<data type="string" datatypeLibrary=""/>
|
|
<!-- REVISIT should this be restricted somehow? No & and = perhaps? -->
|
|
</attribute>
|
|
</define>
|
|
<define name="common-form.attrs.disabled">
|
|
<attribute name="disabled">
|
|
<choice>
|
|
<value type="string">disabled</value>
|
|
<value type="string"/>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
<define name="shared-form.attrs.readonly">
|
|
<attribute name="readonly">
|
|
<choice>
|
|
<value type="string">readonly</value>
|
|
<value type="string"/>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
<define name="shared-form.attrs.maxlength">
|
|
<attribute name="maxlength">
|
|
<ref name="common.data.integer.positive"/>
|
|
<!-- REVISIT should this be non-negative? -->
|
|
</attribute>
|
|
</define>
|
|
<define name="shared-form.attrs.size">
|
|
<attribute name="size">
|
|
<ref name="common.data.integer.positive"/>
|
|
</attribute>
|
|
</define>
|
|
<!-- REVISIT tabindex goes in common.attrs -->
|
|
<define name="input.attrs.checked">
|
|
<a:documentation>Shared attributes for <input></a:documentation>
|
|
<attribute name="checked">
|
|
<choice>
|
|
<value type="string">checked</value>
|
|
<value type="string"/>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.text.elem">
|
|
<a:documentation>Text Field: <input type='text'></a:documentation>
|
|
<element name="input">
|
|
<ref name="input.text.attrs"/>
|
|
</element>
|
|
</define>
|
|
<define name="input.text.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<optional>
|
|
<ref name="input.text.attrs.type"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="shared-form.attrs.maxlength"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="shared-form.attrs.readonly"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="shared-form.attrs.size"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="input.text.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<choice>
|
|
<ref name="common.attrs.aria"/>
|
|
<ref name="common.attrs.aria.implicit.input"/>
|
|
</choice>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="input.text.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">text</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.text.attrs.value">
|
|
<attribute name="value">
|
|
<data type="string" datatypeLibrary=""/>
|
|
<!-- REVISIT "nominally" free of line breaks? -->
|
|
</attribute>
|
|
</define>
|
|
<define name="input.elem">
|
|
<ref name="input.text.elem"/>
|
|
</define>
|
|
<define name="input.password.elem">
|
|
<a:documentation>Password Field: <input type='password'></a:documentation>
|
|
<element name="input">
|
|
<ref name="input.password.attrs"/>
|
|
</element>
|
|
</define>
|
|
<define name="input.password.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="input.password.attrs.type"/>
|
|
<optional>
|
|
<ref name="shared-form.attrs.maxlength"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="shared-form.attrs.readonly"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="shared-form.attrs.size"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="input.password.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.input"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="input.password.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">password</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.password.attrs.value">
|
|
<attribute name="value">
|
|
<data type="string" datatypeLibrary=""/>
|
|
<!-- REVISIT "nominally" free of line breaks? -->
|
|
</attribute>
|
|
</define>
|
|
<define name="input.elem" combine="choice">
|
|
<ref name="input.password.elem"/>
|
|
</define>
|
|
<define name="input.checkbox.elem">
|
|
<a:documentation>Checkbox: <input type='checkbox'></a:documentation>
|
|
<element name="input">
|
|
<ref name="input.checkbox.attrs"/>
|
|
</element>
|
|
</define>
|
|
<define name="input.checkbox.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="input.checkbox.attrs.type"/>
|
|
<optional>
|
|
<ref name="input.attrs.checked"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="input.checkbox.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.input"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="input.checkbox.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">checkbox</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.checkbox.attrs.value">
|
|
<attribute name="value">
|
|
<data type="string" datatypeLibrary=""/>
|
|
<!-- REVISIT require non-empty value? -->
|
|
</attribute>
|
|
</define>
|
|
<define name="input.elem" combine="choice">
|
|
<ref name="input.checkbox.elem"/>
|
|
</define>
|
|
<define name="input.radio.elem">
|
|
<a:documentation>Radiobutton: <input type='radio'></a:documentation>
|
|
<element name="input">
|
|
<ref name="input.radio.attrs"/>
|
|
</element>
|
|
</define>
|
|
<define name="input.radio.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="input.radio.attrs.type"/>
|
|
<optional>
|
|
<ref name="input.attrs.checked"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="input.radio.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.input"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="input.radio.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">radio</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.radio.attrs.value">
|
|
<attribute name="value">
|
|
<data type="string" datatypeLibrary=""/>
|
|
<!-- REVISIT require non-empty value? -->
|
|
</attribute>
|
|
</define>
|
|
<define name="input.elem" combine="choice">
|
|
<ref name="input.radio.elem"/>
|
|
</define>
|
|
<define name="input.button.elem">
|
|
<a:documentation>Scripting Hook Button: <input type='button'></a:documentation>
|
|
<element name="input">
|
|
<ref name="input.button.attrs"/>
|
|
</element>
|
|
</define>
|
|
<define name="input.button.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="input.button.attrs.type"/>
|
|
<optional>
|
|
<ref name="input.button.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<choice>
|
|
<ref name="common.attrs.aria"/>
|
|
<ref name="common.attrs.aria.implicit.button"/>
|
|
</choice>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="input.button.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">button</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.button.attrs.value">
|
|
<attribute name="value">
|
|
<data type="string" datatypeLibrary=""/>
|
|
<!-- REVISIT require non-empty value? -->
|
|
</attribute>
|
|
</define>
|
|
<define name="input.elem" combine="choice">
|
|
<ref name="input.button.elem"/>
|
|
</define>
|
|
<!-- REVISIT should this be enabled by a scripting module only? -->
|
|
<define name="input.submit.elem">
|
|
<a:documentation>Submit Button: <input type='submit'></a:documentation>
|
|
<element name="input">
|
|
<ref name="input.submit.attrs"/>
|
|
</element>
|
|
</define>
|
|
<define name="input.submit.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="input.submit.attrs.type"/>
|
|
<optional>
|
|
<ref name="input.submit.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.button"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="input.submit.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">submit</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.submit.attrs.value">
|
|
<attribute name="value">
|
|
<data type="string" datatypeLibrary=""/>
|
|
<!-- REVISIT require non-empty value? -->
|
|
</attribute>
|
|
</define>
|
|
<define name="input.elem" combine="choice">
|
|
<ref name="input.submit.elem"/>
|
|
</define>
|
|
<define name="input.reset.elem">
|
|
<a:documentation>Reset Button: <input type='reset'></a:documentation>
|
|
<element name="input">
|
|
<ref name="input.reset.attrs"/>
|
|
</element>
|
|
</define>
|
|
<define name="input.reset.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="input.reset.attrs.type"/>
|
|
<optional>
|
|
<ref name="input.reset.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.button"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="input.reset.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">reset</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.reset.attrs.value">
|
|
<attribute name="value">
|
|
<data type="string" datatypeLibrary=""/>
|
|
<!-- REVISIT require non-empty value? -->
|
|
</attribute>
|
|
</define>
|
|
<define name="input.elem" combine="choice">
|
|
<ref name="input.reset.elem"/>
|
|
</define>
|
|
<!-- REVISIT does reset make sense outside a form? -->
|
|
<define name="input.file.elem">
|
|
<a:documentation>File Upload: <input type='file'></a:documentation>
|
|
<element name="input">
|
|
<ref name="input.file.attrs"/>
|
|
</element>
|
|
</define>
|
|
<define name="input.file.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="input.file.attrs.type"/>
|
|
<optional>
|
|
<ref name="input.file.attrs.accept"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.input"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="input.file.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">file</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.file.attrs.accept">
|
|
<attribute name="accept">
|
|
<ref name="form.data.mimetypelist"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.elem" combine="choice">
|
|
<ref name="input.file.elem"/>
|
|
</define>
|
|
<define name="input.hidden.elem">
|
|
<a:documentation>Hidden String: <input type='hidden'></a:documentation>
|
|
<element name="input">
|
|
<ref name="input.hidden.attrs"/>
|
|
</element>
|
|
</define>
|
|
<define name="input.hidden.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="input.hidden.attrs.type"/>
|
|
<optional>
|
|
<ref name="input.hidden.attrs.value"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="input.hidden.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">hidden</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.hidden.attrs.value">
|
|
<attribute name="value">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.elem" combine="choice">
|
|
<ref name="input.hidden.elem"/>
|
|
</define>
|
|
<define name="input.image.elem">
|
|
<a:documentation>Image Submit Button: <input type='image'></a:documentation>
|
|
<element name="input">
|
|
<ref name="input.image.attrs"/>
|
|
</element>
|
|
</define>
|
|
<define name="input.image.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="input.image.attrs.type"/>
|
|
<ref name="input.image.attrs.alt"/>
|
|
<optional>
|
|
<ref name="input.image.attrs.src"/>
|
|
</optional>
|
|
<optional>
|
|
<choice>
|
|
<ref name="common.attrs.aria"/>
|
|
<ref name="common.attrs.aria.implicit.button"/>
|
|
</choice>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="input.image.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">image</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.image.attrs.alt">
|
|
<attribute name="alt">
|
|
<data type="string" datatypeLibrary=""/>
|
|
<!-- XXX non-empty -->
|
|
</attribute>
|
|
</define>
|
|
<define name="input.image.attrs.src">
|
|
<attribute name="src">
|
|
<ref name="common.data.uri"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="input.elem" combine="choice">
|
|
<ref name="input.image.elem"/>
|
|
</define>
|
|
<define name="common.elem.phrasing" combine="choice">
|
|
<ref name="input.elem"/>
|
|
</define>
|
|
<define name="textarea.elem">
|
|
<a:documentation>Text Area: <textarea></a:documentation>
|
|
<element name="textarea">
|
|
<interleave>
|
|
<ref name="textarea.inner"/>
|
|
<ref name="textarea.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="textarea.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<optional>
|
|
<ref name="shared-form.attrs.readonly"/>
|
|
</optional>
|
|
<ref name="textarea.attrs.rows-and-cols-wf1"/>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.input"/>
|
|
</optional>
|
|
</interleave>
|
|
<!-- FIXME onfocus, onblur, onselect,onchange -->
|
|
</define>
|
|
<!-- This is ugly. -->
|
|
<define name="textarea.attrs.rows-and-cols-wf1">
|
|
<ref name="textarea.attrs.rows-and-cols-wf1.inner"/>
|
|
</define>
|
|
<define name="textarea.attrs.rows-and-cols-wf1.inner">
|
|
<interleave>
|
|
<ref name="textarea.attrs.cols"/>
|
|
<ref name="textarea.attrs.rows"/>
|
|
</interleave>
|
|
</define>
|
|
<define name="textarea.attrs.cols">
|
|
<attribute name="cols">
|
|
<ref name="common.data.integer.positive"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="textarea.attrs.rows">
|
|
<attribute name="rows">
|
|
<ref name="common.data.integer.positive"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="textarea.inner">
|
|
<text/>
|
|
</define>
|
|
<define name="common.elem.phrasing" combine="choice">
|
|
<ref name="textarea.elem"/>
|
|
</define>
|
|
<!--
|
|
Due to limitations with interleave, handling single/multiple selection
|
|
enforcement in RELAX NG seems to be possible but really awkward.
|
|
Tried it. Leaving it to Schematron.
|
|
-->
|
|
<define name="option.elem">
|
|
<a:documentation>Select menu option: <option selected></a:documentation>
|
|
<element name="option">
|
|
<interleave>
|
|
<ref name="option.inner"/>
|
|
<ref name="option.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="option.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<optional>
|
|
<ref name="common-form.attrs.disabled"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="option.attrs.selected"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="option.attrs.label"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="option.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.input"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="option.attrs.selected">
|
|
<attribute name="selected">
|
|
<choice>
|
|
<value type="string">selected</value>
|
|
<value type="string"/>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
<define name="option.attrs.label">
|
|
<attribute name="label">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="option.attrs.value">
|
|
<attribute name="value">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="option.inner">
|
|
<text/>
|
|
</define>
|
|
<define name="optgroup.elem">
|
|
<a:documentation>Option Group: <optgroup></a:documentation>
|
|
<element name="optgroup">
|
|
<interleave>
|
|
<ref name="optgroup.inner"/>
|
|
<ref name="optgroup.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="optgroup.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="optgroup.attrs.label"/>
|
|
<optional>
|
|
<ref name="common-form.attrs.disabled"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="optgroup.attrs.label">
|
|
<attribute name="label">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="optgroup.inner">
|
|
<zeroOrMore>
|
|
<ref name="option.elem"/>
|
|
</zeroOrMore>
|
|
</define>
|
|
<define name="select.elem">
|
|
<a:documentation>Selection Menu: <select></a:documentation>
|
|
<element name="select">
|
|
<interleave>
|
|
<ref name="select.inner"/>
|
|
<ref name="select.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="select.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<optional>
|
|
<ref name="select.attrs.size"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="select.attrs.multiple"/>
|
|
</optional>
|
|
</interleave>
|
|
<!-- FIXME onfocus, onblur, onchange -->
|
|
</define>
|
|
<define name="select.attrs.size">
|
|
<attribute name="size">
|
|
<ref name="common.data.integer.positive"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="select.attrs.multiple">
|
|
<attribute name="multiple">
|
|
<choice>
|
|
<value type="string">multiple</value>
|
|
<value type="string"/>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
<define name="select.inner">
|
|
<interleave>
|
|
<zeroOrMore>
|
|
<ref name="optgroup.elem"/>
|
|
</zeroOrMore>
|
|
<zeroOrMore>
|
|
<ref name="option.elem"/>
|
|
</zeroOrMore>
|
|
</interleave>
|
|
</define>
|
|
<define name="common.elem.phrasing" combine="choice">
|
|
<ref name="select.elem"/>
|
|
</define>
|
|
<define name="button.attrs.value">
|
|
<a:documentation>Shared Definitions for Complex Button</a:documentation>
|
|
<attribute name="value">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="button.inner">
|
|
<ref name="common.inner.phrasing"/>
|
|
</define>
|
|
<define name="button.submit.elem">
|
|
<a:documentation>Complex Submit Button: <button type='submit'></a:documentation>
|
|
<element name="button">
|
|
<interleave>
|
|
<ref name="button.inner"/>
|
|
<ref name="button.submit.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="button.submit.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<optional>
|
|
<ref name="button.submit.attrs.type"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="button.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.button"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="button.submit.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">submit</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="button.elem">
|
|
<ref name="button.submit.elem"/>
|
|
</define>
|
|
<define name="button.reset.elem">
|
|
<a:documentation>Complex Reset Button: <button type='reset'></a:documentation>
|
|
<element name="button">
|
|
<interleave>
|
|
<ref name="button.inner"/>
|
|
<ref name="button.reset.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="button.reset.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="button.reset.attrs.type"/>
|
|
<optional>
|
|
<ref name="button.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<!-- REVISIT I guess this still affects the DOM -->
|
|
<ref name="common.attrs.aria.implicit.button"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="button.reset.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">reset</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="button.elem" combine="choice">
|
|
<ref name="button.reset.elem"/>
|
|
</define>
|
|
<define name="button.button.elem">
|
|
<a:documentation>Complex Push Button: <button type='button'></a:documentation>
|
|
<element name="button">
|
|
<interleave>
|
|
<ref name="button.inner"/>
|
|
<ref name="button.button.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="button.button.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="common-form.attrs"/>
|
|
<ref name="button.button.attrs.type"/>
|
|
<optional>
|
|
<ref name="button.attrs.value"/>
|
|
</optional>
|
|
<optional>
|
|
<!-- REVISIT I guess this still affects the DOM -->
|
|
<choice>
|
|
<ref name="common.attrs.aria"/>
|
|
<ref name="common.attrs.aria.implicit.button"/>
|
|
</choice>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="button.button.attrs.type">
|
|
<attribute name="type">
|
|
<value type="string">button</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="button.elem" combine="choice">
|
|
<ref name="button.button.elem"/>
|
|
</define>
|
|
<define name="common.elem.phrasing" combine="choice">
|
|
<ref name="button.elem"/>
|
|
</define>
|
|
<define name="form.elem">
|
|
<a:documentation>Form: <form></a:documentation>
|
|
<element name="form">
|
|
<interleave>
|
|
<ref name="form.inner"/>
|
|
<ref name="form.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="form.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<optional>
|
|
<ref name="form.attrs.action"/>
|
|
</optional>
|
|
<optional>
|
|
<!-- REVISIT Should this be required anyway? -->
|
|
<ref name="form.attrs.method"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="form.attrs.enctype"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common-form.attrs.name"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="form.attrs.accept-charset"/>
|
|
</optional>
|
|
<optional>
|
|
<choice>
|
|
<ref name="common.attrs.aria"/>
|
|
<ref name="common.attrs.aria.implicit.region"/>
|
|
</choice>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="form.attrs.action">
|
|
<attribute name="action">
|
|
<ref name="common.data.uri"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="form.attrs.method">
|
|
<attribute name="method">
|
|
<ref name="form.attrs.method.data"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="form.attrs.method.data">
|
|
<choice>
|
|
<value type="string">get</value>
|
|
<value type="string">post</value>
|
|
</choice>
|
|
</define>
|
|
<define name="form.attrs.enctype">
|
|
<attribute name="enctype">
|
|
<ref name="form.attrs.enctype.data"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="form.attrs.enctype.data">
|
|
<choice>
|
|
<value type="string">application/x-www-form-urlencoded</value>
|
|
<value type="string">multipart/form-data</value>
|
|
</choice>
|
|
</define>
|
|
<define name="form.attrs.accept-charset">
|
|
<attribute name="accept-charset">
|
|
<ref name="form.data.charsetlist"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="form.inner">
|
|
<ref name="common.inner.flow"/>
|
|
</define>
|
|
<define name="common.elem.flow" combine="choice">
|
|
<ref name="form.elem"/>
|
|
</define>
|
|
<define name="fieldset.elem">
|
|
<a:documentation>Fieldset: <fieldset></a:documentation>
|
|
<element name="fieldset">
|
|
<interleave>
|
|
<ref name="fieldset.inner"/>
|
|
<ref name="fieldset.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="fieldset.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.group"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="fieldset.inner">
|
|
<optional>
|
|
<ref name="legend.elem"/>
|
|
</optional>
|
|
<!-- REVISIT should this be required? -->
|
|
<ref name="common.inner.flow"/>
|
|
</define>
|
|
<define name="common.elem.flow" combine="choice">
|
|
<ref name="fieldset.elem"/>
|
|
</define>
|
|
<define name="label.elem">
|
|
<a:documentation>Label: <label></a:documentation>
|
|
<element name="label">
|
|
<interleave>
|
|
<ref name="label.inner"/>
|
|
<ref name="label.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="label.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<optional>
|
|
<ref name="label.attrs.for"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="common.attrs.aria.implicit.region"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="label.attrs.for">
|
|
<attribute name="for">
|
|
<ref name="common.data.idref"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="label.inner">
|
|
<ref name="common.inner.phrasing"/>
|
|
</define>
|
|
<!-- REVISIT making obvious guess -->
|
|
<define name="common.elem.phrasing" combine="choice">
|
|
<ref name="label.elem"/>
|
|
</define>
|
|
</grammar>
|