569 lines
17 KiB
XML
569 lines
17 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0">
|
|
<!-- ##################################################################### -->
|
|
<define name="html.elem">
|
|
<a:documentation> RELAX NG Schema for HTML 5: Global Structure & Metadata #</a:documentation>
|
|
<!-- ##################################################################### -->
|
|
<a:documentation>Root Element: <html></a:documentation>
|
|
<element name="html">
|
|
<interleave>
|
|
<ref name="html.inner"/>
|
|
<ref name="html.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="html.attrs">
|
|
<ref name="common.attrs"/>
|
|
</define>
|
|
<define name="html.inner">
|
|
<ref name="head.elem"/>
|
|
<ref name="body.elem"/>
|
|
</define>
|
|
<define name="head.elem">
|
|
<a:documentation>Metadata Container: <head></a:documentation>
|
|
<element name="head">
|
|
<interleave>
|
|
<ref name="head.inner"/>
|
|
<ref name="head.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="head.attrs">
|
|
<ref name="common.attrs"/>
|
|
<!-- & head.attrs.profile? -->
|
|
</define>
|
|
<!--
|
|
head.attrs.profile =
|
|
attribute profile {
|
|
common.data.uris #REVISIT should these be absolute (zero or more)
|
|
}
|
|
-->
|
|
<define name="head.inner">
|
|
<interleave>
|
|
<ref name="title.elem"/>
|
|
<optional>
|
|
<ref name="base.elem"/>
|
|
</optional>
|
|
<!-- REVISIT need a non-schema checker or Schematron -->
|
|
<ref name="common.inner.metadata"/>
|
|
</interleave>
|
|
<!-- Limit encoding decl position in Schematron -->
|
|
</define>
|
|
<!--
|
|
head.inner =
|
|
( meta.elem.encoding?
|
|
, ( title.elem
|
|
& base.elem? # REVISIT need a non-schema checker or Schematron
|
|
& common.inner.metadata
|
|
)
|
|
)
|
|
-->
|
|
<define name="body.elem">
|
|
<a:documentation>Content Container: <body></a:documentation>
|
|
<element name="body">
|
|
<interleave>
|
|
<ref name="body.inner"/>
|
|
<ref name="body.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="body.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<optional>
|
|
<choice>
|
|
<ref name="common.attrs.aria.landmark.application"/>
|
|
<ref name="common.attrs.aria.landmark.document"/>
|
|
<ref name="common.attrs.aria.implicit.structure"/>
|
|
</choice>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onafterprint"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onbeforeprint"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onbeforeunload"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onhashchange"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onmessage"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onoffline"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.ononline"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onpopstate"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onredo"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onresize"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onstorage"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onundo"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="body.attrs.onunload"/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
<define name="body.inner">
|
|
<ref name="common.inner.flow"/>
|
|
</define>
|
|
<define name="body.attrs.onafterprint">
|
|
<attribute name="onafterprint">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onbeforeprint">
|
|
<attribute name="onbeforeprint">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onbeforeunload">
|
|
<attribute name="onbeforeunload">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onhashchange">
|
|
<attribute name="onhashchange">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onmessage">
|
|
<attribute name="onmessage">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onoffline">
|
|
<attribute name="onoffline">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.ononline">
|
|
<attribute name="ononline">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onpopstate">
|
|
<attribute name="onpopstate">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onredo">
|
|
<attribute name="onredo">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onresize">
|
|
<attribute name="onresize">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onstorage">
|
|
<attribute name="onstorage">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onundo">
|
|
<attribute name="onundo">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="body.attrs.onunload">
|
|
<attribute name="onunload">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="title.elem">
|
|
<a:documentation>Document Title: <title></a:documentation>
|
|
<element name="title">
|
|
<interleave>
|
|
<ref name="title.inner"/>
|
|
<ref name="title.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="title.attrs">
|
|
<ref name="common.attrs"/>
|
|
</define>
|
|
<define name="title.inner">
|
|
<text/>
|
|
</define>
|
|
<define name="base.elem">
|
|
<a:documentation>Base URI: <base></a:documentation>
|
|
<element name="base">
|
|
<interleave>
|
|
<ref name="base.inner"/>
|
|
<ref name="base.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="base.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<choice>
|
|
<interleave>
|
|
<ref name="base.attrs.href"/>
|
|
<optional>
|
|
<ref name="base.attrs.target"/>
|
|
</optional>
|
|
</interleave>
|
|
<ref name="base.attrs.target"/>
|
|
</choice>
|
|
</interleave>
|
|
</define>
|
|
<define name="base.attrs.href">
|
|
<attribute name="href">
|
|
<ref name="common.data.uri"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="base.attrs.target">
|
|
<attribute name="target">
|
|
<ref name="common.data.browsing-context-or-keyword"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="base.inner">
|
|
<empty/>
|
|
</define>
|
|
<define name="link.elem">
|
|
<a:documentation>Global Relationships: <link></a:documentation>
|
|
<element name="link">
|
|
<interleave>
|
|
<ref name="link.inner"/>
|
|
<ref name="link.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="link.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<ref name="shared-hyperlink.attrs.href"/>
|
|
<ref name="shared-hyperlink.attrs.rel"/>
|
|
<optional>
|
|
<ref name="shared-hyperlink.attrs.hreflang"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="shared-hyperlink.attrs.media"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="shared-hyperlink.attrs.type"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="link.attrs.sizes"/>
|
|
</optional>
|
|
</interleave>
|
|
<!-- link.attrs.title included in common.attrs -->
|
|
</define>
|
|
<define name="link.attrs.sizes">
|
|
<attribute name="sizes">
|
|
<choice>
|
|
<value type="string">any</value>
|
|
<ref name="common.data.sizes"/>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
<define name="link.inner">
|
|
<empty/>
|
|
</define>
|
|
<define name="common.elem.metadata" combine="choice">
|
|
<ref name="link.elem"/>
|
|
</define>
|
|
<define name="style.elem">
|
|
<a:documentation>Global Style: <style></a:documentation>
|
|
<element name="style">
|
|
<interleave>
|
|
<ref name="style.inner"/>
|
|
<ref name="style.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="style.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<optional>
|
|
<ref name="style.attrs.type"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="style.attrs.media"/>
|
|
</optional>
|
|
</interleave>
|
|
<!-- style.attrs.title included in common.attrs -->
|
|
</define>
|
|
<define name="style.attrs.type">
|
|
<attribute name="type">
|
|
<ref name="common.data.mimetype"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="style.attrs.media">
|
|
<attribute name="media">
|
|
<ref name="common.data.mediaquery"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="style.inner">
|
|
<ref name="common.inner.anything"/>
|
|
</define>
|
|
<define name="common.elem.metadata" combine="choice">
|
|
<ref name="style.elem"/>
|
|
</define>
|
|
<define name="style.elem.scoped">
|
|
<a:documentation>Scoped Style: <style scoped></a:documentation>
|
|
<element name="style">
|
|
<interleave>
|
|
<ref name="style.inner"/>
|
|
<ref name="style.scoped.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="style.scoped.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs"/>
|
|
<optional>
|
|
<ref name="style.attrs.type"/>
|
|
</optional>
|
|
<optional>
|
|
<ref name="style.attrs.media"/>
|
|
</optional>
|
|
<ref name="style.attrs.scoped"/>
|
|
</interleave>
|
|
<!-- style.attrs.title included in common.attrs -->
|
|
</define>
|
|
<define name="style.attrs.scoped">
|
|
<attribute name="scoped">
|
|
<choice>
|
|
<value type="string">scoped</value>
|
|
<value type="string"/>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
<define name="meta.name.elem">
|
|
<a:documentation>Name-Value Metadata: <meta name></a:documentation>
|
|
<element name="meta">
|
|
<interleave>
|
|
<ref name="meta.inner"/>
|
|
<ref name="meta.name.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="meta.name.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs.basic"/>
|
|
<ref name="common.attrs.i18n"/>
|
|
<ref name="common.attrs.present"/>
|
|
<ref name="common.attrs.other"/>
|
|
<ref name="meta.name.attrs.name"/>
|
|
<ref name="meta.name.attrs.content"/>
|
|
</interleave>
|
|
</define>
|
|
<define name="meta.name.attrs.name">
|
|
<attribute name="name">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="meta.name.attrs.content">
|
|
<attribute name="content">
|
|
<data type="string" datatypeLibrary=""/>
|
|
</attribute>
|
|
</define>
|
|
<define name="meta.inner">
|
|
<empty/>
|
|
</define>
|
|
<define name="common.elem.metadata" combine="choice">
|
|
<ref name="meta.name.elem"/>
|
|
</define>
|
|
<define name="meta.http-equiv.refresh.elem">
|
|
<a:documentation>"refresh" pragma directive: <meta http-equiv='refresh'></a:documentation>
|
|
<element name="meta">
|
|
<interleave>
|
|
<ref name="meta.inner"/>
|
|
<ref name="meta.http-equiv.refresh.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="meta.http-equiv.refresh.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs.basic"/>
|
|
<ref name="common.attrs.i18n"/>
|
|
<ref name="common.attrs.present"/>
|
|
<ref name="common.attrs.other"/>
|
|
<ref name="meta.http-equiv.attrs.http-equiv.refresh"/>
|
|
<ref name="meta.http-equiv.attrs.content.refresh"/>
|
|
</interleave>
|
|
</define>
|
|
<define name="meta.http-equiv.attrs.http-equiv.refresh">
|
|
<attribute name="http-equiv">
|
|
<value type="string">refresh</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="meta.http-equiv.attrs.content.refresh">
|
|
<attribute name="content">
|
|
<ref name="common.data.refresh"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="common.elem.metadata" combine="choice">
|
|
<ref name="meta.http-equiv.refresh.elem"/>
|
|
</define>
|
|
<!--
|
|
not quite right per spec
|
|
if the definition is
|
|
reused in another language
|
|
-->
|
|
<define name="meta.http-equiv.default-style.elem">
|
|
<a:documentation>"default-style" pragma directive: <meta http-equiv='default-style'></a:documentation>
|
|
<element name="meta">
|
|
<interleave>
|
|
<ref name="meta.inner"/>
|
|
<ref name="meta.http-equiv.default-style.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="meta.http-equiv.default-style.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs.basic"/>
|
|
<ref name="common.attrs.i18n"/>
|
|
<ref name="common.attrs.present"/>
|
|
<ref name="common.attrs.other"/>
|
|
<ref name="meta.http-equiv.attrs.http-equiv.default-style"/>
|
|
<ref name="meta.http-equiv.attrs.content.default-style"/>
|
|
</interleave>
|
|
</define>
|
|
<define name="meta.http-equiv.attrs.http-equiv.default-style">
|
|
<attribute name="http-equiv">
|
|
<value type="string">default-style</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="meta.http-equiv.attrs.content.default-style">
|
|
<attribute name="content">
|
|
<ref name="common.data.default-style"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="common.elem.metadata" combine="choice">
|
|
<ref name="meta.http-equiv.default-style.elem"/>
|
|
</define>
|
|
<!--
|
|
not quite right per spec
|
|
if the definition is
|
|
reused in another language
|
|
-->
|
|
<define name="meta.http-equiv.content-language.elem">
|
|
<a:documentation>"content-language" pragma directive: <meta http-equiv='content-language'> (obsolete)</a:documentation>
|
|
<element name="meta">
|
|
<interleave>
|
|
<ref name="meta.inner"/>
|
|
<ref name="meta.http-equiv.content-language.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="meta.http-equiv.content-language.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs.basic"/>
|
|
<ref name="common.attrs.i18n"/>
|
|
<ref name="common.attrs.present"/>
|
|
<ref name="common.attrs.other"/>
|
|
<ref name="meta.http-equiv.attrs.http-equiv.content-language"/>
|
|
<ref name="meta.http-equiv.attrs.content.content-language"/>
|
|
</interleave>
|
|
</define>
|
|
<define name="meta.http-equiv.attrs.http-equiv.content-language">
|
|
<attribute name="http-equiv">
|
|
<value type="string">content-language</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="meta.http-equiv.attrs.content.content-language">
|
|
<attribute name="content">
|
|
<ref name="common.data.langcode"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="common.elem.metadata" combine="choice">
|
|
<ref name="meta.http-equiv.content-language.elem"/>
|
|
</define>
|
|
<!--
|
|
not quite right per spec
|
|
if the definition is
|
|
reused in another language
|
|
-->
|
|
<define name="meta.charset.elem">
|
|
<a:documentation>Inline Character Encoding Statement for HTML: <meta charset></a:documentation>
|
|
<element name="meta">
|
|
<interleave>
|
|
<ref name="meta.inner"/>
|
|
<ref name="meta.charset.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
<define name="meta.charset.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs.basic"/>
|
|
<ref name="common.attrs.i18n"/>
|
|
<ref name="common.attrs.present"/>
|
|
<ref name="common.attrs.other"/>
|
|
<ref name="meta.charset.attrs.charset"/>
|
|
</interleave>
|
|
</define>
|
|
<define name="meta.charset.attrs.charset">
|
|
<attribute name="charset">
|
|
<choice>
|
|
<interleave>
|
|
<ref name="common.data.charset"/>
|
|
<ref name="HTMLonly"/>
|
|
</interleave>
|
|
<interleave>
|
|
<data type="string" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
|
<param name="pattern">[uU][tT][fF]-8</param>
|
|
</data>
|
|
<ref name="XMLonly"/>
|
|
</interleave>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
<define name="meta.http-equiv.content-type.elem">
|
|
<a:documentation>Inline Character Encoding Statement for HTML: <meta http-equiv='content-type'></a:documentation>
|
|
<interleave>
|
|
<element name="meta">
|
|
<interleave>
|
|
<ref name="meta.inner"/>
|
|
<ref name="meta.http-equiv.content-type.attrs"/>
|
|
</interleave>
|
|
</element>
|
|
<ref name="HTMLonly"/>
|
|
</interleave>
|
|
</define>
|
|
<define name="meta.http-equiv.content-type.attrs">
|
|
<interleave>
|
|
<ref name="common.attrs.basic"/>
|
|
<ref name="common.attrs.i18n"/>
|
|
<ref name="common.attrs.present"/>
|
|
<ref name="common.attrs.other"/>
|
|
<ref name="meta.http-equiv.attrs.http-equiv.content-type"/>
|
|
<ref name="meta.http-equiv.attrs.content.content-type"/>
|
|
</interleave>
|
|
</define>
|
|
<define name="meta.http-equiv.attrs.http-equiv.content-type">
|
|
<attribute name="http-equiv">
|
|
<value type="string">content-type</value>
|
|
</attribute>
|
|
</define>
|
|
<define name="meta.http-equiv.attrs.content.content-type">
|
|
<attribute name="content">
|
|
<ref name="common.data.meta-charset"/>
|
|
</attribute>
|
|
</define>
|
|
<define name="common.elem.metadata" combine="choice">
|
|
<choice>
|
|
<ref name="meta.charset.elem"/>
|
|
<ref name="meta.http-equiv.content-type.elem"/>
|
|
</choice>
|
|
</define>
|
|
</grammar>
|