html-validator 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,377 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" >
3
+ <!-- ##################################################################### -->
4
+ <define name="tables.attrs.alignment">
5
+ <a:documentation> RELAX NG Schema for HTML 5: Tables #</a:documentation>
6
+ <!-- ##################################################################### -->
7
+ <!-- ##################################################################### -->
8
+ <a:documentation>Table Envelope</a:documentation>
9
+ <a:documentation>Table Datatypes</a:documentation>
10
+ <!--
11
+ tables.data.multilen =
12
+ ( common.data.integer.positive
13
+ | common.data.percent
14
+ | xsd:token { pattern = "[0-9]+\*" } #REVISIT should this one be string?
15
+ )
16
+ -->
17
+ <a:documentation>Table Alignment Attributes</a:documentation>
18
+ <interleave>
19
+ <optional>
20
+ <ref name="tables.attrs.align"/>
21
+ </optional>
22
+ <optional>
23
+ <ref name="tables.attrs.char"/>
24
+ </optional>
25
+ <optional>
26
+ <ref name="tables.attrs.valign"/>
27
+ </optional>
28
+ </interleave>
29
+ </define>
30
+ <define name="tables.attrs.align">
31
+ <attribute name="align">
32
+ <choice>
33
+ <value type="string">left</value>
34
+ <value type="string">center</value>
35
+ <value type="string">right</value>
36
+ <value type="string">justify</value>
37
+ <value type="string">char</value>
38
+ </choice>
39
+ </attribute>
40
+ </define>
41
+ <define name="tables.attrs.char">
42
+ <attribute name="char">
43
+ <data type="string" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
44
+ <param name="pattern">.</param>
45
+ </data>
46
+ </attribute>
47
+ </define>
48
+ <define name="tables.attrs.valign">
49
+ <attribute name="valign">
50
+ <choice>
51
+ <value type="string">top</value>
52
+ <value type="string">middle</value>
53
+ <value type="string">bottom</value>
54
+ <value type="string">baseline</value>
55
+ </choice>
56
+ </attribute>
57
+ </define>
58
+ <define name="table.elem">
59
+ <a:documentation>Data Table: &lt;table&gt;</a:documentation>
60
+ <element name="table">
61
+ <interleave>
62
+ <ref name="table.inner"/>
63
+ <ref name="table.attrs"/>
64
+ </interleave>
65
+ </element>
66
+ </define>
67
+ <define name="table.attrs">
68
+ <interleave>
69
+ <ref name="common.attrs"/>
70
+ <optional>
71
+ <ref name="table.attrs.border"/>
72
+ </optional>
73
+ <optional>
74
+ <ref name="common.attrs.aria"/>
75
+ </optional>
76
+ </interleave>
77
+ </define>
78
+ <define name="table.attrs.border">
79
+ <attribute name="border">
80
+ <data type="string" datatypeLibrary=""/>
81
+ </attribute>
82
+ </define>
83
+ <define name="table.inner">
84
+ <optional>
85
+ <ref name="caption.elem"/>
86
+ </optional>
87
+ <zeroOrMore>
88
+ <ref name="colgroup.elem"/>
89
+ </zeroOrMore>
90
+ <optional>
91
+ <ref name="thead.elem"/>
92
+ </optional>
93
+ <choice>
94
+ <group>
95
+ <ref name="tfoot.elem"/>
96
+ <choice>
97
+ <zeroOrMore>
98
+ <ref name="tbody.elem"/>
99
+ </zeroOrMore>
100
+ <oneOrMore>
101
+ <ref name="tr.elem"/>
102
+ </oneOrMore>
103
+ </choice>
104
+ </group>
105
+ <group>
106
+ <choice>
107
+ <zeroOrMore>
108
+ <ref name="tbody.elem"/>
109
+ </zeroOrMore>
110
+ <oneOrMore>
111
+ <ref name="tr.elem"/>
112
+ </oneOrMore>
113
+ </choice>
114
+ <optional>
115
+ <ref name="tfoot.elem"/>
116
+ </optional>
117
+ </group>
118
+ </choice>
119
+ </define>
120
+ <define name="common.elem.flow" combine="choice">
121
+ <ref name="table.elem"/>
122
+ </define>
123
+ <define name="caption.elem">
124
+ <a:documentation>Table Caption: &lt;caption&gt;</a:documentation>
125
+ <element name="caption">
126
+ <interleave>
127
+ <ref name="caption.inner"/>
128
+ <ref name="caption.attrs"/>
129
+ </interleave>
130
+ </element>
131
+ </define>
132
+ <define name="caption.attrs">
133
+ <interleave>
134
+ <ref name="common.attrs"/>
135
+ <optional>
136
+ <ref name="common.attrs.aria.implicit.region"/>
137
+ </optional>
138
+ </interleave>
139
+ </define>
140
+ <define name="caption.inner">
141
+ <ref name="common.inner.flow"/>
142
+ </define>
143
+ <!-- ##################################################################### -->
144
+ <define name="colgroup.elem">
145
+ <a:documentation>Table Super Structure</a:documentation>
146
+ <a:documentation>Table Column Group: &lt;colgroup&gt;</a:documentation>
147
+ <element name="colgroup">
148
+ <interleave>
149
+ <ref name="colgroup.inner"/>
150
+ <ref name="colgroup.attrs"/>
151
+ </interleave>
152
+ </element>
153
+ </define>
154
+ <define name="colgroup.attrs">
155
+ <ref name="common.attrs"/>
156
+ </define>
157
+ <define name="colgroup.attrs.span">
158
+ <attribute name="span">
159
+ <ref name="common.data.integer.positive"/>
160
+ </attribute>
161
+ </define>
162
+ <define name="colgroup.inner">
163
+ <choice>
164
+ <zeroOrMore>
165
+ <ref name="col.elem"/>
166
+ </zeroOrMore>
167
+ <optional>
168
+ <ref name="colgroup.attrs.span"/>
169
+ </optional>
170
+ </choice>
171
+ </define>
172
+ <define name="col.elem">
173
+ <a:documentation>Table Column: &lt;col&gt;</a:documentation>
174
+ <element name="col">
175
+ <interleave>
176
+ <ref name="col.inner"/>
177
+ <ref name="col.attrs"/>
178
+ </interleave>
179
+ </element>
180
+ </define>
181
+ <define name="col.attrs">
182
+ <interleave>
183
+ <ref name="common.attrs"/>
184
+ <optional>
185
+ <ref name="col.attrs.span"/>
186
+ </optional>
187
+ </interleave>
188
+ </define>
189
+ <define name="col.attrs.span">
190
+ <attribute name="span">
191
+ <ref name="common.data.integer.positive"/>
192
+ </attribute>
193
+ </define>
194
+ <define name="col.inner">
195
+ <empty/>
196
+ </define>
197
+ <define name="thead.elem">
198
+ <a:documentation>Table Header Row Group</a:documentation>
199
+ <element name="thead">
200
+ <interleave>
201
+ <ref name="thead.inner"/>
202
+ <ref name="thead.attrs"/>
203
+ </interleave>
204
+ </element>
205
+ </define>
206
+ <define name="thead.attrs">
207
+ <ref name="common.attrs"/>
208
+ </define>
209
+ <define name="thead.inner">
210
+ <zeroOrMore>
211
+ <ref name="tr.elem"/>
212
+ </zeroOrMore>
213
+ </define>
214
+ <define name="tfoot.elem">
215
+ <a:documentation>Table Footer Row Group</a:documentation>
216
+ <element name="tfoot">
217
+ <interleave>
218
+ <ref name="tfoot.inner"/>
219
+ <ref name="tfoot.attrs"/>
220
+ </interleave>
221
+ </element>
222
+ </define>
223
+ <define name="tfoot.attrs">
224
+ <ref name="common.attrs"/>
225
+ </define>
226
+ <define name="tfoot.inner">
227
+ <zeroOrMore>
228
+ <ref name="tr.elem"/>
229
+ </zeroOrMore>
230
+ </define>
231
+ <define name="tbody.elem">
232
+ <a:documentation>Table Row Group</a:documentation>
233
+ <element name="tbody">
234
+ <interleave>
235
+ <ref name="tbody.inner"/>
236
+ <ref name="tbody.attrs"/>
237
+ </interleave>
238
+ </element>
239
+ </define>
240
+ <define name="tbody.attrs">
241
+ <ref name="common.attrs"/>
242
+ </define>
243
+ <define name="tbody.inner">
244
+ <zeroOrMore>
245
+ <ref name="tr.elem"/>
246
+ </zeroOrMore>
247
+ </define>
248
+ <!-- ##################################################################### -->
249
+ <define name="tr.elem">
250
+ <a:documentation>Cell Structure</a:documentation>
251
+ <a:documentation>Table Row</a:documentation>
252
+ <element name="tr">
253
+ <interleave>
254
+ <ref name="tr.inner"/>
255
+ <ref name="tr.attrs"/>
256
+ </interleave>
257
+ </element>
258
+ </define>
259
+ <define name="tr.attrs">
260
+ <interleave>
261
+ <ref name="common.attrs"/>
262
+ <optional>
263
+ <ref name="common.attrs.aria"/>
264
+ </optional>
265
+ </interleave>
266
+ </define>
267
+ <define name="tr.inner">
268
+ <zeroOrMore>
269
+ <choice>
270
+ <ref name="td.elem"/>
271
+ <ref name="th.elem"/>
272
+ </choice>
273
+ </zeroOrMore>
274
+ </define>
275
+ <define name="tables.attrs.cell-structure">
276
+ <a:documentation>Common Table Cell Attributes</a:documentation>
277
+ <interleave>
278
+ <optional>
279
+ <ref name="tables.attrs.colspan"/>
280
+ </optional>
281
+ <optional>
282
+ <ref name="tables.attrs.rowspan"/>
283
+ </optional>
284
+ </interleave>
285
+ </define>
286
+ <define name="tables.attrs.colspan">
287
+ <attribute name="colspan">
288
+ <ref name="common.data.integer.positive"/>
289
+ </attribute>
290
+ </define>
291
+ <define name="tables.attrs.rowspan">
292
+ <attribute name="rowspan">
293
+ <ref name="common.data.integer.non-negative"/>
294
+ </attribute>
295
+ </define>
296
+ <define name="tables.attrs.access-headers">
297
+ <optional>
298
+ <ref name="tables.attrs.headers"/>
299
+ </optional>
300
+ </define>
301
+ <define name="tables.attrs.headers">
302
+ <attribute name="headers">
303
+ <ref name="common.data.idrefs"/>
304
+ </attribute>
305
+ </define>
306
+ <define name="tables.attrs.define-headers">
307
+ <optional>
308
+ <ref name="tables.attrs.scope"/>
309
+ </optional>
310
+ </define>
311
+ <define name="tables.attrs.scope">
312
+ <attribute name="scope">
313
+ <choice>
314
+ <value type="string">row</value>
315
+ <value type="string">col</value>
316
+ <value type="string">rowgroup</value>
317
+ <value type="string">colgroup</value>
318
+ </choice>
319
+ </attribute>
320
+ </define>
321
+ <define name="tables.attrs.abbr">
322
+ <attribute name="abbr"/>
323
+ </define>
324
+ <define name="td.elem">
325
+ <a:documentation>Table Data Cell: &lt;td&gt;</a:documentation>
326
+ <element name="td">
327
+ <interleave>
328
+ <ref name="td.inner"/>
329
+ <ref name="td.attrs"/>
330
+ </interleave>
331
+ </element>
332
+ </define>
333
+ <define name="td.attrs">
334
+ <interleave>
335
+ <ref name="common.attrs"/>
336
+ <ref name="tables.attrs.cell-structure"/>
337
+ <optional>
338
+ <ref name="tables.attrs.headers"/>
339
+ </optional>
340
+ <optional>
341
+ <!-- & tables.attrs.alignment -->
342
+ <ref name="common.attrs.aria"/>
343
+ </optional>
344
+ </interleave>
345
+ </define>
346
+ <define name="td.inner">
347
+ <ref name="common.inner.flow"/>
348
+ </define>
349
+ <define name="th.elem">
350
+ <a:documentation>Table Header Cells: &lt;th&gt;</a:documentation>
351
+ <element name="th">
352
+ <interleave>
353
+ <ref name="th.inner"/>
354
+ <ref name="th.attrs"/>
355
+ </interleave>
356
+ </element>
357
+ </define>
358
+ <define name="th.attrs">
359
+ <interleave>
360
+ <ref name="common.attrs"/>
361
+ <ref name="tables.attrs.cell-structure"/>
362
+ <optional>
363
+ <ref name="tables.attrs.scope"/>
364
+ </optional>
365
+ <optional>
366
+ <ref name="tables.attrs.headers"/>
367
+ </optional>
368
+ <optional>
369
+ <!-- & tables.attrs.alignment -->
370
+ <ref name="common.attrs.aria.implicit.th"/>
371
+ </optional>
372
+ </interleave>
373
+ </define>
374
+ <define name="th.inner">
375
+ <ref name="common.inner.flow"/>
376
+ </define>
377
+ </grammar>
@@ -0,0 +1,849 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" >
3
+ <!-- ##################################################################### -->
4
+ <define name="common-form.attrs">
5
+ <a:documentation> RELAX NG Schema for HTML 5: Web Forms 1.0 markup #</a:documentation>
6
+ <!-- ##################################################################### -->
7
+ <a:documentation>Shared attributes for form controls</a:documentation>
8
+ <interleave>
9
+ <optional>
10
+ <ref name="common-form.attrs.name"/>
11
+ </optional>
12
+ <optional>
13
+ <ref name="common-form.attrs.disabled"/>
14
+ </optional>
15
+ </interleave>
16
+ </define>
17
+ <define name="common-form.attrs.name">
18
+ <attribute name="name">
19
+ <data type="string" datatypeLibrary=""/>
20
+ <!-- REVISIT should this be restricted somehow? No & and = perhaps? -->
21
+ </attribute>
22
+ </define>
23
+ <define name="common-form.attrs.disabled">
24
+ <attribute name="disabled">
25
+ <choice>
26
+ <value type="string">disabled</value>
27
+ <value type="string"/>
28
+ </choice>
29
+ </attribute>
30
+ </define>
31
+ <define name="shared-form.attrs.readonly">
32
+ <attribute name="readonly">
33
+ <choice>
34
+ <value type="string">readonly</value>
35
+ <value type="string"/>
36
+ </choice>
37
+ </attribute>
38
+ </define>
39
+ <define name="shared-form.attrs.maxlength">
40
+ <attribute name="maxlength">
41
+ <ref name="common.data.integer.non-negative"/>
42
+ </attribute>
43
+ </define>
44
+ <define name="shared-form.attrs.size">
45
+ <attribute name="size">
46
+ <ref name="common.data.integer.positive"/>
47
+ </attribute>
48
+ </define>
49
+ <!-- REVISIT tabindex goes in common.attrs -->
50
+ <define name="input.attrs.checked">
51
+ <a:documentation>Shared attributes for &lt;input&gt;</a:documentation>
52
+ <attribute name="checked">
53
+ <choice>
54
+ <value type="string">checked</value>
55
+ <value type="string"/>
56
+ </choice>
57
+ </attribute>
58
+ </define>
59
+ <define name="input.text.elem">
60
+ <a:documentation>Text Field: &lt;input type='text'&gt;</a:documentation>
61
+ <element name="input">
62
+ <ref name="input.text.attrs"/>
63
+ </element>
64
+ </define>
65
+ <define name="input.text.attrs">
66
+ <interleave>
67
+ <ref name="common.attrs"/>
68
+ <ref name="common-form.attrs"/>
69
+ <optional>
70
+ <ref name="input.text.attrs.type"/>
71
+ </optional>
72
+ <optional>
73
+ <ref name="shared-form.attrs.maxlength"/>
74
+ </optional>
75
+ <optional>
76
+ <ref name="shared-form.attrs.readonly"/>
77
+ </optional>
78
+ <optional>
79
+ <ref name="shared-form.attrs.size"/>
80
+ </optional>
81
+ <optional>
82
+ <ref name="input.text.attrs.value"/>
83
+ </optional>
84
+ <optional>
85
+ <choice>
86
+ <ref name="common.attrs.aria"/>
87
+ <ref name="common.attrs.aria.implicit.input"/>
88
+ </choice>
89
+ </optional>
90
+ </interleave>
91
+ </define>
92
+ <define name="input.text.attrs.type">
93
+ <attribute name="type">
94
+ <value type="string">text</value>
95
+ </attribute>
96
+ </define>
97
+ <define name="input.text.attrs.value">
98
+ <attribute name="value">
99
+ <ref name="form.data.stringwithoutlinebreaks"/>
100
+ </attribute>
101
+ </define>
102
+ <define name="input.elem">
103
+ <ref name="input.text.elem"/>
104
+ </define>
105
+ <define name="input.password.elem">
106
+ <a:documentation>Password Field: &lt;input type='password'&gt;</a:documentation>
107
+ <element name="input">
108
+ <ref name="input.password.attrs"/>
109
+ </element>
110
+ </define>
111
+ <define name="input.password.attrs">
112
+ <interleave>
113
+ <ref name="common.attrs"/>
114
+ <ref name="common-form.attrs"/>
115
+ <ref name="input.password.attrs.type"/>
116
+ <optional>
117
+ <ref name="shared-form.attrs.maxlength"/>
118
+ </optional>
119
+ <optional>
120
+ <ref name="shared-form.attrs.readonly"/>
121
+ </optional>
122
+ <optional>
123
+ <ref name="shared-form.attrs.size"/>
124
+ </optional>
125
+ <optional>
126
+ <ref name="input.password.attrs.value"/>
127
+ </optional>
128
+ <optional>
129
+ <ref name="common.attrs.aria.implicit.input"/>
130
+ </optional>
131
+ </interleave>
132
+ </define>
133
+ <define name="input.password.attrs.type">
134
+ <attribute name="type">
135
+ <value type="string">password</value>
136
+ </attribute>
137
+ </define>
138
+ <define name="input.password.attrs.value">
139
+ <attribute name="value">
140
+ <ref name="form.data.stringwithoutlinebreaks"/>
141
+ </attribute>
142
+ </define>
143
+ <define name="input.elem" combine="choice">
144
+ <ref name="input.password.elem"/>
145
+ </define>
146
+ <define name="input.checkbox.elem">
147
+ <a:documentation>Checkbox: &lt;input type='checkbox'&gt;</a:documentation>
148
+ <element name="input">
149
+ <ref name="input.checkbox.attrs"/>
150
+ </element>
151
+ </define>
152
+ <define name="input.checkbox.attrs">
153
+ <interleave>
154
+ <ref name="common.attrs"/>
155
+ <ref name="common-form.attrs"/>
156
+ <ref name="input.checkbox.attrs.type"/>
157
+ <optional>
158
+ <ref name="input.attrs.checked"/>
159
+ </optional>
160
+ <optional>
161
+ <ref name="input.checkbox.attrs.value"/>
162
+ </optional>
163
+ <optional>
164
+ <ref name="common.attrs.aria.implicit.input"/>
165
+ </optional>
166
+ </interleave>
167
+ </define>
168
+ <define name="input.checkbox.attrs.type">
169
+ <attribute name="type">
170
+ <value type="string">checkbox</value>
171
+ </attribute>
172
+ </define>
173
+ <define name="input.checkbox.attrs.value">
174
+ <attribute name="value">
175
+ <data type="string" datatypeLibrary=""/>
176
+ <!-- REVISIT require non-empty value? -->
177
+ </attribute>
178
+ </define>
179
+ <define name="input.elem" combine="choice">
180
+ <ref name="input.checkbox.elem"/>
181
+ </define>
182
+ <define name="input.radio.elem">
183
+ <a:documentation>Radiobutton: &lt;input type='radio'&gt;</a:documentation>
184
+ <element name="input">
185
+ <ref name="input.radio.attrs"/>
186
+ </element>
187
+ </define>
188
+ <define name="input.radio.attrs">
189
+ <interleave>
190
+ <ref name="common.attrs"/>
191
+ <ref name="common-form.attrs"/>
192
+ <ref name="input.radio.attrs.type"/>
193
+ <optional>
194
+ <ref name="input.attrs.checked"/>
195
+ </optional>
196
+ <optional>
197
+ <ref name="input.radio.attrs.value"/>
198
+ </optional>
199
+ <optional>
200
+ <ref name="common.attrs.aria.implicit.input"/>
201
+ </optional>
202
+ </interleave>
203
+ </define>
204
+ <define name="input.radio.attrs.type">
205
+ <attribute name="type">
206
+ <value type="string">radio</value>
207
+ </attribute>
208
+ </define>
209
+ <define name="input.radio.attrs.value">
210
+ <attribute name="value">
211
+ <data type="string" datatypeLibrary=""/>
212
+ <!-- REVISIT require non-empty value? -->
213
+ </attribute>
214
+ </define>
215
+ <define name="input.elem" combine="choice">
216
+ <ref name="input.radio.elem"/>
217
+ </define>
218
+ <define name="input.button.elem">
219
+ <a:documentation>Scripting Hook Button: &lt;input type='button'&gt;</a:documentation>
220
+ <element name="input">
221
+ <ref name="input.button.attrs"/>
222
+ </element>
223
+ </define>
224
+ <define name="input.button.attrs">
225
+ <interleave>
226
+ <ref name="common.attrs"/>
227
+ <ref name="common-form.attrs"/>
228
+ <ref name="input.button.attrs.type"/>
229
+ <optional>
230
+ <ref name="input.button.attrs.value"/>
231
+ </optional>
232
+ <optional>
233
+ <choice>
234
+ <ref name="common.attrs.aria"/>
235
+ <ref name="common.attrs.aria.implicit.button"/>
236
+ </choice>
237
+ </optional>
238
+ </interleave>
239
+ </define>
240
+ <define name="input.button.attrs.type">
241
+ <attribute name="type">
242
+ <value type="string">button</value>
243
+ </attribute>
244
+ </define>
245
+ <define name="input.button.attrs.value">
246
+ <attribute name="value">
247
+ <data type="string" datatypeLibrary=""/>
248
+ <!-- REVISIT require non-empty value? -->
249
+ </attribute>
250
+ </define>
251
+ <define name="input.elem" combine="choice">
252
+ <ref name="input.button.elem"/>
253
+ </define>
254
+ <!-- REVISIT should this be enabled by a scripting module only? -->
255
+ <define name="input.submit.elem">
256
+ <a:documentation>Submit Button: &lt;input type='submit'&gt;</a:documentation>
257
+ <element name="input">
258
+ <ref name="input.submit.attrs"/>
259
+ </element>
260
+ </define>
261
+ <define name="input.submit.attrs">
262
+ <interleave>
263
+ <ref name="common.attrs"/>
264
+ <ref name="common-form.attrs"/>
265
+ <ref name="input.submit.attrs.type"/>
266
+ <optional>
267
+ <ref name="input.submit.attrs.value"/>
268
+ </optional>
269
+ <optional>
270
+ <ref name="common.attrs.aria.implicit.button"/>
271
+ </optional>
272
+ </interleave>
273
+ </define>
274
+ <define name="input.submit.attrs.type">
275
+ <attribute name="type">
276
+ <value type="string">submit</value>
277
+ </attribute>
278
+ </define>
279
+ <define name="input.submit.attrs.value">
280
+ <attribute name="value">
281
+ <data type="string" datatypeLibrary=""/>
282
+ <!-- REVISIT require non-empty value? -->
283
+ </attribute>
284
+ </define>
285
+ <define name="input.elem" combine="choice">
286
+ <ref name="input.submit.elem"/>
287
+ </define>
288
+ <define name="input.reset.elem">
289
+ <a:documentation>Reset Button: &lt;input type='reset'&gt;</a:documentation>
290
+ <element name="input">
291
+ <ref name="input.reset.attrs"/>
292
+ </element>
293
+ </define>
294
+ <define name="input.reset.attrs">
295
+ <interleave>
296
+ <ref name="common.attrs"/>
297
+ <ref name="common-form.attrs"/>
298
+ <ref name="input.reset.attrs.type"/>
299
+ <optional>
300
+ <ref name="input.reset.attrs.value"/>
301
+ </optional>
302
+ <optional>
303
+ <ref name="common.attrs.aria.implicit.button"/>
304
+ </optional>
305
+ </interleave>
306
+ </define>
307
+ <define name="input.reset.attrs.type">
308
+ <attribute name="type">
309
+ <value type="string">reset</value>
310
+ </attribute>
311
+ </define>
312
+ <define name="input.reset.attrs.value">
313
+ <attribute name="value">
314
+ <data type="string" datatypeLibrary=""/>
315
+ <!-- REVISIT require non-empty value? -->
316
+ </attribute>
317
+ </define>
318
+ <define name="input.elem" combine="choice">
319
+ <ref name="input.reset.elem"/>
320
+ </define>
321
+ <!-- REVISIT does reset make sense outside a form? -->
322
+ <define name="input.file.elem">
323
+ <a:documentation>File Upload: &lt;input type='file'&gt;</a:documentation>
324
+ <element name="input">
325
+ <ref name="input.file.attrs"/>
326
+ </element>
327
+ </define>
328
+ <define name="input.file.attrs">
329
+ <interleave>
330
+ <ref name="common.attrs"/>
331
+ <ref name="common-form.attrs"/>
332
+ <ref name="input.file.attrs.type"/>
333
+ <optional>
334
+ <ref name="input.file.attrs.accept"/>
335
+ </optional>
336
+ <optional>
337
+ <ref name="common.attrs.aria.implicit.input"/>
338
+ </optional>
339
+ </interleave>
340
+ </define>
341
+ <define name="input.file.attrs.type">
342
+ <attribute name="type">
343
+ <value type="string">file</value>
344
+ </attribute>
345
+ </define>
346
+ <define name="input.file.attrs.accept">
347
+ <attribute name="accept">
348
+ <ref name="form.data.mimetypelist"/>
349
+ </attribute>
350
+ </define>
351
+ <define name="input.elem" combine="choice">
352
+ <ref name="input.file.elem"/>
353
+ </define>
354
+ <define name="input.hidden.elem">
355
+ <a:documentation>Hidden String: &lt;input type='hidden'&gt;</a:documentation>
356
+ <element name="input">
357
+ <ref name="input.hidden.attrs"/>
358
+ </element>
359
+ </define>
360
+ <define name="input.hidden.attrs">
361
+ <interleave>
362
+ <ref name="common.attrs"/>
363
+ <ref name="common-form.attrs"/>
364
+ <ref name="input.hidden.attrs.type"/>
365
+ <optional>
366
+ <ref name="input.hidden.attrs.value"/>
367
+ </optional>
368
+ </interleave>
369
+ </define>
370
+ <define name="input.hidden.attrs.type">
371
+ <attribute name="type">
372
+ <value type="string">hidden</value>
373
+ </attribute>
374
+ </define>
375
+ <define name="input.hidden.attrs.value">
376
+ <attribute name="value">
377
+ <data type="string" datatypeLibrary=""/>
378
+ </attribute>
379
+ </define>
380
+ <define name="input.elem" combine="choice">
381
+ <ref name="input.hidden.elem"/>
382
+ </define>
383
+ <define name="input.image.elem">
384
+ <a:documentation>Image Submit Button: &lt;input type='image'&gt;</a:documentation>
385
+ <element name="input">
386
+ <ref name="input.image.attrs"/>
387
+ </element>
388
+ </define>
389
+ <define name="input.image.attrs">
390
+ <interleave>
391
+ <ref name="common.attrs"/>
392
+ <ref name="common-form.attrs"/>
393
+ <ref name="input.image.attrs.type"/>
394
+ <ref name="input.image.attrs.alt"/>
395
+ <optional>
396
+ <ref name="input.image.attrs.src"/>
397
+ </optional>
398
+ <optional>
399
+ <choice>
400
+ <ref name="common.attrs.aria"/>
401
+ <ref name="common.attrs.aria.implicit.button"/>
402
+ </choice>
403
+ </optional>
404
+ </interleave>
405
+ </define>
406
+ <define name="input.image.attrs.type">
407
+ <attribute name="type">
408
+ <value type="string">image</value>
409
+ </attribute>
410
+ </define>
411
+ <define name="input.image.attrs.alt">
412
+ <attribute name="alt">
413
+ <ref name="form.data.nonemptystring"/>
414
+ </attribute>
415
+ </define>
416
+ <define name="input.image.attrs.src">
417
+ <attribute name="src">
418
+ <ref name="common.data.uri.non-empty"/>
419
+ </attribute>
420
+ </define>
421
+ <define name="input.elem" combine="choice">
422
+ <ref name="input.image.elem"/>
423
+ </define>
424
+ <define name="common.elem.phrasing" combine="choice">
425
+ <ref name="input.elem"/>
426
+ </define>
427
+ <define name="textarea.elem">
428
+ <a:documentation>Text Area: &lt;textarea&gt;</a:documentation>
429
+ <element name="textarea">
430
+ <interleave>
431
+ <ref name="textarea.inner"/>
432
+ <ref name="textarea.attrs"/>
433
+ </interleave>
434
+ </element>
435
+ </define>
436
+ <define name="textarea.attrs">
437
+ <interleave>
438
+ <ref name="common.attrs"/>
439
+ <ref name="common-form.attrs"/>
440
+ <optional>
441
+ <ref name="shared-form.attrs.readonly"/>
442
+ </optional>
443
+ <ref name="textarea.attrs.rows-and-cols-wf1"/>
444
+ <optional>
445
+ <ref name="common.attrs.aria.implicit.input"/>
446
+ </optional>
447
+ </interleave>
448
+ <!-- FIXME onfocus, onblur, onselect,onchange -->
449
+ </define>
450
+ <!-- This is ugly. -->
451
+ <define name="textarea.attrs.rows-and-cols-wf1">
452
+ <ref name="textarea.attrs.rows-and-cols-wf1.inner"/>
453
+ </define>
454
+ <define name="textarea.attrs.rows-and-cols-wf1.inner">
455
+ <interleave>
456
+ <ref name="textarea.attrs.cols"/>
457
+ <ref name="textarea.attrs.rows"/>
458
+ </interleave>
459
+ </define>
460
+ <define name="textarea.attrs.cols">
461
+ <attribute name="cols">
462
+ <ref name="common.data.integer.positive"/>
463
+ </attribute>
464
+ </define>
465
+ <define name="textarea.attrs.rows">
466
+ <attribute name="rows">
467
+ <ref name="common.data.integer.positive"/>
468
+ </attribute>
469
+ </define>
470
+ <define name="textarea.inner">
471
+ <text/>
472
+ </define>
473
+ <define name="common.elem.phrasing" combine="choice">
474
+ <ref name="textarea.elem"/>
475
+ </define>
476
+ <!--
477
+ Due to limitations with interleave, handling single/multiple selection
478
+ enforcement in RELAX NG seems to be possible but really awkward.
479
+ Tried it. Leaving it to Schematron.
480
+ -->
481
+ <define name="option.elem">
482
+ <a:documentation>Select menu option: &lt;option selected&gt;</a:documentation>
483
+ <element name="option">
484
+ <interleave>
485
+ <ref name="option.inner"/>
486
+ <ref name="option.attrs"/>
487
+ </interleave>
488
+ </element>
489
+ </define>
490
+ <define name="option.attrs">
491
+ <interleave>
492
+ <ref name="common.attrs"/>
493
+ <optional>
494
+ <ref name="common-form.attrs.disabled"/>
495
+ </optional>
496
+ <optional>
497
+ <ref name="option.attrs.selected"/>
498
+ </optional>
499
+ <optional>
500
+ <ref name="option.attrs.label"/>
501
+ </optional>
502
+ <optional>
503
+ <ref name="option.attrs.value"/>
504
+ </optional>
505
+ <optional>
506
+ <ref name="common.attrs.aria.implicit.input"/>
507
+ </optional>
508
+ </interleave>
509
+ </define>
510
+ <define name="option.attrs.selected">
511
+ <attribute name="selected">
512
+ <choice>
513
+ <value type="string">selected</value>
514
+ <value type="string"/>
515
+ </choice>
516
+ </attribute>
517
+ </define>
518
+ <define name="option.attrs.label">
519
+ <attribute name="label">
520
+ <data type="string" datatypeLibrary=""/>
521
+ </attribute>
522
+ </define>
523
+ <define name="option.attrs.value">
524
+ <attribute name="value">
525
+ <data type="string" datatypeLibrary=""/>
526
+ </attribute>
527
+ </define>
528
+ <define name="option.inner">
529
+ <text/>
530
+ </define>
531
+ <define name="optgroup.elem">
532
+ <a:documentation>Option Group: &lt;optgroup&gt;</a:documentation>
533
+ <element name="optgroup">
534
+ <interleave>
535
+ <ref name="optgroup.inner"/>
536
+ <ref name="optgroup.attrs"/>
537
+ </interleave>
538
+ </element>
539
+ </define>
540
+ <define name="optgroup.attrs">
541
+ <interleave>
542
+ <ref name="common.attrs"/>
543
+ <ref name="optgroup.attrs.label"/>
544
+ <optional>
545
+ <ref name="common-form.attrs.disabled"/>
546
+ </optional>
547
+ </interleave>
548
+ </define>
549
+ <define name="optgroup.attrs.label">
550
+ <attribute name="label">
551
+ <data type="string" datatypeLibrary=""/>
552
+ </attribute>
553
+ </define>
554
+ <define name="optgroup.inner">
555
+ <zeroOrMore>
556
+ <ref name="option.elem"/>
557
+ </zeroOrMore>
558
+ </define>
559
+ <define name="select.elem">
560
+ <a:documentation>Selection Menu: &lt;select&gt;</a:documentation>
561
+ <element name="select">
562
+ <interleave>
563
+ <ref name="select.inner"/>
564
+ <ref name="select.attrs"/>
565
+ </interleave>
566
+ </element>
567
+ </define>
568
+ <define name="select.attrs">
569
+ <interleave>
570
+ <ref name="common.attrs"/>
571
+ <ref name="common-form.attrs"/>
572
+ <optional>
573
+ <ref name="select.attrs.size"/>
574
+ </optional>
575
+ <optional>
576
+ <ref name="select.attrs.multiple"/>
577
+ </optional>
578
+ </interleave>
579
+ <!-- FIXME onfocus, onblur, onchange -->
580
+ </define>
581
+ <define name="select.attrs.size">
582
+ <attribute name="size">
583
+ <ref name="common.data.integer.positive"/>
584
+ </attribute>
585
+ </define>
586
+ <define name="select.attrs.multiple">
587
+ <attribute name="multiple">
588
+ <choice>
589
+ <value type="string">multiple</value>
590
+ <value type="string"/>
591
+ </choice>
592
+ </attribute>
593
+ </define>
594
+ <define name="select.inner">
595
+ <interleave>
596
+ <zeroOrMore>
597
+ <ref name="optgroup.elem"/>
598
+ </zeroOrMore>
599
+ <zeroOrMore>
600
+ <ref name="option.elem"/>
601
+ </zeroOrMore>
602
+ </interleave>
603
+ </define>
604
+ <define name="common.elem.phrasing" combine="choice">
605
+ <ref name="select.elem"/>
606
+ </define>
607
+ <define name="button.attrs.value">
608
+ <a:documentation>Shared Definitions for Complex Button</a:documentation>
609
+ <attribute name="value">
610
+ <data type="string" datatypeLibrary=""/>
611
+ </attribute>
612
+ </define>
613
+ <define name="button.inner">
614
+ <ref name="common.inner.phrasing"/>
615
+ </define>
616
+ <define name="button.submit.elem">
617
+ <a:documentation>Complex Submit Button: &lt;button type='submit'&gt;</a:documentation>
618
+ <element name="button">
619
+ <interleave>
620
+ <ref name="button.inner"/>
621
+ <ref name="button.submit.attrs"/>
622
+ </interleave>
623
+ </element>
624
+ </define>
625
+ <define name="button.submit.attrs">
626
+ <interleave>
627
+ <ref name="common.attrs"/>
628
+ <ref name="common-form.attrs"/>
629
+ <optional>
630
+ <ref name="button.submit.attrs.type"/>
631
+ </optional>
632
+ <optional>
633
+ <ref name="button.attrs.value"/>
634
+ </optional>
635
+ <optional>
636
+ <ref name="common.attrs.aria.implicit.button"/>
637
+ </optional>
638
+ </interleave>
639
+ </define>
640
+ <define name="button.submit.attrs.type">
641
+ <attribute name="type">
642
+ <value type="string">submit</value>
643
+ </attribute>
644
+ </define>
645
+ <define name="button.elem">
646
+ <ref name="button.submit.elem"/>
647
+ </define>
648
+ <define name="button.reset.elem">
649
+ <a:documentation>Complex Reset Button: &lt;button type='reset'&gt;</a:documentation>
650
+ <element name="button">
651
+ <interleave>
652
+ <ref name="button.inner"/>
653
+ <ref name="button.reset.attrs"/>
654
+ </interleave>
655
+ </element>
656
+ </define>
657
+ <define name="button.reset.attrs">
658
+ <interleave>
659
+ <ref name="common.attrs"/>
660
+ <ref name="common-form.attrs"/>
661
+ <ref name="button.reset.attrs.type"/>
662
+ <optional>
663
+ <ref name="button.attrs.value"/>
664
+ </optional>
665
+ <optional>
666
+ <!-- REVISIT I guess this still affects the DOM -->
667
+ <ref name="common.attrs.aria.implicit.button"/>
668
+ </optional>
669
+ </interleave>
670
+ </define>
671
+ <define name="button.reset.attrs.type">
672
+ <attribute name="type">
673
+ <value type="string">reset</value>
674
+ </attribute>
675
+ </define>
676
+ <define name="button.elem" combine="choice">
677
+ <ref name="button.reset.elem"/>
678
+ </define>
679
+ <define name="button.button.elem">
680
+ <a:documentation>Complex Push Button: &lt;button type='button'&gt;</a:documentation>
681
+ <element name="button">
682
+ <interleave>
683
+ <ref name="button.inner"/>
684
+ <ref name="button.button.attrs"/>
685
+ </interleave>
686
+ </element>
687
+ </define>
688
+ <define name="button.button.attrs">
689
+ <interleave>
690
+ <ref name="common.attrs"/>
691
+ <ref name="common-form.attrs"/>
692
+ <ref name="button.button.attrs.type"/>
693
+ <optional>
694
+ <ref name="button.attrs.value"/>
695
+ </optional>
696
+ <optional>
697
+ <!-- REVISIT I guess this still affects the DOM -->
698
+ <choice>
699
+ <ref name="common.attrs.aria"/>
700
+ <ref name="common.attrs.aria.implicit.button"/>
701
+ </choice>
702
+ </optional>
703
+ </interleave>
704
+ </define>
705
+ <define name="button.button.attrs.type">
706
+ <attribute name="type">
707
+ <value type="string">button</value>
708
+ </attribute>
709
+ </define>
710
+ <define name="button.elem" combine="choice">
711
+ <ref name="button.button.elem"/>
712
+ </define>
713
+ <define name="common.elem.phrasing" combine="choice">
714
+ <ref name="button.elem"/>
715
+ </define>
716
+ <define name="form.elem">
717
+ <a:documentation>Form: &lt;form&gt;</a:documentation>
718
+ <element name="form">
719
+ <interleave>
720
+ <ref name="form.inner"/>
721
+ <ref name="form.attrs"/>
722
+ </interleave>
723
+ </element>
724
+ </define>
725
+ <define name="form.attrs">
726
+ <interleave>
727
+ <ref name="common.attrs"/>
728
+ <optional>
729
+ <ref name="form.attrs.action"/>
730
+ </optional>
731
+ <optional>
732
+ <!-- REVISIT Should this be required anyway? -->
733
+ <ref name="form.attrs.method"/>
734
+ </optional>
735
+ <optional>
736
+ <ref name="form.attrs.enctype"/>
737
+ </optional>
738
+ <optional>
739
+ <ref name="common-form.attrs.name"/>
740
+ </optional>
741
+ <optional>
742
+ <ref name="form.attrs.accept-charset"/>
743
+ </optional>
744
+ <optional>
745
+ <choice>
746
+ <ref name="common.attrs.aria"/>
747
+ <ref name="common.attrs.aria.implicit.region"/>
748
+ </choice>
749
+ </optional>
750
+ </interleave>
751
+ </define>
752
+ <define name="form.attrs.action">
753
+ <attribute name="action">
754
+ <ref name="common.data.uri.non-empty"/>
755
+ </attribute>
756
+ </define>
757
+ <define name="form.attrs.method">
758
+ <attribute name="method">
759
+ <ref name="form.attrs.method.data"/>
760
+ </attribute>
761
+ </define>
762
+ <define name="form.attrs.method.data">
763
+ <choice>
764
+ <value type="string">get</value>
765
+ <value type="string">post</value>
766
+ </choice>
767
+ </define>
768
+ <define name="form.attrs.enctype">
769
+ <attribute name="enctype">
770
+ <ref name="form.attrs.enctype.data"/>
771
+ </attribute>
772
+ </define>
773
+ <define name="form.attrs.enctype.data">
774
+ <choice>
775
+ <value type="string">application/x-www-form-urlencoded</value>
776
+ <value type="string">multipart/form-data</value>
777
+ </choice>
778
+ </define>
779
+ <define name="form.attrs.accept-charset">
780
+ <attribute name="accept-charset">
781
+ <ref name="form.data.charsetlist"/>
782
+ </attribute>
783
+ </define>
784
+ <define name="form.inner">
785
+ <ref name="common.inner.flow"/>
786
+ </define>
787
+ <define name="common.elem.flow" combine="choice">
788
+ <ref name="form.elem"/>
789
+ </define>
790
+ <define name="fieldset.elem">
791
+ <a:documentation>Fieldset: &lt;fieldset&gt;</a:documentation>
792
+ <element name="fieldset">
793
+ <interleave>
794
+ <ref name="fieldset.inner"/>
795
+ <ref name="fieldset.attrs"/>
796
+ </interleave>
797
+ </element>
798
+ </define>
799
+ <define name="fieldset.attrs">
800
+ <interleave>
801
+ <ref name="common.attrs"/>
802
+ <optional>
803
+ <ref name="common.attrs.aria.implicit.group"/>
804
+ </optional>
805
+ </interleave>
806
+ </define>
807
+ <define name="fieldset.inner">
808
+ <optional>
809
+ <ref name="legend.elem"/>
810
+ </optional>
811
+ <!-- REVISIT should this be required? -->
812
+ <ref name="common.inner.flow"/>
813
+ </define>
814
+ <define name="common.elem.flow" combine="choice">
815
+ <ref name="fieldset.elem"/>
816
+ </define>
817
+ <define name="label.elem">
818
+ <a:documentation>Label: &lt;label&gt;</a:documentation>
819
+ <element name="label">
820
+ <interleave>
821
+ <ref name="label.inner"/>
822
+ <ref name="label.attrs"/>
823
+ </interleave>
824
+ </element>
825
+ </define>
826
+ <define name="label.attrs">
827
+ <interleave>
828
+ <ref name="common.attrs"/>
829
+ <optional>
830
+ <ref name="label.attrs.for"/>
831
+ </optional>
832
+ <optional>
833
+ <ref name="common.attrs.aria.implicit.region"/>
834
+ </optional>
835
+ </interleave>
836
+ </define>
837
+ <define name="label.attrs.for">
838
+ <attribute name="for">
839
+ <ref name="common.data.idref"/>
840
+ </attribute>
841
+ </define>
842
+ <define name="label.inner">
843
+ <ref name="common.inner.phrasing"/>
844
+ </define>
845
+ <!-- REVISIT making obvious guess -->
846
+ <define name="common.elem.phrasing" combine="choice">
847
+ <ref name="label.elem"/>
848
+ </define>
849
+ </grammar>