<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
	 xmlns:xlink="http://www.w3.org/1999/xlink"
	 xmlns:h="http://www.w3.org/1999/xhtml"
	 xmlns="http://relaxng.org/ns/structure/1.0"
	 datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<!-- $Id: xmlspec.rng,v 1.1 2003/09/29 10:56:59 NormanWalsh Exp $ -->

<h:html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>XML Specification DTD</title>
</head>
<body>
<h1>XML Specification DTD</h1>

<p>The definitive source for this schema is now the RELAX NG Grammar.</p>

<p>This is version 2.6.</p>

<h2>Purpose</h2>

<p>This XML DTD is for W3C specifications and other technical reports.
It is based in part on the TEI Lite and Sweb DTDs.</p>

<h2>Copyright</h2>  
  
<p>Copyright © 2000, 2001, 2002, 2003 Sun Microsystems, Inc. All Rights Reserved.
This document is governed by the
<a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">W3C
Software License</a> as described in the
<a href="http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD">FAQ</a>.
</p>

<h2>Identifying XML Spec</h2>

<ul>
<li>
<p>The RELAX NG Grammar is
    <code>http://www.w3.org/2002/xmlspec/rng/2.6/xmlspec.rng</code></p>
</li>
<li>
<p>The W3C XML Schema Grammar is
    <code>http://www.w3.org/2002/xmlspec/xsd/2.6/xmlspec.xsd</code></p>
</li>
<li>
<p>The DTD is
    <code>http://www.w3.org/2002/xmlspec/dtd/2.6/xmlspec.dtd</code>.</p>
<p>The doctype declaration is typically:</p>
<pre>&lt;!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.6//EN"
         "http://www.w3.org/2002/xmlspec/dtd/2.6/xmlspec.dtd"&gt;</pre>
</li>
</ul>

<h2>Maintainers</h2>

<p>Norman Walsh, Sun Microsystems, Inc.<br/>
<a href="mailto:Norman.Walsh@Sun.COM">Norman.Walsh@Sun.COM</a><br/>
voice: +1 413 256 6985<br/>
fax:   +1 413 256 6985</p>

<p>Eve Maler, Sun Microsystems, Inc.<br/>
<a href="mailto:elm@east.sun.com">elm@east.sun.com</a><br/>
voice: +1 781 442 3190<br/>
fax:   +1 781 442 1437</p>
</body>
</h:html>

<!-- ====================================================================== -->

  <start>
    <choice>
      <ref name="spec"/>
    </choice>
  </start>

<div><h:h3>Entities for classes of standalone elements</h:h3>

  <define name="local.p.class">
    <notAllowed/>
  </define>

  <define name="p.class">
    <choice>
      <ref name="p"/>
      <ref name="local.p.class"/>
    </choice>
  </define>

  <define name="local.list.class">
    <notAllowed/>
  </define>

  <define name="list.class">
    <choice>
      <ref name="ulist"/>
      <ref name="olist"/>
      <ref name="slist"/>
      <ref name="glist"/>
      <ref name="local.list.class"/>
    </choice>
  </define>

  <define name="local.speclist.class">
    <notAllowed/>
  </define>

  <define name="speclist.class">
    <choice>
      <ref name="orglist"/>
      <ref name="blist"/>
      <ref name="local.speclist.class"/>
    </choice>
  </define>

  <define name="local.note.class">
    <notAllowed/>
  </define>

  <define name="note.class">
    <choice>
      <ref name="note"/>
      <ref name="issue"/>
      <ref name="wfcnote"/>
      <ref name="vcnote"/>
      <ref name="constraintnote"/>
      <ref name="local.note.class"/>
    </choice>
  </define>

  <define name="local.illus.class">
    <notAllowed/>
  </define>

  <define name="illus.class">
    <choice>
      <ref name="eg"/>
      <ref name="graphic"/>
      <ref name="scrap"/>
      <ref name="table"/>
      <ref name="definitions"/>
      <ref name="proto"/>
      <ref name="example"/>
      <ref name="local.illus.class"/>
    </choice>
  </define>
</div>

<div><h:h3>Entities for classes of phrase-level elements</h:h3>

  <define name="local.annot.class">
    <notAllowed/>
  </define>

  <define name="annot.class">
    <choice>
      <ref name="footnote"/>
      <ref name="local.annot.class"/>
    </choice>
  </define>

  <define name="local.termdef.class">
    <notAllowed/>
  </define>

  <define name="termdef.class">
    <choice>
      <ref name="termdef"/>
      <ref name="term"/>
      <ref name="local.termdef.class"/>
    </choice>
  </define>

  <define name="local.emph.class">
    <notAllowed/>
  </define>

  <define name="emph.class">
    <choice>
      <ref name="emph"/>
      <ref name="phrase"/>
      <ref name="rfc2119"/>
      <ref name="quote"/>
      <ref name="sub"/>
      <ref name="sup"/>
      <ref name="local.emph.class"/>
    </choice>
  </define>

  <define name="local.ref.class">
    <notAllowed/>
  </define>

  <define name="ref.class">
    <choice>
      <ref name="bibref"/>
      <ref name="specref"/>
      <ref name="termref"/>
      <ref name="titleref"/>
      <ref name="xspecref"/>
      <ref name="xtermref"/>
      <ref name="local.ref.class"/>
    </choice>
  </define>

  <define name="local.loc.class">
    <notAllowed/>
  </define>

  <define name="loc.class">
    <choice>
      <ref name="loc"/>
      <ref name="local.loc.class"/>
    </choice>
  </define>

  <define name="local.tech.class">
    <notAllowed/>
  </define>

  <define name="tech.class">
    <choice>
      <ref name="kw"/>
      <ref name="nt"/>
      <ref name="xnt"/>
      <ref name="code"/>
      <ref name="function"/>
      <ref name="var"/>
      <ref name="el"/>
      <ref name="att"/>
      <ref name="attval"/>
      <ref name="local.tech.class"/>
    </choice>
  </define>

  <define name="local.ednote.class">
    <notAllowed/>
  </define>

  <define name="ednote.class">
    <choice>
      <ref name="ednote"/>
      <ref name="local.ednote.class"/>
    </choice>
  </define>
</div>

<div><h:h3>Entities for mixtures of standalone elements</h:h3>

  <define name="local.div.mix">
    <notAllowed/>
  </define>


  <define name="div.mix">
    <choice>
      <ref name="p.class"/>
      <ref name="list.class"/>
      <ref name="speclist.class"/>
      <ref name="note.class"/>
      <ref name="illus.class"/>
      <ref name="ednote.class"/>
      <ref name="local.div.mix"/>
    </choice>
  </define>

  <define name="local.obj.mix">
    <notAllowed/>
  </define>


  <define name="obj.mix">
    <choice>
      <ref name="p.class"/>
      <ref name="list.class"/>
      <ref name="speclist.class"/>
      <ref name="note.class"/>
      <ref name="illus.class"/>
      <ref name="ednote.class"/>
      <ref name="local.obj.mix"/>
    </choice>
  </define>

  <define name="local.p.mix">
    <notAllowed/>
  </define>


  <define name="p.mix">
    <choice>
      <ref name="list.class"/>
      <ref name="speclist.class"/>
      <ref name="note.class"/>
      <ref name="illus.class"/>
      <ref name="local.p.mix"/>
    </choice>
  </define>


  <define name="local.hdr.mix">
    <notAllowed/>
  </define>


  <define name="hdr.mix">
    <choice>
      <ref name="p.class"/>
      <ref name="list.class"/>
      <ref name="ednote.class"/>
      <ref name="local.hdr.mix"/>
    </choice>
  </define>

  <define name="local.termdef.mix">
    <notAllowed/>
  </define>


  <define name="termdef.mix">
    <choice>
      <ref name="note.class"/>
      <ref name="illus.class"/>
      <ref name="local.termdef.mix"/>
    </choice>
  </define>
</div>

<div><h:h3>Entities for mixtures of #PCDATA and phrase-level elements</h:h3>

  <define name="local.p.pcd.mix">
    <notAllowed/>
  </define>


  <define name="p.pcd.mix">
    <choice>
      <text/>
      <ref name="annot.class"/>
      <ref name="termdef.class"/>
      <ref name="emph.class"/>
      <ref name="ref.class"/>
      <ref name="tech.class"/>
      <ref name="loc.class"/>
      <ref name="ednote.class"/>
      <ref name="local.p.pcd.mix"/>
    </choice>
  </define>

  <define name="local.head.pcd.mix">
    <notAllowed/>
  </define>


  <define name="head.pcd.mix">
    <choice>
      <text/>
      <ref name="annot.class"/>
      <ref name="emph.class"/>
      <ref name="tech.class"/>
      <ref name="loc.class"/>
      <ref name="ednote.class"/>
      <ref name="local.head.pcd.mix"/>
    </choice>
  </define>

  <define name="local.label.pcd.mix">
    <notAllowed/>
  </define>


  <define name="label.pcd.mix">
    <choice>
      <text/>
      <ref name="annot.class"/>
      <ref name="termdef.class"/>
      <ref name="emph.class"/>
      <ref name="tech.class"/>
      <ref name="loc.class"/>
      <ref name="ednote.class"/>
      <ref name="local.label.pcd.mix"/>
    </choice>
  </define>

  <define name="local.eg.pcd.mix">
    <notAllowed/>
  </define>


  <define name="eg.pcd.mix">
    <choice>
      <text/>
      <ref name="annot.class"/>
      <ref name="emph.class"/>
      <ref name="loc.class"/>
      <ref name="ednote.class"/>
      <ref name="constraint"/>
      <ref name="local.eg.pcd.mix"/>
    </choice>
  </define>

  <define name="local.termdef.pcd.mix">
    <notAllowed/>
  </define>


  <define name="termdef.pcd.mix">
    <choice>
      <text/>
      <ref name="term"/>
      <ref name="emph.class"/>
      <ref name="ref.class"/>
      <ref name="tech.class"/>
      <ref name="loc.class"/>
      <ref name="ednote.class"/>
      <ref name="local.termdef.pcd.mix"/>
    </choice>
  </define>

  <define name="local.bibl.pcd.mix">
    <notAllowed/>
  </define>


  <define name="bibl.pcd.mix">
    <choice>
      <text/>
      <ref name="emph.class"/>
      <ref name="ref.class"/>
      <ref name="loc.class"/>
      <ref name="ednote.class"/>
      <ref name="local.bibl.pcd.mix"/>
    </choice>
  </define>

  <define name="local.tech.pcd.mix">
    <notAllowed/>
  </define>


  <define name="tech.pcd.mix">
    <choice>
      <text/>
      <ref name="loc.class"/>
      <ref name="ednote.class"/>
      <ref name="phrase"/>
      <ref name="rfc2119"/>
      <ref name="local.tech.pcd.mix"/>
    </choice>
  </define>
</div>

<div><h:h3>Entities for customizable content models</h:h3>

  <define name="spec.mdl">
    <ref name="header"/>
    <optional>
      <ref name="front"/>
    </optional>
    <ref name="body"/>
    <optional>
      <ref name="back"/>
    </optional>
  </define>

  <define name="header.mdl">
    <ref name="title"/>
    <optional>
      <ref name="subtitle"/>
    </optional>
    <optional>
      <ref name="version"/>
    </optional>
    <ref name="w3c-designation"/>
    <ref name="w3c-doctype"/>
    <ref name="pubdate"/>
    <zeroOrMore>
      <ref name="notice"/>
    </zeroOrMore>
    <ref name="publoc"/>
    <optional>
      <ref name="altlocs"/>
    </optional>
    <optional>
      <choice>
        <group>
          <ref name="prevlocs"/>
          <optional>
            <ref name="latestloc"/>
          </optional>
        </group>
        <group>
          <ref name="latestloc"/>
          <optional>
            <ref name="prevlocs"/>
          </optional>
        </group>
      </choice>
    </optional>
    <ref name="authlist"/>
    <optional>
      <ref name="errataloc"/>
    </optional>
    <optional>
      <ref name="preverrataloc"/>
    </optional>
    <optional>
      <ref name="translationloc"/>
    </optional>
    <optional>
      <ref name="copyright"/>
    </optional>
    <choice>
      <group>
        <ref name="status"/>
        <ref name="abstract"/>
      </group>
      <group>
        <ref name="abstract"/>
        <ref name="status"/>
      </group>
    </choice>
    <optional>
      <ref name="pubstmt"/>
    </optional>
    <optional>
      <ref name="sourcedesc"/>
    </optional>
    <ref name="langusage"/>
    <ref name="revisiondesc"/>
  </define>

  <define name="pubdate.mdl">
    <optional>
      <ref name="day"/>
    </optional>
    <ref name="month"/>
    <ref name="year"/>
  </define>
</div>

<div><h:h3>Entities for common attributes</h:h3>

<h:dt>argtypes</h:dt>
<h:dd>Values for function prototype argument datatypes.</h:dd>

  <define name="argtypes">
    <choice>
      <value>boolean</value>
      <value>expression</value>
      <value>location-set</value>
      <value>node-set</value>
      <value>number</value>
      <value>object</value>
      <value>point</value>
      <value>range</value>
      <value>string</value>
    </choice>
  </define>

<h:dt>key attribute</h:dt>
<h:dd>Optionally provides a sorting or indexing key, for cases when
the element content is inappropriate for this purpose.</h:dd>

  <define name="key.att">
    <optional>
      <attribute name="key"/>
    </optional>
  </define>

<h:dt>def attribute</h:dt>
<h:dd>Points to the element where the relevant definition can be
found, using the IDREF mechanism.  %def.att; is for optional
def attributes, and %def-req.att; is for required def
attributes.</h:dd>

  <define name="def-req.att">
    <attribute name="def">
      <data type="IDREF"/>
    </attribute>
  </define>

<h:dt>ref attribute</h:dt>
<h:dd>Points to the element where more information can be found,
using the IDREF mechanism.  %ref.att; is for optional
ref attributes, and %ref-req.att; is for required ref
attributes.</h:dd>

  <define name="ref-req.att">
    <attribute name="ref">
      <data type="IDREF"/>
    </attribute>
  </define>

<h:dt>xmlns:xlink and xlink:type attributes</h:dt>
<h:dd>xmlns:xlink declares the association of the xlink prefix
with the namespace created by the XLink specification.
xlink:type identifies an element as an XLink "simple" linking
element.</h:dd>

  <define name="simple-xlink.att">
    <optional>
      <attribute name="xlink:type" a:defaultValue="simple">
        <value type="string" datatypeLibrary="">simple</value>
      </attribute>
    </optional>
  </define>

<h:dt>href attributes</h:dt>
<h:dd>The href attribute locates the remote-resource half of a
simple link; the element on which the href appears is the
local-resource half.  Some elements are usable links only if
the author chooses to supply a functional href.  The attribute
name should really be xlink:href, but is kept without the
prefix for now in order to be backwards-compatible.</h:dd>

  <define name="href.att">
    <optional>
      <attribute name="href"/>
    </optional>
  </define>

  <define name="href-req.att">
    <attribute name="href"/>
  </define>

<h:dt>xlink:show and xlink:actuate attributes</h:dt>
<h:dd>These attributes offer instructions to the display engine
about how to handle traversal to resource indicated by an
href locator.</h:dd>

  <define name="auto-embed.att">
    <optional>
      <attribute name="xlink:show" a:defaultValue="embed">
        <value type="string" datatypeLibrary="">embed</value>
      </attribute>
    </optional>
    <optional>
      <attribute name="xlink:actuate" a:defaultValue="onLoad">
        <value type="string" datatypeLibrary="">onLoad</value>
      </attribute>
    </optional>
  </define>

  <define name="user-replace.att">
    <optional>
      <attribute name="xlink:show" a:defaultValue="replace">
        <value type="string" datatypeLibrary="">replace</value>
      </attribute>
    </optional>
    <optional>
      <attribute name="xlink:actuate" a:defaultValue="onRequest">
        <value type="string" datatypeLibrary="">onRequest</value>
      </attribute>
    </optional>
  </define>

  <define name="user-new.att">
    <optional>
      <attribute name="xlink:show" a:defaultValue="new">
        <value type="string" datatypeLibrary="">new</value>
      </attribute>
    </optional>
    <optional>
      <attribute name="xlink:actuate" a:defaultValue="onRequest">
        <value type="string" datatypeLibrary="">onRequest</value>
      </attribute>
    </optional>
  </define>

<h:dt>xml:space attribute</h:dt>
<h:dd>Indicates that the element contains whitespace that the
formatter or other application should retain, as appropriate
to its function.</h:dd>

  <define name="xmlspace.att">
    <optional>
      <attribute name="xml:space" a:defaultValue="preserve">
        <value>preserve</value>
      </attribute>
    </optional>
  </define>

<h:dt>diff attribute</h:dt>
<h:dd>Indicates in what way the element has changed.  When a value
is not provided, that subelement should inherit a value from
its parent.  If the root element has no value supplied,
assume "off".</h:dd>

  <define name="diff.att">
    <optional>
      <attribute name="diff">
        <choice>
          <value>chg</value>
          <value>add</value>
          <value>del</value>
          <value>off</value>
        </choice>
      </attribute>
    </optional>
  </define>

<h:dt>role attribute</h:dt>
<h:dd>Extends the useful life of the DTD by allowing authors to
make a subtype of any element.  No default.</h:dd>

  <define name="role.att">
    <optional>
      <attribute name="role">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
  </define>

<h:dt>Common attributes</h:dt>
<h:dd>Every element has an ID attribute for links, a role
attribute, and a diff attribute. %common.att; is for
common attributes where the ID is optional, and
%common-idreq.att; is for common attributes where the
ID is required.</h:dd>

  <define name="local.common.att">
    <empty/>
  </define>

  <define name="common.att">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <ref name="role.att"/>
    <ref name="diff.att"/>
    <ref name="local.common.att"/>
  </define>

  <define name="local.common-idreq.att">
    <empty/>
  </define>

  <define name="common-idreq.att">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <ref name="role.att"/>
    <ref name="diff.att"/>
    <ref name="local.common-idreq.att"/>
  </define>
</div>

<div><h:h3>Common elements</h:h3>

  <define name="head">
    <element name="head">
      <ref name="attlist.head"/>
      <zeroOrMore>
        <ref name="head.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.head" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="spec">
    <element name="spec">
      <ref name="attlist.spec"/>
      <ref name="spec.mdl"/>
    </element>
  </define>

  <define name="local.spec.att">
    <empty/>
  </define>

  <define name="attlist.spec" combine="interleave">
    <ref name="common.att"/>
    <ref name="local.spec.att"/>
    <optional>
      <attribute name="w3c-doctype">
        <choice>
          <value>cr</value>
          <value>dispcmts</value>
          <value>issues</value>
          <value>note</value>
          <value>other</value>
          <value>pr</value>
          <value>rec</value>
          <value>wd</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="other-doctype"/>
    </optional>
    <optional>
      <attribute name="status">
        <choice>
          <value>int-review</value>
          <value>ext-review</value>
          <value>final</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="front">
    <element name="front">
      <ref name="attlist.front"/>
      <oneOrMore>
        <ref name="div1"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.front" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="body">
    <element name="body">
      <ref name="attlist.body"/>
      <oneOrMore>
        <ref name="div1"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.body" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="back">
    <element name="back">
      <ref name="attlist.back"/>
      <choice>
        <group>
          <oneOrMore>
            <ref name="div1"/>
          </oneOrMore>
          <zeroOrMore>
            <ref name="inform-div1"/>
          </zeroOrMore>
        </group>
        <oneOrMore>
          <ref name="inform-div1"/>
        </oneOrMore>
      </choice>
    </element>
  </define>

  <define name="attlist.back" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="div1">
    <element name="div1">
      <ref name="attlist.div1"/>
      <ref name="head"/>
      <zeroOrMore>
        <ref name="div.mix"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="div2"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.div1" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="inform-div1">
    <element name="inform-div1">
      <ref name="attlist.inform-div1"/>
      <ref name="head"/>
      <zeroOrMore>
        <ref name="div.mix"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="div2"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.inform-div1" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="div2">
    <element name="div2">
      <ref name="attlist.div2"/>
      <ref name="head"/>
      <zeroOrMore>
        <ref name="div.mix"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="div3"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.div2" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="div3">
    <element name="div3">
      <ref name="attlist.div3"/>
      <ref name="head"/>
      <zeroOrMore>
        <ref name="div.mix"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="div4"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.div3" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="div4">
    <element name="div4">
      <ref name="attlist.div4"/>
      <ref name="head"/>
      <zeroOrMore>
        <ref name="div.mix"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="div5"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.div4" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="div5">
    <element name="div5">
      <ref name="attlist.div5"/>
      <ref name="head"/>
      <zeroOrMore>
        <ref name="div.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.div5" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="header">
    <element name="header">
      <ref name="attlist.header"/>
      <ref name="header.mdl"/>
    </element>
  </define>

  <define name="attlist.header" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="title">
    <element name="title">
      <ref name="attlist.title"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.title" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="subtitle">
    <element name="subtitle">
      <ref name="attlist.subtitle"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.subtitle" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="version">
    <element name="version">
      <ref name="attlist.version"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.version" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="w3c-designation">
    <element name="w3c-designation">
      <ref name="attlist.w3c-designation"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.w3c-designation" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="w3c-doctype">
    <element name="w3c-doctype">
      <ref name="attlist.w3c-doctype"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.w3c-doctype" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="pubdate">
    <element name="pubdate">
      <ref name="attlist.pubdate"/>
      <ref name="pubdate.mdl"/>
    </element>
  </define>

  <define name="attlist.pubdate" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="day">
    <element name="day">
      <ref name="attlist.day"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.day" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="month">
    <element name="month">
      <ref name="attlist.month"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.month" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="year">
    <element name="year">
      <ref name="attlist.year"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.year" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="copyright">
    <element name="copyright">
      <ref name="attlist.copyright"/>
      <oneOrMore>
        <ref name="hdr.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.copyright" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="notice">
    <element name="notice">
      <ref name="attlist.notice"/>
      <oneOrMore>
        <ref name="hdr.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.notice" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="publoc">
    <element name="publoc">
      <ref name="attlist.publoc"/>
      <zeroOrMore>
        <ref name="p.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.publoc" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="altlocs">
    <element name="altlocs">
      <ref name="attlist.altlocs"/>
      <oneOrMore>
        <ref name="loc"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.altlocs" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="prevlocs">
    <element name="prevlocs">
      <ref name="attlist.prevlocs"/>
      <zeroOrMore>
        <ref name="p.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.prevlocs" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="latestloc">
    <element name="latestloc">
      <ref name="attlist.latestloc"/>
      <zeroOrMore>
        <ref name="p.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.latestloc" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="errataloc">
    <element name="errataloc">
      <ref name="attlist.errataloc"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.errataloc" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <ref name="href-req.att"/>
  </define>

  <define name="preverrataloc">
    <element name="preverrataloc">
      <ref name="attlist.preverrataloc"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.preverrataloc" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <ref name="href-req.att"/>
  </define>

  <define name="translationloc">
    <element name="translationloc">
      <ref name="attlist.translationloc"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.translationloc" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <ref name="href-req.att"/>
  </define>

  <define name="authlist">
    <element name="authlist">
      <ref name="attlist.authlist"/>
      <oneOrMore>
        <ref name="author"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.authlist" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="author">
    <element name="author">
      <ref name="attlist.author"/>
      <ref name="name"/>
      <optional>
        <ref name="affiliation"/>
      </optional>
      <optional>
        <ref name="email"/>
      </optional>
    </element>
  </define>

  <define name="attlist.author" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="name">
    <element name="name">
      <ref name="attlist.name"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.name" combine="interleave">
    <ref name="common.att"/>
    <ref name="key.att"/>
  </define>

  <define name="affiliation">
    <element name="affiliation">
      <ref name="attlist.affiliation"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.affiliation" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="email">
    <element name="email">
      <ref name="attlist.email"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.email" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <ref name="href-req.att"/>
    <ref name="user-new.att"/>
  </define>

  <define name="status">
    <element name="status">
      <ref name="attlist.status"/>
      <oneOrMore>
        <ref name="obj.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.status" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="abstract">
    <element name="abstract">
      <ref name="attlist.abstract"/>
      <zeroOrMore>
        <ref name="hdr.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.abstract" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="pubstmt">
    <element name="pubstmt">
      <ref name="attlist.pubstmt"/>
      <oneOrMore>
        <ref name="hdr.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.pubstmt" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="sourcedesc">
    <element name="sourcedesc">
      <ref name="attlist.sourcedesc"/>
      <oneOrMore>
        <ref name="hdr.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.sourcedesc" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="langusage">
    <element name="langusage">
      <ref name="attlist.langusage"/>
      <oneOrMore>
        <ref name="language"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.langusage" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="language">
    <element name="language">
      <ref name="attlist.language"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.language" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="revisiondesc">
    <element name="revisiondesc">
      <ref name="attlist.revisiondesc"/>
      <oneOrMore>
        <ref name="hdr.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.revisiondesc" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="p">
    <element name="p">
      <ref name="attlist.p"/>
      <zeroOrMore>
        <choice>
          <ref name="p.pcd.mix"/>
          <ref name="p.mix"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.p" combine="interleave">
    <ref name="common.att"/>
  </define>

</div>

<div><h:h3>Regular lists</h:h3>

  <define name="ulist">
    <element name="ulist">
      <ref name="attlist.ulist"/>
      <oneOrMore>
        <ref name="item"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.ulist" combine="interleave">
    <ref name="common.att"/>
    <optional>
      <attribute name="spacing">
        <choice>
          <value>normal</value>
          <value>compact</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="olist">
    <element name="olist">
      <ref name="attlist.olist"/>
      <oneOrMore>
        <ref name="item"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.olist" combine="interleave">
    <ref name="common.att"/>
    <optional>
      <attribute name="spacing">
        <choice>
          <value>normal</value>
          <value>compact</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="item">
    <element name="item">
      <ref name="attlist.item"/>
      <oneOrMore>
        <ref name="obj.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.item" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="slist">
    <element name="slist">
      <ref name="attlist.slist"/>
      <oneOrMore>
        <ref name="sitem"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.slist" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="sitem">
    <element name="sitem">
      <ref name="attlist.sitem"/>
      <zeroOrMore>
        <ref name="p.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.sitem" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="glist">
    <element name="glist">
      <ref name="attlist.glist"/>
      <oneOrMore>
        <ref name="gitem"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.glist" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="gitem">
    <element name="gitem">
      <ref name="attlist.gitem"/>
      <ref name="label"/>
      <ref name="def"/>
    </element>
  </define>

  <define name="attlist.gitem" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="label">
    <element name="label">
      <ref name="attlist.label"/>
      <zeroOrMore>
        <ref name="label.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.label" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="def">
    <element name="def">
      <ref name="attlist.def"/>
      <zeroOrMore>
        <ref name="obj.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.def" combine="interleave">
    <ref name="common.att"/>
  </define>
</div>

<div><h:h3>Special lists</h:h3>

  <define name="blist">
    <element name="blist">
      <ref name="attlist.blist"/>
      <oneOrMore>
        <ref name="bibl"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.blist" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="bibl">
    <element name="bibl">
      <ref name="attlist.bibl"/>
      <zeroOrMore>
        <ref name="bibl.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.bibl" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <ref name="href.att"/>
    <ref name="user-replace.att"/>
    <ref name="key.att"/>
  </define>

  <define name="orglist">
    <element name="orglist">
      <ref name="attlist.orglist"/>
      <oneOrMore>
        <ref name="member"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.orglist" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="member">
    <element name="member">
      <ref name="attlist.member"/>
      <ref name="name"/>
      <optional>
        <ref name="affiliation"/>
      </optional>
      <optional>
        <ref name="role"/>
      </optional>
    </element>
  </define>

  <define name="attlist.member" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="role">
    <element name="role">
      <ref name="attlist.role"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.role" combine="interleave">
    <ref name="common.att"/>
  </define>
</div>

<div><h:h3>Notes</h:h3>

  <define name="note">
    <element name="note">
      <ref name="attlist.note"/>
      <oneOrMore>
        <ref name="obj.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.note" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="issue">
    <element name="issue">
      <ref name="attlist.issue"/>
      <optional>
        <ref name="head"/>
      </optional>
      <zeroOrMore>
        <ref name="source"/>
      </zeroOrMore>
      <oneOrMore>
        <ref name="obj.mix"/>
      </oneOrMore>
      <optional>
        <ref name="resolution"/>
      </optional>
    </element>
  </define>

  <define name="attlist.issue" combine="interleave">
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <ref name="role.att"/>
    <ref name="diff.att"/>
    <optional>
      <attribute name="status" a:defaultValue="open">
        <choice>
          <value>open</value>
          <value>closed</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="source">
    <element name="source">
      <ref name="attlist.source"/>
      <zeroOrMore>
        <ref name="p.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.source" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="resolution">
    <element name="resolution">
      <ref name="attlist.resolution"/>
      <oneOrMore>
        <ref name="obj.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.resolution" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="wfcnote">
    <element name="wfcnote">
      <ref name="attlist.wfcnote"/>
      <ref name="head"/>
      <oneOrMore>
        <ref name="obj.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.wfcnote" combine="interleave">
    <ref name="common-idreq.att"/>
  </define>

  <define name="vcnote">
    <element name="vcnote">
      <ref name="attlist.vcnote"/>
      <ref name="head"/>
      <oneOrMore>
        <ref name="obj.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.vcnote" combine="interleave">
    <ref name="common-idreq.att"/>
  </define>

  <define name="constraintnote">
    <element name="constraintnote">
      <ref name="attlist.constraintnote"/>
      <ref name="head"/>
      <oneOrMore>
        <ref name="obj.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.constraintnote" combine="interleave">
    <ref name="common-idreq.att"/>
    <attribute name="type">
      <data type="NMTOKEN"/>
    </attribute>
  </define>
</div>

<div><h:h3>Basic display elements</h:h3>

  <define name="eg">
    <element name="eg">
      <ref name="attlist.eg"/>
      <zeroOrMore>
        <ref name="eg.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.eg" combine="interleave">
    <ref name="common.att"/>
    <ref name="xmlspace.att"/>
  </define>

  <define name="graphic">
    <element name="graphic">
      <ref name="attlist.graphic"/>
      <empty/>
    </element>
  </define>

  <define name="local.graphic.att">
    <empty/>
  </define>

  <define name="attlist.graphic" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <attribute name="source"/>
    <ref name="auto-embed.att"/>
    <optional>
      <attribute name="alt"/>
    </optional>
    <ref name="local.graphic.att"/>
  </define>

  <define name="proto">
    <element name="proto">
      <ref name="attlist.proto"/>
      <zeroOrMore>
        <ref name="arg"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="local.proto.att">
    <empty/>
  </define>

  <define name="attlist.proto" combine="interleave">
    <ref name="common.att"/>
    <ref name="local.proto.att"/>
    <attribute name="name">
      <data type="NMTOKEN"/>
    </attribute>
    <attribute name="return-type">
      <ref name="argtypes"/>
    </attribute>
  </define>

  <define name="local.arg.att">
    <empty/>
  </define>

  <define name="arg">
    <element name="arg">
      <ref name="attlist.arg"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.arg" combine="interleave">
    <ref name="common.att"/>
    <ref name="local.arg.att"/>
    <attribute name="type">
      <ref name="argtypes"/>
    </attribute>
    <optional>
      <attribute name="occur">
        <choice>
          <value>opt</value>
          <value>req</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="example">
    <element name="example">
      <ref name="attlist.example"/>
      <optional>
        <ref name="head"/>
      </optional>
      <oneOrMore>
        <ref name="obj.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.example" combine="interleave">
    <ref name="common.att"/>
  </define>
</div>

<div><h:h3>EBNF</h:h3>

  <define name="scrap">
    <element name="scrap">
      <ref name="attlist.scrap"/>
      <ref name="head"/>
      <oneOrMore>
        <choice>
          <ref name="prodgroup"/>
          <ref name="prod"/>
          <ref name="bnf"/>
          <ref name="prodrecap"/>
        </choice>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.scrap" combine="interleave">
    <ref name="common.att"/>
    <optional>
      <attribute name="lang">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="headstyle" a:defaultValue="show">
        <choice>
          <value>show</value>
          <value>suppress</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="prodgroup">
    <element name="prodgroup">
      <ref name="attlist.prodgroup"/>
      <oneOrMore>
        <ref name="prod"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.prodgroup" combine="interleave">
    <ref name="common.att"/>
    <optional>
      <attribute name="pcw1"/>
    </optional>
    <optional>
      <attribute name="pcw2"/>
    </optional>
    <optional>
      <attribute name="pcw3"/>
    </optional>
    <optional>
      <attribute name="pcw4"/>
    </optional>
    <optional>
      <attribute name="pcw5"/>
    </optional>
  </define>

  <define name="prod">
    <element name="prod">
      <ref name="attlist.prod"/>
      <ref name="lhs"/>
      <oneOrMore>
        <ref name="rhs"/>
        <zeroOrMore>
          <choice>
            <ref name="com"/>
            <ref name="wfc"/>
            <ref name="vc"/>
            <ref name="constraint"/>
          </choice>
        </zeroOrMore>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.prod" combine="interleave">
    <ref name="common-idreq.att"/>
    <optional>
      <attribute name="num"/>
    </optional>
  </define>

  <define name="lhs">
    <element name="lhs">
      <ref name="attlist.lhs"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.lhs" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="rhs">
    <element name="rhs">
      <ref name="attlist.rhs"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
          <ref name="nt"/>
          <ref name="xnt"/>
          <ref name="com"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.rhs" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="com">
    <element name="com">
      <ref name="attlist.com"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
          <ref name="loc"/>
          <ref name="bibref"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.com" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="wfc">
    <element name="wfc">
      <ref name="attlist.wfc"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.wfc" combine="interleave">
    <ref name="def-req.att"/>
    <ref name="common.att"/>
  </define>

  <define name="vc">
    <element name="vc">
      <ref name="attlist.vc"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.vc" combine="interleave">
    <ref name="def-req.att"/>
    <ref name="common.att"/>
  </define>

  <define name="constraint">
    <element name="constraint">
      <ref name="attlist.constraint"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.constraint" combine="interleave">
    <ref name="def-req.att"/>
    <ref name="common.att"/>
  </define>

  <define name="bnf">
    <element name="bnf">
      <ref name="attlist.bnf"/>
      <zeroOrMore>
        <ref name="eg.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.bnf" combine="interleave">
    <ref name="common.att"/>
    <ref name="xmlspace.att"/>
  </define>

  <define name="prodrecap">
    <element name="prodrecap">
      <ref name="attlist.prodrecap"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.prodrecap" combine="interleave">
    <ref name="common.att"/>
    <ref name="ref-req.att"/>
  </define>
</div>

<div><h:h3>Table</h:h3>

  <define name="cellhalign.att">
    <optional>
      <attribute name="align">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>justify</value>
          <value>char</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="char"/>
    </optional>
    <optional>
      <attribute name="charoff"/>
    </optional>
  </define>

  <define name="cellvalign.att">
    <optional>
      <attribute name="valign">
        <choice>
          <value>top</value>
          <value>middle</value>
          <value>bottom</value>
          <value>baseline</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="thtd.att">
    <optional>
      <attribute name="abbr"/>
    </optional>
    <optional>
      <attribute name="axis"/>
    </optional>
    <optional>
      <attribute name="headers">
        <data type="IDREFS"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="scope">
        <choice>
          <value>row</value>
          <value>col</value>
          <value>rowgroup</value>
          <value>colgroup</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowspan" a:defaultValue="1">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="colspan" a:defaultValue="1">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
  </define>

  <define name="width.att">
    <optional>
      <attribute name="width"/>
    </optional>
  </define>

  <define name="span.att">
    <optional>
      <attribute name="span" a:defaultValue="1">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
  </define>

  <define name="table">
    <element name="table">
      <ref name="attlist.table"/>
      <optional>
        <ref name="caption"/>
      </optional>
      <choice>
        <zeroOrMore>
          <ref name="col"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="colgroup"/>
        </zeroOrMore>
      </choice>
      <optional>
        <ref name="thead"/>
      </optional>
      <optional>
        <ref name="tfoot"/>
      </optional>
      <oneOrMore>
        <ref name="tbody"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.table" combine="interleave">
    <ref name="common.att"/>
    <ref name="width.att"/>
    <optional>
      <attribute name="summary"/>
    </optional>
    <optional>
      <attribute name="border"/>
    </optional>
    <optional>
      <attribute name="frame">
        <choice>
          <value>void</value>
          <value>above</value>
          <value>below</value>
          <value>hsides</value>
          <value>lhs</value>
          <value>rhs</value>
          <value>vsides</value>
          <value>box</value>
          <value>border</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="rules">
        <choice>
          <value>none</value>
          <value>groups</value>
          <value>rows</value>
          <value>cols</value>
          <value>all</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="cellspacing"/>
    </optional>
    <optional>
      <attribute name="cellpadding"/>
    </optional>
  </define>

  <define name="caption">
    <element name="caption">
      <ref name="attlist.caption"/>
      <zeroOrMore>
        <ref name="p.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.caption" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="col">
    <element name="col">
      <ref name="attlist.col"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.col" combine="interleave">
    <ref name="common.att"/>
    <ref name="span.att"/>
    <ref name="width.att"/>
    <ref name="cellhalign.att"/>
    <ref name="cellvalign.att"/>
  </define>

  <define name="colgroup">
    <element name="colgroup">
      <ref name="attlist.colgroup"/>
      <zeroOrMore>
        <ref name="col"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.colgroup" combine="interleave">
    <ref name="common.att"/>
    <ref name="span.att"/>
    <ref name="width.att"/>
    <ref name="cellhalign.att"/>
    <ref name="cellvalign.att"/>
  </define>

  <define name="thead">
    <element name="thead">
      <ref name="attlist.thead"/>
      <oneOrMore>
        <ref name="tr"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.thead" combine="interleave">
    <ref name="common.att"/>
    <ref name="cellhalign.att"/>
    <ref name="cellvalign.att"/>
  </define>

  <define name="tfoot">
    <element name="tfoot">
      <ref name="attlist.tfoot"/>
      <oneOrMore>
        <ref name="tr"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.tfoot" combine="interleave">
    <ref name="common.att"/>
    <ref name="cellhalign.att"/>
    <ref name="cellvalign.att"/>
  </define>

  <define name="tbody">
    <element name="tbody">
      <ref name="attlist.tbody"/>
      <oneOrMore>
        <ref name="tr"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.tbody" combine="interleave">
    <ref name="common.att"/>
    <ref name="cellhalign.att"/>
    <ref name="cellvalign.att"/>
  </define>

  <define name="tr">
    <element name="tr">
      <ref name="attlist.tr"/>
      <oneOrMore>
        <choice>
          <ref name="th"/>
          <ref name="td"/>
        </choice>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.tr" combine="interleave">
    <ref name="common.att"/>
    <ref name="cellhalign.att"/>
    <ref name="cellvalign.att"/>
  </define>

  <define name="th">
    <element name="th">
      <ref name="attlist.th"/>
      <zeroOrMore>
        <choice>
          <ref name="p.pcd.mix"/>
          <ref name="p.mix"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.th" combine="interleave">
    <ref name="common.att"/>
    <ref name="thtd.att"/>
    <ref name="cellhalign.att"/>
    <ref name="cellvalign.att"/>
  </define>

  <define name="td">
    <element name="td">
      <ref name="attlist.td"/>
      <zeroOrMore>
        <choice>
          <ref name="p.pcd.mix"/>
          <ref name="p.mix"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.td" combine="interleave">
    <ref name="common.att"/>
    <ref name="thtd.att"/>
    <ref name="cellhalign.att"/>
    <ref name="cellvalign.att"/>
  </define>
</div>

<div><h:h3>IDL structures for DOM specifications</h:h3>

  <define name="idl-desc.class">
    <choice>
      <ref name="p"/>
      <ref name="note"/>
    </choice>
  </define>

  <define name="idl-tdef.class">
    <choice>
      <ref name="typedef"/>
      <ref name="constant"/>
      <ref name="exception"/>
      <ref name="reference"/>
      <ref name="group"/>
    </choice>
  </define>

  <define name="idl-mod.class">
    <choice>
      <ref name="module"/>
      <ref name="interface"/>
    </choice>
  </define>

  <define name="idl-struct.class">
    <choice>
      <ref name="struct"/>
      <ref name="enum"/>
      <ref name="sequence"/>
      <ref name="union"/>
      <ref name="typename"/>
    </choice>
  </define>

  <define name="idl-meth.class">
    <choice>
      <ref name="method"/>
      <ref name="attribute"/>
    </choice>
  </define>
</div>

<div><h:h3>Specialized entities for mixtures</h:h3>

  <define name="idl-grp.mix">
    <choice>
      <ref name="idl-desc.class"/>
      <ref name="idl-tdef.class"/>
      <ref name="idl-mod.class"/>
      <ref name="idl-struct.class"/>
      <ref name="idl-meth.class"/>
    </choice>
  </define>

  <define name="idl-defn.mix">
    <choice>
      <ref name="idl-desc.class"/>
      <ref name="idl-tdef.class"/>
      <ref name="idl-mod.class"/>
    </choice>
  </define>

  <define name="idl-intfc.mix">
    <choice>
      <ref name="idl-desc.class"/>
      <ref name="idl-tdef.class"/>
      <ref name="idl-meth.class"/>
    </choice>
  </define>

  <define name="idl-type.mix">
    <ref name="idl-struct.class"/>
  </define>

  <define name="idl-name.att">
    <attribute name="name"/>
  </define>

  <define name="idl-type.att">
    <attribute name="type"/>
  </define>

  <define name="descr">
    <element name="descr">
      <ref name="attlist.descr"/>
      <zeroOrMore>
        <ref name="obj.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.descr" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="definitions">
    <element name="definitions">
      <ref name="attlist.definitions"/>
      <oneOrMore>
        <ref name="idl-defn.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.definitions" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="group">
    <element name="group">
      <ref name="attlist.group"/>
      <ref name="descr"/>
      <zeroOrMore>
        <ref name="idl-grp.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.group" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
  </define>

  <define name="interface">
    <element name="interface">
      <ref name="attlist.interface"/>
      <ref name="descr"/>
      <zeroOrMore>
        <ref name="idl-intfc.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.interface" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
    <optional>
      <attribute name="inherits"/>
    </optional>
  </define>

  <define name="module">
    <element name="module">
      <ref name="attlist.module"/>
      <ref name="descr"/>
      <zeroOrMore>
        <ref name="idl-defn.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.module" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
  </define>

  <define name="reference">
    <element name="reference">
      <ref name="attlist.reference"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.reference" combine="interleave">
    <ref name="common.att"/>
    <attribute name="declaration">
      <data type="IDREF"/>
    </attribute>
  </define>

  <define name="typedef">
    <element name="typedef">
      <ref name="attlist.typedef"/>
      <ref name="descr"/>
      <ref name="idl-type.mix"/>
    </element>
  </define>

  <define name="attlist.typedef" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
    <optional>
      <attribute name="array.size">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
  </define>

  <define name="struct">
    <element name="struct">
      <ref name="attlist.struct"/>
      <ref name="descr"/>
      <oneOrMore>
        <ref name="component"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.struct" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
  </define>

  <define name="component">
    <element name="component">
      <ref name="attlist.component"/>
      <ref name="idl-type.mix"/>
    </element>
  </define>

  <define name="attlist.component" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
  </define>

  <define name="union">
    <element name="union">
      <ref name="attlist.union"/>
      <ref name="descr"/>
      <oneOrMore>
        <ref name="case"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.union" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
    <attribute name="switch.type"/>
  </define>

  <define name="case">
    <element name="case">
      <ref name="attlist.case"/>
      <ref name="descr"/>
      <ref name="idl-type.mix"/>
    </element>
  </define>

  <define name="attlist.case" combine="interleave">
    <ref name="common.att"/>
    <attribute name="labels"/>
  </define>

  <define name="enum">
    <element name="enum">
      <ref name="attlist.enum"/>
      <ref name="descr"/>
      <oneOrMore>
        <ref name="enumerator"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.enum" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
  </define>

  <define name="enumerator">
    <element name="enumerator">
      <ref name="attlist.enumerator"/>
      <ref name="descr"/>
    </element>
  </define>

  <define name="attlist.enumerator" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
  </define>

  <define name="sequence">
    <element name="sequence">
      <ref name="attlist.sequence"/>
      <zeroOrMore>
        <ref name="sequence"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.sequence" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-type.att"/>
    <optional>
      <attribute name="size">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
  </define>

  <define name="constant">
    <element name="constant">
      <ref name="attlist.constant"/>
      <ref name="descr"/>
    </element>
  </define>

  <define name="attlist.constant" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
    <ref name="idl-type.att"/>
    <attribute name="value"/>
  </define>

  <define name="exception">
    <element name="exception">
      <ref name="attlist.exception"/>
      <ref name="descr"/>
      <zeroOrMore>
        <ref name="component"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.exception" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
  </define>

  <define name="attribute">
    <element name="attribute">
      <ref name="attlist.attribute"/>
      <ref name="descr"/>
    </element>
  </define>

  <define name="attlist.attribute" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
    <ref name="idl-type.att"/>
    <optional>
      <attribute name="readonly" a:defaultValue="no">
        <choice>
          <value>yes</value>
          <value>no</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="method">
    <element name="method">
      <ref name="attlist.method"/>
      <ref name="descr"/>
      <ref name="parameters"/>
      <ref name="returns"/>
      <ref name="raises"/>
    </element>
  </define>

  <define name="attlist.method" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
  </define>

  <define name="parameters">
    <element name="parameters">
      <ref name="attlist.parameters"/>
      <zeroOrMore>
        <ref name="param"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.parameters" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="param">
    <element name="param">
      <ref name="attlist.param"/>
      <ref name="descr"/>
    </element>
  </define>

  <define name="attlist.param" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-name.att"/>
    <ref name="idl-type.att"/>
    <optional>
      <attribute name="attr" a:defaultValue="inout">
        <choice>
          <value>in</value>
          <value>out</value>
          <value>inout</value>
        </choice>
      </attribute>
    </optional>
  </define>

  <define name="returns">
    <element name="returns">
      <ref name="attlist.returns"/>
      <ref name="descr"/>
    </element>
  </define>

  <define name="attlist.returns" combine="interleave">
    <ref name="common.att"/>
    <ref name="idl-type.att"/>
  </define>

  <define name="raises">
    <element name="raises">
      <ref name="attlist.raises"/>
      <zeroOrMore>
        <ref name="exception"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.raises" combine="interleave">
    <empty/>
  </define>

  <define name="typename">
    <element name="typename">
      <ref name="attlist.typename"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.typename" combine="interleave">
    <ref name="common.att"/>
  </define>
</div>

<div><h:h3>Phrase-level elements</h:h3>

  <define name="att">
    <element name="att">
      <ref name="attlist.att"/>
      <zeroOrMore>
        <ref name="tech.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.att" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="attval">
    <element name="attval">
      <ref name="attlist.attval"/>
      <zeroOrMore>
        <ref name="tech.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.attval" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="bibref">
    <element name="bibref">
      <ref name="attlist.bibref"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.bibref" combine="interleave">
    <ref name="common.att"/>
    <ref name="ref-req.att"/>
  </define>

  <define name="code">
    <element name="code">
      <ref name="attlist.code"/>
      <zeroOrMore>
        <ref name="tech.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.code" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="ednote">
    <element name="ednote">
      <ref name="attlist.ednote"/>
      <optional>
        <ref name="name"/>
      </optional>
      <optional>
        <ref name="date"/>
      </optional>
      <ref name="edtext"/>
    </element>
  </define>

  <define name="attlist.ednote" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="date">
    <element name="date">
      <ref name="attlist.date"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.date" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="edtext">
    <element name="edtext">
      <ref name="attlist.edtext"/>
      <zeroOrMore>
        <ref name="p.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.edtext" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="el">
    <element name="el">
      <ref name="attlist.el"/>
      <zeroOrMore>
        <ref name="tech.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.el" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="emph">
    <element name="emph">
      <ref name="attlist.emph"/>
      <zeroOrMore>
        <ref name="p.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.emph" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="footnote">
    <element name="footnote">
      <ref name="attlist.footnote"/>
      <oneOrMore>
        <ref name="obj.mix"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.footnote" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="function">
    <element name="function">
      <ref name="attlist.function"/>
      <zeroOrMore>
        <ref name="tech.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.function" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="kw">
    <element name="kw">
      <ref name="attlist.kw"/>
      <zeroOrMore>
        <ref name="tech.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.kw" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="loc">
    <element name="loc">
      <ref name="attlist.loc"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.loc" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <ref name="href-req.att"/>
    <ref name="user-replace.att"/>
  </define>

  <define name="nt">
    <element name="nt">
      <ref name="attlist.nt"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.nt" combine="interleave">
    <ref name="common.att"/>
    <ref name="def-req.att"/>
  </define>

  <define name="phrase">
    <element name="phrase">
      <ref name="attlist.phrase"/>
      <zeroOrMore>
        <ref name="p.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.phrase" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="rfc2119">
    <element name="rfc2119">
      <ref name="attlist.rfc2119"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.rfc2119" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="quote">
    <element name="quote">
      <ref name="attlist.quote"/>
      <zeroOrMore>
        <ref name="p.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.quote" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="specref">
    <element name="specref">
      <ref name="attlist.specref"/>
      <empty/>
    </element>
  </define>

  <define name="attlist.specref" combine="interleave">
    <ref name="common.att"/>
    <ref name="ref-req.att"/>
  </define>

  <define name="sub">
    <element name="sub">
      <ref name="attlist.sub"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.sub" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="sup">
    <element name="sup">
      <ref name="attlist.sup"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.sup" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="term">
    <element name="term">
      <ref name="attlist.term"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.term" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="termdef">
    <element name="termdef">
      <ref name="attlist.termdef"/>
      <zeroOrMore>
        <choice>
          <ref name="termdef.pcd.mix"/>
          <ref name="termdef.mix"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.termdef" combine="interleave">
    <ref name="common-idreq.att"/>
    <attribute name="term"/>
  </define>

  <define name="termref">
    <element name="termref">
      <ref name="attlist.termref"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.termref" combine="interleave">
    <ref name="common.att"/>
    <ref name="def-req.att"/>
  </define>

  <define name="titleref">
    <element name="titleref">
      <ref name="attlist.titleref"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.titleref" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <ref name="href.att"/>
    <ref name="user-new.att"/>
  </define>

  <define name="var">
    <element name="var">
      <ref name="attlist.var"/>
      <zeroOrMore>
        <ref name="tech.pcd.mix"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.var" combine="interleave">
    <ref name="common.att"/>
  </define>

  <define name="xnt">
    <element name="xnt">
      <ref name="attlist.xnt"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.xnt" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <ref name="href-req.att"/>
    <ref name="user-new.att"/>
  </define>

  <define name="xspecref">
    <element name="xspecref">
      <ref name="attlist.xspecref"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.xspecref" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <ref name="href-req.att"/>
    <ref name="user-new.att"/>
  </define>

  <define name="xtermref">
    <element name="xtermref">
      <ref name="attlist.xtermref"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="phrase"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.xtermref" combine="interleave">
    <ref name="common.att"/>
    <ref name="simple-xlink.att"/>
    <ref name="href-req.att"/>
    <ref name="user-new.att"/>
  </define>
</div>

<div><h:h3>Unused elements for Arbortext Adept/Epic</h:h3>

<h:p>These elements are used by Epic (and may be used by other tools)
to make conversion from HTML to XML Spec easier.</h:p>

  <define name="div">
    <element name="div">
      <ref name="attlist.div"/>
      <optional>
        <ref name="head"/>
      </optional>
      <zeroOrMore>
        <choice>
          <ref name="div.mix"/>
          <ref name="ul"/>
          <ref name="ol"/>
          <ref name="h1"/>
          <ref name="h2"/>
          <ref name="h3"/>
          <ref name="h4"/>
          <ref name="h5"/>
          <ref name="h6"/>
          <ref name="div"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.div" combine="interleave">
    <empty/>
  </define>

  <define name="h1">
    <element name="h1">
      <ref name="attlist.h1"/>
      <zeroOrMore>
        <choice>
          <ref name="head.pcd.mix"/>
          <ref name="em"/>
          <ref name="a"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.h1" combine="interleave">
    <empty/>
  </define>

  <define name="h2">
    <element name="h2">
      <ref name="attlist.h2"/>
      <zeroOrMore>
        <choice>
          <ref name="head.pcd.mix"/>
          <ref name="em"/>
          <ref name="a"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.h2" combine="interleave">
    <empty/>
  </define>

  <define name="h3">
    <element name="h3">
      <ref name="attlist.h3"/>
      <zeroOrMore>
        <choice>
          <ref name="head.pcd.mix"/>
          <ref name="em"/>
          <ref name="a"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.h3" combine="interleave">
    <empty/>
  </define>

  <define name="h4">
    <element name="h4">
      <ref name="attlist.h4"/>
      <zeroOrMore>
        <choice>
          <ref name="head.pcd.mix"/>
          <ref name="em"/>
          <ref name="a"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.h4" combine="interleave">
    <empty/>
  </define>

  <define name="h5">
    <element name="h5">
      <ref name="attlist.h5"/>
      <zeroOrMore>
        <choice>
          <ref name="head.pcd.mix"/>
          <ref name="em"/>
          <ref name="a"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.h5" combine="interleave">
    <empty/>
  </define>

  <define name="h6">
    <element name="h6">
      <ref name="attlist.h6"/>
      <zeroOrMore>
        <choice>
          <ref name="head.pcd.mix"/>
          <ref name="em"/>
          <ref name="a"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.h6" combine="interleave">
    <empty/>
  </define>

  <define name="pre">
    <element name="pre">
      <ref name="attlist.pre"/>
      <zeroOrMore>
        <choice>
          <ref name="eg.pcd.mix"/>
          <ref name="em"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.pre" combine="interleave">
    <empty/>
  </define>

  <define name="ul">
    <element name="ul">
      <ref name="attlist.ul"/>
      <zeroOrMore>
        <choice>
          <ref name="item"/>
          <ref name="li"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.ul" combine="interleave">
    <empty/>
  </define>

  <define name="ol">
    <element name="ol">
      <ref name="attlist.ol"/>
      <zeroOrMore>
        <choice>
          <ref name="item"/>
          <ref name="li"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.ol" combine="interleave">
    <empty/>
  </define>

  <define name="li">
    <element name="li">
      <ref name="attlist.li"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="obj.mix"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.li" combine="interleave">
    <empty/>
  </define>

  <define name="em">
    <element name="em">
      <ref name="attlist.em"/>
      <zeroOrMore>
        <text/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.em" combine="interleave">
    <empty/>
  </define>

  <define name="a">
    <element name="a">
      <ref name="attlist.a"/>
      <zeroOrMore>
        <text/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.a" combine="interleave">
    <empty/>
  </define>

  <define name="key-term">
    <element name="key-term">
      <ref name="attlist.key-term"/>
      <zeroOrMore>
        <text/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.key-term" combine="interleave">
    <empty/>
  </define>

  <define name="htable">
    <element name="htable">
      <ref name="attlist.htable"/>
      <optional>
        <ref name="caption"/>
      </optional>
      <choice>
        <zeroOrMore>
          <ref name="col"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="colgroup"/>
        </zeroOrMore>
      </choice>
      <optional>
        <ref name="thead"/>
      </optional>
      <optional>
        <ref name="tfoot"/>
      </optional>
      <oneOrMore>
        <ref name="tbody"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.htable" combine="interleave">
    <empty/>
  </define>

  <define name="htbody">
    <element name="htbody">
      <ref name="attlist.htbody"/>
      <oneOrMore>
        <ref name="tr"/>
      </oneOrMore>
    </element>
  </define>

  <define name="attlist.htbody" combine="interleave">
    <empty/>
  </define>

  <define name="statusp">
    <element name="statusp">
      <ref name="attlist.statusp"/>
      <zeroOrMore>
        <choice>
          <ref name="p.pcd.mix"/>
          <ref name="p.mix"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.statusp" combine="interleave">
    <empty/>
  </define>

  <define name="itemizedlist">
    <element name="itemizedlist">
      <ref name="attlist.itemizedlist"/>
      <zeroOrMore>
        <ref name="listitem"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.itemizedlist" combine="interleave">
    <empty/>
  </define>

  <define name="orderedlist">
    <element name="orderedlist">
      <ref name="attlist.orderedlist"/>
      <zeroOrMore>
        <ref name="listitem"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.orderedlist" combine="interleave">
    <empty/>
  </define>

  <define name="listitem">
    <element name="listitem">
      <ref name="attlist.listitem"/>
      <zeroOrMore>
        <ref name="para"/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.listitem" combine="interleave">
    <empty/>
  </define>

  <define name="para">
    <element name="para">
      <ref name="attlist.para"/>
      <zeroOrMore>
        <text/>
      </zeroOrMore>
    </element>
  </define>

  <define name="attlist.para" combine="interleave">
    <empty/>
  </define>
</div>

</grammar>
