| datatypes w = "http://whattf.org/datatype-draft" |
| |
| # ##################################################################### |
| ## RELAX NG Schema for HTML 5: Advanced Embedded Content # |
| # ##################################################################### |
| |
| ## Attributes Common to Media Elements |
| |
| # src not included |
| media.attrs = |
| ( media.attrs.autoplay? |
| & media.attrs.preload? |
| & media.attrs.controls? |
| & media.attrs.loop? |
| & media.attrs.mediagroup? |
| & media.attrs.muted? |
| & embedded.content.attrs.crossorigin? |
| ) |
| media.attrs.autoplay = |
| attribute autoplay { |
| w:string "autoplay" | w:string "" |
| } |
| media.attrs.preload = |
| attribute preload { |
| w:string "none" | w:string "metadata" | w:string "auto" | w:string "" |
| } |
| media.attrs.controls = |
| attribute controls { |
| w:string "controls" | w:string "" |
| } |
| media.attrs.loop = |
| attribute loop { |
| w:string "loop" | w:string "" |
| } |
| media.attrs.mediagroup = |
| attribute mediagroup { |
| string |
| } |
| media.attrs.muted = |
| attribute muted { |
| w:string "muted" | w:string "" |
| } |
| |
| ## Source: <source> |
| |
| source.elem = |
| element source { source.inner & source.attrs } |
| source.attrs = |
| ( common.attrs |
| & source.attrs.src |
| & source.attrs.type? |
| & ( common.attrs.aria.role.presentation |
| | common.attrs.aria.role.menuitem |
| )? |
| ) |
| source.attrs.src = |
| attribute src { |
| common.data.uri.non-empty |
| } |
| source.attrs.type = |
| attribute type { |
| common.data.mimetype |
| } |
| source.inner = |
| ( empty ) |
| |
| ## Media Source |
| |
| media.source = |
| ( media.attrs.src |
| | source.elem* |
| ) |
| |
| media.attrs.src = |
| attribute src { |
| common.data.uri.non-empty |
| } |
| |
| ## Video: <video> |
| |
| video.elem.flow = |
| element video { video.inner.flow & video.attrs } |
| video.elem.phrasing = |
| element video { video.inner.phrasing & video.attrs } |
| video.attrs = |
| ( common.attrs |
| & media.attrs |
| & video.attrs.poster? |
| & video.attrs.height? |
| & video.attrs.width? |
| & common.attrs.aria.landmark.application? |
| ) |
| video.attrs.poster = |
| attribute poster { |
| common.data.uri.non-empty |
| } |
| video.attrs.height = |
| attribute height { |
| common.data.integer.non-negative |
| } |
| video.attrs.width = |
| attribute width { |
| common.data.integer.non-negative |
| } |
| video.inner.flow = |
| ( media.source |
| , track.elem* |
| , common.inner.transparent.flow |
| ) |
| video.inner.phrasing = |
| ( media.source |
| , track.elem* |
| , common.inner.phrasing |
| ) |
| |
| common.elem.flow |= video.elem.flow |
| common.elem.phrasing |= video.elem.phrasing |
| |
| ## Audio: <audio> |
| |
| audio.elem.flow = |
| element audio { audio.inner.flow & audio.attrs } |
| audio.elem.phrasing = |
| element audio { audio.inner.phrasing & audio.attrs } |
| audio.attrs = |
| ( common.attrs |
| & media.attrs |
| & common.attrs.aria.landmark.application? |
| ) |
| audio.inner.flow = |
| ( media.source |
| , track.elem* |
| , common.inner.transparent.flow |
| ) |
| audio.inner.phrasing = |
| ( media.source |
| , track.elem* |
| , common.inner.phrasing |
| ) |
| |
| common.elem.flow |= audio.elem.flow |
| common.elem.phrasing |= audio.elem.phrasing |
| |
| ## supplementary media track: <track> |
| # |
| track.elem = |
| element track { track.inner & track.attrs } |
| |
| track.attrs = |
| ( common.attrs |
| & track.attrs.kind? |
| & track.attrs.src |
| & track.attrs.srclang? |
| & track.attrs.label? |
| & track.attrs.default? |
| & ( common.attrs.aria.role.presentation |
| | common.attrs.aria.role.menuitem |
| )? |
| ) |
| track.attrs.kind = |
| attribute kind { |
| w:string "subtitles" | w:string "captions" | w:string "descriptions" | w:string "chapters" | w:string "metadata" |
| } |
| track.attrs.src = |
| attribute src { |
| common.data.uri.non-empty |
| } |
| track.attrs.srclang = |
| attribute srclang { |
| common.data.langcode |
| } |
| track.attrs.label = |
| attribute label { |
| string # must be non-empty value; check is in assertions code |
| } |
| track.attrs.default = |
| attribute default { |
| w:string "default" | w:string "" |
| } |
| |
| track.inner = |
| ( empty ) |
| |
| ## Captioned Content: <figure> |
| |
| figure.elem = |
| element figure { figure.inner & figure.attrs } |
| figure.attrs = |
| ( common.attrs |
| & common.attrs.aria? |
| ) |
| figure.inner = |
| ( ( figcaption.elem?, common.inner.flow ) |
| | ( common.inner.flow, figcaption.elem? ) |
| ) |
| |
| common.elem.flow |= figure.elem |
| |
| ## Figure caption: <figcaption> |
| |
| figcaption.elem = |
| element figcaption { figcaption.inner & figcaption.attrs } |
| figcaption.attrs = |
| ( common.attrs |
| & ( common.attrs.aria.role.presentation |
| | common.attrs.aria.role.menuitem |
| )? |
| ) |
| figcaption.inner = |
| ( common.inner.flow ) |