1 datatypes w = "http://whattf.org/datatype-draft"
3 # #####################################################################
4 ## RELAX NG Schema for HTML 5: Web Application Features #
5 # #####################################################################
7 ## Additions to Common Attributes
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?
18 common.attrs.other &= common.attrs.interact
20 ## Context Menu: contextmenu
22 common.attrs.contextmenu =
23 attribute contextmenu {
27 ## Editable Content: contenteditable
29 common.attrs.contenteditable =
30 attribute contenteditable {
31 w:string "true" | w:string "false" | w:string ""
34 ## Draggable Element: draggable
36 common.attrs.draggable =
38 w:string "true" | w:string "false"
43 common.attrs.dropzone =
46 ( xsd:string { pattern = "[sS][tT][rR][iI][nN][gG]:.+" }
47 | xsd:string { pattern = "[fF][iI][lL][eE]:.+" }
55 ( xsd:string { pattern = "[sS][tT][rR][iI][nN][gG]:.+" }
56 | xsd:string { pattern = "[fF][iI][lL][eE]:.+" }
61 ## Hidden Element: hidden
65 w:string "hidden" | w:string ""
68 ## Spellchecking and grammar checking: spellcheck
70 common.attrs.spellcheck =
72 w:string "true" | w:string "false" | w:string ""
75 ## Application Cache: manifest
79 common.data.uri.non-empty
82 html.attrs &= html.attrs.manifest?
84 ## Progess Indicator: <progress>
87 element progress { progress.inner & progress.attrs }
90 & progress.attrs.value?
92 & ( common.attrs.aria.implicit.progressbar
93 | common.attrs.aria.role.progressbar
94 | common.attrs.aria.role.presentation
95 | common.attrs.aria.role.menuitem
98 progress.attrs.value =
100 common.data.float.non-negative
104 common.data.float.positive
107 ( common.inner.phrasing ) #Cannot enforce textContent format here
109 common.elem.phrasing |= progress.elem
111 ## Dialog box, inspector, or window: <dialog>
113 element dialog { dialog.inner & dialog.attrs }
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
134 w:string "open" | w:string ""
137 ( common.inner.flow )
138 common.elem.flow |= dialog.elem
140 ## Toolbar: <menu type=toolbar>
143 element menu { menu.toolbar.inner & menu.toolbar.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
159 menu.toolbar.attrs.type =
167 menu.elem |= menu.toolbar.elem
169 ## Toolbar item: <li>
172 element li { mli.inner & mli.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
187 ( common.inner.flow )
189 ## Popup menu: <menu type=popup>
192 element menu { menu.popup.inner & menu.popup.attrs }
195 & menu.popup.attrs.type?
199 menu.popup.attrs.type =
211 & common.elem.script-supporting*
213 menu.elem |= menu.popup.elem
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 =
223 menu.ambiguous.inner =
226 & menu.ambiguous.elem*
227 & common.elem.script-supporting*
233 menu.elem |= menu.ambiguous.elem
235 common.elem.flow |= menu.elem
236 # REVISIT allow nested menus
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 =
243 & menuitem.explicit.command.attrs.type?
244 & menuitem.attrs.label?
245 & menuitem.attrs.icon?
246 & menuitem.attrs.disabled?
247 & menuitem.attrs.default?
250 menuitem.explicit.command.attrs.type =
254 menuitem.attrs.label =
258 menuitem.attrs.icon =
260 common.data.uri.non-empty
262 menuitem.attrs.disabled =
264 w:string "" | w:string "disabled"
266 menuitem.attrs.default =
268 w:string "" | w:string "default"
270 menuitem.elem |= menuitem.explicit.command.elem
272 ## Checkbox in popup menu: <menuitem type=checkbox>
273 menuitem.checkbox.elem =
274 element menuitem { menuitem.inner & menuitem.checkbox.attrs }
275 menuitem.checkbox.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?
286 menuitem.checkbox.attrs.type =
290 menuitem.attrs.checked =
292 w:string "checked" | w:string ""
294 menuitem.attrs.radiogroup =
295 attribute radiogroup {
298 menuitem.elem |= menuitem.checkbox.elem
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 =
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?
314 menuitem.radio.attrs.type =
318 menuitem.elem |= menuitem.radio.elem
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 =
325 & menuitem.attrs.default?
326 & menuitem.attrs.command
329 menuitem.attrs.command =
333 menuitem.elem |= menuitem.indirect.command.elem
338 ## Canvas for Dynamic Graphics: <canvas>
341 element canvas { canvas.inner.flow & canvas.attrs }
342 canvas.elem.phrasing =
343 element canvas { canvas.inner.phrasing & canvas.attrs }
346 & canvas.attrs.height?
347 & canvas.attrs.width?
350 canvas.attrs.height =
352 common.data.integer.non-negative
356 common.data.integer.non-negative
359 ( common.inner.transparent.flow )
360 canvas.inner.phrasing =
361 ( common.inner.phrasing )
363 common.elem.flow |= canvas.elem.flow
364 common.elem.phrasing |= canvas.elem.phrasing
366 ## Additional On-Demand Information: <details>
369 element details { details.inner & details.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
412 w:string "open" | w:string ""
419 common.elem.flow |= details.elem
421 ## Caption/summary for details element: <summary>
424 element summary { summary.inner & summary.attrs }
427 & ( common.attrs.aria.role.presentation
428 | common.attrs.aria.role.menuitem
429 | common.attrs.aria.role.button
433 ( common.inner.phrasing