]> code.delx.au - gnu-emacs-elpa/blob - applications.rnc
2a592fbbd781342ee72ca27d47a49ea9986e5123
[gnu-emacs-elpa] / applications.rnc
1 datatypes w = "http://whattf.org/datatype-draft"
2
3 # #####################################################################
4 ## RELAX NG Schema for HTML 5: Web Application Features #
5 # #####################################################################
6
7 ## Additions to Common Attributes
8
9 common.attrs.interact &=
10 ( common.attrs.contextmenu?
11 & common.attrs.contenteditable?
12 & common.attrs.draggable?
13 & common.attrs.dropzone?
14 & common.attrs.hidden?
15 & common.attrs.spellcheck?
16 )
17
18 common.attrs.other &= common.attrs.interact
19
20 ## Context Menu: contextmenu
21
22 common.attrs.contextmenu =
23 attribute contextmenu {
24 common.data.idref
25 }
26
27 ## Editable Content: contenteditable
28
29 common.attrs.contenteditable =
30 attribute contenteditable {
31 w:string "true" | w:string "false" | w:string ""
32 }
33
34 ## Draggable Element: draggable
35
36 common.attrs.draggable =
37 attribute draggable {
38 w:string "true" | w:string "false"
39 }
40
41 ## Dropzone: dropzone
42
43 common.attrs.dropzone =
44 attribute dropzone {
45 list {
46 ( xsd:string { pattern = "[sS][tT][rR][iI][nN][gG]:.+" }
47 | xsd:string { pattern = "[fF][iI][lL][eE]:.+" }
48 )*
49 ,
50 ( w:string "copy"
51 | w:string "move"
52 | w:string "link"
53 )?
54 ,
55 ( xsd:string { pattern = "[sS][tT][rR][iI][nN][gG]:.+" }
56 | xsd:string { pattern = "[fF][iI][lL][eE]:.+" }
57 )*
58 }
59 }
60
61 ## Hidden Element: hidden
62
63 common.attrs.hidden =
64 attribute hidden {
65 w:string "hidden" | w:string ""
66 }
67
68 ## Spellchecking and grammar checking: spellcheck
69
70 common.attrs.spellcheck =
71 attribute spellcheck{
72 w:string "true" | w:string "false" | w:string ""
73 }
74
75 ## Application Cache: manifest
76
77 html.attrs.manifest =
78 attribute manifest {
79 common.data.uri.non-empty
80 }
81
82 html.attrs &= html.attrs.manifest?
83
84 ## Progess Indicator: <progress>
85
86 progress.elem =
87 element progress { progress.inner & progress.attrs }
88 progress.attrs =
89 ( common.attrs
90 & progress.attrs.value?
91 & progress.attrs.max?
92 & ( common.attrs.aria.implicit.progressbar
93 | common.attrs.aria.role.progressbar
94 | common.attrs.aria.role.presentation
95 | common.attrs.aria.role.menuitem
96 )?
97 )
98 progress.attrs.value =
99 attribute value {
100 common.data.float.non-negative
101 }
102 progress.attrs.max =
103 attribute max {
104 common.data.float.positive
105 }
106 progress.inner =
107 ( common.inner.phrasing ) #Cannot enforce textContent format here
108
109 common.elem.phrasing |= progress.elem
110
111 ## Dialog box, inspector, or window: <dialog>
112 dialog.elem =
113 element dialog { dialog.inner & dialog.attrs }
114 dialog.attrs =
115 ( common.attrs
116 & dialog.attrs.open?
117 & ( common.attrs.aria.implicit.dialog
118 | common.attrs.aria.role.alert
119 | common.attrs.aria.role.alertdialog
120 | common.attrs.aria.role.contentinfo
121 | common.attrs.aria.role.dialog
122 | common.attrs.aria.role.log
123 | common.attrs.aria.role.marquee
124 | common.attrs.aria.role.region
125 | common.attrs.aria.role.status
126 | common.attrs.aria.landmark.application
127 | common.attrs.aria.landmark.document
128 | common.attrs.aria.landmark.main
129 | common.attrs.aria.landmark.search
130 )?
131 )
132 dialog.attrs.open =
133 attribute open {
134 w:string "open" | w:string ""
135 }
136 dialog.inner =
137 ( common.inner.flow )
138 common.elem.flow |= dialog.elem
139
140 ## Toolbar: <menu type=toolbar>
141
142 menu.toolbar.elem =
143 element menu { menu.toolbar.inner & menu.toolbar.attrs }
144 menu.toolbar.attrs =
145 ( common.attrs
146 & menu.toolbar.attrs.type?
147 & ( common.attrs.aria.implicit.toolbar
148 | common.attrs.aria.role.directory
149 | common.attrs.aria.role.list
150 | common.attrs.aria.role.listbox
151 | common.attrs.aria.role.menu
152 | common.attrs.aria.role.menubar
153 | common.attrs.aria.role.tablist
154 | common.attrs.aria.role.toolbar
155 | common.attrs.aria.role.tree
156 | common.attrs.aria.role.presentation
157 )?
158 )
159 menu.toolbar.attrs.type =
160 attribute type {
161 w:string "toolbar"
162 }
163 menu.toolbar.inner =
164 ( mli.elem*
165 | common.inner.flow
166 )
167 menu.elem |= menu.toolbar.elem
168
169 ## Toolbar item: <li>
170
171 mli.elem =
172 element li { mli.inner & mli.attrs }
173 mli.attrs =
174 ( common.attrs
175 & ( ( common.attrs.aria.role.listitem
176 | common.attrs.aria.role.menuitem
177 | common.attrs.aria.role.menuitemcheckbox
178 | common.attrs.aria.role.menuitemradio
179 | common.attrs.aria.role.option
180 | common.attrs.aria.role.tab
181 | common.attrs.aria.role.treeitem
182 | common.attrs.aria.role.presentation
183 )
184 )?
185 )
186 mli.inner =
187 ( common.inner.flow )
188
189 ## Popup menu: <menu type=popup>
190
191 menu.popup.elem =
192 element menu { menu.popup.inner & menu.popup.attrs }
193 menu.popup.attrs =
194 ( common.attrs
195 & menu.popup.attrs.type?
196 & menu.attrs.label?
197 & common.attrs.aria?
198 )
199 menu.popup.attrs.type =
200 attribute type {
201 w:string "popup"
202 }
203 menu.attrs.label =
204 attribute label {
205 string
206 }
207 menu.popup.inner =
208 ( menuitem.elem*
209 & hr.elem*
210 & menu.popup.elem*
211 & common.elem.script-supporting*
212 )
213 menu.elem |= menu.popup.elem
214
215 ## Ambiguous menu: <menu> (with no "type" attribute)
216 menu.ambiguous.elem =
217 element menu { menu.ambiguous.inner & menu.ambiguous.attrs }
218 menu.ambiguous.attrs =
219 ( common.attrs
220 & menu.attrs.label?
221 & common.attrs.aria?
222 )
223 menu.ambiguous.inner =
224 ( ( menuitem.elem*
225 & hr.elem*
226 & menu.ambiguous.elem*
227 & common.elem.script-supporting*
228 )
229 | ( mli.elem*
230 | common.inner.flow
231 )
232 )
233 menu.elem |= menu.ambiguous.elem
234
235 common.elem.flow |= menu.elem
236 # REVISIT allow nested menus
237
238 ## Explicit command in popup menu: <menuitem type=command>
239 menuitem.explicit.command.elem =
240 element menuitem { menuitem.inner & menuitem.explicit.command.attrs }
241 menuitem.explicit.command.attrs =
242 ( common.attrs
243 & menuitem.explicit.command.attrs.type?
244 & menuitem.attrs.label?
245 & menuitem.attrs.icon?
246 & menuitem.attrs.disabled?
247 & menuitem.attrs.default?
248 & common.attrs.aria?
249 )
250 menuitem.explicit.command.attrs.type =
251 attribute type {
252 w:string "command"
253 }
254 menuitem.attrs.label =
255 attribute label {
256 w:non-empty-string
257 }
258 menuitem.attrs.icon =
259 attribute icon {
260 common.data.uri.non-empty
261 }
262 menuitem.attrs.disabled =
263 attribute disabled {
264 w:string "" | w:string "disabled"
265 }
266 menuitem.attrs.default =
267 attribute default {
268 w:string "" | w:string "default"
269 }
270 menuitem.elem |= menuitem.explicit.command.elem
271
272 ## Checkbox in popup menu: <menuitem type=checkbox>
273 menuitem.checkbox.elem =
274 element menuitem { menuitem.inner & menuitem.checkbox.attrs }
275 menuitem.checkbox.attrs =
276 ( common.attrs
277 & menuitem.checkbox.attrs.type
278 & menuitem.attrs.label?
279 & menuitem.attrs.icon?
280 & menuitem.attrs.disabled?
281 & menuitem.attrs.checked?
282 & menuitem.attrs.radiogroup?
283 & menuitem.attrs.default?
284 & common.attrs.aria?
285 )
286 menuitem.checkbox.attrs.type =
287 attribute type {
288 w:string "checkbox"
289 }
290 menuitem.attrs.checked =
291 attribute checked {
292 w:string "checked" | w:string ""
293 }
294 menuitem.attrs.radiogroup =
295 attribute radiogroup {
296 string
297 }
298 menuitem.elem |= menuitem.checkbox.elem
299
300 ## Radio button in popup menu: <menuitem type=radio>
301 menuitem.radio.elem =
302 element menuitem { menuitem.inner & menuitem.radio.attrs }
303 menuitem.radio.attrs =
304 ( common.attrs
305 & menuitem.radio.attrs.type
306 & menuitem.attrs.label?
307 & menuitem.attrs.icon?
308 & menuitem.attrs.disabled?
309 & menuitem.attrs.checked?
310 & menuitem.attrs.radiogroup?
311 & menuitem.attrs.default?
312 & common.attrs.aria?
313 )
314 menuitem.radio.attrs.type =
315 attribute type {
316 w:string "radio"
317 }
318 menuitem.elem |= menuitem.radio.elem
319
320 ## Indirect command in popup menu: <menuitem command>
321 menuitem.indirect.command.elem =
322 element menuitem { menuitem.inner & menuitem.indirect.command.attrs }
323 menuitem.indirect.command.attrs =
324 ( common.attrs
325 & menuitem.attrs.default?
326 & menuitem.attrs.command
327 & common.attrs.aria?
328 )
329 menuitem.attrs.command =
330 attribute command {
331 common.data.idref
332 }
333 menuitem.elem |= menuitem.indirect.command.elem
334
335 menuitem.inner =
336 ( empty )
337
338 ## Canvas for Dynamic Graphics: <canvas>
339
340 canvas.elem.flow =
341 element canvas { canvas.inner.flow & canvas.attrs }
342 canvas.elem.phrasing =
343 element canvas { canvas.inner.phrasing & canvas.attrs }
344 canvas.attrs =
345 ( common.attrs
346 & canvas.attrs.height?
347 & canvas.attrs.width?
348 & common.attrs.aria?
349 )
350 canvas.attrs.height =
351 attribute height {
352 common.data.integer.non-negative
353 }
354 canvas.attrs.width =
355 attribute width {
356 common.data.integer.non-negative
357 }
358 canvas.inner.flow =
359 ( common.inner.transparent.flow )
360 canvas.inner.phrasing =
361 ( common.inner.phrasing )
362
363 common.elem.flow |= canvas.elem.flow
364 common.elem.phrasing |= canvas.elem.phrasing
365
366 ## Additional On-Demand Information: <details>
367
368 details.elem =
369 element details { details.inner & details.attrs }
370 details.attrs =
371 ( common.attrs
372 & details.attrs.open?
373 & ( common.attrs.aria.implicit.group # aria-expanded must be true if open attr present; check by assertions
374 | common.attrs.aria.role.alertdialog
375 | common.attrs.aria.role.banner
376 | common.attrs.aria.role.button
377 | common.attrs.aria.role.combobox
378 | common.attrs.aria.role.dialog
379 | common.attrs.aria.role.directory
380 | common.attrs.aria.role.group
381 | common.attrs.aria.role.heading
382 | common.attrs.aria.role.img
383 | common.attrs.aria.role.link
384 | common.attrs.aria.role.list
385 | common.attrs.aria.role.listbox
386 | common.attrs.aria.role.listitem
387 | common.attrs.aria.role.log
388 | common.attrs.aria.role.marquee
389 | common.attrs.aria.role.menu
390 | common.attrs.aria.role.menubar
391 | common.attrs.aria.role.note
392 | common.attrs.aria.role.status
393 | common.attrs.aria.role.tab
394 | common.attrs.aria.role.tablist
395 | common.attrs.aria.role.tabpanel
396 | common.attrs.aria.role.toolbar
397 | common.attrs.aria.role.tree
398 | common.attrs.aria.role.treeitem
399 | common.attrs.aria.landmark.application
400 | common.attrs.aria.landmark.article
401 | common.attrs.aria.landmark.complementary
402 | common.attrs.aria.landmark.contentinfo
403 | common.attrs.aria.landmark.document
404 | common.attrs.aria.landmark.form
405 | common.attrs.aria.landmark.main
406 | common.attrs.aria.landmark.navigation
407 | common.attrs.aria.landmark.search
408 )?
409 )
410 details.attrs.open =
411 attribute open {
412 w:string "open" | w:string ""
413 }
414 details.inner =
415 ( summary.elem
416 , common.inner.flow
417 )
418
419 common.elem.flow |= details.elem
420
421 ## Caption/summary for details element: <summary>
422
423 summary.elem =
424 element summary { summary.inner & summary.attrs }
425 summary.attrs =
426 ( common.attrs
427 & ( common.attrs.aria.role.presentation
428 | common.attrs.aria.role.menuitem
429 | common.attrs.aria.role.button
430 )?
431 )
432 summary.inner =
433 ( common.inner.phrasing
434 | h1.elem
435 | h2.elem
436 | h3.elem
437 | h4.elem
438 | h5.elem
439 | h6.elem
440 | hgroup.elem
441 )