blob: 898a130ec6ed812f4b2274a9997f95a36f64e507 [file] [log] [blame]
datatypes w = "http://whattf.org/datatype-draft"
# #####################################################################
## RELAX NG Schema for HTML 5: Global Structure & Metadata #
# #####################################################################
## Root Element: <html>
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>
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>
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>
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 )