c3d2-web/html5-syntax/web-forms2.rng

1348 lines
39 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" combine="interleave">
<a:documentation> RELAX NG Schema for HTML 5: Web Forms 2.0 markup #</a:documentation>
<!-- ##################################################################### -->
<a:documentation>Shared attributes for form controls</a:documentation>
<optional>
<ref name="common-form.attrs.form"/>
</optional>
</define>
<define name="common-form.attrs.form" combine="choice">
<attribute name="form">
<ref name="common.data.idref"/>
</attribute>
</define>
<define name="shared-form.attrs.formaction">
<attribute name="formaction">
<ref name="common.data.uri"/>
</attribute>
</define>
<define name="shared-form.attrs.formenctype">
<attribute name="formenctype">
<ref name="shared-form.attrs.formenctype.data"/>
</attribute>
</define>
<define name="shared-form.attrs.formenctype.data">
<choice>
<value type="string">application/x-www-form-urlencoded</value>
<value type="string">multipart/form-data</value>
<value type="string">text/plain</value>
</choice>
</define>
<define name="shared-form.attrs.formmethod">
<attribute name="formmethod">
<ref name="shared-form.attrs.formmethod.data"/>
</attribute>
</define>
<define name="shared-form.attrs.formmethod.data">
<choice>
<value type="string">get</value>
<value type="string">post</value>
<value type="string">put</value>
<value type="string">delete</value>
</choice>
</define>
<define name="shared-form.attrs.formtarget">
<attribute name="formtarget">
<ref name="common.data.browsing-context-or-keyword"/>
</attribute>
</define>
<define name="shared-form.attrs.formnovalidate">
<attribute name="formnovalidate">
<choice>
<value type="string">formnovalidate</value>
<value type="string"/>
</choice>
</attribute>
</define>
<define name="shared-form.attrs.autofocus">
<attribute name="autofocus">
<choice>
<value type="string">autofocus</value>
<value type="string"/>
</choice>
</attribute>
</define>
<define name="shared-form.attrs.pattern">
<attribute name="pattern">
<ref name="form.data.pattern"/>
</attribute>
</define>
<define name="shared-form.attrs.template">
<attribute name="template">
<ref name="common.data.idref"/>
</attribute>
</define>
<define name="shared-form.attrs.required">
<attribute name="required">
<choice>
<value type="string">required</value>
<value type="string"/>
</choice>
</attribute>
</define>
<define name="shared-form.attrs.placeholder">
<attribute name="placeholder">
<data type="string" datatypeLibrary=""/>
<!-- FIXME line breaks -->
</attribute>
</define>
<define name="input.attrs.autocomplete">
<a:documentation>Shared attributes for &lt;input&gt;</a:documentation>
<attribute name="autocomplete">
<choice>
<value type="string">on</value>
<value type="string">off</value>
</choice>
</attribute>
</define>
<define name="input.attrs.list">
<attribute name="list">
<ref name="common.data.idref"/>
</attribute>
</define>
<define name="input.attrs.step.float">
<attribute name="step">
<choice>
<value type="string">any</value>
<ref name="common.data.float.positive"/>
</choice>
</attribute>
</define>
<define name="input.attrs.step.integer">
<attribute name="step">
<choice>
<value type="string">any</value>
<ref name="common.data.integer.positive"/>
</choice>
</attribute>
</define>
<define name="input.attrs.multiple">
<attribute name="multiple">
<choice>
<value type="string">multiple</value>
<value type="string"/>
</choice>
</attribute>
</define>
<define name="input.text.attrs" combine="interleave">
<a:documentation>Text Field: &lt;input type='text'&gt;, Extensions</a:documentation>
<interleave>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="shared-form.attrs.pattern"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="shared-form.attrs.placeholder"/>
</optional>
</interleave>
</define>
<define name="input.password.attrs" combine="interleave">
<a:documentation>Password Field: &lt;input type='password'&gt;, Extensions</a:documentation>
<interleave>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="shared-form.attrs.pattern"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="shared-form.attrs.placeholder"/>
</optional>
</interleave>
</define>
<define name="input.checkbox.attrs" combine="interleave">
<a:documentation>Checkbox &lt;input type='checkbox'&gt;, Extensions</a:documentation>
<interleave>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
</interleave>
</define>
<define name="input.radio.attrs" combine="interleave">
<a:documentation>Radiobutton: &lt;input type='radio'&gt;, Extensions</a:documentation>
<interleave>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
</interleave>
</define>
<define name="input.button.attrs" combine="interleave">
<a:documentation>Scripting Hook Button: &lt;input type='button'&gt;, Extensions</a:documentation>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
</define>
<define name="input.submit.attrs" combine="interleave">
<a:documentation>Submit Button: &lt;input type='submit'&gt;, Extensions</a:documentation>
<interleave>
<optional>
<ref name="shared-form.attrs.formaction"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="shared-form.attrs.formenctype"/>
</optional>
<optional>
<ref name="shared-form.attrs.formmethod"/>
</optional>
<optional>
<ref name="shared-form.attrs.formtarget"/>
</optional>
<optional>
<ref name="shared-form.attrs.formnovalidate"/>
</optional>
</interleave>
</define>
<define name="input.reset.attrs" combine="interleave">
<a:documentation>Reset Button: &lt;input type='reset'&gt;, Extensions</a:documentation>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
</define>
<define name="input.file.attrs" combine="interleave">
<a:documentation>File Upload: &lt;input type='file'&gt;, Extensions</a:documentation>
<interleave>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="input.attrs.multiple"/>
</optional>
</interleave>
</define>
<define name="input.image.attrs" combine="interleave">
<a:documentation>Image Submit Button: &lt;input type='image'&gt;, Extensions</a:documentation>
<interleave>
<optional>
<ref name="shared-form.attrs.formaction"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="shared-form.attrs.formenctype"/>
</optional>
<optional>
<ref name="shared-form.attrs.formmethod"/>
</optional>
<optional>
<ref name="shared-form.attrs.formtarget"/>
</optional>
<optional>
<ref name="shared-form.attrs.formnovalidate"/>
</optional>
<optional>
<ref name="input.image.attrs.height"/>
</optional>
<optional>
<ref name="input.image.attrs.width"/>
</optional>
</interleave>
</define>
<define name="input.image.attrs.height">
<attribute name="height">
<ref name="common.data.integer.non-negative"/>
</attribute>
</define>
<define name="input.image.attrs.width">
<attribute name="width">
<ref name="common.data.integer.non-negative"/>
</attribute>
</define>
<define name="input.datetime.elem">
<a:documentation>Global Date and Time: &lt;input type='datetime'&gt;</a:documentation>
<element name="input">
<ref name="input.datetime.attrs"/>
</element>
</define>
<define name="input.datetime.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.datetime.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="input.datetime.attrs.min"/>
</optional>
<optional>
<ref name="input.datetime.attrs.max"/>
</optional>
<optional>
<ref name="input.attrs.step.float"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="input.datetime.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.datetime.attrs.type">
<attribute name="type">
<value type="string">datetime</value>
</attribute>
</define>
<define name="input.datetime.attrs.min">
<attribute name="min">
<ref name="common.data.datetime"/>
</attribute>
</define>
<define name="input.datetime.attrs.max">
<attribute name="max">
<ref name="common.data.datetime"/>
</attribute>
</define>
<define name="input.datetime.attrs.value">
<attribute name="value">
<ref name="common.data.datetime"/>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.datetime.elem"/>
</define>
<define name="input.datetime-local.elem">
<a:documentation>Date and Time with No Time Zone Information: &lt;input type='datetime-local'&gt;</a:documentation>
<element name="input">
<ref name="input.datetime-local.attrs"/>
</element>
</define>
<define name="input.datetime-local.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.datetime-local.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="input.datetime-local.attrs.min"/>
</optional>
<optional>
<ref name="input.datetime-local.attrs.max"/>
</optional>
<optional>
<ref name="input.attrs.step.float"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="input.datetime-local.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.datetime-local.attrs.type">
<attribute name="type">
<value type="string">datetime-local</value>
</attribute>
</define>
<define name="input.datetime-local.attrs.min">
<attribute name="min">
<ref name="form.data.datetime-local"/>
</attribute>
</define>
<define name="input.datetime-local.attrs.max">
<attribute name="max">
<ref name="form.data.datetime-local"/>
</attribute>
</define>
<define name="input.datetime-local.attrs.value">
<attribute name="value">
<ref name="form.data.datetime-local"/>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.datetime-local.elem"/>
</define>
<define name="input.date.elem">
<a:documentation>Date: &lt;input type='date'&gt;</a:documentation>
<element name="input">
<ref name="input.date.attrs"/>
</element>
</define>
<define name="input.date.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.date.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="input.date.attrs.min"/>
</optional>
<optional>
<ref name="input.date.attrs.max"/>
</optional>
<optional>
<ref name="input.attrs.step.integer"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="input.date.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.date.attrs.type">
<attribute name="type">
<value type="string">date</value>
</attribute>
</define>
<define name="input.date.attrs.min">
<attribute name="min">
<ref name="form.data.date"/>
</attribute>
</define>
<define name="input.date.attrs.max">
<attribute name="max">
<ref name="form.data.date"/>
</attribute>
</define>
<define name="input.date.attrs.value">
<attribute name="value">
<ref name="form.data.date"/>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.date.elem"/>
</define>
<define name="input.month.elem">
<a:documentation>Year and Month: &lt;input type='month'&gt;</a:documentation>
<element name="input">
<ref name="input.month.attrs"/>
</element>
</define>
<define name="input.month.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.month.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="input.month.attrs.min"/>
</optional>
<optional>
<ref name="input.month.attrs.max"/>
</optional>
<optional>
<ref name="input.attrs.step.integer"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="input.month.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.month.attrs.type">
<attribute name="type">
<value type="string">month</value>
</attribute>
</define>
<define name="input.month.attrs.min">
<attribute name="min">
<ref name="form.data.month"/>
</attribute>
</define>
<define name="input.month.attrs.max">
<attribute name="max">
<ref name="form.data.month"/>
</attribute>
</define>
<define name="input.month.attrs.value">
<attribute name="value">
<ref name="form.data.month"/>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.month.elem"/>
</define>
<define name="input.time.elem">
<a:documentation>Time without Time Zone Information: &lt;input type='time'&gt;</a:documentation>
<element name="input">
<ref name="input.time.attrs"/>
</element>
</define>
<define name="input.time.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.time.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="input.time.attrs.min"/>
</optional>
<optional>
<ref name="input.time.attrs.max"/>
</optional>
<optional>
<ref name="input.attrs.step.float"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="input.time.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.time.attrs.type">
<attribute name="type">
<value type="string">time</value>
</attribute>
</define>
<define name="input.time.attrs.min">
<attribute name="min">
<ref name="form.data.time"/>
</attribute>
</define>
<define name="input.time.attrs.max">
<attribute name="max">
<ref name="form.data.time"/>
</attribute>
</define>
<define name="input.time.attrs.value">
<attribute name="value">
<ref name="form.data.time"/>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.time.elem"/>
</define>
<define name="input.week.elem">
<a:documentation>Year and Week: &lt;input type='week'&gt;</a:documentation>
<element name="input">
<ref name="input.week.attrs"/>
</element>
</define>
<define name="input.week.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.week.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="input.week.attrs.min"/>
</optional>
<optional>
<ref name="input.week.attrs.max"/>
</optional>
<optional>
<ref name="input.attrs.step.integer"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="input.week.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.week.attrs.type">
<attribute name="type">
<value type="string">week</value>
</attribute>
</define>
<define name="input.week.attrs.min">
<attribute name="min">
<ref name="form.data.week"/>
</attribute>
</define>
<define name="input.week.attrs.max">
<attribute name="max">
<ref name="form.data.week"/>
</attribute>
</define>
<define name="input.week.attrs.value">
<attribute name="value">
<ref name="form.data.week"/>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.week.elem"/>
</define>
<define name="input.number.elem">
<a:documentation>Number: &lt;input type='number'&gt;</a:documentation>
<element name="input">
<ref name="input.number.attrs"/>
</element>
</define>
<define name="input.number.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.number.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="input.number.attrs.min"/>
</optional>
<optional>
<ref name="input.number.attrs.max"/>
</optional>
<optional>
<ref name="input.attrs.step.float"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="input.number.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.number.attrs.type">
<attribute name="type">
<value type="string">number</value>
</attribute>
</define>
<define name="input.number.attrs.min">
<attribute name="min">
<ref name="common.data.float"/>
</attribute>
</define>
<define name="input.number.attrs.max">
<attribute name="max">
<ref name="common.data.float"/>
</attribute>
</define>
<define name="input.number.attrs.value">
<attribute name="value">
<ref name="common.data.float"/>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.number.elem"/>
</define>
<define name="input.range.elem">
<a:documentation>Imprecise Number: &lt;input type='range'&gt;</a:documentation>
<element name="input">
<ref name="input.range.attrs"/>
</element>
</define>
<define name="input.range.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.range.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="input.range.attrs.min"/>
</optional>
<optional>
<ref name="input.range.attrs.max"/>
</optional>
<optional>
<ref name="input.attrs.step.float"/>
</optional>
<optional>
<ref name="input.range.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.range.attrs.type">
<attribute name="type">
<value type="string">range</value>
</attribute>
</define>
<define name="input.range.attrs.min">
<attribute name="min">
<ref name="common.data.float"/>
</attribute>
</define>
<define name="input.range.attrs.max">
<attribute name="max">
<ref name="common.data.float"/>
</attribute>
</define>
<define name="input.range.attrs.value">
<attribute name="value">
<ref name="common.data.float"/>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.range.elem"/>
</define>
<define name="input.email.elem">
<a:documentation>Email Address: &lt;input type='email'&gt;</a:documentation>
<element name="input">
<ref name="input.email.attrs"/>
</element>
</define>
<define name="input.email.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.email.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="shared-form.attrs.maxlength"/>
</optional>
<optional>
<ref name="shared-form.attrs.pattern"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="shared-form.attrs.size"/>
</optional>
<optional>
<ref name="shared-form.attrs.placeholder"/>
</optional>
<optional>
<choice>
<interleave>
<ref name="input.attrs.multiple"/>
<optional>
<ref name="input.email.attrs.value.multiple"/>
</optional>
</interleave>
<optional>
<ref name="input.email.attrs.value.single"/>
</optional>
</choice>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.email.attrs.type">
<attribute name="type">
<value type="string">email</value>
</attribute>
</define>
<define name="input.email.attrs.value.single">
<attribute name="value">
<ref name="form.data.emailaddress"/>
</attribute>
</define>
<define name="input.email.attrs.value.multiple">
<attribute name="value">
<ref name="form.data.emailaddresslist"/>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.email.elem"/>
</define>
<define name="input.url.elem">
<a:documentation>IRI: &lt;input type='url'&gt;</a:documentation>
<element name="input">
<ref name="input.url.attrs"/>
</element>
</define>
<define name="input.url.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.url.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="shared-form.attrs.maxlength"/>
</optional>
<optional>
<ref name="shared-form.attrs.pattern"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="shared-form.attrs.size"/>
</optional>
<optional>
<ref name="shared-form.attrs.placeholder"/>
</optional>
<optional>
<ref name="input.url.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.url.attrs.type">
<attribute name="type">
<value type="string">url</value>
</attribute>
</define>
<define name="input.url.attrs.value">
<attribute name="value">
<choice>
<value type="string"/>
<ref name="common.data.uri.absolute"/>
</choice>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.url.elem"/>
</define>
<define name="input.search.elem">
<a:documentation>Search: &lt;input type='search'&gt;</a:documentation>
<element name="input">
<ref name="input.search.attrs"/>
</element>
</define>
<define name="input.search.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.search.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="shared-form.attrs.maxlength"/>
</optional>
<optional>
<ref name="shared-form.attrs.pattern"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="shared-form.attrs.size"/>
</optional>
<optional>
<ref name="shared-form.attrs.placeholder"/>
</optional>
<optional>
<ref name="input.search.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.search.attrs.type">
<attribute name="type">
<value type="string">search</value>
</attribute>
</define>
<define name="input.search.attrs.value">
<attribute name="value">
<data type="string" datatypeLibrary=""/>
<!-- FIXME line breaks -->
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.search.elem"/>
</define>
<define name="input.tel.elem">
<a:documentation>Telephone Number: &lt;input type='tel'&gt;</a:documentation>
<element name="input">
<ref name="input.tel.attrs"/>
</element>
</define>
<define name="input.tel.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.tel.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="shared-form.attrs.maxlength"/>
</optional>
<optional>
<ref name="shared-form.attrs.pattern"/>
</optional>
<optional>
<ref name="shared-form.attrs.readonly"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="shared-form.attrs.size"/>
</optional>
<optional>
<ref name="shared-form.attrs.placeholder"/>
</optional>
<optional>
<ref name="input.tel.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.tel.attrs.type">
<attribute name="type">
<value type="string">tel</value>
</attribute>
</define>
<define name="input.tel.attrs.value">
<attribute name="value">
<data type="string" datatypeLibrary=""/>
<!-- FIXME line breaks -->
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.tel.elem"/>
</define>
<define name="input.color.elem">
<a:documentation>Color: &lt;input type='color'&gt;</a:documentation>
<element name="input">
<ref name="input.color.attrs"/>
</element>
</define>
<define name="input.color.attrs">
<interleave>
<ref name="common.attrs"/>
<ref name="common-form.attrs"/>
<ref name="input.color.attrs.type"/>
<optional>
<ref name="input.attrs.autocomplete"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="input.attrs.list"/>
</optional>
<optional>
<ref name="input.color.attrs.value"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.input"/>
</optional>
</interleave>
</define>
<define name="input.color.attrs.type">
<attribute name="type">
<value type="string">color</value>
</attribute>
</define>
<define name="input.color.attrs.value">
<attribute name="value">
<ref name="form.data.color"/>
</attribute>
</define>
<define name="input.elem" combine="choice">
<ref name="input.color.elem"/>
</define>
<define name="output.elem">
<a:documentation>Form Output: &lt;output&gt;</a:documentation>
<element name="output">
<interleave>
<ref name="output.inner"/>
<ref name="output.attrs"/>
</interleave>
</element>
</define>
<define name="output.attrs">
<interleave>
<ref name="common.attrs"/>
<optional>
<ref name="common-form.attrs.name"/>
</optional>
<optional>
<ref name="common-form.attrs.form"/>
</optional>
<optional>
<ref name="output.attrs.for"/>
</optional>
<optional>
<ref name="common.attrs.aria.implicit.region"/>
</optional>
</interleave>
</define>
<define name="output.attrs.for">
<attribute name="for">
<ref name="common.data.idrefs"/>
<!-- REVISIT spec says space- -not whitespace -->
</attribute>
</define>
<define name="output.inner">
<ref name="common.inner.phrasing"/>
</define>
<define name="common.elem.phrasing" combine="choice">
<ref name="output.elem"/>
</define>
<define name="textarea.attrs.rows-and-cols-wf1.inner" combine="interleave">
<a:documentation>Text Area: &lt;textarea&gt;, extensions</a:documentation>
<notAllowed/>
</define>
<define name="textarea.attrs.rows-and-cols-wf1" combine="choice">
<empty/>
</define>
<define name="textarea.attrs" combine="interleave">
<interleave>
<optional>
<ref name="shared-form.attrs.maxlength"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="shared-form.attrs.required"/>
</optional>
<optional>
<ref name="shared-form.attrs.placeholder"/>
</optional>
<optional>
<ref name="textarea.attrs.rows"/>
</optional>
<choice>
<interleave>
<ref name="textarea.attrs.wrap.hard"/>
<ref name="textarea.attrs.cols"/>
</interleave>
<interleave>
<optional>
<ref name="textarea.attrs.wrap.soft"/>
</optional>
<optional>
<ref name="textarea.attrs.cols"/>
</optional>
</interleave>
</choice>
</interleave>
</define>
<define name="textarea.attrs.wrap.hard">
<attribute name="wrap">
<value type="string">hard</value>
</attribute>
</define>
<define name="textarea.attrs.wrap.soft">
<attribute name="wrap">
<value type="string">soft</value>
</attribute>
</define>
<!-- REVISIT should the options in datalist be non-selectable? -->
<define name="datalist.elem">
<a:documentation>List of Prefill Data: &lt;datalist&gt;</a:documentation>
<element name="datalist">
<interleave>
<ref name="datalist.inner"/>
<ref name="datalist.attrs"/>
</interleave>
</element>
</define>
<define name="datalist.inner">
<interleave>
<zeroOrMore>
<ref name="option.elem"/>
</zeroOrMore>
<ref name="common.inner.phrasing"/>
</interleave>
</define>
<define name="datalist.attrs">
<ref name="common.attrs"/>
</define>
<define name="common.elem.phrasing" combine="choice">
<ref name="datalist.elem"/>
</define>
<define name="button.submit.attrs" combine="interleave">
<a:documentation>Complex Submit Button: &lt;button type='submit'&gt;, extensions</a:documentation>
<interleave>
<optional>
<ref name="shared-form.attrs.formaction"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="shared-form.attrs.formenctype"/>
</optional>
<optional>
<ref name="shared-form.attrs.formmethod"/>
</optional>
<optional>
<ref name="shared-form.attrs.formtarget"/>
</optional>
<optional>
<ref name="shared-form.attrs.formnovalidate"/>
</optional>
</interleave>
</define>
<define name="button.reset.attrs" combine="interleave">
<a:documentation>Complex Reset Button: &lt;button type='reset'&gt;, extensions</a:documentation>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
</define>
<define name="button.button.attrs" combine="interleave">
<a:documentation>Complex Push Button: &lt;button type='button'&gt;, extensions</a:documentation>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
</define>
<define name="form.attrs" combine="interleave">
<a:documentation>Form: &lt;form&gt;, extensions</a:documentation>
<interleave>
<optional>
<ref name="form.attrs.novalidate"/>
</optional>
<optional>
<ref name="form.attrs.target"/>
</optional>
<optional>
<ref name="form.attrs.autocomplete"/>
</optional>
</interleave>
</define>
<define name="form.attrs.novalidate">
<attribute name="novalidate">
<choice>
<value type="string">novalidate</value>
<value type="string"/>
</choice>
</attribute>
</define>
<define name="form.attrs.target">
<attribute name="target">
<ref name="common.data.browsing-context-or-keyword"/>
</attribute>
</define>
<define name="form.attrs.autocomplete">
<attribute name="autocomplete">
<choice>
<value type="string">on</value>
<value type="string">off</value>
</choice>
</attribute>
</define>
<!-- REVISIT should this be case-insensitive in conforming XHTML documents? -->
<define name="form.attrs.enctype.data" combine="choice">
<value type="string">text/plain</value>
</define>
<define name="form.attrs.method.data" combine="choice">
<choice>
<value type="string">put</value>
<value type="string">delete</value>
</choice>
</define>
<define name="fieldset.attrs" combine="interleave">
<a:documentation>Fieldset: &lt;fieldset&gt;, extensions</a:documentation>
<ref name="common-form.attrs"/>
</define>
<define name="label.attrs" combine="interleave">
<a:documentation>Label: &lt;label&gt;, extensions</a:documentation>
<optional>
<ref name="common-form.attrs.form"/>
</optional>
</define>
<define name="keygen.elem">
<a:documentation>Key-pair generator/input control: &lt;keygen&gt;</a:documentation>
<element name="keygen">
<interleave>
<ref name="keygen.inner"/>
<ref name="keygen.attrs"/>
</interleave>
</element>
</define>
<define name="keygen.attrs">
<interleave>
<ref name="common.attrs"/>
<optional>
<ref name="keygen.attrs.challenge"/>
</optional>
<optional>
<ref name="keygen.attrs.keytype"/>
</optional>
<optional>
<ref name="shared-form.attrs.autofocus"/>
</optional>
<optional>
<ref name="common-form.attrs"/>
</optional>
</interleave>
<!-- REVISIT which ARIA attributes needed here -->
</define>
<define name="keygen.attrs.challenge">
<attribute name="challenge">
<data type="string" datatypeLibrary=""/>
</attribute>
</define>
<define name="keygen.attrs.keytype">
<attribute name="keytype">
<value type="string">rsa</value>
</attribute>
</define>
<define name="keygen.inner">
<empty/>
</define>
<define name="common.elem.phrasing" combine="choice">
<ref name="keygen.elem"/>
</define>
</grammar>