datatypes w = "http://whattf.org/datatype-draft" # ##################################################################### ## RELAX NG Schema for HTML 5: Global Structure & Metadata # # ##################################################################### ## Root Element: html.elem = element html { html.inner & html.attrs } html.attrs = ( common.attrs & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) html.inner = ( head.elem , body.elem ) ## Metadata Container: head.elem = element head { head.inner & head.attrs } head.attrs = ( common.attrs # & head.attrs.profile? & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) # head.attrs.profile = # attribute profile { # common.data.uris #REVISIT should these be absolute (zero or more) # } head.inner = ( title.elem & base.elem? # REVISIT need a non-schema checker or Schematron & common.inner.metadata # Limit encoding decl position in Schematron ) # head.inner = # ( meta.elem.encoding? # , ( title.elem # & base.elem? # REVISIT need a non-schema checker or Schematron # & common.inner.metadata # ) # ) ## Content Container: body.elem = element body { body.inner & body.attrs } body.attrs = ( common.attrs & ( common.attrs.aria.landmark.application | common.attrs.aria.landmark.document | common.attrs.aria.role.presentation | common.attrs.aria.implicit.document )? & body.attrs.onafterprint? & body.attrs.onbeforeprint? & body.attrs.onbeforeunload? & body.attrs.onhashchange? & body.attrs.onmessage? & body.attrs.onoffline? & body.attrs.ononline? & body.attrs.onpagehide? & body.attrs.onpageshow? & body.attrs.onpopstate? & body.attrs.onresize? & body.attrs.onstorage? & body.attrs.onunload? ) body.inner = ( common.inner.flow ) body.attrs.onafterprint = attribute onafterprint { common.data.functionbody } body.attrs.onbeforeprint = attribute onbeforeprint { common.data.functionbody } body.attrs.onbeforeunload = attribute onbeforeunload { common.data.functionbody } body.attrs.onhashchange = attribute onhashchange { common.data.functionbody } body.attrs.onmessage = attribute onmessage { common.data.functionbody } body.attrs.onoffline = attribute onoffline { common.data.functionbody } body.attrs.ononline = attribute ononline { common.data.functionbody } body.attrs.onpopstate = attribute onpopstate { common.data.functionbody } body.attrs.onpagehide = attribute onpagehide { common.data.functionbody } body.attrs.onpageshow = attribute onpageshow { common.data.functionbody } body.attrs.onredo = attribute onredo { common.data.functionbody } body.attrs.onresize = attribute onresize { common.data.functionbody } body.attrs.onstorage = attribute onstorage { common.data.functionbody } body.attrs.onundo = attribute onundo { common.data.functionbody } body.attrs.onunload = attribute onunload { common.data.functionbody } ## Document Title: title.elem = element title { title.inner & title.attrs } title.attrs = ( common.attrs & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) title.inner = ( text ) ## Base URI: <base> base.elem = element base { base.inner & base.attrs } base.attrs = ( common.attrs.basic & common.attrs.i18n & common.attrs.present & common.attrs.other & ( ( base.attrs.href & base.attrs.target? ) | base.attrs.target ) & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) base.attrs.href = attribute href { common.data.uri } base.attrs.target = attribute target { common.data.browsing-context-or-keyword } base.inner = ( empty ) ## Global Relationships: <link> link.elem = element link { link.inner & link.attrs } link.attrs = ( common.attrs.basic & common.attrs.i18n & common.attrs.present & common.attrs.other & link.attrs.href & link.attrs.rel & shared-hyperlink.attrs.hreflang? & shared-hyperlink.attrs.media? & shared-hyperlink.attrs.type? & link.attrs.sizes? # link.attrs.title included in common.attrs & embedded.content.attrs.crossorigin? & ( common.attrs.aria.role.link | common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) link.attrs.href = attribute href { common.data.uri.non-empty } link.attrs.rel = attribute rel { w:link-rel } link.attrs.sizes = attribute sizes { w:string "any" | common.data.sizes } link.inner = ( empty ) common.elem.metadata |= link.elem ## Global Style: <style> style.elem = element style { style.inner & style.attrs } style.attrs = ( common.attrs & style.attrs.type? & style.attrs.media? # style.attrs.title included in common.attrs & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) style.attrs.type = attribute type { common.data.mimetype } style.attrs.media = attribute media { common.data.mediaquery } style.inner = ( common.inner.anything ) common.elem.metadata |= style.elem ## Scoped Style: <style scoped> style.elem.scoped = element style { style.inner & style.scoped.attrs } style.scoped.attrs = ( common.attrs & style.attrs.type? & style.attrs.media? & style.attrs.scoped # style.attrs.title included in common.attrs & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) style.attrs.scoped = attribute scoped { w:string "scoped" | w:string "" } ## Name-Value Metadata: <meta name> meta.name.elem = element meta { meta.inner & meta.name.attrs } meta.name.attrs = ( common.attrs.basic & common.attrs.i18n & common.attrs.present & common.attrs.other & meta.name.attrs.name & meta.name.attrs.content & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) meta.name.attrs.name = attribute name { w:meta-name } meta.name.attrs.content = attribute content { string } meta.inner = ( empty ) common.elem.metadata |= meta.name.elem ## "refresh" pragma directive: <meta http-equiv='refresh'> meta.http-equiv.refresh.elem = element meta { meta.inner & meta.http-equiv.refresh.attrs } meta.http-equiv.refresh.attrs = ( common.attrs.basic & common.attrs.i18n & common.attrs.present & common.attrs.other & meta.http-equiv.attrs.http-equiv.refresh & meta.http-equiv.attrs.content.refresh & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) meta.http-equiv.attrs.http-equiv.refresh = attribute http-equiv { w:string "refresh" } meta.http-equiv.attrs.content.refresh = attribute content { common.data.refresh } common.elem.metadata |= meta.http-equiv.refresh.elem # not quite right per spec # if the definition is # reused in another language ## "default-style" pragma directive: <meta http-equiv='default-style'> meta.http-equiv.default-style.elem = element meta { meta.inner & meta.http-equiv.default-style.attrs } meta.http-equiv.default-style.attrs = ( common.attrs.basic & common.attrs.i18n & common.attrs.present & common.attrs.other & meta.http-equiv.attrs.http-equiv.default-style & meta.http-equiv.attrs.content.default-style & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) meta.http-equiv.attrs.http-equiv.default-style = attribute http-equiv { w:string "default-style" } meta.http-equiv.attrs.content.default-style = attribute content { common.data.default-style } common.elem.metadata |= meta.http-equiv.default-style.elem # not quite right per spec # if the definition is # reused in another language ## Inline Character Encoding Statement for HTML: <meta charset> meta.charset.elem = element meta { meta.inner & meta.charset.attrs } meta.charset.attrs = ( common.attrs.basic & common.attrs.i18n & common.attrs.present & common.attrs.other & meta.charset.attrs.charset & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) meta.charset.attrs.charset = attribute charset { (common.data.charset & HTMLonly) | (xsd:string { pattern = "[uU][tT][fF]-8" } & XMLonly ) } ## Inline Character Encoding Statement for HTML: <meta http-equiv='content-type'> meta.http-equiv.content-type.elem = element meta { meta.inner & meta.http-equiv.content-type.attrs } & HTMLonly meta.http-equiv.content-type.attrs = ( common.attrs.basic & common.attrs.i18n & common.attrs.present & common.attrs.other & meta.http-equiv.attrs.http-equiv.content-type & meta.http-equiv.attrs.content.content-type & ( common.attrs.aria.role.presentation | common.attrs.aria.role.menuitem )? ) meta.http-equiv.attrs.http-equiv.content-type = attribute http-equiv { w:string "content-type" } meta.http-equiv.attrs.content.content-type = attribute content { common.data.meta-charset } common.elem.metadata |= ( meta.charset.elem | meta.http-equiv.content-type.elem )