<?xml version="1.0" encoding="UTF-8"?>
<!--
  This file is part of DocBook V5.0
  
  Copyright 1992-2008 HaL Computer Systems, Inc.,
  O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
  Corporation, Norman Walsh, Sun Microsystems, Inc., and the
  Organization for the Advancement of Structured Information
  Standards (OASIS).
  
  Release: $Id: calstbl.rnc 8931 2010-10-20 13:29:20Z nwalsh $
  
  Permission to use, copy, modify and distribute the DocBook schema
  and its accompanying documentation for any purpose and without fee
  is hereby granted in perpetuity, provided that the above copyright
  notice and this paragraph appear in all copies. The copyright
  holders make no representation about the suitability of the schema
  for any purpose. It is provided "as is" without expressed or implied
  warranty.
  
  If you modify the DocBook schema in any way, label your schema as a
  variant of DocBook. See the reference documentation
  (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
  for more information.
  
  Please direct all questions, bug reports, or suggestions for changes
  to the docbook@lists.oasis-open.org mailing list. For more
  information, see http://www.oasis-open.org/docbook/.
  
  ======================================================================
-->
<grammar ns="http://docbook.org/ns/docbook" xmlns:db="http://docbook.org/ns/docbook" xmlns:s="http://purl.oclc.org/dsdl/schematron" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns:rng="http://relaxng.org/ns/structure/1.0" xmlns:ctrl="http://nwalsh.com/xmlns/schema-control/" xmlns:dbx="http://sourceforge.net/projects/docbook/defguide/schema/extra-markup" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <define name="db.table.choice" combine="choice">
    <ref name="db.cals.table"/>
  </define>
  <define name="db.informaltable.choice" combine="choice">
    <ref name="db.cals.informaltable"/>
  </define>
  <define name="db.char.attribute">
    <attribute name="char">
      <db:refpurpose>Specifies the alignment character when <db:tag class="attribute">align</db:tag>
 is set to <db:quote>char</db:quote>
.</db:refpurpose>
    </attribute>
  </define>
  <define name="db.charoff.attribute">
    <attribute name="charoff">
      <db:refpurpose>Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in <db:tag class="attribute">char</db:tag>
 when <db:tag class="attribute">align</db:tag>
 is set to <db:quote>char</db:quote>
.</db:refpurpose>
      <data type="decimal">
        <param name="minExclusive">0</param>
        <param name="maxExclusive">100</param>
      </data>
    </attribute>
  </define>
  <define name="db.frame.attribute">
    <attribute name="frame">
      <db:refpurpose>Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table.</db:refpurpose>
      <choice>
        <value>all</value>
        <a:documentation>Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders.</a:documentation>
        <value>bottom</value>
        <a:documentation>Frame only the bottom of the table.</a:documentation>
        <value>none</value>
        <a:documentation>Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well.</a:documentation>
        <value>sides</value>
        <a:documentation>Frame the left and right sides of the table.</a:documentation>
        <value>top</value>
        <a:documentation>Frame the top of the table.</a:documentation>
        <value>topbot</value>
        <a:documentation>Frame the top and bottom of the table.</a:documentation>
      </choice>
    </attribute>
  </define>
  <define name="db.colsep.attribute">
    <attribute name="colsep">
      <db:refpurpose>Specifies the presence or absence of the column separator</db:refpurpose>
      <dbx:description>
        <db:para>A rule will be drawn to the right of all cells for which<db:tag class="attribute">colsep</db:tag>
 has the value 1 (true). Note, however, that the rule to the right of the last column in the table is controlled by the <db:tag class="attribute">frame</db:tag>
 attribute, not <db:tag class="attribute">colsep</db:tag>
.</db:para>
      </dbx:description>
      <choice>
        <value>0</value>
        <a:documentation>No column separator rule.</a:documentation>
        <value>1</value>
        <a:documentation>Provide a column separator rule on the right</a:documentation>
      </choice>
    </attribute>
  </define>
  <define name="db.rowsep.attribute">
    <attribute name="rowsep">
      <db:refpurpose>Specifies the presence or absence of the row separator</db:refpurpose>
      <dbx:description>
        <db:para>A rule will be drawn below all cells for which<db:tag class="attribute">rowsep</db:tag>
 has the value 1 (true). Note, however, that the rule below the last row in the table is controlled by the <db:tag class="attribute">frame</db:tag>
 attribute, not <db:tag class="attribute">rowsep</db:tag>
.</db:para>
      </dbx:description>
      <choice>
        <value>0</value>
        <a:documentation>No row separator rule.</a:documentation>
        <value>1</value>
        <a:documentation>Provide a row separator rule below</a:documentation>
      </choice>
    </attribute>
  </define>
  <define name="db.orient.attribute">
    <attribute name="orient">
      <db:refpurpose>Specifies the orientation of the table</db:refpurpose>
      <choice>
        <value>land</value>
        <a:documentation>90 degrees counter-clockwise from the rest of the text flow.</a:documentation>
        <value>port</value>
        <a:documentation>The same orientation as the rest of the text flow.</a:documentation>
      </choice>
    </attribute>
  </define>
  <define name="db.tabstyle.attribute">
    <attribute name="tabstyle">
      <db:refpurpose>Specifies the table style</db:refpurpose>
      <dbx:description>
        <db:para>The <db:tag class="attribute">tabstyle</db:tag>
 attribute holds the name of a table style defined in a stylesheet that will be used to process this document.</db:para>
      </dbx:description>
    </attribute>
  </define>
  <define name="db.rowheader.attribute">
    <attribute name="rowheader">
      <db:refpurpose>Indicates whether or not the entries in the first column should be considered row headers</db:refpurpose>
      <choice>
        <value>firstcol</value>
        <a:documentation>Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers).</a:documentation>
        <value>norowheader</value>
        <a:documentation>Indicates that entries in the first column have no special significance with respect to column headers.</a:documentation>
      </choice>
    </attribute>
  </define>
  <define name="db.align.attribute">
    <attribute name="align">
      <db:refpurpose>Specifies the horizontal alignment of text in an entry.</db:refpurpose>
      <choice>
        <value>center</value>
        <a:documentation>Centered.</a:documentation>
        <value>char</value>
        <a:documentation>Aligned on a particular character.</a:documentation>
        <value>justify</value>
        <a:documentation>Left and right justified.</a:documentation>
        <value>left</value>
        <a:documentation>Left justified.</a:documentation>
        <value>right</value>
        <a:documentation>Right justified.</a:documentation>
      </choice>
    </attribute>
  </define>
  <define name="db.valign.attribute">
    <attribute name="valign">
      <db:refpurpose>Specifies the vertical alignment of text in an entry.</db:refpurpose>
      <choice>
        <value>bottom</value>
        <a:documentation>Aligned on the bottom of the entry.</a:documentation>
        <value>middle</value>
        <a:documentation>Aligned in the middle.</a:documentation>
        <value>top</value>
        <a:documentation>Aligned at the top of the entry.</a:documentation>
      </choice>
    </attribute>
  </define>
  <define name="db.specify-col-by-colname.attributes">
    <attribute name="colname">
      <db:refpurpose>Specifies a column specification by name.</db:refpurpose>
    </attribute>
  </define>
  <define name="db.specify-col-by-namest.attributes">
    <attribute name="namest">
      <db:refpurpose>Specifies a starting column by name.</db:refpurpose>
    </attribute>
  </define>
  <define name="db.specify-span-by-spanspec.attributes">
    <attribute name="spanname">
      <db:refpurpose>Specifies a span by name.</db:refpurpose>
    </attribute>
  </define>
  <define name="db.specify-span-directly.attributes">
    <interleave>
      <attribute name="namest">
        <db:refpurpose>Specifies a starting column by name.</db:refpurpose>
      </attribute>
      <attribute name="nameend">
        <db:refpurpose>Specifies an ending column by name.</db:refpurpose>
      </attribute>
    </interleave>
  </define>
  <define name="db.column-spec.attributes">
    <choice>
      <ref name="db.specify-col-by-colname.attributes"/>
      <ref name="db.specify-col-by-namest.attributes"/>
      <ref name="db.specify-span-by-spanspec.attributes"/>
      <ref name="db.specify-span-directly.attributes"/>
    </choice>
  </define>
  <define name="db.colname.attribute">
    <attribute name="colname">
      <db:refpurpose>Provides a name for a column specification.</db:refpurpose>
    </attribute>
  </define>
  <define name="db.spanname.attribute">
    <attribute name="spanname">
      <db:refpurpose>Provides a name for a span specification.</db:refpurpose>
    </attribute>
  </define>
  <!-- ====================================================================== -->
  <div>
    <db:refname>tgroup</db:refname>
    <db:refpurpose>A wrapper for the main content of a table, or part of a table</db:refpurpose>
    <define name="db.tgroup.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.tgroup.tgroupstyle.attribute">
      <attribute name="tgroupstyle">
        <db:refpurpose>Additional style information for downstream processing; typically the name of a style.</db:refpurpose>
      </attribute>
    </define>
    <define name="db.tgroup.cols.attribute">
      <attribute name="cols">
        <db:refpurpose>The number of columns in the table. Must be an integer greater than zero.</db:refpurpose>
        <data type="positiveInteger"/>
      </attribute>
    </define>
    <define name="db.tgroup.attlist">
      <interleave>
        <optional>
          <ref name="db.tgroup.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.char.attribute"/>
        </optional>
        <optional>
          <ref name="db.charoff.attribute"/>
        </optional>
        <optional>
          <ref name="db.tgroup.tgroupstyle.attribute"/>
        </optional>
        <ref name="db.tgroup.cols.attribute"/>
        <optional>
          <ref name="db.colsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.rowsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.align.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.tgroup">
      <element name="tgroup">
        <ref name="db.tgroup.attlist"/>
        <zeroOrMore>
          <ref name="db.colspec"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="db.spanspec"/>
        </zeroOrMore>
        <optional>
          <ref name="db.cals.thead"/>
        </optional>
        <optional>
          <ref name="db.cals.tfoot"/>
        </optional>
        <ref name="db.cals.tbody"/>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>colspec</db:refname>
    <db:refpurpose>Specifications for a column in a table</db:refpurpose>
    <define name="db.colspec.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.colspec.colnum.attribute">
      <attribute name="colnum">
        <db:refpurpose>The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one.</db:refpurpose>
        <data type="positiveInteger"/>
      </attribute>
    </define>
    <define name="db.colspec.colwidth.attribute">
      <attribute name="colwidth">
        <db:refpurpose>Specifies the width of the column.</db:refpurpose>
      </attribute>
    </define>
    <define name="db.colspec.attlist">
      <interleave>
        <optional>
          <ref name="db.colspec.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.colspec.colnum.attribute"/>
        </optional>
        <optional>
          <ref name="db.char.attribute"/>
        </optional>
        <optional>
          <ref name="db.colsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.colspec.colwidth.attribute"/>
        </optional>
        <optional>
          <ref name="db.charoff.attribute"/>
        </optional>
        <optional>
          <ref name="db.colname.attribute"/>
        </optional>
        <optional>
          <ref name="db.rowsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.align.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.colspec">
      <element name="colspec">
        <ref name="db.colspec.attlist"/>
        <empty/>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>spanspec</db:refname>
    <db:refpurpose>Formatting information for a spanned column in a table</db:refpurpose>
    <define name="db.spanspec.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.spanspec.namest.attribute">
      <attribute name="namest">
        <db:refpurpose>Specifies a starting column by name.</db:refpurpose>
      </attribute>
    </define>
    <define name="db.spanspec.nameend.attribute">
      <attribute name="nameend">
        <db:refpurpose>Specifies an ending column by name.</db:refpurpose>
      </attribute>
    </define>
    <define name="db.spanspec.attlist">
      <interleave>
        <optional>
          <ref name="db.spanspec.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <ref name="db.spanname.attribute"/>
        <ref name="db.spanspec.namest.attribute"/>
        <ref name="db.spanspec.nameend.attribute"/>
        <optional>
          <ref name="db.char.attribute"/>
        </optional>
        <optional>
          <ref name="db.colsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.charoff.attribute"/>
        </optional>
        <optional>
          <ref name="db.rowsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.align.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.spanspec">
      <element name="spanspec">
        <ref name="db.spanspec.attlist"/>
        <empty/>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>thead</db:refname>
    <db:refpurpose>A table header consisting of one or more rows</db:refpurpose>
    <define name="db.cals.thead.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.cals.thead.attlist">
      <interleave>
        <optional>
          <ref name="db.cals.thead.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.valign.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.cals.thead">
      <element name="thead">
        <ref name="db.cals.thead.attlist"/>
        <zeroOrMore>
          <ref name="db.colspec"/>
        </zeroOrMore>
        <oneOrMore>
          <ref name="db.row"/>
        </oneOrMore>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>tfoot</db:refname>
    <db:refpurpose>A table footer consisting of one or more rows</db:refpurpose>
    <define name="db.cals.tfoot.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.cals.tfoot.attlist">
      <interleave>
        <optional>
          <ref name="db.cals.tfoot.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.valign.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.cals.tfoot">
      <element name="tfoot">
        <ref name="db.cals.tfoot.attlist"/>
        <zeroOrMore>
          <ref name="db.colspec"/>
        </zeroOrMore>
        <oneOrMore>
          <ref name="db.row"/>
        </oneOrMore>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>tbody</db:refname>
    <db:refpurpose>A wrapper for the rows of a table or informal table</db:refpurpose>
    <define name="db.cals.tbody.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.cals.tbody.attlist">
      <interleave>
        <optional>
          <ref name="db.cals.tbody.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.valign.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.cals.tbody">
      <element name="tbody">
        <ref name="db.cals.tbody.attlist"/>
        <oneOrMore>
          <ref name="db.row"/>
        </oneOrMore>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>row</db:refname>
    <db:refpurpose>A row in a table</db:refpurpose>
    <define name="db.row.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.row.attlist">
      <interleave>
        <optional>
          <ref name="db.row.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.rowsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.valign.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.row">
      <element name="row">
        <ref name="db.row.attlist"/>
        <oneOrMore>
          <choice>
            <ref name="db.entry"/>
            <ref name="db.entrytbl"/>
          </choice>
        </oneOrMore>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>entry</db:refname>
    <db:refpurpose>A cell in a table</db:refpurpose>
    <ctrl:exclude from="db.entry" exclude="db.cals.table"/>
    <ctrl:exclude from="db.entry" exclude="db.cals.informaltable"/>
    <define name="db.entry.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.entry.morerows.attribute">
      <attribute name="morerows">
        <db:refpurpose>Specifies the number of additional rows which this entry occupies. Defaults to zero.</db:refpurpose>
        <data type="integer"/>
      </attribute>
    </define>
    <define name="db.entry.rotate.attribute">
      <attribute name="rotate">
        <db:refpurpose>Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated.</db:refpurpose>
        <choice>
          <value>0</value>
          <a:documentation>Do not rotate the cell.</a:documentation>
          <value>1</value>
          <a:documentation>Rotate the cell 90 degrees counter-clockwise.</a:documentation>
        </choice>
      </attribute>
    </define>
    <define name="db.entry.attlist">
      <interleave>
        <optional>
          <ref name="db.entry.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.valign.attribute"/>
        </optional>
        <optional>
          <ref name="db.char.attribute"/>
        </optional>
        <optional>
          <ref name="db.colsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.charoff.attribute"/>
        </optional>
        <optional>
          <ref name="db.entry.morerows.attribute"/>
        </optional>
        <optional>
          <ref name="db.column-spec.attributes"/>
        </optional>
        <optional>
          <ref name="db.rowsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.entry.rotate.attribute"/>
        </optional>
        <optional>
          <ref name="db.align.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.entry">
      <element name="entry">
        <ref name="db.entry.attlist"/>
        <choice>
          <zeroOrMore>
            <ref name="db.all.inlines"/>
          </zeroOrMore>
          <zeroOrMore>
            <ref name="db.all.blocks"/>
          </zeroOrMore>
        </choice>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>entrytbl</db:refname>
    <db:refpurpose>A subtable appearing in place of an entry in a table</db:refpurpose>
    <define name="db.entrytbl.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.entrytbl.tgroupstyle.attribute">
      <attribute name="tgroupstyle">
        <db:refpurpose>Additional style information for downstream processing; typically the name of a style.</db:refpurpose>
      </attribute>
    </define>
    <define name="db.entrytbl.cols.attribute">
      <attribute name="cols">
        <db:refpurpose>The number of columns in the entry table. Must be an integer greater than zero.</db:refpurpose>
        <data type="positiveInteger"/>
      </attribute>
    </define>
    <define name="db.entrytbl.attlist">
      <interleave>
        <optional>
          <ref name="db.entrytbl.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.char.attribute"/>
        </optional>
        <optional>
          <ref name="db.charoff.attribute"/>
        </optional>
        <optional>
          <ref name="db.column-spec.attributes"/>
        </optional>
        <optional>
          <ref name="db.entrytbl.tgroupstyle.attribute"/>
        </optional>
        <optional>
          <ref name="db.entrytbl.cols.attribute"/>
        </optional>
        <optional>
          <ref name="db.colsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.rowsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.align.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.entrytbl">
      <element name="entrytbl">
        <ref name="db.entrytbl.attlist"/>
        <zeroOrMore>
          <ref name="db.colspec"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="db.spanspec"/>
        </zeroOrMore>
        <optional>
          <ref name="db.cals.entrytbl.thead"/>
        </optional>
        <ref name="db.cals.entrytbl.tbody"/>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>thead</db:refname>
    <db:refpurpose>A table header consisting of one or more rows</db:refpurpose>
    <define name="db.cals.entrytbl.thead.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.cals.entrytbl.thead.attlist">
      <interleave>
        <optional>
          <ref name="db.cals.entrytbl.thead.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.valign.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.cals.entrytbl.thead">
      <element name="thead">
        <ref name="db.cals.entrytbl.thead.attlist"/>
        <zeroOrMore>
          <ref name="db.colspec"/>
        </zeroOrMore>
        <oneOrMore>
          <ref name="db.entrytbl.row"/>
        </oneOrMore>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>tbody</db:refname>
    <db:refpurpose>A wrapper for the rows of a table or informal table</db:refpurpose>
    <define name="db.cals.entrytbl.tbody.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.cals.entrytbl.tbody.attlist">
      <interleave>
        <optional>
          <ref name="db.cals.entrytbl.tbody.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.valign.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.cals.entrytbl.tbody">
      <element name="tbody">
        <ref name="db.cals.entrytbl.tbody.attlist"/>
        <oneOrMore>
          <ref name="db.entrytbl.row"/>
        </oneOrMore>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>row</db:refname>
    <db:refpurpose>A row in a table</db:refpurpose>
    <define name="db.entrytbl.row.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.entrytbl.row.attlist">
      <interleave>
        <optional>
          <ref name="db.entrytbl.row.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.rowsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.valign.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.entrytbl.row">
      <element name="row">
        <ref name="db.entrytbl.row.attlist"/>
        <oneOrMore>
          <ref name="db.entry"/>
        </oneOrMore>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>table</db:refname>
    <db:refpurpose>A formal table in a document</db:refpurpose>
    <define name="db.cals.table.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.cals.table.label.attribute">
      <ref name="db.label.attribute"/>
    </define>
    <define name="db.cals.table.attlist">
      <interleave>
        <optional>
          <ref name="db.cals.table.role.attribute"/>
        </optional>
        <optional>
          <ref name="db.cals.table.label.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.tabstyle.attribute"/>
        </optional>
        <optional>
          <ref name="db.floatstyle.attribute"/>
        </optional>
        <optional>
          <ref name="db.orient.attribute"/>
        </optional>
        <optional>
          <ref name="db.colsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.rowsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.frame.attribute"/>
        </optional>
        <optional>
          <ref name="db.pgwide.attribute"/>
        </optional>
        <optional>
          <attribute name="shortentry">
            <db:refpurpose>Indicates if the short or long title should be used in a List of Tables</db:refpurpose>
            <choice>
              <value>0</value>
              <a:documentation>Indicates that the full title should be used.</a:documentation>
              <value>1</value>
              <a:documentation>Indicates that the short short title (titleabbrev) should be used.</a:documentation>
            </choice>
          </attribute>
        </optional>
        <optional>
          <attribute name="tocentry">
            <db:refpurpose>Indicates if the table should appear in a List of Tables</db:refpurpose>
            <choice>
              <value>0</value>
              <a:documentation>Indicates that the table should not occur in the List of Tables.</a:documentation>
              <value>1</value>
              <a:documentation>Indicates that the table should appear in the List of Tables.</a:documentation>
            </choice>
          </attribute>
        </optional>
        <optional>
          <ref name="db.rowheader.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.cals.table.info">
      <ref name="db._info.title.onlyreq"/>
    </define>
    <define name="db.cals.table">
      <element name="table">
        <ref name="db.cals.table.attlist"/>
        <ref name="db.cals.table.info"/>
        <interleave>
          <optional>
            <ref name="db.alt"/>
          </optional>
          <zeroOrMore>
            <ref name="db.indexing.inlines"/>
          </zeroOrMore>
          <zeroOrMore>
            <ref name="db.textobject"/>
          </zeroOrMore>
        </interleave>
        <choice>
          <oneOrMore>
            <ref name="db.mediaobject"/>
          </oneOrMore>
          <oneOrMore>
            <ref name="db.tgroup"/>
          </oneOrMore>
        </choice>
        <optional>
          <ref name="db.caption"/>
        </optional>
      </element>
    </define>
  </div>
  <!-- ====================================================================== -->
  <div>
    <db:refname>informaltable</db:refname>
    <db:refpurpose>A table without a title</db:refpurpose>
    <define name="db.cals.informaltable.role.attribute">
      <attribute name="role"/>
    </define>
    <define name="db.cals.informaltable.attlist">
      <interleave>
        <optional>
          <ref name="db.cals.informaltable.role.attribute"/>
        </optional>
        <ref name="db.common.attributes"/>
        <ref name="db.common.linking.attributes"/>
        <optional>
          <ref name="db.tabstyle.attribute"/>
        </optional>
        <optional>
          <ref name="db.floatstyle.attribute"/>
        </optional>
        <optional>
          <ref name="db.orient.attribute"/>
        </optional>
        <optional>
          <ref name="db.colsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.rowsep.attribute"/>
        </optional>
        <optional>
          <ref name="db.frame.attribute"/>
        </optional>
        <optional>
          <ref name="db.pgwide.attribute"/>
        </optional>
        <optional>
          <ref name="db.rowheader.attribute"/>
        </optional>
      </interleave>
    </define>
    <define name="db.cals.informaltable.info">
      <ref name="db._info.title.forbidden"/>
    </define>
    <define name="db.cals.informaltable">
      <element name="informaltable">
        <ref name="db.cals.informaltable.attlist"/>
        <ref name="db.cals.informaltable.info"/>
        <interleave>
          <optional>
            <ref name="db.alt"/>
          </optional>
          <zeroOrMore>
            <ref name="db.indexing.inlines"/>
          </zeroOrMore>
          <zeroOrMore>
            <ref name="db.textobject"/>
          </zeroOrMore>
        </interleave>
        <choice>
          <oneOrMore>
            <ref name="db.mediaobject"/>
          </oneOrMore>
          <oneOrMore>
            <ref name="db.tgroup"/>
          </oneOrMore>
        </choice>
        <optional>
          <ref name="db.caption"/>
        </optional>
      </element>
    </define>
  </div>
</grammar>
