c3d2-web/html5-syntax/meta.rng

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 &amp; Metadata #</a:documentation>
<!-- ##################################################################### -->
<a:documentation>Root Element: &lt;html&gt;</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: &lt;head&gt;</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: &lt;body&gt;</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: &lt;title&gt;</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: &lt;base&gt;</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: &lt;link&gt;</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: &lt;style&gt;</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: &lt;style scoped&gt;</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: &lt;meta name&gt;</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: &lt;meta http-equiv='refresh'&gt;</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: &lt;meta http-equiv='default-style'&gt;</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: &lt;meta http-equiv='content-language'&gt; (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: &lt;meta charset&gt;</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: &lt;meta http-equiv='content-type'&gt;</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>