<?xml version="1.0" encoding="UTF-8"?>
<!--
  Extensible HTML version 1.0 Transitional DTD
  
  This is the same as HTML 4 Transitional except for
  changes due to the differences between XML and SGML.
  
  Namespace = http://www.w3.org/1999/xhtml
  
  For further information, see: http://www.w3.org/TR/xhtml1
  
  Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
  All Rights Reserved. 
  
  This DTD module is identified by the PUBLIC and SYSTEM identifiers:
  
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  
  $Revision: 1.1 $
  $Date: 2006/09/21 08:35:50 $
  
-->
<!-- ================ Character mnemonic entities ========================= -->
<!-- ================== Imported Names ==================================== -->
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" ns="http://www.w3.org/1999/xhtml" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <define name="ContentType">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- media type, as per [RFC2045] -->
  <define name="ContentTypes">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- comma-separated list of media types, as per [RFC2045] -->
  <define name="Charset">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- a character encoding, as per [RFC2045] -->
  <define name="Charsets">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- a space separated list of character encodings, as per [RFC2045] -->
  <define name="LanguageCode">
    <data type="NMTOKEN"/>
  </define>
  <!-- a language code, as per [RFC3066] -->
  <define name="Character">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- a single character, as per section 2.2 of [XML] -->
  <define name="Number">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- one or more digits -->
  <define name="LinkTypes">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- space-separated list of link types -->
  <define name="MediaDesc">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- single or comma-separated list of media descriptors -->
  <define name="URI">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- a Uniform Resource Identifier, see [RFC2396] -->
  <define name="UriList">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- a space separated list of Uniform Resource Identifiers -->
  <define name="Datetime">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- date and time information. ISO date format -->
  <define name="Script">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- script expression -->
  <define name="StyleSheet">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- style sheet data -->
  <define name="Text">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- used for titles etc. -->
  <define name="FrameTarget">
    <data type="NMTOKEN"/>
  </define>
  <!-- render in this frame -->
  <define name="Length">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- nn for pixels or nn% for percentage length -->
  <define name="MultiLength">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- pixel, percentage, or relative -->
  <define name="Pixels">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- integer representing length in pixels -->
  <!-- these are used for image maps -->
  <define name="Shape">
    <choice>
      <value>rect</value>
      <value>circle</value>
      <value>poly</value>
      <value>default</value>
    </choice>
  </define>
  <define name="Coords">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- comma separated list of lengths -->
  <!-- used for object, applet, img, input and iframe -->
  <define name="ImgAlign">
    <choice>
      <value>top</value>
      <value>middle</value>
      <value>bottom</value>
      <value>left</value>
      <value>right</value>
    </choice>
  </define>
  <!-- a color using sRGB: #RRGGBB as Hex values -->
  <define name="Color">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!--
    There are also 16 widely known color names with their sRGB values:
    
    Black  = #000000    Green  = #008000
    Silver = #C0C0C0    Lime   = #00FF00
    Gray   = #808080    Olive  = #808000
    White  = #FFFFFF    Yellow = #FFFF00
    Maroon = #800000    Navy   = #000080
    Red    = #FF0000    Blue   = #0000FF
    Purple = #800080    Teal   = #008080
    Fuchsia= #FF00FF    Aqua   = #00FFFF
  -->
  <!-- =================== Generic Attributes =============================== -->
  <!--
    core attributes common to most elements
    id       document-wide unique id
    class    space separated list of classes
    style    associated style info
    title    advisory title/amplification
  -->
  <define name="coreattrs">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="class"/>
    </optional>
    <optional>
      <attribute name="style">
        <ref name="StyleSheet"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="title">
        <ref name="Text"/>
      </attribute>
    </optional>
  </define>
  <!--
    internationalization attributes
    lang        language code (backwards compatible)
    xml:lang    language code (as per XML 1.0 spec)
    dir         direction for weak/neutral text
  -->
  <define name="i18n">
    <optional>
      <attribute name="lang">
        <ref name="LanguageCode"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:lang">
        <ref name="LanguageCode"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="dir">
        <choice>
          <value>ltr</value>
          <value>rtl</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!--
    attributes for common UI events
    onclick     a pointer button was clicked
    ondblclick  a pointer button was double clicked
    onmousedown a pointer button was pressed down
    onmouseup   a pointer button was released
    onmousemove a pointer was moved onto the element
    onmouseout  a pointer was moved away from the element
    onkeypress  a key was pressed and released
    onkeydown   a key was pressed down
    onkeyup     a key was released
  -->
  <define name="events">
    <optional>
      <attribute name="onclick">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="ondblclick">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onmousedown">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onmouseup">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onmouseover">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onmousemove">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onmouseout">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onkeypress">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onkeydown">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onkeyup">
        <ref name="Script"/>
      </attribute>
    </optional>
  </define>
  <!--
    attributes for elements that can get the focus
    accesskey   accessibility key character
    tabindex    position in tabbing order
    onfocus     the element got the focus
    onblur      the element lost the focus
  -->
  <define name="focus">
    <optional>
      <attribute name="accesskey">
        <ref name="Character"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="tabindex">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onfocus">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onblur">
        <ref name="Script"/>
      </attribute>
    </optional>
  </define>
  <define name="attrs">
    <ref name="coreattrs"/>
    <ref name="i18n"/>
    <ref name="events"/>
  </define>
  <!--
    text alignment for p, div, h1-h6. The default is
    align="left" for ltr headings, "right" for rtl
  -->
  <define name="TextAlign">
    <optional>
      <attribute name="align">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>justify</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!-- =================== Text Elements ==================================== -->
  <define name="special.extra">
    <choice>
      <ref name="object"/>
      <ref name="applet"/>
      <ref name="img"/>
      <ref name="map"/>
      <ref name="iframe"/>
    </choice>
  </define>
  <define name="special.basic">
    <choice>
      <ref name="br"/>
      <ref name="span"/>
      <ref name="bdo"/>
    </choice>
  </define>
  <define name="special">
    <choice>
      <ref name="special.basic"/>
      <ref name="special.extra"/>
    </choice>
  </define>
  <define name="fontstyle.extra">
    <choice>
      <ref name="big"/>
      <ref name="small"/>
      <ref name="font"/>
      <ref name="basefont"/>
    </choice>
  </define>
  <define name="fontstyle.basic">
    <choice>
      <ref name="tt"/>
      <ref name="i"/>
      <ref name="b"/>
      <ref name="u"/>
      <ref name="s"/>
      <ref name="strike"/>
    </choice>
  </define>
  <define name="fontstyle">
    <choice>
      <ref name="fontstyle.basic"/>
      <ref name="fontstyle.extra"/>
    </choice>
  </define>
  <define name="phrase.extra">
    <choice>
      <ref name="sub"/>
      <ref name="sup"/>
    </choice>
  </define>
  <define name="phrase.basic">
    <choice>
      <ref name="em"/>
      <ref name="strong"/>
      <ref name="dfn"/>
      <ref name="code"/>
      <ref name="q"/>
      <ref name="samp"/>
      <ref name="kbd"/>
      <ref name="var"/>
      <ref name="cite"/>
      <ref name="abbr"/>
      <ref name="acronym"/>
    </choice>
  </define>
  <define name="phrase">
    <choice>
      <ref name="phrase.basic"/>
      <ref name="phrase.extra"/>
    </choice>
  </define>
  <define name="inline.forms">
    <choice>
      <ref name="input"/>
      <ref name="select"/>
      <ref name="textarea"/>
      <ref name="label"/>
      <ref name="button"/>
    </choice>
  </define>
  <!-- these can occur at block or inline level -->
  <define name="misc.inline">
    <choice>
      <ref name="ins"/>
      <ref name="del"/>
      <ref name="script"/>
    </choice>
  </define>
  <!-- these can only occur at block level -->
  <define name="misc">
    <choice>
      <ref name="noscript"/>
      <ref name="misc.inline"/>
    </choice>
  </define>
  <define name="inline">
    <choice>
      <ref name="a"/>
      <ref name="special"/>
      <ref name="fontstyle"/>
      <ref name="phrase"/>
      <ref name="inline.forms"/>
    </choice>
  </define>
  <!-- %Inline; covers inline or "text-level" elements -->
  <define name="Inline">
    <zeroOrMore>
      <choice>
        <text/>
        <ref name="inline"/>
        <ref name="misc.inline"/>
      </choice>
    </zeroOrMore>
  </define>
  <!-- ================== Block level elements ============================== -->
  <define name="heading">
    <choice>
      <ref name="h1"/>
      <ref name="h2"/>
      <ref name="h3"/>
      <ref name="h4"/>
      <ref name="h5"/>
      <ref name="h6"/>
    </choice>
  </define>
  <define name="lists">
    <choice>
      <ref name="ul"/>
      <ref name="ol"/>
      <ref name="dl"/>
      <ref name="menu"/>
      <ref name="dir"/>
    </choice>
  </define>
  <define name="blocktext">
    <choice>
      <ref name="pre"/>
      <ref name="hr"/>
      <ref name="blockquote"/>
      <ref name="address"/>
      <ref name="center"/>
      <ref name="noframes"/>
    </choice>
  </define>
  <define name="block">
    <choice>
      <ref name="p"/>
      <ref name="heading"/>
      <ref name="div"/>
      <ref name="lists"/>
      <ref name="blocktext"/>
      <ref name="isindex"/>
      <ref name="fieldset"/>
      <ref name="table"/>
    </choice>
  </define>
  <!-- %Flow; mixes block and inline and is used for list items etc. -->
  <define name="Flow">
    <zeroOrMore>
      <choice>
        <text/>
        <ref name="block"/>
        <ref name="form"/>
        <ref name="inline"/>
        <ref name="misc"/>
      </choice>
    </zeroOrMore>
  </define>
  <!-- ================== Content models for exclusions ===================== -->
  <!-- a elements use %Inline; excluding a -->
  <define name="a.content">
    <zeroOrMore>
      <choice>
        <text/>
        <ref name="special"/>
        <ref name="fontstyle"/>
        <ref name="phrase"/>
        <ref name="inline.forms"/>
        <ref name="misc.inline"/>
      </choice>
    </zeroOrMore>
  </define>
  <!--
    pre uses %Inline excluding img, object, applet, big, small,
    font, or basefont
  -->
  <define name="pre.content">
    <zeroOrMore>
      <choice>
        <text/>
        <ref name="a"/>
        <ref name="special.basic"/>
        <ref name="fontstyle.basic"/>
        <ref name="phrase.basic"/>
        <ref name="inline.forms"/>
        <ref name="misc.inline"/>
      </choice>
    </zeroOrMore>
  </define>
  <!-- form uses %Flow; excluding form -->
  <define name="form.content">
    <zeroOrMore>
      <choice>
        <text/>
        <ref name="block"/>
        <ref name="inline"/>
        <ref name="misc"/>
      </choice>
    </zeroOrMore>
  </define>
  <!-- button uses %Flow; but excludes a, form, form controls, iframe -->
  <define name="button.content">
    <zeroOrMore>
      <choice>
        <text/>
        <ref name="p"/>
        <ref name="heading"/>
        <ref name="div"/>
        <ref name="lists"/>
        <ref name="blocktext"/>
        <ref name="table"/>
        <ref name="br"/>
        <ref name="span"/>
        <ref name="bdo"/>
        <ref name="object"/>
        <ref name="applet"/>
        <ref name="img"/>
        <ref name="map"/>
        <ref name="fontstyle"/>
        <ref name="phrase"/>
        <ref name="misc"/>
      </choice>
    </zeroOrMore>
  </define>
  <!-- ================ Document Structure ================================== -->
  <!-- the namespace URI designates the document profile -->
  <define name="html">
    <element name="html">
      <ref name="html.attlist"/>
      <ref name="head"/>
      <ref name="body"/>
    </element>
  </define>
  <define name="html.attlist" combine="interleave">
    <ref name="i18n"/>
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
  </define>
  <!-- ================ Document Head ======================================= -->
  <define name="head.misc">
    <zeroOrMore>
      <choice>
        <ref name="script"/>
        <ref name="style"/>
        <ref name="meta"/>
        <ref name="link"/>
        <ref name="object"/>
        <ref name="isindex"/>
      </choice>
    </zeroOrMore>
  </define>
  <!--
    content model is %head.misc; combined with a single
    title and an optional base element in any order
  -->
  <define name="head">
    <element name="head">
      <ref name="head.attlist"/>
      <ref name="head.misc"/>
      <choice>
        <group>
          <ref name="title"/>
          <ref name="head.misc"/>
          <optional>
            <ref name="base"/>
            <ref name="head.misc"/>
          </optional>
        </group>
        <group>
          <ref name="base"/>
          <ref name="head.misc"/>
          <group>
            <ref name="title"/>
            <ref name="head.misc"/>
          </group>
        </group>
      </choice>
    </element>
  </define>
  <define name="head.attlist" combine="interleave">
    <ref name="i18n"/>
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="profile">
        <ref name="URI"/>
      </attribute>
    </optional>
  </define>
  <!--
    The title element is not considered part of the flow of text.
    It should be displayed, for example as the page header or
    window title. Exactly one title is required per document.
  -->
  <define name="title">
    <element name="title">
      <ref name="title.attlist"/>
      <text/>
    </element>
  </define>
  <define name="title.attlist" combine="interleave">
    <ref name="i18n"/>
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
  </define>
  <!-- document base URI -->
  <define name="base">
    <element name="base">
      <ref name="base.attlist"/>
      <empty/>
    </element>
  </define>
  <define name="base.attlist" combine="interleave">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="href">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="target">
        <ref name="FrameTarget"/>
      </attribute>
    </optional>
  </define>
  <!-- generic metainformation -->
  <define name="meta">
    <element name="meta">
      <ref name="meta.attlist"/>
      <empty/>
    </element>
  </define>
  <define name="meta.attlist" combine="interleave">
    <ref name="i18n"/>
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="http-equiv"/>
    </optional>
    <optional>
      <attribute name="name"/>
    </optional>
    <attribute name="content"/>
    <optional>
      <attribute name="scheme"/>
    </optional>
  </define>
  <!--
    Relationship values can be used in principle:
    
     a) for document specific toolbars/menus when used
        with the link element in document head e.g.
          start, contents, previous, next, index, end, help
     b) to link to a separate style sheet (rel="stylesheet")
     c) to make a link to a script (rel="script")
     d) by stylesheets to control how collections of
        html nodes are rendered into printed documents
     e) to make a link to a printable version of this document
        e.g. a PostScript or PDF version (rel="alternate" media="print")
  -->
  <define name="link">
    <element name="link">
      <ref name="link.attlist"/>
      <empty/>
    </element>
  </define>
  <define name="link.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="charset">
        <ref name="Charset"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="href">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="hreflang">
        <ref name="LanguageCode"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="type">
        <ref name="ContentType"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rel">
        <ref name="LinkTypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rev">
        <ref name="LinkTypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="media">
        <ref name="MediaDesc"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="target">
        <ref name="FrameTarget"/>
      </attribute>
    </optional>
  </define>
  <!-- style info, which may include CDATA sections -->
  <define name="style">
    <element name="style">
      <ref name="style.attlist"/>
      <text/>
    </element>
  </define>
  <define name="style.attlist" combine="interleave">
    <ref name="i18n"/>
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <attribute name="type">
      <ref name="ContentType"/>
    </attribute>
    <optional>
      <attribute name="media">
        <ref name="MediaDesc"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="title">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:space" a:defaultValue="preserve">
        <value>preserve</value>
      </attribute>
    </optional>
  </define>
  <!-- script statements, which may include CDATA sections -->
  <define name="script">
    <element name="script">
      <ref name="script.attlist"/>
      <text/>
    </element>
  </define>
  <define name="script.attlist" combine="interleave">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="charset">
        <ref name="Charset"/>
      </attribute>
    </optional>
    <attribute name="type">
      <ref name="ContentType"/>
    </attribute>
    <optional>
      <attribute name="language"/>
    </optional>
    <optional>
      <attribute name="src">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="defer">
        <choice>
          <value>defer</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:space" a:defaultValue="preserve">
        <value>preserve</value>
      </attribute>
    </optional>
  </define>
  <!-- alternate content container for non script-based rendering -->
  <define name="noscript">
    <element name="noscript">
      <ref name="noscript.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="noscript.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- ======================= Frames ======================================= -->
  <!-- inline subwindow -->
  <define name="iframe">
    <element name="iframe">
      <ref name="iframe.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="iframe.attlist" combine="interleave">
    <ref name="coreattrs"/>
    <optional>
      <attribute name="longdesc">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="name">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="src">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="frameborder" a:defaultValue="1">
        <choice>
          <value>1</value>
          <value>0</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="marginwidth">
        <ref name="Pixels"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="marginheight">
        <ref name="Pixels"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="scrolling" a:defaultValue="auto">
        <choice>
          <value>yes</value>
          <value>no</value>
          <value>auto</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="align">
        <ref name="ImgAlign"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="Length"/>
      </attribute>
    </optional>
  </define>
  <!-- alternate content container for non frame-based rendering -->
  <define name="noframes">
    <element name="noframes">
      <ref name="noframes.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="noframes.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- =================== Document Body ==================================== -->
  <define name="body">
    <element name="body">
      <ref name="body.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="body.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="onload">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onunload">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="background">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="bgcolor">
        <ref name="Color"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="text">
        <ref name="Color"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="link">
        <ref name="Color"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="vlink">
        <ref name="Color"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="alink">
        <ref name="Color"/>
      </attribute>
    </optional>
  </define>
  <define name="div">
    <element name="div">
      <ref name="div.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <!-- generic language/style container -->
  <define name="div.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="TextAlign"/>
  </define>
  <!-- =================== Paragraphs ======================================= -->
  <define name="p">
    <element name="p">
      <ref name="p.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <define name="p.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="TextAlign"/>
  </define>
  <!-- =================== Headings ========================================= -->
  <!--
    There are six levels of headings from h1 (the most important)
    to h6 (the least important).
  -->
  <define name="h1">
    <element name="h1">
      <ref name="h1.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <define name="h1.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="TextAlign"/>
  </define>
  <define name="h2">
    <element name="h2">
      <ref name="h2.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <define name="h2.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="TextAlign"/>
  </define>
  <define name="h3">
    <element name="h3">
      <ref name="h3.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <define name="h3.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="TextAlign"/>
  </define>
  <define name="h4">
    <element name="h4">
      <ref name="h4.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <define name="h4.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="TextAlign"/>
  </define>
  <define name="h5">
    <element name="h5">
      <ref name="h5.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <define name="h5.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="TextAlign"/>
  </define>
  <define name="h6">
    <element name="h6">
      <ref name="h6.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <define name="h6.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="TextAlign"/>
  </define>
  <!-- =================== Lists ============================================ -->
  <!-- Unordered list bullet styles -->
  <define name="ULStyle">
    <choice>
      <value>disc</value>
      <value>square</value>
      <value>circle</value>
    </choice>
  </define>
  <!-- Unordered list -->
  <define name="ul">
    <element name="ul">
      <ref name="ul.attlist"/>
      <oneOrMore>
        <ref name="li"/>
      </oneOrMore>
    </element>
  </define>
  <define name="ul.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="type">
        <ref name="ULStyle"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="compact">
        <choice>
          <value>compact</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!--
    Ordered list numbering style
    
    1   arabic numbers      1, 2, 3, ...
    a   lower alpha         a, b, c, ...
    A   upper alpha         A, B, C, ...
    i   lower roman         i, ii, iii, ...
    I   upper roman         I, II, III, ...
    
    The style is applied to the sequence number which by default
    is reset to 1 for the first list item in an ordered list.
  -->
  <define name="OLStyle">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- Ordered (numbered) list -->
  <define name="ol">
    <element name="ol">
      <ref name="ol.attlist"/>
      <oneOrMore>
        <ref name="li"/>
      </oneOrMore>
    </element>
  </define>
  <define name="ol.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="type">
        <ref name="OLStyle"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="compact">
        <choice>
          <value>compact</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="start">
        <ref name="Number"/>
      </attribute>
    </optional>
  </define>
  <!-- single column list (DEPRECATED) -->
  <define name="menu">
    <element name="menu">
      <ref name="menu.attlist"/>
      <oneOrMore>
        <ref name="li"/>
      </oneOrMore>
    </element>
  </define>
  <define name="menu.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="compact">
        <choice>
          <value>compact</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!-- multiple column list (DEPRECATED) -->
  <define name="dir">
    <element name="dir">
      <ref name="dir.attlist"/>
      <oneOrMore>
        <ref name="li"/>
      </oneOrMore>
    </element>
  </define>
  <define name="dir.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="compact">
        <choice>
          <value>compact</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!-- LIStyle is constrained to: "(%ULStyle;|%OLStyle;)" -->
  <define name="LIStyle">
    <data type="string" datatypeLibrary=""/>
  </define>
  <!-- list item -->
  <define name="li">
    <element name="li">
      <ref name="li.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="li.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="type">
        <ref name="LIStyle"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="value">
        <ref name="Number"/>
      </attribute>
    </optional>
  </define>
  <!-- definition lists - dt for term, dd for its definition -->
  <define name="dl">
    <element name="dl">
      <ref name="dl.attlist"/>
      <oneOrMore>
        <choice>
          <ref name="dt"/>
          <ref name="dd"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="dl.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="compact">
        <choice>
          <value>compact</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="dt">
    <element name="dt">
      <ref name="dt.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <define name="dt.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="dd">
    <element name="dd">
      <ref name="dd.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="dd.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- =================== Address ========================================== -->
  <!-- information on author -->
  <define name="address">
    <element name="address">
      <ref name="address.attlist"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="inline"/>
          <ref name="misc.inline"/>
          <ref name="p"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="address.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- =================== Horizontal Rule ================================== -->
  <define name="hr">
    <element name="hr">
      <ref name="hr.attlist"/>
      <empty/>
    </element>
  </define>
  <define name="hr.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="align">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="noshade">
        <choice>
          <value>noshade</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="size">
        <ref name="Pixels"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="Length"/>
      </attribute>
    </optional>
  </define>
  <!-- =================== Preformatted Text ================================ -->
  <!--
    content is %Inline; excluding 
    "img|object|applet|big|small|sub|sup|font|basefont"
  -->
  <define name="pre">
    <element name="pre">
      <ref name="pre.attlist"/>
      <ref name="pre.content"/>
    </element>
  </define>
  <define name="pre.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="width">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:space" a:defaultValue="preserve">
        <value>preserve</value>
      </attribute>
    </optional>
  </define>
  <!-- =================== Block-like Quotes ================================ -->
  <define name="blockquote">
    <element name="blockquote">
      <ref name="blockquote.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="blockquote.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="cite">
        <ref name="URI"/>
      </attribute>
    </optional>
  </define>
  <!-- =================== Text alignment =================================== -->
  <!-- center content -->
  <define name="center">
    <element name="center">
      <ref name="center.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="center.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <!-- =================== Inserted/Deleted Text ============================ -->
  <!--
    ins/del are allowed in block and inline content, but its
    inappropriate to include block content within an ins element
    occurring in inline content.
  -->
  <define name="ins">
    <element name="ins">
      <ref name="ins.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="ins.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="cite">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="datetime">
        <ref name="Datetime"/>
      </attribute>
    </optional>
  </define>
  <define name="del">
    <element name="del">
      <ref name="del.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="del.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="cite">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="datetime">
        <ref name="Datetime"/>
      </attribute>
    </optional>
  </define>
  <!-- ================== The Anchor Element ================================ -->
  <!-- content is %Inline; except that anchors shouldn't be nested -->
  <define name="a">
    <element name="a">
      <ref name="a.attlist"/>
      <ref name="a.content"/>
    </element>
  </define>
  <define name="a.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="focus"/>
    <optional>
      <attribute name="charset">
        <ref name="Charset"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="type">
        <ref name="ContentType"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="name">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="href">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="hreflang">
        <ref name="LanguageCode"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rel">
        <ref name="LinkTypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rev">
        <ref name="LinkTypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="shape" a:defaultValue="rect">
        <ref name="Shape"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="coords">
        <ref name="Coords"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="target">
        <ref name="FrameTarget"/>
      </attribute>
    </optional>
  </define>
  <!-- ===================== Inline Elements ================================ -->
  <define name="span">
    <element name="span">
      <ref name="span.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- generic language/style container -->
  <define name="span.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="bdo">
    <element name="bdo">
      <ref name="bdo.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- I18N BiDi over-ride -->
  <define name="bdo.attlist" combine="interleave">
    <ref name="coreattrs"/>
    <ref name="events"/>
    <optional>
      <attribute name="lang">
        <ref name="LanguageCode"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:lang">
        <ref name="LanguageCode"/>
      </attribute>
    </optional>
    <attribute name="dir">
      <choice>
        <value>ltr</value>
        <value>rtl</value>
      </choice>
    </attribute>
  </define>
  <define name="br">
    <element name="br">
      <ref name="br.attlist"/>
      <empty/>
    </element>
  </define>
  <!-- forced line break -->
  <define name="br.attlist" combine="interleave">
    <ref name="coreattrs"/>
    <optional>
      <attribute name="clear" a:defaultValue="none">
        <choice>
          <value>left</value>
          <value>all</value>
          <value>right</value>
          <value>none</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="em">
    <element name="em">
      <ref name="em.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- emphasis -->
  <define name="em.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="strong">
    <element name="strong">
      <ref name="strong.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- strong emphasis -->
  <define name="strong.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="dfn">
    <element name="dfn">
      <ref name="dfn.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- definitional -->
  <define name="dfn.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="code">
    <element name="code">
      <ref name="code.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- program code -->
  <define name="code.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="samp">
    <element name="samp">
      <ref name="samp.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- sample -->
  <define name="samp.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="kbd">
    <element name="kbd">
      <ref name="kbd.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- something user would type -->
  <define name="kbd.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="var">
    <element name="var">
      <ref name="var.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- variable -->
  <define name="var.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="cite">
    <element name="cite">
      <ref name="cite.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- citation -->
  <define name="cite.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="abbr">
    <element name="abbr">
      <ref name="abbr.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- abbreviation -->
  <define name="abbr.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="acronym">
    <element name="acronym">
      <ref name="acronym.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- acronym -->
  <define name="acronym.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="q">
    <element name="q">
      <ref name="q.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- inlined quote -->
  <define name="q.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="cite">
        <ref name="URI"/>
      </attribute>
    </optional>
  </define>
  <define name="sub">
    <element name="sub">
      <ref name="sub.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- subscript -->
  <define name="sub.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="sup">
    <element name="sup">
      <ref name="sup.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- superscript -->
  <define name="sup.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="tt">
    <element name="tt">
      <ref name="tt.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- fixed pitch font -->
  <define name="tt.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="i">
    <element name="i">
      <ref name="i.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- italic font -->
  <define name="i.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="b">
    <element name="b">
      <ref name="b.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- bold font -->
  <define name="b.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="big">
    <element name="big">
      <ref name="big.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- bigger font -->
  <define name="big.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="small">
    <element name="small">
      <ref name="small.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- smaller font -->
  <define name="small.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="u">
    <element name="u">
      <ref name="u.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- underline -->
  <define name="u.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="s">
    <element name="s">
      <ref name="s.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- strike-through -->
  <define name="s.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="strike">
    <element name="strike">
      <ref name="strike.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- strike-through -->
  <define name="strike.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="basefont">
    <element name="basefont">
      <ref name="basefont.attlist"/>
      <empty/>
    </element>
  </define>
  <!-- base font size -->
  <define name="basefont.attlist" combine="interleave">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <attribute name="size"/>
    <optional>
      <attribute name="color">
        <ref name="Color"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="face"/>
    </optional>
  </define>
  <define name="font">
    <element name="font">
      <ref name="font.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- local change to font -->
  <define name="font.attlist" combine="interleave">
    <ref name="coreattrs"/>
    <ref name="i18n"/>
    <optional>
      <attribute name="size"/>
    </optional>
    <optional>
      <attribute name="color">
        <ref name="Color"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="face"/>
    </optional>
  </define>
  <!-- ==================== Object ====================================== -->
  <!--
    object is used to embed objects as part of HTML pages.
    param elements should precede other content. Parameters
    can also be expressed as attribute/value pairs on the
    object element itself when brevity is desired.
  -->
  <define name="object">
    <element name="object">
      <ref name="object.attlist"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="param"/>
          <ref name="block"/>
          <ref name="form"/>
          <ref name="inline"/>
          <ref name="misc"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="object.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="declare">
        <choice>
          <value>declare</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="classid">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="codebase">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="data">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="type">
        <ref name="ContentType"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="codetype">
        <ref name="ContentType"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="archive">
        <ref name="UriList"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="standby">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="usemap">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="name">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="tabindex">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="align">
        <ref name="ImgAlign"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="border">
        <ref name="Pixels"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="hspace">
        <ref name="Pixels"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="vspace">
        <ref name="Pixels"/>
      </attribute>
    </optional>
  </define>
  <!--
    param is used to supply a named property value.
    In XML it would seem natural to follow RDF and support an
    abbreviated syntax where the param elements are replaced
    by attribute value pairs on the object start tag.
  -->
  <define name="param">
    <element name="param">
      <ref name="param.attlist"/>
      <empty/>
    </element>
  </define>
  <define name="param.attlist" combine="interleave">
    <optional>
      <attribute name="id">
        <data type="ID"/>
      </attribute>
    </optional>
    <attribute name="name"/>
    <optional>
      <attribute name="value"/>
    </optional>
    <optional>
      <attribute name="valuetype" a:defaultValue="data">
        <choice>
          <value>data</value>
          <value>ref</value>
          <value>object</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="type">
        <ref name="ContentType"/>
      </attribute>
    </optional>
  </define>
  <!-- =================== Java applet ================================== -->
  <!--
    One of code or object attributes must be present.
    Place param elements before other content.
  -->
  <define name="applet">
    <element name="applet">
      <ref name="applet.attlist"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="param"/>
          <ref name="block"/>
          <ref name="form"/>
          <ref name="inline"/>
          <ref name="misc"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="applet.attlist" combine="interleave">
    <ref name="coreattrs"/>
    <optional>
      <attribute name="codebase">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="archive"/>
    </optional>
    <optional>
      <attribute name="code"/>
    </optional>
    <optional>
      <attribute name="object"/>
    </optional>
    <optional>
      <attribute name="alt">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="name">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <attribute name="width">
      <ref name="Length"/>
    </attribute>
    <attribute name="height">
      <ref name="Length"/>
    </attribute>
    <optional>
      <attribute name="align">
        <ref name="ImgAlign"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="hspace">
        <ref name="Pixels"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="vspace">
        <ref name="Pixels"/>
      </attribute>
    </optional>
  </define>
  <!-- =================== Images =========================================== -->
  <!--
    To avoid accessibility problems for people who aren't
    able to see the image, you should provide a text
    description using the alt and longdesc attributes.
    In addition, avoid the use of server-side image maps.
  -->
  <define name="img">
    <element name="img">
      <ref name="img.attlist"/>
      <empty/>
    </element>
  </define>
  <define name="img.attlist" combine="interleave">
    <ref name="attrs"/>
    <attribute name="src">
      <ref name="URI"/>
    </attribute>
    <attribute name="alt">
      <ref name="Text"/>
    </attribute>
    <optional>
      <attribute name="name">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="longdesc">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="usemap">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="ismap">
        <choice>
          <value>ismap</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="align">
        <ref name="ImgAlign"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="border">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="hspace">
        <ref name="Pixels"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="vspace">
        <ref name="Pixels"/>
      </attribute>
    </optional>
  </define>
  <!--
    usemap points to a map element which may be in this document
    or an external document, although the latter is not widely supported
  -->
  <!-- ================== Client-side image maps ============================ -->
  <!--
    These can be placed in the same document or grouped in a
    separate document although this isn't yet widely supported
  -->
  <define name="map">
    <element name="map">
      <ref name="map.attlist"/>
      <choice>
        <oneOrMore>
          <choice>
            <ref name="block"/>
            <ref name="form"/>
            <ref name="misc"/>
          </choice>
        </oneOrMore>
        <oneOrMore>
          <ref name="area"/>
        </oneOrMore>
      </choice>
    </element>
  </define>
  <define name="map.attlist" combine="interleave">
    <ref name="i18n"/>
    <ref name="events"/>
    <attribute name="id">
      <data type="ID"/>
    </attribute>
    <optional>
      <attribute name="class"/>
    </optional>
    <optional>
      <attribute name="style">
        <ref name="StyleSheet"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="title">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="name"/>
    </optional>
  </define>
  <define name="area">
    <element name="area">
      <ref name="area.attlist"/>
      <empty/>
    </element>
  </define>
  <define name="area.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="focus"/>
    <optional>
      <attribute name="shape" a:defaultValue="rect">
        <ref name="Shape"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="coords">
        <ref name="Coords"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="href">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="nohref">
        <choice>
          <value>nohref</value>
        </choice>
      </attribute>
    </optional>
    <attribute name="alt">
      <ref name="Text"/>
    </attribute>
    <optional>
      <attribute name="target">
        <ref name="FrameTarget"/>
      </attribute>
    </optional>
  </define>
  <!-- ================ Forms =============================================== -->
  <define name="form">
    <element name="form">
      <ref name="form.attlist"/>
      <ref name="form.content"/>
    </element>
  </define>
  <!-- forms shouldn't be nested -->
  <define name="form.attlist" combine="interleave">
    <ref name="attrs"/>
    <attribute name="action">
      <ref name="URI"/>
    </attribute>
    <optional>
      <attribute name="method" a:defaultValue="get">
        <choice>
          <value>get</value>
          <value>post</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="name">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="enctype" a:defaultValue="application/x-www-form-urlencoded">
        <ref name="ContentType"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onsubmit">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onreset">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="accept">
        <ref name="ContentTypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="accept-charset">
        <ref name="Charsets"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="target">
        <ref name="FrameTarget"/>
      </attribute>
    </optional>
  </define>
  <!--
    Each label must not contain more than ONE field
    Label elements shouldn't be nested.
  -->
  <define name="label">
    <element name="label">
      <ref name="label.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <define name="label.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="for">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="accesskey">
        <ref name="Character"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onfocus">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onblur">
        <ref name="Script"/>
      </attribute>
    </optional>
  </define>
  <define name="InputType">
    <choice>
      <value>text</value>
      <value>password</value>
      <value>checkbox</value>
      <value>radio</value>
      <value>submit</value>
      <value>reset</value>
      <value>file</value>
      <value>hidden</value>
      <value>image</value>
      <value>button</value>
    </choice>
  </define>
  <!-- the name attribute is required for all but submit & reset -->
  <define name="input">
    <element name="input">
      <ref name="input.attlist"/>
      <empty/>
    </element>
  </define>
  <!-- form control -->
  <define name="input.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="focus"/>
    <optional>
      <attribute name="type" a:defaultValue="text">
        <ref name="InputType"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="name"/>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
    <optional>
      <attribute name="checked">
        <choice>
          <value>checked</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>disabled</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="readonly">
        <choice>
          <value>readonly</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="size"/>
    </optional>
    <optional>
      <attribute name="maxlength">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="src">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="alt"/>
    </optional>
    <optional>
      <attribute name="usemap">
        <ref name="URI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onselect">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onchange">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="accept">
        <ref name="ContentTypes"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="align">
        <ref name="ImgAlign"/>
      </attribute>
    </optional>
  </define>
  <define name="select">
    <element name="select">
      <ref name="select.attlist"/>
      <oneOrMore>
        <choice>
          <ref name="optgroup"/>
          <ref name="option"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <!-- option selector -->
  <define name="select.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="name"/>
    </optional>
    <optional>
      <attribute name="size">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="multiple">
        <choice>
          <value>multiple</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>disabled</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="tabindex">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onfocus">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onblur">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onchange">
        <ref name="Script"/>
      </attribute>
    </optional>
  </define>
  <define name="optgroup">
    <element name="optgroup">
      <ref name="optgroup.attlist"/>
      <oneOrMore>
        <ref name="option"/>
      </oneOrMore>
    </element>
  </define>
  <!-- option group -->
  <define name="optgroup.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>disabled</value>
        </choice>
      </attribute>
    </optional>
    <attribute name="label">
      <ref name="Text"/>
    </attribute>
  </define>
  <define name="option">
    <element name="option">
      <ref name="option.attlist"/>
      <text/>
    </element>
  </define>
  <!-- selectable choice -->
  <define name="option.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="selected">
        <choice>
          <value>selected</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>disabled</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="label">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
  </define>
  <define name="textarea">
    <element name="textarea">
      <ref name="textarea.attlist"/>
      <text/>
    </element>
  </define>
  <!-- multi-line text field -->
  <define name="textarea.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="focus"/>
    <optional>
      <attribute name="name"/>
    </optional>
    <attribute name="rows">
      <ref name="Number"/>
    </attribute>
    <attribute name="cols">
      <ref name="Number"/>
    </attribute>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>disabled</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="readonly">
        <choice>
          <value>readonly</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="onselect">
        <ref name="Script"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="onchange">
        <ref name="Script"/>
      </attribute>
    </optional>
  </define>
  <!--
    The fieldset element is used to group form fields.
    Only one legend element should occur in the content
    and if present should only be preceded by whitespace.
  -->
  <define name="fieldset">
    <element name="fieldset">
      <ref name="fieldset.attlist"/>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="legend"/>
          <ref name="block"/>
          <ref name="form"/>
          <ref name="inline"/>
          <ref name="misc"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="fieldset.attlist" combine="interleave">
    <ref name="attrs"/>
  </define>
  <define name="LAlign">
    <choice>
      <value>top</value>
      <value>bottom</value>
      <value>left</value>
      <value>right</value>
    </choice>
  </define>
  <define name="legend">
    <element name="legend">
      <ref name="legend.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <!-- fieldset label -->
  <define name="legend.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="accesskey">
        <ref name="Character"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="align">
        <ref name="LAlign"/>
      </attribute>
    </optional>
  </define>
  <!-- Content is %Flow; excluding a, form, form controls, iframe -->
  <define name="button">
    <element name="button">
      <ref name="button.attlist"/>
      <ref name="button.content"/>
    </element>
  </define>
  <!-- push button -->
  <define name="button.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="focus"/>
    <optional>
      <attribute name="name"/>
    </optional>
    <optional>
      <attribute name="value"/>
    </optional>
    <optional>
      <attribute name="type" a:defaultValue="submit">
        <choice>
          <value>button</value>
          <value>submit</value>
          <value>reset</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="disabled">
        <choice>
          <value>disabled</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <!-- single-line text input control (DEPRECATED) -->
  <define name="isindex">
    <element name="isindex">
      <ref name="isindex.attlist"/>
      <empty/>
    </element>
  </define>
  <define name="isindex.attlist" combine="interleave">
    <ref name="coreattrs"/>
    <ref name="i18n"/>
    <optional>
      <attribute name="prompt">
        <ref name="Text"/>
      </attribute>
    </optional>
  </define>
  <!-- ======================= Tables ======================================= -->
  <!-- Derived from IETF HTML table standard, see [RFC1942] -->
  <!--
    The border attribute sets the thickness of the frame around the
    table. The default units are screen pixels.
    
    The frame attribute specifies which parts of the frame around
    the table should be rendered. The values are not the same as
    CALS to avoid a name clash with the valign attribute.
  -->
  <define name="TFrame">
    <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>
  </define>
  <!--
    The rules attribute defines which rules to draw between cells:
    
    If rules is absent then assume:
        "none" if border is absent or border="0" otherwise "all"
  -->
  <define name="TRules">
    <choice>
      <value>none</value>
      <value>groups</value>
      <value>rows</value>
      <value>cols</value>
      <value>all</value>
    </choice>
  </define>
  <!-- horizontal placement of table relative to document -->
  <define name="TAlign">
    <choice>
      <value>left</value>
      <value>center</value>
      <value>right</value>
    </choice>
  </define>
  <!--
    horizontal alignment attributes for cell contents
    
    char        alignment char, e.g. char=':'
    charoff     offset for alignment char
  -->
  <define name="cellhalign">
    <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">
        <ref name="Character"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="charoff">
        <ref name="Length"/>
      </attribute>
    </optional>
  </define>
  <!-- vertical alignment attributes for cell contents -->
  <define name="cellvalign">
    <optional>
      <attribute name="valign">
        <choice>
          <value>top</value>
          <value>middle</value>
          <value>bottom</value>
          <value>baseline</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="table">
    <element name="table">
      <ref name="table.attlist"/>
      <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>
      <choice>
        <oneOrMore>
          <ref name="tbody"/>
        </oneOrMore>
        <oneOrMore>
          <ref name="tr"/>
        </oneOrMore>
      </choice>
    </element>
  </define>
  <define name="caption">
    <element name="caption">
      <ref name="caption.attlist"/>
      <ref name="Inline"/>
    </element>
  </define>
  <define name="thead">
    <element name="thead">
      <ref name="thead.attlist"/>
      <oneOrMore>
        <ref name="tr"/>
      </oneOrMore>
    </element>
  </define>
  <define name="tfoot">
    <element name="tfoot">
      <ref name="tfoot.attlist"/>
      <oneOrMore>
        <ref name="tr"/>
      </oneOrMore>
    </element>
  </define>
  <define name="tbody">
    <element name="tbody">
      <ref name="tbody.attlist"/>
      <oneOrMore>
        <ref name="tr"/>
      </oneOrMore>
    </element>
  </define>
  <define name="colgroup">
    <element name="colgroup">
      <ref name="colgroup.attlist"/>
      <zeroOrMore>
        <ref name="col"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="col">
    <element name="col">
      <ref name="col.attlist"/>
      <empty/>
    </element>
  </define>
  <define name="tr">
    <element name="tr">
      <ref name="tr.attlist"/>
      <oneOrMore>
        <choice>
          <ref name="th"/>
          <ref name="td"/>
        </choice>
      </oneOrMore>
    </element>
  </define>
  <define name="th">
    <element name="th">
      <ref name="th.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="td">
    <element name="td">
      <ref name="td.attlist"/>
      <ref name="Flow"/>
    </element>
  </define>
  <define name="table.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="summary">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="border">
        <ref name="Pixels"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="frame">
        <ref name="TFrame"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rules">
        <ref name="TRules"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="cellspacing">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="cellpadding">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="align">
        <ref name="TAlign"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="bgcolor">
        <ref name="Color"/>
      </attribute>
    </optional>
  </define>
  <define name="CAlign">
    <choice>
      <value>top</value>
      <value>bottom</value>
      <value>left</value>
      <value>right</value>
    </choice>
  </define>
  <define name="caption.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="align">
        <ref name="CAlign"/>
      </attribute>
    </optional>
  </define>
  <!--
    colgroup groups a set of col elements. It allows you to group
    several semantically related columns together.
  -->
  <define name="colgroup.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="span" a:defaultValue="1">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="MultiLength"/>
      </attribute>
    </optional>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <!--
    col elements define the alignment properties for cells in
    one or more columns.
    
    The width attribute specifies the width of the columns, e.g.
    
        width=64        width in screen pixels
        width=0.5*      relative width of 0.5
    
    The span attribute causes the attributes of one
    col element to apply to more than one column.
  -->
  <define name="col.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="span" a:defaultValue="1">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="MultiLength"/>
      </attribute>
    </optional>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <!--
    Use thead to duplicate headers when breaking table
    across page boundaries, or for static headers when
    tbody sections are rendered in scrolling panel.
    
    Use tfoot to duplicate footers when breaking table
    across page boundaries, or for static footers when
    tbody sections are rendered in scrolling panel.
    
    Use multiple tbody sections when rules are needed
    between groups of table rows.
  -->
  <define name="thead.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <define name="tfoot.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <define name="tbody.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
  </define>
  <define name="tr.attlist" combine="interleave">
    <ref name="attrs"/>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
    <optional>
      <attribute name="bgcolor">
        <ref name="Color"/>
      </attribute>
    </optional>
  </define>
  <!-- Scope is simpler than headers attribute for common tables -->
  <define name="Scope">
    <choice>
      <value>row</value>
      <value>col</value>
      <value>rowgroup</value>
      <value>colgroup</value>
    </choice>
  </define>
  <!-- th is for headers, td for data and for cells acting as both -->
  <define name="th.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="abbr">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="axis"/>
    </optional>
    <optional>
      <attribute name="headers">
        <data type="IDREFS"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="scope">
        <ref name="Scope"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowspan" a:defaultValue="1">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="colspan" a:defaultValue="1">
        <ref name="Number"/>
      </attribute>
    </optional>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
    <optional>
      <attribute name="nowrap">
        <choice>
          <value>nowrap</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="bgcolor">
        <ref name="Color"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <ref name="Length"/>
      </attribute>
    </optional>
  </define>
  <define name="td.attlist" combine="interleave">
    <ref name="attrs"/>
    <optional>
      <attribute name="abbr">
        <ref name="Text"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="axis"/>
    </optional>
    <optional>
      <attribute name="headers">
        <data type="IDREFS"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="scope">
        <ref name="Scope"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowspan" a:defaultValue="1">
        <ref name="Number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="colspan" a:defaultValue="1">
        <ref name="Number"/>
      </attribute>
    </optional>
    <ref name="cellhalign"/>
    <ref name="cellvalign"/>
    <optional>
      <attribute name="nowrap">
        <choice>
          <value>nowrap</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="bgcolor">
        <ref name="Color"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="Length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <ref name="Length"/>
      </attribute>
    </optional>
  </define>
  <start>
    <choice>
      <ref name="html"/>
    </choice>
  </start>
</grammar>

