<?xml version="1.0"?>
<grammar
    xmlns="http://relaxng.org/ns/structure/1.0"
    xmlns:mal="http://projectmallard.org/1.0/"
    ns="http://projectmallard.org/1.0/">

<start>
  <ref name="mal_page"/>
</start>

<define name="mal_page">
  <element name="page">
    <attribute name="id">
      <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
    </attribute>
    <optional>
      <attribute name="type">
        <choice>
          <value>guide</value>
          <value>topic</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="groups">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_info"/>
    </optional>
    <ref name="mal_block_title"/>
    <zeroOrMore>
      <ref name="mal_block"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_section"/>
    </zeroOrMore>
  </element>
</define>

<define name="mal_section">
  <element name="section">
    <attribute name="id">
      <data type="ID" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
    </attribute>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_info"/>
    </optional>
    <ref name="mal_block_title"/>
    <zeroOrMore>
      <ref name="mal_block"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_section"/>
    </zeroOrMore>
  </element>
</define>

<define name="mal_info">
  <element name="info">
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <interleave>
      <optional>
        <ref name="mal_info_desc"/>
      </optional>
      <zeroOrMore>
        <ref name="mal_info_credit"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="mal_info_license"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="mal_info_link"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="mal_info_title"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="mal_info_revision"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="mal_external"/>
      </zeroOrMore>
    </interleave>
  </element>
</define>

<define name="mal_info_credit">
  <element name="credit">
    <optional>
      <attribute name="type">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <interleave>
      <ref name="mal_info_name"/>
      <optional>
        <ref name="mal_info_email"/>
      </optional>
      <optional>
        <ref name="mal_info_years"/>
      </optional>
      <zeroOrMore>
        <ref name="mal_external"/>
      </zeroOrMore>
    </interleave>
  </element>
</define>

<define name="mal_info_link">
  <element name="link">
    <attribute name="type">
      <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
    </attribute>
    <choice>
      <attribute name="xref">
        <text/>
      </attribute>
      <attribute name="href">
        <text/>
      </attribute>
    </choice>
    <optional>
      <attribute name="group">
        <text/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_external"/>
    </zeroOrMore>
  </element>
</define>

<define name="mal_info_title">
  <element name="title">
    <attribute name="type">
      <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
    </attribute>
    <optional>
      <attribute name="role">
        <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_info_license">
  <element name="license">
    <optional>
      <attribute name="href">
        <text/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_info_desc">
  <element name="desc">
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_info_revision">
  <element name="revision">
    <optional>
      <attribute name="version">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="docversion">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="pkgversion">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="date">
        <data type="date" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="status">
        <choice>
          <value>stub</value>
          <value>incomplete</value>
          <value>draft</value>
          <value>outdated</value>
          <value>review</value>
          <value>candidate</value>
          <value>final</value>
        </choice>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <optional>
      <ref name="mal_block_desc"/>
    </optional>
    <zeroOrMore>
      <ref name="mal_external"/>
    </zeroOrMore>
  </element>
</define>

<define name="mal_info_years">
  <element name="years">
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_info_email">
  <element name="email">
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_info_name">
  <element name="name">
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_block">
  <choice>
    <ref name="mal_block_basic"/>
    <ref name="mal_block_formal"/>
    <ref name="mal_block_lists"/>
    <ref name="mal_table"/>
  </choice>
</define>

<define name="mal_block_basic">
  <choice>
    <ref name="mal_block_code"/>
    <ref name="mal_block_example"/>
    <ref name="mal_block_media"/>
    <ref name="mal_block_p"/>
    <ref name="mal_block_screen"/>
  </choice>
</define>

<define name="mal_block_formal">
  <choice>
    <ref name="mal_block_comment"/>
    <ref name="mal_block_figure"/>
    <ref name="mal_block_listing"/>
    <ref name="mal_block_note"/>
    <ref name="mal_block_quote"/>
    <ref name="mal_block_synopsis"/>
  </choice>
</define>

<define name="mal_block_lists">
  <choice>
    <ref name="mal_block_list"/>
    <ref name="mal_block_steps"/>
    <ref name="mal_block_terms"/>
    <ref name="mal_block_tree"/>
  </choice>
</define>

<define name="mal_block_code">
  <element name="code">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="mime">
        <text/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_block_example">
  <element name="example">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_media">
  <element name="media">
    <optional>
      <attribute name="type">
        <choice>
          <value>image</value>
          <value>video</value>
          <value>audio</value>
          <value>application</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="mime">
        <text/>
      </attribute>
    </optional>
    <attribute name="src">
      <text/>
    </attribute>
    <optional>
      <attribute name="height">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_block"/>
    </zeroOrMore>
  </element>
</define>

<define name="mal_block_p">
  <element name="p">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_block_screen">
  <element name="screen">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="mime">
        <text/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_block_quote">
  <element name="quote">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <ref name="mal_block_cite"/>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_comment">
  <element name="comment">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <ref name="mal_block_cite"/>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_figure">
  <element name="figure">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <optional>
      <ref name="mal_block_desc"/>
    </optional>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_listing">
  <element name="listing">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <optional>
      <ref name="mal_block_desc"/>
    </optional>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_note">
  <element name="note">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_synopsis">
  <element name="synopsis">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <optional>
      <ref name="mal_block_desc"/>
    </optional>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_list">
  <element name="list">
    <optional>
      <attribute name="type">
        <data type="NMTOKEN" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <oneOrMore>
      <ref name="mal_block_list_item"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_list_item">
  <element name="item">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_terms">
  <element name="terms">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <oneOrMore>
      <ref name="mal_block_terms_item"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_terms_item">
  <element name="item">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <oneOrMore>
      <ref name="mal_block_title"/>
    </oneOrMore>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_steps">
  <element name="steps">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <oneOrMore>
      <ref name="mal_block_steps_item"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_steps_item">
  <element name="item">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_tree">
  <element name="tree">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <oneOrMore>
      <ref name="mal_block_tree_item"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_block_tree_item">
  <element name="item">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
    <zeroOrMore>
      <ref name="mal_block_tree_item"/>
    </zeroOrMore>
  </element>
</define>

<define name="mal_table_col">
  <element name="col">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
  </element>
</define>

<define name="mal_table_colgroup">
  <element name="colgroup">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_table_col"/>
    </zeroOrMore>
  </element>
</define>

<define name="mal_table_tr">
  <element name="tr">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_table_td"/>
    </zeroOrMore>
  </element>
</define>

<define name="mal_table_thead">
  <element name="thead">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <oneOrMore>
      <ref name="mal_table_tr"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_table_tbody">
  <element name="tbody">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <oneOrMore>
      <ref name="mal_table_tr"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_table_tfoot">
  <element name="tfoot">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <oneOrMore>
      <ref name="mal_table_tr"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_table_td">
  <element name="td">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <optional>
      <attribute name="rowspan">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="colspan">
        <text/>
      </attribute>
    </optional>
    <oneOrMore>
      <ref name="mal_block"/>
    </oneOrMore>
  </element>
</define>

<define name="mal_table">
  <element name="table">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <optional>
      <attribute name="frame">
        <choice>
          <value>all</value>
          <value>none</value>
          <list>
            <zeroOrMore>
              <choice>
                <value>top</value>
                <value>bottom</value>
                <value>left</value>
                <value>right</value>
              </choice>
            </zeroOrMore>
          </list>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="rules">
        <choice>
          <value>all</value>
          <value>groups</value>
          <value>none</value>
          <list>
            <zeroOrMore>
              <choice>
                <value>rows</value>
                <value>rowgroups</value>
                <value>cols</value>
                <value>colgroups</value>
              </choice>
            </zeroOrMore>
          </list>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="shade">
        <choice>
          <value>all</value>
          <value>groups</value>
          <value>none</value>
          <list>
            <zeroOrMore>
              <choice>
                <value>rows</value>
                <value>rowgroups</value>
                <value>cols</value>
                <value>colgroups</value>
              </choice>
            </zeroOrMore>
          </list>
        </choice>
      </attribute>
    </optional>
    <optional>
      <ref name="mal_block_title"/>
    </optional>
    <optional>
      <ref name="mal_block_desc"/>
    </optional>
    <optional>
      <choice>
        <oneOrMore>
          <ref name="mal_table_col"/>
        </oneOrMore>
        <oneOrMore>
          <ref name="mal_table_colgroup"/>
        </oneOrMore>
      </choice>
    </optional>
    <choice>
      <oneOrMore>
        <ref name="mal_table_tr"/>
      </oneOrMore>
      <group>
        <optional>
          <ref name="mal_table_thead"/>
        </optional>
        <oneOrMore>
          <ref name="mal_table_tbody"/>
        </oneOrMore>
        <optional>
          <ref name="mal_table_tfoot"/>
        </optional>
      </group>
    </choice>
  </element>
</define>

<define name="mal_block_desc">
  <element name="desc">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_block_cite">
  <element name="cite">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <attribute>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <text/>
      </attribute>
    </zeroOrMore>
    <optional>
      <attribute name="date">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="href">
        <text/>
      </attribute>
    </optional>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_block_subtitle">
  <element name="subtitle">
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_block_title">
  <element name="title">
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline">
  <interleave>
    <zeroOrMore>
      <ref name="mal_inline_app"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_cmd"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_code"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_em"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_file"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_gui"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_guiseq"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_input"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_key"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_keyseq"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_link"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_media"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_output"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_span"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_sys"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_inline_var"/>
    </zeroOrMore>
    <zeroOrMore>
      <element>
        <anyName>
          <except>
            <nsName ns="http://projectmallard.org/1.0/"/>
            <nsName ns=""/>
          </except>
        </anyName>
        <ref name="mal_inline"/>
      </element>
    </zeroOrMore>
    <optional>
      <text/>
    </optional>
  </interleave>
</define>

<define name="mal_inline_app">
  <element name="app">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_code">
  <element name="code">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="mime">
        <text/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_cmd">
  <element name="cmd">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="mime">
        <text/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_output">
  <element name="output">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_em">
  <element name="em">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_file">
  <element name="file">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_gui">
  <element name="gui">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_guiseq">
  <element name="guiseq">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <mixed>
      <oneOrMore>
        <ref name="mal_inline_gui"/>
      </oneOrMore>
    </mixed>
  </element>
</define>

<define name="mal_inline_link">
  <element name="link">
    <choice>
      <attribute name="xref">
        <text/>
      </attribute>
      <attribute name="href">
        <text/>
      </attribute>
      <group>
        <attribute name="xref">
          <text/>
        </attribute>
        <attribute name="href">
          <text/>
        </attribute>
      </group>
    </choice>
    <optional>
      <attribute name="role">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_media">
  <element name="media">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="type">
        <choice>
          <value>image</value>
          <value>video</value>
          <value>audio</value>
          <value>application</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="mime">
        <text/>
      </attribute>
    </optional>
    <attribute name="src">
      <text/>
    </attribute>
    <optional>
      <attribute name="height">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <text/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_keyseq">
  <element name="keyseq">
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="type">
        <choice>
          <value>combo</value>
          <value>sequence</value>
        </choice>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <mixed>
      <zeroOrMore>
        <choice>
          <ref name="mal_inline_key"/>
          <ref name="mal_inline_keyseq"/>
        </choice>
      </zeroOrMore>
    </mixed>
  </element>
</define>

<define name="mal_inline_key">
  <element name="key">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_span">
  <element name="span">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_sys">
  <element name="sys">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_input">
  <element name="input">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_inline_var">
  <element name="var">
    <optional>
      <ref name="mal_attr_link"/>
    </optional>
    <optional>
      <attribute name="style">
        <data type="NMTOKENS" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <ref name="mal_attr_external"/>
    </zeroOrMore>
    <ref name="mal_inline"/>
  </element>
</define>

<define name="mal_external">
  <element>
    <anyName>
      <except>
        <nsName ns="http://projectmallard.org/1.0/"/>
        <nsName ns=""/>
      </except>
    </anyName>
    <zeroOrMore>
      <attribute>
        <anyName/>
        <text/>
      </attribute>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_anything"/>
    </zeroOrMore>
  </element>
</define>

<define name="mal_anything">
  <element>
    <anyName/>
    <zeroOrMore>
      <attribute>
        <anyName/>
        <text/>
      </attribute>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="mal_anything"/>
    </zeroOrMore>
  </element>
</define>

<define name="mal_attr_external">
  <attribute>
    <anyName>
      <except>
        <nsName ns="http://projectmallard.org/1.0/"/>
        <nsName ns=""/>
      </except>
    </anyName>
    <text/>
  </attribute>
</define>

<define name="mal_attr_link">
  <choice>
    <optional>
      <attribute name="xref">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="dref">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="href">
        <text/>
      </attribute>
    </optional>
  </choice>
</define>
</grammar>
