<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE article
  PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<article>
<articleinfo>
<releaseinfo>$Id: 9503.xml,v 1.3 2000/10/30 17:27:28 ndw Exp $</releaseinfo>
<title>Exchange table model Document Type Definition</title>
<subtitle>SGML Open Technical Resolution TR 9503:1995</subtitle>
<author>
  <firstname>Harvey</firstname>
  <surname>Bingham</surname>
  <affiliation>
    <shortaffil>Interleaf</shortaffil>
    <jobtitle>Chair, Table Interchange Subcommittee</jobtitle>
    <orgname>SGML Open</orgname>
  </affiliation>
</author>
<pubdate>1996 May 8</pubdate>
<copyright><year>1995</year><year>1996</year><holder>OASIS</holder></copyright>
<legalnotice>
<para>Permission to reproduce parts or all of this information in any form
is granted to OASIS members provided that this information by itself is not
sold for profit and that OASIS is credited as the author of this information.
</para></legalnotice>
<abstract>
<para>This SGML Open Technical Resolution defines an Exchange subset of the full
CALS table model DTD described in SGML Open Technical Memorandum TM 9502:1995.
This Exchange subset has been chosen as being a useful subset of the complete
CALS table model such that, if an application's tables are tagged according
to this subset, there is a high probability that the table will be interoperable
among the great majority of SGML Open vendor products. See also the SGML Open
Technical Research Paper TRP 9501:1995 on Table Interoperability: Issues for
the CALS table model.</para>
<para>Note that the set of element and attribute declarations in the markup declaration
module section of this document partially defines the Exchange table model.
However, the model is not well-defined without the accompanying natural language
description of the semantics (meanings) of these various elements, attributes,
and attribute values. The semantic writeup, in the section following that
containing the markup declaration module, must be used in conjunction with
the element and attribute declarations.</para>
</abstract>

<revhistory>
<revision>
  <revnumber>Committee Draft</revnumber>
  <date>1995 November 21</date>
</revision>
<revision>
  <revnumber>Final Draft Technical Resolution</revnumber>
  <date>1996 January 12</date>
</revision>
<revision>
  <revnumber>Final Technical Resolution</revnumber>
  <date>1996 May 8</date>
</revision>
</revhistory>
</articleinfo>

<section>
<title>Introduction</title>
<para>This SGML Open Technical Resolution defines an Exchange subset of the full
CALS table model DTD described in SGML Open Technical Memorandum TM 9502:1995.
This Exchange subset has been chosen as being a useful subset of the complete
CALS table model such that, if an application's tables are tagged according
to this subset, there is a high probability that the table will be interoperable
among the great majority of SGML Open vendor products. See also the SGML Open
Technical Research Paper TRP 9501:1995 on Table Interoperability.</para>
<para>Specific changes of substance between this Exchange Model and the CALS
table model contained in the Example DTD published in MIL-HDBK-28001 (30 June
95) include:<orderedlist>
<listitem><para>allow content model for table to include title on the graphic+ form
of table content when there are no tgroups;</para></listitem>
<listitem><para>change most explicit attribute defaults from value to #IMPLIED to
allow value inheritance, possibly from a style sheet;</para></listitem>
<listitem><para>eliminate &lt;entrytbl&gt;;</para></listitem>
<listitem><para>eliminate &lt;tfoot&gt;;</para></listitem>
<listitem><para>eliminate &lt;spanspec&gt;;</para></listitem>
<listitem><para>eliminate the char and charoff attributes from &lt;tgroup&gt;;</para></listitem>
<listitem><para>eliminate the rotate attribute from &lt;entry&gt;;</para></listitem>
<listitem><para>eliminate references to security attributes.</para></listitem>
</orderedlist>Finally, this declaration set is assigned a Formal Public Identifier.
</para>
<para>Note that the set of element and attribute declarations in the next section
of this document partially defines the Exchange table model. However, the
model is not well-defined without the accompanying natural language description
of the semantics (meanings) of these various elements, attributes, and attribute
values. The semantic writeup, in the section following that containing the
markup declaration module, must be used in conjunction with the element and
attribute declarations.</para>
<para>The following markup declaration module defines parameter entities for
various parts of the model. This organization provides for more flexibility
in using this module in different circumstances. However, it must be realized
that overriding declarations of these parameter entities that enlarge the
model (i.e., that define a superset of the model or a different model) may
reduce practical interoperability. It is therefore recommended that the parameter
entities be used primarily to define a subset of the default model. Any parameter
entity redefinition other than to define a more constrained model than the
default model must be done carefully with the knowledge of ones target toolset's
capabilities and with the realization that interoperability may be reduced.
The portion of the model where constraining changes only are reasonable  is
its geometric aspects, including some table attributes, and the  elements
and attributes of the table structure: tgroup through row and some entry attributes.
 The table content model and its exceptions other than table self-exclusion
and the entry content model and its exceptions are candidates for change.
</para>
</section><section>
<title>Exchange Table model DTD module</title>
<programlisting>&lt;!-- EXCHANGE TABLE MODEL DECLARATION MODULE --&gt;

&lt;!-- This set of declarations defines the Exchange Table Model as of the
     date shown in the Formal Public Identifier (FPI) for this entity.

     This set of declarations may be referred to using a public external
     entity declaration and reference as shown in the following two lines:

&lt;!ENTITY % calstbls PUBLIC "-//SGML Open//DTD Exchange Table Model 19960430//EN"&gt;
%calstbls;

     If various parameter entities used within this set of declarations
     are to be given non-default values, the appropriate declarations
     should be given before calling in this package (i.e., before the
     "%calstbls;" reference).

     NOTE:  This set of declarations assumes a NAMELEN of 32 as is used in
     the standard CALS defined SGML declaration.
--&gt;

&lt;!-- This entity includes a set of element and attribute declarations
     that partially defines the Exchange table model.  However, the model
     is not well-defined without the accompanying natural language
     description of the semantics (meanings) of these various elements,
     attributes, and attribute values.  The semantic writeup, also available
     from SGML Open, should be used in conjunction with this entity.
--&gt;

&lt;!-- In order to use the Exchange table model, various parameter entity
     declarations are required.  A brief description is as follows:

     ENTITY NAME      WHERE USED              WHAT IT IS

     %bodyatt         In ATTLIST of:          Additional (non-table related)
                      table element(s)        attributes on the overall
                                              (wrapper) table element(s)

     %yesorno         In ATTLIST of:          An attribute declared value
                      almost all elements     for a "boolean" attribute

     %titles          In content model of:    The "title" part of the model
                      table element(s)        group for the table element(s)

     %paracon         In content model of:    The "text" (logical content)
                      &lt;entry&gt;                 of the model group for &lt;entry&gt;

     %tbl.table.name  In declaration of:      The name(s) of the "table"
                      table element(s)        element(s)

     %tbl.table-titles.mdl In content model of: The model group for the title
                      table elements(s)       part of the content model for 
                                              table element(s)

     %tbl.table-main.mdl In content model of: The model group for the main part
                      table elements(s)       (not including titles) of the
                                              content model for table element(s)

     %tbl.table.mdl   In content model of:    The model group for the content
                      table elements(s)       model for table element(s),
                                              often (and by default) defined
                                              in terms of %tbl.table-titles.mdl
                                              and %tbl.table-main.mdl

     %tbl.table.excep In content model of:    The exceptions for the content
                      table element(s)        model for table element(s)

     %tbl.table.att   In ATTLIST of:          Additional attributes on the
                      table element(s)        table element(s)

     %tbl.tgroup.mdl  In content model of:    The model group for the content
                      &lt;tgroup&gt;                model for &lt;tgroup&gt;

     %tbl.tgroup.att  In ATTLIST of:          Additional attributes on the
                      &lt;tgroup&gt;                &lt;tgroup&gt; element

     %tbl.tbody.att   In ATTLIST of:          Additional attributes on the
                      &lt;tbody&gt;                 &lt;tbody&gt; element

     %tbl.colspec.att In ATTLIST of:          Additional attributes on the
                      &lt;colspec/&gt;               &lt;colspec/&gt; element

     %tbl.hdft.name   In declaration of:      The name(s) of the table
                      head/foot element(s)    head and foot element(s)

     %tbl.hdft.mdl    In content model of:    The model group for the content
                      head/foot element(s)    model for head/foot element(s)

     %tbl.hdft.excep  In content model of:    The exceptions for the content
                      head/foot element(s)    model for head/foot element(s)

     %tbl.hdft.att    In ATTLIST of:          Additional attributes on the
                      head/foot element(s)    head/foot element(s)


     %tbl.row.mdl     In content model of:    The model group for the content
                      &lt;row&gt;                   model for &lt;row&gt;

     %tbl.row.excep   In content model of:    The exceptions for the content
                      &lt;row&gt;                   model for &lt;row&gt;

     %tbl.row.att     In ATTLIST of:          Additional attributes on the
                      &lt;row&gt;                   &lt;row&gt; element

     %tbl.entry.mdl   In content model of:    The model group for the content
                      &lt;entry&gt;                 model for &lt;entry&gt;

     %tbl.entry.excep In content model of:    The exceptions for the content
                      &lt;entry&gt;                 model for &lt;entry&gt;

     %tbl.entry.att   In ATTLIST of:          Additional attributes on the
                      &lt;entry&gt;                 &lt;entry&gt; element

     This set of declarations will use the default definitions shown below
     for any of these parameter entities that are not declared before this 
     set of declarations is referenced.
--&gt;

&lt;!-- These definitions are not directly related to the table model, but are 
     used in the default CALS table model and may be defined elsewhere (and 
     prior to the inclusion of this table module) in the referencing DTD. --&gt;

&lt;!ENTITY % bodyatt ""&gt;
&lt;!ENTITY % yesorno 'NUMBER'  -- no if zero(s),
                                yes if any other digits value --&gt;
&lt;!ENTITY % titles  'title?'&gt;
&lt;!ENTITY % paracon '#PCDATA' -- default for use in entry content --&gt;

&lt;!--
The parameter entities as defined below change and simplify the CALS table 
model as published (as part of the Example DTD) in MIL-HDBK-28001.  The
resulting simplified DTD has support from the SGML Open vendors and is
therefore more interoperable among different systems.

These following declarations provide the Exchange default definitions
for these entities.  However, these entities can be redefined (by giving 
the appropriate parameter entity declaration(s) prior to the reference 
to this Table Model declaration set entity) to fit the needs of the 
current application.

Note, however, that changes may have significant effect on the ability to
interchange table information.  These changes may manifest themselves
in useability, presentation, and possible structure information degradation.
--&gt;

&lt;!ENTITY % tbl.table.name       "table"&gt;
&lt;!ENTITY % tbl.table-titles.mdl "%titles;,"&gt;
&lt;!ENTITY % tbl.table-main.mdl   "tgroup+"&gt;
&lt;!ENTITY % tbl.table.mdl        "%tbl.table-titles.mdl; %tbl.table-main.mdl;"&gt;
&lt;!ENTITY % tbl.table.excep      "-(%tbl.table.name)"&gt;
&lt;!ENTITY % tbl.table.att        "
    pgwide      %yesorno;       #IMPLIED "&gt;
&lt;!ENTITY % tbl.tgroup.mdl       "colspec*,thead?,tbody"&gt;
&lt;!ENTITY % tbl.tgroup.att       ""&gt;
&lt;!ENTITY % tbl.tbody.att        ""&gt;
&lt;!ENTITY % tbl.colspec.att      ""&gt;
&lt;!ENTITY % tbl.hdft.name        "thead"&gt;
&lt;!ENTITY % tbl.hdft.mdl         "row+"&gt;
&lt;!ENTITY % tbl.hdft.excep       ""&gt;
&lt;!ENTITY % tbl.hdft.att         ""&gt;
&lt;!ENTITY % tbl.row.mdl          "entry+"&gt;
&lt;!ENTITY % tbl.row.excep        ""&gt;
&lt;!ENTITY % tbl.row.att          ""&gt;
&lt;!ENTITY % tbl.entry.mdl        "(%paracon;)*"&gt;
&lt;!ENTITY % tbl.entry.excep      ""&gt;
&lt;!ENTITY % tbl.entry.att        ""&gt;

&lt;!-- =====  Element and attribute declarations follow. =====  --&gt;

&lt;!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.table.name       "table"
     ENTITY % tbl.table-titles.mdl "%titles;,"
     ENTITY % tbl.table-main.mdl   "tgroup+"
     ENTITY % tbl.table.mdl        "%tbl.table-titles; %tbl.table-main.mdl;"
     ENTITY % tbl.table.excep      "-(%tbl.table.name)"
     ENTITY % tbl.table.att        "
                        pgwide          %yesorno;       #IMPLIED "
--&gt;

&lt;!ELEMENT %tbl.table.name; - - (%tbl.table.mdl;) %tbl.table.excep; &gt;

&lt;!ATTLIST %tbl.table.name
        frame           (top|bottom|topbot|all|sides|none)      #IMPLIED
        colsep          %yesorno;                               #IMPLIED
        rowsep          %yesorno;                               #IMPLIED
        %tbl.table.att;
        %bodyatt;
&gt;

&lt;!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.tgroup.mdl    "colspec*,thead?,tbody"
     ENTITY % tbl.tgroup.att    ""
--&gt;

&lt;!ELEMENT tgroup - O (%tbl.tgroup.mdl;) &gt;

&lt;!ATTLIST tgroup
        cols            NUMBER                                  #REQUIRED
        colsep          %yesorno;                               #IMPLIED
        rowsep          %yesorno;                               #IMPLIED
        align           (left|right|center|justify|char)        #IMPLIED
        %tbl.tgroup.att;
&gt;

&lt;!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.colspec.att   ""
--&gt;

&lt;!ELEMENT colspec - O EMPTY &gt;

&lt;!ATTLIST colspec
        colnum          NUMBER                                  #IMPLIED
        colname         NMTOKEN                                 #IMPLIED
        colwidth        CDATA                                   #IMPLIED
        colsep          %yesorno;                               #IMPLIED
        rowsep          %yesorno;                               #IMPLIED
        align           (left|right|center|justify|char)        #IMPLIED
        char            CDATA                                   #IMPLIED
        charoff         NUTOKEN                                 #IMPLIED
        %tbl.colspec.att;
&gt;

&lt;!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.hdft.name     "thead"
     ENTITY % tbl.hdft.mdl      "row+"
     ENTITY % tbl.hdft.excep    ""
     ENTITY % tbl.hdft.att      ""
--&gt;

&lt;!ELEMENT %tbl.hdft.name; - O (%tbl.hdft.mdl;)  %tbl.hdft.excep;&gt;

&lt;!ATTLIST %tbl.hdft.name;
        valign          (top|middle|bottom)                     #IMPLIED
        %tbl.hdft.att;
&gt;

&lt;!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.tbody.att     ""
--&gt;

&lt;!ELEMENT tbody - O (row+)&gt;

&lt;!ATTLIST tbody
        valign          (top|middle|bottom)                     #IMPLIED
        %tbl.tbody.att;
&gt;

&lt;!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % tbl.row.mdl       "entry+"
     ENTITY % tbl.row.excep     ""
     ENTITY % tbl.row.att       ""
--&gt;

&lt;!ELEMENT row - O (%tbl.row.mdl;) %tbl.row.excep;&gt;

&lt;!ATTLIST row
        rowsep          %yesorno;                               #IMPLIED
        valign          (top|middle|bottom)                     #IMPLIED
        %tbl.row.att;
&gt;


&lt;!--
     Default declarations previously defined in this entity and
     referenced below include:
     ENTITY % paracon           "#PCDATA"
     ENTITY % tbl.entry.mdl     "(%paracon;)*"
     ENTITY % tbl.entry.excep   ""
     ENTITY % tbl.entry.att     ""
--&gt;

&lt;!ELEMENT entry - O (%tbl.entry.mdl;) %tbl.entry.excep; &gt;

&lt;!ATTLIST entry
        colname         NMTOKEN                                 #IMPLIED
        namest          NMTOKEN                                 #IMPLIED
        nameend         NMTOKEN                                 #IMPLIED
        morerows        NUMBER                                  #IMPLIED
        colsep          %yesorno;                               #IMPLIED
        rowsep          %yesorno;                               #IMPLIED
        align           (left|right|center|justify|char)        #IMPLIED
        char            CDATA                                   #IMPLIED
        charoff         NUTOKEN                                 #IMPLIED
        valign          (top|middle|bottom)                     #IMPLIED
        %tbl.entry.att;
&gt;

</programlisting>
</section><section>
<title>Semantic description for the Exchange table model</title>
<para>Note that the above set of element and attribute declarations in the previous
section only partially defines the Exchange table model. The model is not
well-defined without the accompanying natural language description of the
semantics (meanings) of these various elements, attributes, and attribute
values. This section containing that semantic writeup must be used in conjunction
with the element and attribute declarations.</para>
<section>
<title>Element and attribute description for &lt;table&gt;</title>
<section>
<title>General</title>
<para>The &lt;table&gt; element markup identifies a table.</para>
<para>Values of attributes on the &lt;table&gt; element may at times be inherited
to be used as defaults for its contained elements. Furthermore, a &lt;table&gt;
element may have some style specification associated with it that may provide
default values for some or all of its attributes. If a &lt;table&gt; element
has no explicit specification for an attribute but does have an associated
style sheet that gives a specification for this attribute, then this value
shall be used as the value that is inherited from this element.</para>
</section>
<section>
<title>Optional attributes</title>
<section>
<title>frame</title>
<subtitle>outer table ruling</subtitle>
<para>Describes position of outer rulings.</para>
<section>
<title>Declared value</title><para>sides (left and right), top (below title),
bottom (after last &lt;row&gt;), topbot (both top and bottom), all (all of above),
or none (none of above). The outer rulings appear in place of and in the space
that would otherwise be taken by horizontal and vertical rulings on the outsides
of those entries that appear at the edges of the table.</para>
</section>
<section>
<title>Default</title><para>IMPLIED (implies value from style specification if
available, if not, implies <quote>all</quote>).</para>
</section>
</section>
<section>
<title>colsep</title><subtitle>column separators (vertical ruling)</subtitle>
<para>Provides default for all &lt;tgroup&gt;s in this &lt;table&gt;. If a number other
than zero, display the internal column rulings to the right of each &lt;entry&gt;;
if zero, do not display them. Ignored for the rightmost column, where the
frame setting applies.</para>
<section>
<title>Declared value</title><para>%yesorno; (NUMBER)</para>
</section>
<section>
<title>Default</title><para>IMPLIED (implies value from style specification if
available, if not, implies <quote>1</quote>).</para>
</section>
</section>
<section>
<title>rowsep</title><subtitle>row separators (horizontal ruling)</subtitle>
<para>Provides default for all &lt;tgroup&gt;s in this &lt;table&gt;. If other than
zero, display the internal horizontal row ruling below each &lt;entry&gt; ending
in a &lt;row&gt;. If zero, do not display them. Ignored for the last &lt;row&gt;
of the &lt;table&gt; (i.e., the last &lt;row&gt; of the last &lt;tgroup&gt; in this
&lt;table&gt;), where the frame value applies.</para>
<section>
<title>Declared value</title><para>%yesorno; (NUMBER)</para>
</section>
<section>
<title>Default</title><para>IMPLIED (implies value from style specification if
available, if not, implies <quote>1</quote>).</para>
</section>
</section>
<section>
<title>pgwide</title><subtitle>make table span full page width</subtitle>
<para>If zero, the maximum available width for the &lt;table&gt; is the (galley)
width (possibly respecting current indents in force as specified by the style
sheet) of the current column of the orient="port" page. If a specified value
other than zero, the &lt;table&gt; spans the width of the entire page (possibly
causing any previous multicolumn text on the page to be balanced and any extra
processing associated with column balancing and page spanning to be performed).
This attribute is ignored when orient="land" where all tables are treated
as if pgwide="1".</para>
<section>
<title>Declared value</title><para>%yesorno; (NUMBER)</para>
</section>
<section>
<title>Default</title><para>IMPLIED (implies value from the style specification
if available). In the absence of an explicit value (or one implied from the
style specification), the system should attempt to format the table into a
galley column if reasonable, based on explicit &lt;colspec&gt; colwidth values,
galley column width, and possible table indentation implied by context. If
any relative width specifications exist, they should continue to apply, but
the unit proportion should be first based on the width uncommitted from the
galley column.</para>
<para>In the above paragraph, <quote>if reasonable</quote> is intended to preclude
a system generating columns so narrow that the entry content is obscured by
awkward line folding, or clipping. For align=char, the content either side
of the alignment character should also be considered. No explicit algorithm
for determining when a table will fit is provided. Because of the uncertainty
in meaning, interchange of a table should include an explicit value for pgwide.
</para>
</section>
</section>
<section>
<title>%bodyatt;</title><subtitle>general body element attributes</subtitle>
<para>Any of the attributes in the associated Attribute Set may be used with
this element.</para>
<section>
<title>Default</title><para>As appropriate for each attribute in the set.</para>
</section>
</section>
</section>
</section>
<section>
<title>Element and attribute description for &lt;tgroup&gt;</title>
<section>
<title>General</title>
<para>Each &lt;tgroup&gt; effectively identifies a new portion of a &lt;table&gt;.
The &lt;colspec&gt;s and the colnames in each &lt;tgroup&gt; are independent of
any other &lt;tgroup&gt;. The &lt;colspec&gt;s in a &lt;tgroup&gt; apply to its &lt;tbody&gt;.
The &lt;colspec&gt;s in a &lt;tgroup&gt; shall be in left-to-right column order.
Explicit colnums in the different &lt;colspec&gt;s of a &lt;tgroup&gt; shall be
unique, in ascending order left-to-right, in the range 1 to the number of
&lt;colspec&gt;s, which is not to exceed the value of the cols attribute of &lt;tgroup&gt;.
</para>
<para>The colnames in the different &lt;colspec&gt;s of a &lt;tgroup&gt; shall be unique.
(A colname may have the same value as the colnum of the same &lt;colspec&gt;
if restricted to digits.) The &lt;colspec&gt;s of &lt;tbody&gt; also apply to &lt;thead&gt;.
</para>
<para>All &lt;tgroup&gt;s of a &lt;table&gt; shall have the same width, so the &lt;table&gt;
frame can surround them uniformly. Each &lt;thead&gt; and &lt;tbody&gt; has that
total width as well. For each &lt;tgroup&gt;, let the minimum &lt;tgroup&gt; width
be the sum of the fixed portions of the set of &lt;colspec&gt; colwidths in that
&lt;tgroup&gt; which should not exceed the indicated total width, determined
from the &lt;table&gt; pgwide attribute. If pgwide="0", the target total width
is the galley column width, possibly reduced by the current indents in force;
if pgwide is non-zero, the target total width is the full page width. The
minimum &lt;table&gt; width shall be the maximum of all the minimum &lt;tgroup&gt;
widths.</para>
<para>The total width for any &lt;tgroup&gt; may be specified with some columns
having fixed colwidths and others having proportional widths. When no proportional
width are specified for a given &lt;tgroup&gt;, the width of that &lt;tgroup&gt;
shall be the sum of the fixed widths of the columns. When any proportional
widths are specified, the unit proportion is determined by starting with the
target table width determined from the &lt;table&gt; pgwide value non-zero for
full width, <quote>0</quote> for galley column width (possibly affected by
current indents). Reduce that by the sum of border widths and column ruling
widths and the fixed colwidths to get the available proportional width. Sum
the proportional factors N over all columns with proportional parts <quote>N*</quote>
and including <quote>1*</quote> for each implicit colwidth when the value of
the &lt;tgroup&gt; cols exceeds the number of &lt;colspec&gt;s in that &lt;tgroup&gt;.
Then the unit proportion is the available proportional width divided by the
sum of the proportionality factors. Note that the fixed widths for frame and
colsep rulings are deemed to be small and system dependent, not essentially
included as fixed parts of each colwidth in &lt;colspec&gt;.</para>
<para>If the table fixed widths take up too much of the indicated table width,
then it is up to the output system to resolve the conflict. If there are multiple
&lt;tgroup&gt;s in a single table with fixed widths (i.e., no proportional parts)
such that these fixed widths differ from one another, then it is up to the
output system to determine the interpretation.</para>
<para>Values of attributes on the &lt;tgroup&gt; element may at times be inherited
to be used as defaults for its contained elements. Furthermore, a &lt;tgroup&gt;
element may have some style specification associated with it that may provide
default values for some or all of its attributes. If a &lt;tgroup&gt; element
has no explicit specification for an attribute but does have an associated
style sheet that gives a specification for this attribute, then this value
shall be used as the value that is inherited from this element.</para>
</section>
<section>
<title>Required attribute</title>
<section>
<title>cols</title><subtitle>number of columns</subtitle>
<para>Number of columns in the &lt;tgroup&gt;.</para>
<section>
<title>Declared value</title><para>NUMBER</para>
</section>
</section>
</section>
<section>
<title>Optional attributes</title>
<section>
<title>colsep</title><subtitle>column separators (vertical ruling)</subtitle>
<para>Provides default for all &lt;colspec&gt;s in this &lt;tgroup&gt;. If other than
zero, display the internal column rulings to the right of &lt;entry&gt;; if zero,
do not display them. Ignored for the last (rightmost) column, where the frame
setting applies. Possible default source for  &lt;colspec&gt; or &lt;entry&gt;.
</para>
<section>
<title>Declared value</title><para>%yesorno; (NUMBER)</para>
</section>
<section>
<title>Default</title><para>IMPLIED (implies value from style specification if
any, else from &lt;table&gt;)</para>
</section>
</section>
<section>
<title>rowsep</title><subtitle>row separators (horizontal ruling)</subtitle>
<para>Provides default for &lt;colspec&gt;s in this &lt;tgroup&gt;. If other than zero,
display the internal horizontal row ruling below each &lt;entry&gt;. If zero,
do not display them. Ignored for the last (bottom) &lt;row&gt; of the &lt;table&gt;
where the frame value applies. In the last &lt;row&gt; in any &lt;tgroup&gt; other
than the last (or only) in the table, the regular &lt;row&gt; or &lt;entry&gt; rowsep
specifications apply. Possible default source for &lt;row&gt; or &lt;entry&gt;.
</para>
<section>
<title>Declared value</title><para>%yesorno; (NUMBER)</para>
</section>
<section>
<title>Default</title><para>IMPLIED (implies value from style specification if
any, else from &lt;table&gt;)</para>
</section>
</section>
<section>
<title>align</title><subtitle>horizontal alignment of table entry content</subtitle>
<para>Text horizontal position within the column. Applies to text that is #PCDATA
or other in-line elements, not further contained in another element with its
own formatting style, such as paragraph, list, or annotation. Default source
for &lt;colspec&gt; align. Possible default source for &lt;entry&gt;.</para>
<section>
<title>Declared value</title><para>left, (quad flush left), center (centered),
right (quad flush right), justify (both quad left and right), or char (align
text to the leftmost occurrence of the value of the non-null attribute char
value.)</para>
</section>
<section>
<title>Default</title><para>IMPLIED (means use value from style specification
if any, else <quote>left</quote>.)</para>
</section>
</section>
</section>
</section>
<section>
<title>Element and attribute description for &lt;colspec&gt;</title>
<section>
<title>General</title>
<para>Specifies a column, a vertical portion of a &lt;table&gt;. The default values
come from the &lt;tgroup&gt; or &lt;thead&gt; starting the current (enclosing) group.
Each &lt;colspec&gt; is for a single column in left-to-right order, so it properly
has a column number, colnum, implicitly in order starting from 1, and an optional
column name (colname) by which it is known when referenced by any &lt;entry&gt;.
Any references from &lt;entry&gt;s within the &lt;thead&gt; to colname, namest,
or nameend refer to values defined by the set of &lt;colspec&gt;s in the containing
&lt;tgroup&gt;. &lt;Colspec&gt;s from the containing &lt;tgroup&gt; apply to &lt;thead&gt;
and &lt;tbody&gt;.</para>
<para>The number of columns should be determined by the cols attribute on the
&lt;tgroup&gt; element, not by the number of &lt;colspec&gt;s actually defined.
If the number in cols is larger than the number of &lt;colspec&gt;s, then additional
&lt;colspec&gt;s of colwidth <quote>1*</quote> should be inferred. &lt;Colspec&gt;s
can be numbered or unnumbered, and if numbered should be increasing in sequential
order starting with 1 at the left. Unnumbered &lt;colspec&gt;s are interpreted
as being numbered incrementally (one more than the previous column number),
with the first &lt;colspec&gt; starting at 1. It is left up to the implementation
how to handle any mismatch in &lt;colspec&gt; numbering, or a number of &lt;colspec&gt;s
greater than cols. It is recommended that an authoring or editing implementation
or any implementation that verifies the compliance of the table markup to
this Resolution offer the option of producing a warning message when it encounters
such markup. It is an error for an authoring or editing implementation to
produce a table with such conflicting markup.</para>
<para>The char and charoff attributes are allowed on &lt;colspec&gt; as well as
on &lt;entry&gt;. While an implementation should accept these attributes on either
of these elements upon input, it may produce logically equivalent output that
nevertheless differs with respect to these attributes and still be considered
in compliance with the semantics of this resolution. If a table contains one
or more &lt;entry&gt;s with values of either char or charoff that differ from
the value for the same attribute on a &lt;colspec&gt; that logically contains
the &lt;entry&gt;(s), it is left up to the implementation how this should be
handled (i.e., the interpretation of such markup is beyond the scope of this
model). It is recommended that an authoring or editing implementation or any
implementation that verifies the compliance of the table markup to this Resolution
offer the option of producing a warning message when it encounters such markup.
It is an error for an authoring or editing implementation to produce a table
with such conflicting markup.</para>
</section>
<section>
<title>Optional attributes</title>
<section>
<title>colnum</title><subtitle>column number</subtitle>
<para>Number of column, counting from 1 at left of the table. The value of colnum
is not useful to identify a column in an &lt;entry&gt;, so serves no functional
purpose other than a consistency check on the order of the &lt;colspec&gt;s.
</para>
<section>
<title>Declared value</title><para>NUMBER</para>
</section>
<section>
<title>Default</title><para>IMPLIED (colspec is the next one in order)</para>
</section>
</section>
<section>
<title>colname</title><subtitle>column name</subtitle>
<para>Name of column, used to specify the position or horizontal span of columns
in a row by reference in &lt;entry&gt; using colname, namest, and/or nameend.
</para>
<para>The colname value could be the same as colnum, as its declared value is
NMTOKEN, though there is no such requirement. The name space for colnames
is different for each &lt;tgroup&gt;.</para>
<section>
<title>Declared value</title><para>NMTOKEN</para>
</section>
<section>
<title>Default</title><para>IMPLIED (colspec cannot be referenced without colname)
</para>
</section>
</section>
<section>
<title>colwidth</title><subtitle>column width specification</subtitle>
<para>Either proportional measure of the form number*, e.g., <quote>5*</quote>
for 5 times the proportion, or <quote>*</quote> (which is equivalent to <quote>1*</quote>);
fixed measure, e.g., 2pt for 2 point, 3pi for 3 pica. (Mixed measure, e.g.,
2*+3pt, while allowed in the full CALS table model, is not supported in this
Exchange model.) Coefficients are positive integers or fixed point numbers;
for fixed point numbers, a leading (possibly 0) integer part is required,
and implementations should support at least 2 decimal places. A value of ""
[the null string] is treated as a proportional measure of <quote>1*</quote>.
</para>
<para>The fixed unit values are case insensitive. The standard list of allowed
unit values is <quote>pt</quote> (points), <quote>cm</quote> (centimeters), <quote>mm</quote>
(millimeters), <quote>pi</quote> (picas), and <quote>in</quote> (inches). The
default fixed unit should be interpreted as <quote>pt</quote> if neither a
proportion nor a fixed unit is specified.</para>
<section>
<title>Declared value</title><para>CDATA</para>
</section>
<section>
<title>Default</title><para>IMPLIED (means assume a proportional measure of <quote>1*</quote>)
</para>
</section>
</section>
<section>
<title>colsep</title><subtitle>column separators (vertical ruling)</subtitle>
<para>Default for column ruling to the right of &lt;entry&gt;s starting in this
column (within the &lt;tgroup&gt;).</para>
<section>
<title>Declared value</title><para>%yesorno; (NUMBER)</para>
</section>
<section>
<title>Default</title><para>IMPLIED, from  &lt;tgroup&gt;.</para>
</section>
</section>
<section>
<title>rowsep</title><subtitle>row separators (horizontal ruling)</subtitle>
<para>Default for row ruling below an &lt;entry&gt; starting in this column when
there is neither a rowsep value on the &lt;entry&gt; nor on the &lt;row&gt; in which
the &lt;entry&gt; occurs. Note that with a non-zero value for morerows on the
entry, that ruling will be several rows lower.</para>
<section>
<title>Declared value</title><para>%yesorno; (NUMBER)</para>
</section>
<section>
<title>Default</title><para>IMPLIED, from &lt;tgroup&gt;.</para>
</section>
</section>
<section>
<title>align</title><subtitle>horizontal alignment of table entry content</subtitle>
<para>Text horizontal position within the column or spanning columns. Possible
default source for &lt;entry&gt;</para>
<section>
<title>Declared value</title><para>left, (quad flush left), center (centered),
right (quad flush right), justify (both quad left and right), or char (positioned
by charoff).</para>
</section>
<section>
<title>Default</title><para>IMPLIED (means use value from &lt;tgroup&gt;)</para>
</section>
</section>
<section>
<title>char</title><subtitle>alignment character</subtitle>
<para>Default source for &lt;entry&gt;s starting in this column. If align ="char",
the value is the single alignment character source for any implied char values
for &lt;entry&gt; immediately in this column. The char shall not be an SDATA
entity. A value of "" (the null string) means there is no aligning character.
</para>
<section>
<title>Declared value</title><para>CDATA</para>
</section>
<section>
<title>Default</title><para>IMPLIED, means "" (i.e., there is no aligning character).
</para>
</section>
</section>
<section>
<title>charoff</title><subtitle>horizontal offset of alignment character when align=char
</subtitle>
<para>Default source for &lt;entry&gt;s starting in this column. For align="char"
on an &lt;entry&gt; in the column, horizontal character offset is the percent
of the current column width to the left of the (left edge of the) alignment
character.</para>
<section>
<title>Declared value</title><para>NUTOKEN</para>
</section>
<section>
<title>Default</title><para>IMPLIED, means "50" (i.e., 50%)</para>
</section>
</section>
</section>
</section>
<section>
<title>Element and attribute description for &lt;thead&gt;</title>
<section>
<title>General</title>
<para>Identifies the heading &lt;row&gt;s of a &lt;tgroup&gt;, displayed as the first
rows, and again at the top of any continuation after a physical break between
&lt;rows&gt; in &lt;tbody&gt;.</para>
<para>The attributes apply from the set of &lt;colspec&gt;s of the containing &lt;tgroup&gt;.
</para>
</section>
<section>
<title>Optional attributes</title>
<section>
<title>valign</title><subtitle>vertical alignment</subtitle>
<para>Default text vertical positioning within the &lt;entry&gt;s. Provides default
value for &lt;row&gt;s and &lt;entry&gt;s in &lt;thead&gt;.</para>
<section>
<title>Declared value</title><para>top, middle (approximately vertically centered),
or bottom.</para>
</section>
<section>
<title>Default</title><para>IMPLIED (implies <quote>bottom</quote>).</para>
</section>
</section>
</section>
</section>
<section>
<title>Element and attribute description for &lt;tbody&gt;</title>
<section>
<title>General</title>
<para>Identifies the body of a &lt;tgroup&gt;.</para>
</section>
<section>
<title>Optional attributes</title>
<section>
<title>valign</title><subtitle>vertical alignment</subtitle>
<para>Default Text vertical positioning within the &lt;entry&gt;s. Provides default
value for &lt;row&gt; and &lt;entry&gt;s in &lt;tbody&gt;.</para>
<section>
<title>Declared value</title><para>top, middle (approximately vertically centered),
or bottom.</para>
</section>
<section>
<title>Default</title><para>IMPLIED (implies <quote>top</quote>)</para>
</section>
</section>
</section>
</section>
<section>
<title>Element and attribute description for &lt;row&gt;</title>
<section>
<title>General</title>
<para>Identifies the row information in a &lt;thead&gt; or &lt;tbody&gt; element. Default
values come from the enclosing &lt;thead&gt;, &lt;tbody&gt;, or &lt;tgroup&gt; attribute
values for like-named attributes.</para>
<para>The number of columns consumed by the &lt;entry&gt;s in a row including their
spans, and by columns encroached by an &lt;entry&gt; with morerows from a prior
row of a &lt;tgroup&gt;, shall not exceed the cols attribute value in effect
for this &lt;tgroup&gt;. It is left up to the implementation how to handle the
situation when more than one &lt;entry&gt; would fill any column of a &lt;row&gt;,
including by horizontal spanning or morerows vertical spanning. It is recommended
that an authoring or editing implementation or any implementation that verifies
the compliance of the table markup to this Resolution offer the option of
producing a warning message when it encounters such markup. It is an error
for an authoring or editing implementation to produce a table with such conflicting
markup.</para>
<para>If the number of columns consumed is less than the number of columns specified
in the &lt;tgroup cols=N&gt;, then missing &lt;entry&gt;s without straddling are
implicitly present, and their colsep and rowsep rulings are inherited.</para>
</section>
<section>
<title>Optional attributes</title>
<section>
<title>rowsep</title>
<para>Default for all &lt;entry&gt;s starting in this &lt;row&gt;
that do not specify rowsep. If other than zero, display the internal horizontal
row ruling below an &lt;entry&gt; in the &lt;row&gt;. If zero, do not display it.
Rowsep is ignored for the last &lt;row&gt; of the table where the frame specification
determines the ruling.</para>
<section>
<title>Declared value</title><para>%yesorno; (NUMBER)</para>
</section>
<section>
<title>Default</title><para>IMPLIED, from the closest element in the inheritance
path:<itemizedlist>
<listitem><para>&lt;tgroup&gt; then</para></listitem>
<listitem><para>&lt;table&gt;.</para></listitem>
</itemizedlist></para>
</section>
</section>
<section>
<title>valign</title><subtitle>vertical alignment</subtitle>
<para>Text vertical positioning default for &lt;entry&gt;s in a &lt;row&gt;.</para>
<section>
<title>Declared value</title><para>top, middle (approximately vertically centered),
or bottom.</para>
</section>
<section>
<title>Default</title><para>IMPLIED, from the closest element in the inheritance
path:<itemizedlist>
<listitem><para>either &lt;thead&gt; or &lt;tgroup&gt;, whichever is the parent of this
&lt;row&gt; then</para></listitem>
<listitem><para>&lt;tgroup&gt;.</para></listitem>
</itemizedlist></para>
</section>
</section>
</section>
</section>
<section>
<title>Element and attribute description for &lt;entry&gt;</title>
<section>
<title>General</title>
<para>Identifies an &lt;entry&gt; in a &lt;row&gt; of a &lt;thead&gt; or &lt;tbody&gt; in
a &lt;tgroup&gt;.</para>
<para>Default values for colsep, rowsep, valign, align, char, and charoff may
come from like-named attributes from the nearest element identified as influencing
this &lt;entry&gt;. The values may come from &lt;table&gt;, &lt;tgroup&gt;, &lt;colspec&gt;
(defining namest or colname), &lt;tbody&gt;, or &lt;row&gt;. Note that &lt;colspec&gt;
is not strictly in the element lineage.</para>
<para>The char and charoff attributes are allowed on &lt;colspec&gt; as well as
on &lt;entry&gt;. While an implementation should accept these attributes on either
of these elements upon input, it may produce logically equivalent output that
nevertheless differs with respect to these attributes and still be considered
in compliance with the semantics of this resolution. A table with one or more
&lt;entry&gt;s with values of either char or charoff that differ from the value
for the same attribute on any other entry in that logical column or from a
&lt;colspec&gt; that logically contains the &lt;entry&gt;(s) does not conform to
the model defined in this Resolution. It is left up to the implementation
receiving such a table to determine how it should be handled.  It is recommended
that an authoring or editing implementation or any implementation that verifies
the compliance of the table markup to this Resolution offer the option of
producing a warning message when it encounters such markup.</para>
<para>An &lt;entry&gt; gets its defaults from its starting column. A row has no
explicit &lt;entry&gt; in any column into which a vertical straddle occurs because
of a morerows=N in an &lt;entry&gt; from a prior row. A spanning &lt;entry&gt; has
no explicit repeated &lt;entry&gt;s in the columns to the right of the column
identified by namest. An &lt;entry&gt; without specific starting column cannot
span, and falls in the next non-straddled and non-spanned column.</para>
<para>The precedence for determining the column(s) for any &lt;entry&gt; is: <itemizedlist>
<listitem><para>span before individual column: <orderedlist numeration="arabic">
<listitem><para>namest through nameend</para></listitem>
</orderedlist></para></listitem>
<listitem><para>individual column: <orderedlist numeration="arabic">
<listitem><para>namest</para></listitem>
<listitem><para>colname if no namest</para></listitem>
<listitem><para>implicit if neither namest or colname</para></listitem>
</orderedlist></para></listitem>
</itemizedlist></para>
<para>The implicit resolution places the &lt;entry&gt; in the next available column.
</para>
<para>There are various markup combinations which this Resolution defines as <quote>erroneous</quote>
and referred to as <quote>errors</quote> in some of the following attribute
descriptions. It  is left up to the implementation how to handle each of these
situations:<itemizedlist>
<listitem><para>any column referenced by name (either colname, namest or nameend)
is not a colname of a  &lt;colspec&gt; in that &lt;tgroup&gt;;</para></listitem>
<listitem><para>any of those names are multiply defined in different &lt;colspec&gt;s
of that &lt;tgroup&gt;;</para></listitem>
<listitem><para>any portions of different &lt;entry&gt;s overlap each other;</para></listitem>
<listitem><para>morerows vertical straddling extends beyond the rows appropriate
to that &lt;thead&gt; or &lt;tbody&gt;;</para></listitem>
<listitem><para>too many &lt;entry&gt;s occur in any &lt;row&gt;, exceeding the cols on
the &lt;tgroup&gt;;</para></listitem>
<listitem><para>any colnames used in namest and nameend to define a span in an &lt;entry&gt;
refers to the namest column that is not to the left of the nameend column;
</para></listitem>
<listitem><para>an &lt;entry&gt; specifies a start column via &lt;entry&gt;'s namest or
colname that is to the left of the column where the &lt;entry&gt; would be placed
by default.</para></listitem>
</itemizedlist>It is recommended that an authoring or editing implementation or any
implementation that verifies the compliance of the table markup to this Resolution
offer the option of producing a warning message when it encounters such markup.
It is an error for an authoring or editing implementation to produce a table
with such markup.</para>
<para>If the content of an &lt;entry&gt; is too deep for the available depth of
a page, what information is presented and how it is presented is left to be
determined by the implementation.</para>
</section>
<section>
<title>Optional attributes</title>
<section>
<title>colname</title><subtitle>column name</subtitle>
<para>Column name of &lt;entry&gt;. Ignore if namest is present. It is an error
if colname is not defined in a &lt;colspec&gt; of the current &lt;tgroup&gt;.</para>
<section>
<title>Declared value</title><para>NMTOKEN</para>
</section>
<section>
<title>Default</title><para>IMPLIED (column(s) determined by namest or implicitly
the next.)</para>
</section>
</section>
<section>
<title>namest</title><subtitle>name of starting column for this entry</subtitle>
<para>Name of leftmost column of span. The value must be some colname in a &lt;colspec&gt;
of the current &lt;tgroup&gt;.  A namest on an entry with no nameend specification
indicates the single column so named, though colname is usually used for such
a specification. If neither namest nor colname occur, the &lt;entry&gt;  goes
in the next column in sequence to the right, skipping over any encroachment
from a prior row via &lt;entry morerows=N&gt;.  It is an error if the namest
value is not defined in a &lt;colspec&gt; for the current &lt;tgroup&gt;.</para>
<section>
<title>Declared value</title><para>NMTOKEN</para>
</section>
<section>
<title>Default</title><para>IMPLIED (implies this attribute has no effect on
spanning)</para>
</section>
</section>
<section>
<title>nameend</title><subtitle>name of ending column for this entry</subtitle>
<para>Name of rightmost column of span. The value must be some colname in a &lt;colspec&gt;
of the current &lt;tgroup&gt;. The column must be to the right of the column
identified by namest. Nameend without namest is ignored.</para>
<section>
<title>Declared value</title><para>NMTOKEN</para>
</section>
<section>
<title>Default</title><para>IMPLIED (implies this attribute has no effect on
spanning)</para>
</section>
</section>
<section>
<title>morerows</title><subtitle>number of additional rows in a vertical span</subtitle>
<para>There shall be at least that many more rows in the appropriate &lt;thead&gt;
or &lt;tbody&gt;. Any entries with morerows that would attempt to extend further
downward is an error. The rowsep is determined when the entry is processed,
in the top row if morerows is positive.</para>
<section>
<title>Declared value</title><para>NUMBER</para>
</section>
<section>
<title>Default</title><para>IMPLIED (interpret as <quote>0</quote>)</para>
</section>
</section>
<section>
<title>colsep</title><subtitle>column separators (vertical ruling)</subtitle>
<para>If other than zero, display the internal vertical column ruling at the
right of the &lt;entry&gt;; if zero, do not display it. Ignored for the last
column of a &lt;row&gt;, where the frame setting applies. The colsep value is
determined by the leftmost column of a spanning entry, even though its effect
is on the last column of such spanning entry.</para>
<section>
<title>Declared value</title><para>%yesorno; (NUMBER)</para>
</section>
<section>
<title>Default</title><para>IMPLIED, from the closest element in the inheritance
path:<itemizedlist>
<listitem><para>&lt;colspec&gt; then</para></listitem>
<listitem><para>&lt;tgroup&gt; then</para></listitem>
<listitem><para>&lt;table&gt;.</para></listitem>
</itemizedlist>Note that if a &lt;tgroup&gt; or &lt;table&gt; element has no explicit specification
for this attribute but does have an associated style sheet that gives a specification
for this attribute, then this value shall be used as the value that is inherited
from this element.</para>
</section>
</section>
<section>
<title>rowsep</title><subtitle>row separators (horizontal ruling)</subtitle>
<para>If other than zero, display the internal horizontal row ruling below the
&lt;entry&gt;; if zero, do not display it. Ignored for the last &lt;row&gt; of &lt;tgroup&gt;
where the table frame applies. Rowsep for the entry is determined in the topmost
row in which the entry occurs, even though its effect may be morerows below.
</para>
<section>
<title>Declared value</title><para>%yesorno; (NUMBER)</para>
</section>
<section>
<title>Default</title><para>IMPLIED, from the closest element in the inheritance
path:<itemizedlist>
<listitem><para>&lt;row&gt; then</para></listitem>
<listitem><para>&lt;colspec&gt; then</para></listitem>
<listitem><para>&lt;tgroup&gt; then</para></listitem>
<listitem><para>&lt;table&gt;.</para></listitem>
</itemizedlist>Note that if a &lt;tgroup&gt; or &lt;table&gt; element has no explicit specification
for this attribute but does have an associated style sheet that gives a specification
for this attribute, then this value shall be used as the value that is inherited
from this element.</para>
</section>
</section>
<section>
<title>align</title><subtitle>horizontal alignment of table entry content</subtitle>
<para>Text horizontal position within the column or spanning columns. Applies
to text that is #PCDATA or other inline elements not further contained in
another element with its own formatting style, such as paragraph, list, or
annotation though such elements could inherit their alignment from this value.
</para>
<section>
<title>Declared value</title><para>left, (quad flush left), center (centered),
right (quad flush right), justify (both quad left and right), or char (align
on leftmost of char, positioned by charoff).</para>
</section>
<section>
<title>Default</title><para>IMPLIED (means use value from nearest applicable
&lt;colspec&gt; of the nearest ancestral  &lt;tgroup&gt;. If none, then <quote>left</quote>.)
</para>
</section>
</section>
<section>
<title>char</title><subtitle>alignment character</subtitle>
<para> If align="char", the value of the char attribute is the single alignment
character on which the first to occur of this character in the &lt;entry&gt;
is aligned. A value of "" (the null string) means there is no alignment character.
If there is no alignment character or the alignment character does not occur
in the &lt;entry&gt;, the &lt;entry&gt; right aligns to the left of the charoff
position. The value of the char attribute shall not be an SDATA entity.</para>
<section>
<title>Declared value</title><para>CDATA</para>
</section>
<section>
<title>Default</title><para>IMPLIED, from &lt;colspec&gt; else there is no aligning
character.</para>
</section>
</section>
<section>
<title>charoff</title><subtitle>horizontal offset of alignment character when align=char
</subtitle>
<para>When align="char" for this &lt;entry&gt;, horizontal character offset is the
percent of the current column width to the left of the (left edge of the)
alignment character.</para>
<section>
<title>Declared value</title><para>NUTOKEN</para>
</section>
<section>
<title>Default</title><para>IMPLIED, from &lt;colspec&gt; else "50" (i.e., 50%).
</para>
</section>
</section>
<section>
<title>valign</title><subtitle>vertical alignment</subtitle>
<para>Text vertical positioning within the &lt;entry&gt;.</para>
<section>
<title>Declared value</title><para>top, middle (approximately vertically centered),
or bottom.</para>
</section>
<section>
<title>Default</title><para>IMPLIED from the closest ancestor with explicit specification
of valign:</para>
<itemizedlist>
<listitem><para>&lt;row&gt; then</para></listitem>
<listitem><para>&lt;thead&gt; or &lt;tbody&gt;.</para></listitem>
</itemizedlist>
</section>
</section>
</section>
</section></section>
</article>