<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//Norman Walsh//DTD Simplified DocBook XML V4.1.2.2//EN"
  "/share/doctypes/sdocbook/sdocbook.dtd">
<!--ArborText, Inc., 1988-1999, v.4002-->
<?Pub Inc?>
<article>
<?dbhtml filename="tm9901.htm" chunk="no"?>
<articleinfo>
<title>XML Exchange Table Model Document Type Definition</title>
<subtitle>Organization for the Advancement of Structured Information Standards
(OASIS) Technical Memorandum TR 9901:1999</subtitle>
<authorgroup>
<author><firstname>Norman</firstname><surname>Walsh</surname><affiliation>
<jobtitle>Chair, Tables Technical Committee</jobtitle><?Pub Caret?><orgname>Arbortext,
Inc.</orgname></affiliation></author>
</authorgroup>
<date>1999 Sep 29</date>
<copyright><year>1999</year><holder><ulink url="http://www.oasis-open.org/">Organization
for the Advancement of Structured Information Standards (OASIS)</ulink></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>
<title>Abstract</title>
<para>This OASIS Technical Memorandum is an XML expression of  the Exchange
subset of the full CALS table model DTD described in  <ulink url="http://www.oasis-open.org/html/a502.htm">OASIS
Technical Memorandum 9502:1995, <citetitle>CALS Table Model Document Type
Definition</citetitle></ulink>. It is an XML version of  <ulink url="http://www.oasis-open.org/html/a503.htm">OASIS
Technical Resolution 9503:1995, <citetitle>Exchange Table Model Document Type
Definition</citetitle></ulink>. </para>
<para>The 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 OASIS vendor products. See also <ulink
url="http://www.oasis-open.org/html/a501.htm">OASIS Technical Research Paper
TRP 9501:1995, <citetitle>Table Interoperability: Issues for the CALS Table
Model</citetitle></ulink>. </para>
</abstract>
<keywordset><keyword>Technical Memorandum 9901:1999</keyword><keyword>XML
Exchange Table Model</keyword></keywordset>
<revhistory>
<revision>
<revnumber>1.0</revnumber>
<date>1999 Sep 30</date>
<authorinitials>nwalsh</authorinitials>
<revremark>First publication.</revremark>
</revision>
<revision>
<revnumber>0.95</revnumber>
<date>1999 Aug 29</date>
<authorinitials>nwalsh</authorinitials>
<revremark>Revised draft. TR has become TM, %tbl.table.att documented, default
declaration for %bodyatt added to DTD.</revremark>
</revision>
<revision>
<revnumber>0.9</revnumber>
<date>1999 Apr 15</date>
<authorinitials>nwalsh</authorinitials>
<revremark>Committee draft</revremark>
</revision>
<revision>
<revnumber>0.5</revnumber>
<date>1999 Apr 10</date>
<authorinitials>nwalsh</authorinitials>
<revremark>Editorial draft</revremark>
</revision>
</revhistory>
</articleinfo>
<section>
<title>Introduction</title>
<para>This OASIS Technical Memorandum is an XML expression of  the Exchange
subset of the full CALS table model DTD described in  <ulink url="http://www.oasis-open.org/html/a502.htm">OASIS
Technical Memorandum 9502:1995, <citetitle>CALS Table Model Document Type
Definition</citetitle></ulink>. It is an XML version of  <ulink url="http://www.oasis-open.org/html/a503.htm">OASIS
Technical Resolution 9503:1995, <citetitle>Exchange Table Model Document Type
Definition</citetitle></ulink>. </para>
<para>The 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 OASIS vendor products. See also <ulink
url="http://www.oasis-open.org/html/a501.htm">OASIS Technical Research Paper
TRP 9501:1995, <citetitle>Table Interoperability: Issues for the CALS Table
Model</citetitle></ulink>. </para>
<para>Note that the set of element and attribute declarations in the <link
linkend="dtd">Exchange Table Model DTD Module</link> 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 sections
following 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. </para>
<para>In particular, for maximum interoperability, the geometric aspects,
including some table attributes, and the elements and attributes of the table
structure:  <literal role="element">tgroup</literal> through <literal role="element">row</literal>
and some <literal role="element">entry</literal> attributes should only be
constrained. The <literal role="element">table</literal> content model and
the <literal role="element">entry</literal> content model are the primary
candidates for change other than constraint. </para>
<section>
<title>Changes from OASIS Technical Resolution TR 9503:1995</title>
<para>Specific changes of substance between this Exchange Model and the SGML
Exchange Model described in OASIS Technical Resolution TR 9503:1995 include:</para>
<itemizedlist>
<listitem><para>Removed the <literal role="paramentity"> tbl.table.excep</literal>,
 <literal role="paramentity">tbl.hdft.excep</literal>,  <literal role="paramentity">tbl.row.excep</literal>,
and  <literal role="paramentity">tbl.entry.excep</literal> parameter entities.</para>
<para>There are no exceptions in XML. The following normative statement is
made in lieu of exceptions: the exchange table model explicitly forbids a
table from occurring within another table. If the content model of an entry
includes a table element, then this cannot be enforced by the DTD, but it
is a deviation from the exchange table model to include a table within a table. </para>
</listitem>
<listitem><para>Removed the <literal role="paramentity"> tbl.hdft.name</literal>,
 <literal role="paramentity">tbl.hdft.mdl</literal>,  <literal role="paramentity">tbl.hdft.excep</literal>,
and  <literal role="paramentity">tbl.hdft.att</literal> parameter entities.</para>
<para>The motivation for these elements was to change the table header/footer
elements. Since XML does not allow element declarations to contain name groups,
and the exchange table model does not allow a table to contain footers, the
continued presence of these attributes is unnecessary.</para>
</listitem>
<listitem><para>Added the <literal role="paramentity"> tbl.thead.att</literal>
parameter entity.</para>
<para>This entity parameterizes the attributes on  <literal role="element">thead</literal>.
It replaces the  <literal role="paramentity">tbl.hdft.att </literal> parameter
entity.</para>
</listitem>
<listitem><para>Tag ommission indicators have been removed. </para>
</listitem>
<listitem><para>Comments have been removed from declarations. </para>
</listitem>
<listitem><para>NUMBER attributes have been changed to NMTOKEN.</para>
</listitem>
<listitem><para>NUTOKEN attributes have been to changed to NMTOKEN.</para>
</listitem>
<listitem><para>Removed the grouping characters around the content model parameter
entry for the <literal role="element">entry</literal> element. This is necessary
so that an entry can contain #PCDATA and be defined as an optional, repeatable
OR group beginning with #PCDATA, as required by XML.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Changes from MIL-HDBK-28001 (30 June 95)</title>
<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:</para>
<itemizedlist>
<listitem><para>change most explicit attribute defaults from a value to #IMPLIED
to allow value inheritance, possibly from a style sheet;</para>
</listitem>
<listitem><para>eliminate <literal role="element">entrytbl</literal>; </para>
</listitem>
<listitem><para>eliminate <literal role="element">tfoot</literal>; </para>
</listitem>
<listitem><para>eliminate <literal role="element">spanspec</literal>; </para>
</listitem>
<listitem><para>eliminate the <literal role="attribute">char</literal> and <literal
role="attribute">charoff</literal> attributes from <literal role="element">tgroup</literal>;</para>
</listitem>
<listitem><para>eliminate the rotate attribute from  <literal role="element">entry</literal>;</para>
</listitem>
<listitem><para>eliminate references to security attributes. </para>
</listitem>
</itemizedlist>
<para>Finally, this declaration set is assigned a Formal Public Identifier.</para>
</section>
</section>
<section id="dtd">
<title>Exchange Table model DTD module</title>
<programlisting><inlinemediaobject><imageobject><imagedata fileref="soextblx.dtd"
format="linespecific"/></imageobject></inlinemediaobject></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  <literal role="element">table</literal></title>
<section>
<title>General</title>
<para>The <literal role="element">table</literal> element markup identifies
a table.</para>
<para>Elements inside a <literal role="element">table</literal> may at times
inherit default values from the attributes on the containing <literal role="element">table</literal>.
Furthermore, a <literal role="element">table</literal> element may have some
stylesheet associated with it that may provide default values for some or
all of its attributes.</para>
<para>If a <literal role="element">table</literal> element has no explicit
specification for an attribute but does have an associated style sheet that
gives a specification for this attribute, then the stylesheet value shall
be used as the value that is inherited from this element. </para>
</section>
<section>
<title>Optional attributes</title>
<section>
<title><literal role="attribute">frame</literal> &mdash; outer table ruling</title>
<para>Describes position of outer rulings.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>The enumerated values are:</para>
<informaltable frame="bottom" pgwide="1"><tgroup cols="2"><colspec colwidth="1in"
colsep="1"/>
<thead><row><entry>Value</entry><entry>Rules</entry></row></thead>
<tbody><row>
<entry>sides</entry>
<entry>left and right sides</entry>
</row><row>
<entry>top</entry>
<entry>above first row</entry>
</row><row>
<entry>bottom</entry>
<entry>after last row</entry>
</row><row>
<entry>topbot</entry>
<entry>top and bottom</entry>
</row><row>
<entry>all</entry>
<entry>all of the above</entry>
</row><row>
<entry>none</entry>
<entry>none of the above</entry>
</row></tbody></tgroup></informaltable>
<para>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>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (implies value from stylesheet if available, if not, implies
&ldquo;all&rdquo;).</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">colsep</literal> &mdash; column separators
(vertical ruling)</title>
<para>Specifies the presence or absence of column separator rules. Provides
the default value for all  <literal role="element">tgroup</literal>s in this
 <literal role="element">table</literal>. </para>
<para>If <literal role="attribute">colsep</literal> is non-zero, display internal
column rules to the right of each  <literal role="element">entry</literal>;
if zero, do not display the rules. This value is ignored for the rightmost
column, where the <literal role="attribute">frame</literal> setting applies. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>%yesorno; (NMTOKEN)</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (implies value from stylesheet if available, if not, implies
&ldquo;1&rdquo;).</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">rowsep</literal> &mdash; row separators (horizontal
ruling)</title>
<para>Specifies the presence or absence of row separator rules. Provides the
default value for all  <literal role="element">tgroup</literal>s in this  <literal
role="element">table</literal>. </para>
<para>If <literal role="attribute">rowsep</literal> is non-zero, display the
internal row rules below each  <literal role="element">entry</literal>; if
zero, do not display the rules. Ignored for the last  <literal role="element">row</literal>
of the  <literal role="element">table</literal> (i.e., the last  <literal
role="element">row</literal> of the last  <literal role="element">tgroup</literal>
in this  <literal role="element">table</literal>), where the  <literal role="attribute">frame</literal>
value applies. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>%yesorno; (NMTOKEN)</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (implies value from stylesheet if available, if not, implies
&ldquo;1&rdquo;).</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">pgwide</literal> &mdash; make table span
full page width</title>
<para>Describes the desired width of the table.</para>
<para>If zero, the maximum available width for the  <literal role="element">table</literal>
is the (galley) width (possibly respecting current indents in force as specified
by the stylesheet) of the current column of page. If non-zero, the <literal
role="element">table</literal> 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). </para>
<para>Unlike most table attributes, this one is parameterized by <literal
role="paramentity">%tbl.table.att;</literal>and may be removed by a customization
layer.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>%yesorno; (NMTOKEN)</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (implies value from the stylesheet if available). In the absence
of an explicit value (or one implied from the stylesheet), the system should
attempt to format the table into a galley column if reasonable, based on explicit
 <literal role="element">colspec</literal>  <literal role="attribute">colwidth</literal>
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 preceding paragraph, &ldquo;if reasonable&rdquo; is intended
to preclude a system generating columns so narrow that the <literal role="element">entry</literal>
content is obscured by awkward line folding, or clipping. For character alignment,
the content on 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 <literal role="attribute">pgwide</literal>.</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="paramentity">%bodyatt;</literal> &mdash; general body
element attributes</title>
<para>Any of the attributes in the associated attribute set may be used with
this element.</para>
<variablelist>
<varlistentry><term>Default</term>
<listitem>
<para>As appropriate for each attribute in the set.&nbsp;This parameter entity
is included for backward compatibility with the SGML exchange table model.
The XML table model also defines <literal role="paramentity">%tbl.table.att;</literal>
for this purpose, parallel to the other parameter entities added for defining
attributes on table elements.</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="paramentity">%tbl.table.att;</literal> &mdash; general
body element attributes</title>
<para>Any of the attributes in the associated attribute set may be used with
this element.</para>
<variablelist>
<varlistentry><term>Default</term>
<listitem>
<para>As appropriate for each attribute in the set.</para>
</listitem>
</varlistentry>
</variablelist>
</section>
</section>
</section>
<section>
<title>Element and attribute description for  <literal role="element">tgroup</literal></title>
<section>
<title>General</title>
<para>Each <literal role="element">tgroup</literal> effectively identifies
a new portion of a  <literal role="element">table</literal>. The  <literal
role="element">colspec</literal>s and the  <literal role="attribute">colname</literal>s
in each  <literal role="element">tgroup</literal> are independent of any other <literal
role="element">tgroup</literal>. The  <literal role="element">colspec</literal>s
in a <literal role="element"> tgroup</literal> apply to its  <literal role="element">tbody</literal>.
The  <literal role="element">colspec</literal>s in a <literal role="element">
tgroup</literal> shall be in left-to-right column order. Explicit <literal
role="attribute">colnum</literal>s in the different <literal role="element">colspec</literal>s
of a <literal role="element">tgroup</literal> shall be unique, in ascending
order left-to-right, in the range 1 to the number of <literal role="element">colspec</literal>s,
which is not to exceed the value of the cols attribute of  <literal role="element">tgroup</literal>.</para>
<para>The <literal role="attribute">colname</literal>s in the different <literal
role="element">colspec</literal>s of a <literal role="element">tgroup</literal>
shall be unique. (A <literal role="attribute">colname</literal> may have the
same value as the <literal role="attribute">colnum</literal> of the same <literal
role="element">colspec</literal> if restricted to digits.) The <literal role="element">colspec</literal>s
of <literal role="element">tbody</literal> also apply to  <literal role="element">thead</literal>.</para>
<para>All <literal role="element">tgroup</literal>s of a <literal role="element">table</literal>
shall have the same width, so the <literal role="element">table</literal>
frame can surround them uniformly. Each  <literal role="element">thead</literal>
and  <literal role="element">tbody</literal> has that total width as well.
For each <literal role="element">tgroup</literal>, let the minimum <literal
role="element">tgroup</literal> width be the sum of the fixed portions of
the set of  <literal role="element">colspec</literal> colwidths in that  <literal
role="element">tgroup</literal> which should not exceed the indicated total
width, determined from the  <literal role="element">table</literal>  <literal
role="attribute">pgwide</literal> attribute. If  <literal role="attribute">pgwide</literal>
is "0", the target total width is the galley column width, possibly reduced
by the current indents in force; if <literal role="attribute">pgwide</literal>
is non-zero, the target total width is the full page width. The minimum <literal
role="element">table</literal> width shall be the maximum of all the minimum
 <literal role="element">tgroup</literal> widths.</para>
<para>The total width for any <literal role="element"> tgroup</literal> may
be specified with some columns having fixed colwidths and others having proportional
widths. When no proportional width are specified for a given  <literal role="element">tgroup</literal>,
the width of that  <literal role="element">tgroup</literal> 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  <literal role="element">table</literal>  <literal role="attribute">pgwide</literal>
value non-zero for full width, &ldquo;0&rdquo; 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
&ldquo;N*&rdquo; and including &ldquo;1*&rdquo; for each implicit colwidth
when the value of the <literal role="element">tgroup</literal> cols exceeds
the number of <literal role="element">colspec</literal>s in that <literal
role="element">tgroup</literal>. 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 <literal role="element">colspec</literal>.</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
 <literal role="element">tgroup</literal>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>Elements inside a <literal role="element">tgroup</literal> may at times
inherit default values from the attributes on the containing  <literal role="element">tgroup</literal>.
Furthermore, a  <literal role="element">tgroup</literal> element may have
some stylesheet associated with it that may provide default values for some
or all of its attributes.</para>
<para>If a <literal role="element">tgroup</literal> element has no explicit
specification for an attribute but does have an associated style sheet that
gives a specification for this attribute, then the stylesheet value shall
be used as the value that is inherited from this element. </para>
</section>
<section>
<title>Required attribute</title>
<section>
<title><literal role="attribute">cols</literal> &mdash; number of columns </title>
<para>Number of columns in the  <literal role="element">tgroup</literal>.
The value of this attribute must be an integer greater than zero. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>NMTOKEN</para>
</listitem>
</varlistentry>
</variablelist>
</section>
</section>
<section>
<title>Optional attributes</title>
<section>
<title><literal role="attribute">colsep</literal> &mdash; column separators
(vertical ruling)</title>
<para>Provides default for all  <literal role="element">colspec</literal>s
in this  <literal role="element">tgroup</literal>. If other than zero, display
the internal column rulings to the right of  <literal role="element">entry</literal>;
if zero, do not display them. Ignored for the last (rightmost) column, where
the frame setting applies. Possible default source for  <literal role="element">colspec</literal>
or  <literal role="element">entry</literal>. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>%yesorno; (NMTOKEN)</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (implies value from stylesheet if any, else from <literal role="element">table</literal>)</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">rowsep</literal> &mdash; row separators (horizontal
ruling)</title>
<para>Provides default for <literal role="element">colspec</literal> s in
this <literal role="element">tgroup</literal>. If other than zero, display
the internal horizontal row ruling below each <literal role="element">entry</literal>.
If zero, do not display them. Ignored for the last (bottom)  <literal role="element">row</literal>
of the  <literal role="element">table</literal> where the frame value applies.
In the last <literal role="element">row</literal> in any  <literal role="element">tgroup</literal>
other than the last (or only) in the table, the regular <literal role="element">row</literal>
or <literal role="element">entry</literal> rowsep specifications apply. Possible
default source for  <literal role="element">row</literal> or <literal role="element">
entry</literal>.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>%yesorno; (NMTOKEN)</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (implies value from stylesheet if any, else from <literal role="element">table</literal>)</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">align</literal> &mdash; horizontal alignment
of table entry content</title>
<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  <literal role="element">colspec</literal> align. Possible default
source for <literal role="element">entry</literal>. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>The enumerated values are: </para>
<informaltable frame="bottom" pgwide="1"><tgroup cols="2"><colspec colwidth="1in"
colsep="1"/>
<thead><row><entry>Value</entry><entry>Alignment</entry></row></thead>
<tbody><row>
<entry>left</entry>
<entry>Flush left</entry>
</row><row>
<entry>center</entry>
<entry>Centered</entry>
</row><row>
<entry>right</entry>
<entry>Flush right</entry>
</row><row>
<entry>justify</entry>
<entry>Flush left and right</entry>
</row><row>
<entry>char</entry>
<entry><para>Align text to the leftmost occurrence of the value of the non-null
attribute <literal role="attribute">char</literal> value. </para></entry>
</row></tbody></tgroup></informaltable>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (means use value from stylesheet if any, else &ldquo;left&rdquo;.)</para>
</listitem>
</varlistentry>
</variablelist>
</section>
</section>
</section>
<section>
<title>Element and attribute description for  <literal role="element">colspec</literal></title>
<section>
<title>General</title>
<para>Specifies a column, a vertical portion of a  <literal role="element">table</literal>.
The default values come from the <literal role="element">tgroup</literal>
or  <literal role="element">thead</literal> starting the current (enclosing)
group. Each <literal role="element">colspec</literal> is for a single column
in left-to-right order, so it properly has a column number, <literal role="attribute">colnum</literal>,
implicitly in order starting from 1, and an optional column name (<literal
role="attribute">colname</literal>) by which it is known when referenced by
any <literal role="element">entry</literal> . Any references from  <literal
role="element">entry</literal>s within the  <literal role="element">thead</literal>
to  <literal role="attribute">colname</literal>,  <literal role="attribute">namest</literal>,
or  <literal role="attribute">nameend</literal> refer to values defined by
the set of <literal role="element">colspec</literal>s in the containing <literal
role="element">tgroup</literal>.  <literal role="element">Colspec</literal>s
from the containing  <literal role="element">tgroup</literal> apply to  <literal
role="element">thead</literal> and <literal role="element"> tbody</literal>.</para>
<para>The number of columns should be determined by the cols attribute on
the <literal role="element">tgroup</literal> element, not by the number of
 <literal role="element">colspec</literal>s actually defined. If the number
in cols is larger than the number of  <literal role="element">colspec</literal>s,
then additional  <literal role="element">colspec</literal>s of colwidth &ldquo;1*&rdquo;
should be inferred. <literal role="element">Colspec</literal>s can be numbered
or unnumbered, and if numbered should be increasing in sequential order starting
with 1 at the left. Unnumbered <literal role="element">colspec</literal>s
are interpreted as being numbered incrementally (one more than the previous
column number), with the first  <literal role="element">colspec</literal>
starting at 1. It is left up to the implementation how to handle any mismatch
in  <literal role="element">colspec</literal> numbering, or a number of <literal
role="element">colspec</literal>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 Memorandum 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 <literal role="attribute">char</literal> and <literal role="attribute">charoff</literal>
attributes are allowed on  <literal role="element">colspec</literal> as well
as on  <literal role="element">entry</literal>. 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
Memorandum. If a table contains one or more <literal role="element">entry</literal>s
with values of either char or charoff that differ from the value for the same
attribute on a <literal role="element"> colspec</literal> that logically contains
the  <literal role="element">entry </literal>(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 Memorandum 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><literal role="attribute">colnum</literal> &mdash; column number</title>
<para>Number of column, counting from 1 at left of the table. The value of <literal
role="attribute">colnum</literal> is not useful to identify a column in an
 <literal role="element">entry</literal>, so serves no functional purpose
other than a consistency check on the order of the  <literal role="element">colspec</literal>s. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>NMTOKEN</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (colspec is the next one in order)</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">colname</literal> &mdash; column name</title>
<para>Name of column, used to specify the position or horizontal <link linkend="glspan">span</link>
of columns in a row by reference in  <literal role="element">entry</literal>
using  <literal role="attribute">colname</literal>,  <literal role="attribute">namest</literal>,
and/or  <literal role="attribute">nameend</literal>.</para>
<para>The <literal role="attribute">colname</literal> value could be the same
as <literal role="attribute">colnum</literal>, as its declared value is NMTOKEN,
though there is no such requirement. The name space for  <literal role="attribute">colname</literal>s
is different for each <literal role="element">tgroup</literal>. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>NMTOKEN</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (colspec cannot be referenced without  <literal role="attribute">colname</literal>)</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">colwidth</literal> &mdash; column width specification</title>
<para>Either proportional measure of the form number*, e.g., &ldquo;5*&rdquo;
for 5 times the proportion, or &ldquo;*&rdquo; (which is equivalent to &ldquo;1*&rdquo;);
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 &ldquo;1*&rdquo;. </para>
<para>The fixed unit values are case insensitive. The standard list of allowed
unit values is &ldquo;pt&rdquo; (points), &ldquo;cm&rdquo; (centimeters),
&ldquo;mm&rdquo; (millimeters), &ldquo;pi&rdquo; (picas), and &ldquo;in&rdquo;
(inches). The default fixed unit should be interpreted as &ldquo;pt&rdquo;
if neither a proportion nor a fixed unit is specified.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>CDATA</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (means assume a proportional measure of &ldquo;1*&rdquo;) </para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">colsep</literal> &mdash; column separators
(vertical ruling)</title>
<para>Default for column ruling to the right of  <literal role="element">entry</literal>s
starting in this column (within the <literal role="element">tgroup</literal>).</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>%yesorno; (NMTOKEN)</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED, from  <literal role="element">tgroup</literal>. </para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">rowsep</literal> &mdash; row separators (horizontal
ruling)</title>
<para>Default for row ruling below an <literal role="element"> entry</literal>
starting in this column when there is neither a rowsep value on the <literal
role="element">entry</literal> nor on the <literal role="element">row</literal>
in which the <literal role="element">entry</literal> occurs. Note that with
a non-zero value for morerows on the entry, that ruling will be several rows
lower.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>%yesorno; (NMTOKEN)</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED, from <literal role="element">tgroup</literal>. </para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">align</literal> &mdash; horizontal alignment
of table entry content</title>
<para>Text horizontal position within the column or spanning columns. Possible
default source for  <literal role="element">entry</literal>.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>The enumerated values are: </para>
<informaltable frame="bottom" pgwide="1"><tgroup cols="2"><colspec colwidth="1in"
colsep="1"/>
<thead><row><entry>Value</entry><entry>Alignment</entry></row></thead>
<tbody><row>
<entry>left</entry>
<entry>Flush left</entry>
</row><row>
<entry>center</entry>
<entry>Centered</entry>
</row><row>
<entry>right</entry>
<entry>Flush right</entry>
</row><row>
<entry>justify</entry>
<entry>Flush left and right</entry>
</row><row>
<entry>char</entry>
<entry><para>Align text to the leftmost occurrence of the value of the non-null
attribute <literal role="attribute">char</literal> value. </para></entry>
</row></tbody></tgroup></informaltable>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (means use value from <literal role="element"> tgroup</literal>)</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">char</literal> &mdash; alignment character</title>
<para>Default source for  <literal role="element">entry</literal>s starting
in this column. If character alignment is specified, the value is the single
alignment character source for any implied char values for <literal role="element">entry</literal>
immediately in this column. A value of "" (the null string) means there is
no aligning character. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>CDATA</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED, means "" (i.e., there is no aligning character). </para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">charoff</literal> &mdash; horizontal offset
of alignment character when align=char</title>
<para>Default source for  <literal role="element">entry</literal>s starting
in this column. For character alignment on an  <literal role="element">entry</literal>
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>
<para>This value should be number, greater than 0 and less than or equal to
100. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>NMTOKEN</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED, means "50" (i.e., 50%)</para>
</listitem>
</varlistentry>
</variablelist>
</section>
</section>
</section>
<section>
<title>Element and attribute description for  <literal role="element">thead</literal></title>
<section>
<title>General</title>
<para>Identifies the heading <literal role="element"> row</literal>s of a <literal
role="element">tgroup</literal>, displayed as the first rows, and again at
the top of any continuation after a physical break between  <literal role="element">rows</literal>
in  <literal role="element">tbody</literal>.</para>
<para>The attributes apply from the set of  <literal role="element">colspec</literal>s
of the containing  <literal role="element">tgroup </literal>.</para>
</section>
<section>
<title>Optional attributes</title>
<section>
<title><literal role="attribute">valign</literal> &mdash; vertical alignment</title>
<para>Default text vertical positioning within the  <literal role="element">entry</literal>s.
Provides default value for <literal role="element">row</literal>s and  <literal
role="element">entry</literal>s in  <literal role="element">thead</literal>.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>The enumerated values are: </para>
<informaltable frame="bottom" pgwide="1"><tgroup cols="2"><colspec colwidth="1in"
colsep="1"/>
<thead><row><entry>Value</entry><entry>Alignment</entry></row></thead>
<tbody><row>
<entry>top</entry>
<entry>top</entry>
</row><row>
<entry>middle</entry>
<entry>approximately vertically centered</entry>
</row><row>
<entry>bottom</entry>
<entry>bottom</entry>
</row></tbody></tgroup></informaltable>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (implies &ldquo;bottom&rdquo;).</para>
</listitem>
</varlistentry>
</variablelist>
</section>
</section>
</section>
<section>
<title>Element and attribute description for <literal role="element">tbody</literal></title>
<section>
<title>General</title>
<para>Identifies the body of a  <literal role="element">tgroup</literal>.</para>
</section>
<section>
<title>Optional attributes</title>
<section>
<title><literal role="attribute">valign</literal> &mdash; vertical alignment </title>
<para>Default Text vertical positioning within the  <literal role="element">entry</literal>s.
Provides default value for <literal role="element">row</literal> and  <literal
role="element">entry</literal>s in <literal role="element">tbody</literal>.</para>
<variablelist>
<varlistentry><term> Declared value</term>
<listitem>
<para>The enumerated values are: </para>
<informaltable frame="bottom" pgwide="1"><tgroup cols="2"><colspec colwidth="1in"
colsep="1"/>
<thead><row><entry>Value</entry><entry>Alignment</entry></row></thead>
<tbody><row>
<entry>top</entry>
<entry>top</entry>
</row><row>
<entry>middle</entry>
<entry>approximately vertically centered</entry>
</row><row>
<entry>bottom</entry>
<entry>bottom</entry>
</row></tbody></tgroup></informaltable>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (implies &ldquo;top&rdquo;)</para>
</listitem>
</varlistentry>
</variablelist>
</section>
</section>
</section>
<section>
<title>Element and attribute description for  <literal role="element">row</literal></title>
<section>
<title>General</title>
<para>Identifies the row information in a  <literal role="element">thead</literal>
or  <literal role="element">tbody</literal> element. Default values come from
the enclosing <literal role="element">thead</literal>, <literal role="element">tbody</literal>,
or  <literal role="element">tgroup</literal> attribute values for like-named
attributes.</para>
<para>The number of columns consumed by the  <literal role="element">entry</literal>s
in a row including their spans, and by columns encroached by an  <literal
role="element">entry</literal> with morerows from a prior row of a <literal
role="element">tgroup</literal>, shall not exceed the cols attribute value
in effect for this <literal role="element"> tgroup</literal>. It is left up
to the implementation how to handle the situation when more than one  <literal
role="element">entry</literal> would fill any column of a <literal role="element">row</literal>,
including by  <link linkend="glspan">spanning</link> or <link linkend="glstraddle">straddling</link>.
It is recommended that an authoring or editing implementation or any implementation
that verifies the compliance of the table markup to this Memorandum 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  <literal role="element">tgroup</literal>'s  <literal role="attribute">cols</literal>
attribute, then the missing <literal role="element">entry</literal>s (without
spanning or straddling) are implicitly present, and their colsep and rowsep
rulings are inherited.</para>
</section>
<section>
<title>Optional attributes</title>
<section>
<title><literal role="attribute">rowsep</literal> &mdash; row separators (horizontal
ruling)</title>
<para>Default for all <literal role="element">entry</literal>s starting in
this <literal role="element">row</literal> that do not specify rowsep. If
other than zero, display the internal horizontal row ruling below an  <literal
role="element">entry</literal> in the  <literal role="element">row</literal>.
If zero, do not display it. Rowsep is ignored for the last <literal role="element">row</literal>
of the table where the frame specification determines the ruling.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>%yesorno; (NMTOKEN)</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED, from the closest element in the inheritance path: </para>
<itemizedlist>
<listitem><para><literal role="element">tgroup</literal> then</para>
</listitem>
<listitem><para><literal role="element">table</literal>.</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">valign</literal> &mdash; vertical alignment</title>
<para>Text vertical positioning default for  <literal role="element">entry</literal>s
in a  <literal role="element">row</literal>.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>The enumerated values are: </para>
<informaltable frame="bottom" pgwide="1"><tgroup cols="2"><colspec colwidth="1in"
colsep="1"/>
<thead><row><entry>Value</entry><entry>Alignment</entry></row></thead>
<tbody><row>
<entry>top</entry>
<entry>top</entry>
</row><row>
<entry>middle</entry>
<entry>approximately vertically centered</entry>
</row><row>
<entry>bottom</entry>
<entry>bottom</entry>
</row></tbody></tgroup></informaltable>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED, from the closest element in the inheritance path: either <literal
role="element">thead</literal> or  <literal role="element">tbody</literal>,
whichever is the parent of this <literal role="element">row</literal>. </para>
</listitem>
</varlistentry>
</variablelist>
</section>
</section>
</section>
<section>
<title>Element and attribute description for  <literal role="element">entry</literal></title>
<section>
<title>General</title>
<para>Identifies an <literal role="element">entry</literal> in a <literal
role="element">row</literal>.</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  <literal role="element">entry</literal>. The values may
come from <literal role="element">table</literal>,  <literal role="element">tgroup</literal>, <literal
role="element"> colspec</literal> (defining  <literal role="attribute">namest</literal>
or  <literal role="attribute">colname</literal>), <literal role="element">
tbody</literal>, or <literal role="element">row</literal>. Note that <literal
role="element">colspec</literal> is not strictly in the element lineage.</para>
<para>The char and charoff attributes are allowed on  <literal role="element">colspec</literal>
as well as on  <literal role="element">entry</literal>. 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 Memorandum. A table with one or more <literal role="element">entry</literal>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 <literal role="element">colspec</literal>
that logically contains the <literal role="element">entry</literal>(s) does
not conform to the model defined in this Memorandum. 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 Memorandum offer
the option of producing a warning message when it encounters such markup.</para>
<para>An <literal role="element">entry</literal> gets its defaults from its
starting column. A row has no explicit <literal role="element">entry</literal>
in any column into which a vertical straddle occurs because of a  <literal
role="attribute">morerows</literal> attribute on an  <literal role="element">entry</literal>
from a prior row. A spanning <literal role="element">entry</literal> has no
explicit repeated <literal role="element">entry</literal>s in the columns
to the right of the column identified by  <literal role="attribute">namest</literal>.
An  <literal role="element">entry</literal> without specific starting column
(a <literal role="attribute">namest</literal> attribute) cannot span, and
falls in the next non-straddled and non-spanned column. </para>
<para>The precedence for determining the column(s) for any <literal role="element">entry</literal>
is: </para>
<itemizedlist>
<listitem><para>span before individual column: </para>
<itemizedlist>
<listitem><para><literal role="attribute">namest</literal> through <literal
role="attribute">nameend</literal></para>
</listitem>
</itemizedlist>
</listitem>
<listitem><para>individual column: </para>
<itemizedlist>
<listitem><para><literal role="attribute">namest</literal></para>
</listitem>
<listitem><para><literal role="attribute">colname</literal> if no  <literal
role="attribute">namest</literal></para>
</listitem>
<listitem><para>implicit if neither  <literal role="attribute">namest</literal>
or  <literal role="attribute">colname</literal> </para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
<para>The implicit Memorandum places the  <literal role="element">entry</literal>
in the next available column.</para>
<para>There are various markup combinations which this Memorandum defines
as &ldquo;erroneous&rdquo; and referred to as &ldquo;errors&rdquo; in some
of the following attribute descriptions. It is left up to the implementation
how to handle each of these situations:</para>
<itemizedlist>
<listitem><para>any column referenced by name (either  <literal role="attribute">colname</literal>,
 <literal role="attribute">namest</literal> or  <literal role="attribute">nameend</literal>)
is not a  <literal role="attribute">colname</literal> of a <literal role="element">
colspec</literal> in that  <literal role="element">tgroup</literal>; </para>
</listitem>
<listitem><para>any of those names are multiply defined in different <literal
role="element">colspec</literal>s of that  <literal role="element">tgroup</literal>;</para>
</listitem>
<listitem><para>any portions of different <literal role="element"> entry</literal>s
overlap each other;</para>
</listitem>
<listitem><para>morerows vertical straddling extends beyond the rows appropriate
to that <literal role="element">thead</literal> or <literal role="element">tbody</literal>;</para>
</listitem>
<listitem><para>too many <literal role="element">entry</literal>s occur in
any <literal role="element">row</literal>, exceeding the cols on the <literal
role="element">tgroup</literal>; </para>
</listitem>
<listitem><para>any <literal role="attribute">colname</literal>s used in <literal
role="attribute">namest</literal> and  <literal role="attribute">nameend</literal>
to define a span in an <literal role="element">entry</literal> refers to the
 <literal role="attribute">namest</literal> column that is not to the left
of the <literal role="attribute">nameend</literal> column;</para>
</listitem>
<listitem><para>an <literal role="element">entry</literal> specifies a start
column via <literal role="element">entry</literal>'s <literal role="attribute">namest</literal>
or  <literal role="attribute">colname</literal> that is to the left of the
column where the <literal role="element">entry</literal> would be placed by
default. </para>
</listitem>
</itemizedlist>
<para>It is recommended that an authoring or editing implementation or any
implementation that verifies the compliance of the table markup to this Memorandum
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 <literal role="element">entry</literal> 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><literal role="attribute">colname</literal> &mdash; column name</title>
<para>Column name of <literal role="element">entry</literal>. Ignore if <literal
role="attribute">namest</literal> is present. It is an error if  <literal
role="attribute">colname</literal> is not defined in a  <literal role="element">colspec</literal>
of the current  <literal role="element">tgroup</literal>.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>NMTOKEN</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (column(s) determined by  <literal role="attribute">namest</literal>
or implicitly the next.)</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">namest</literal> &mdash; name of starting
column for this entry</title>
<para>Name of leftmost column of span. The value must be some <literal role="attribute">colname</literal>
in a  <literal role="element">colspec</literal> of the current  <literal role="element">tgroup</literal>.
A  <literal role="attribute">namest</literal> on an entry with no  <literal
role="attribute">nameend</literal> specification indicates the single column
so named, though  <literal role="attribute">colname</literal> is usually used
for such a specification. If neither  <literal role="attribute">namest</literal>
nor  <literal role="attribute">colname</literal> occur, the  <literal role="element">entry</literal>
goes in the next column in sequence to the right, skipping over any encroachment
from a prior row via <literal role="element">entry morerows=N</literal>. It
is an error if the  <literal role="attribute">namest</literal> value is not
defined in a <literal role="element">colspec </literal> for the current <literal
role="element">tgroup</literal>. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>NMTOKEN</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (implies this attribute has no effect on spanning) </para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">nameend</literal> &mdash; name of ending
column for this entry</title>
<para>Name of rightmost column of span. The value must be some <literal role="attribute">colname</literal>
in a  <literal role="element">colspec</literal> of the current  <literal role="element">tgroup</literal>.
The column must be to the right of the column identified by  <literal role="attribute">namest</literal>.
A  <literal role="attribute">nameend</literal> attribute without a  <literal
role="attribute">namest</literal> is ignored.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>NMTOKEN</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (implies this attribute has no effect on spanning) </para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">morerows</literal> &mdash; number of additional
rows in a vertical span</title>
<para>There shall be at least that many more rows in the appropriate <literal
role="element">thead</literal> or  <literal role="element">tbody</literal>.
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>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>NUMBER</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (interpret as &ldquo;0&rdquo;)</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">colsep</literal> &mdash; column separators
(vertical ruling)</title>
<para>If other than zero, display the internal vertical column ruling at the
right of the  <literal role="element">entry</literal>; if zero, do not display
it. Ignored for the last column of a <literal role="element"> row</literal>,
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>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>%yesorno; (NMTOKEN)</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED, from the closest element in the inheritance path: </para>
<itemizedlist>
<listitem><para><literal role="element">colspec</literal> then</para>
</listitem>
<listitem><para><literal role="element">tgroup</literal> then</para>
</listitem>
<listitem><para><literal role="element">table</literal>.</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
</variablelist>
<para>Note that if a <literal role="element">tgroup</literal> or <literal
role="element">table</literal> 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>
<title><literal role="attribute">rowsep</literal> &mdash; row separators (horizontal
ruling)</title>
<para>If other than zero, display the internal horizontal row ruling below
the <literal role="element">entry</literal>; if zero, do not display it. Ignored
for the last  <literal role="element">row</literal> of  <literal role="element">tgroup</literal>
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>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>%yesorno; (NMTOKEN)</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED, from the closest element in the inheritance path: </para>
<itemizedlist>
<listitem><para><literal role="element">row</literal> then</para>
</listitem>
<listitem><para><literal role="element">colspec</literal> then</para>
</listitem>
<listitem><para><literal role="element">tgroup</literal> then</para>
</listitem>
<listitem><para><literal role="element">table</literal>.</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
</variablelist>
<para>Note that if a <literal role="element">tgroup</literal> or <literal
role="element">table</literal> 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>
<title><literal role="attribute">align</literal> &mdash; horizontal alignment
of table entry content</title>
<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>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>The enumerated values are: </para>
<informaltable frame="bottom" pgwide="1"><tgroup cols="2"><colspec colwidth="1in"
colsep="1"/>
<thead><row><entry>Value</entry><entry>Alignment</entry></row></thead>
<tbody><row>
<entry>left</entry>
<entry>Flush left</entry>
</row><row>
<entry>center</entry>
<entry>Centered</entry>
</row><row>
<entry>right</entry>
<entry>Flush right</entry>
</row><row>
<entry>justify</entry>
<entry>Flush left and right</entry>
</row><row>
<entry>char</entry>
<entry><para>Align text to the leftmost occurrence of the value of the non-null
attribute <literal role="attribute">char</literal> value. </para></entry>
</row></tbody></tgroup></informaltable>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED (means use value from nearest applicable  <literal role="element">colspec</literal>
of the nearest ancestral <literal role="element">tgroup</literal>. If none,
then &ldquo;left&rdquo;.) </para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">char</literal> &mdash; alignment character</title>
<para>If character alignment is specified, the value of the char attribute
is the single alignment character on which the first to occur of this character
in the  <literal role="element">entry</literal> 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 <literal role="element">entry</literal>,
the  <literal role="element">entry</literal> right aligns to the left of the
charoff position.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>CDATA</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED, from <literal role="element">colspec</literal> else there is
no aligning character.</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">charoff</literal> &mdash; horizontal offset
of alignment character</title>
<para>When character alignment is specified for this  <literal role="element">entry</literal>,
horizontal character offset is the percent of the current column width to
the left of the (left edge of the) alignment character.</para>
<para>This value should be number, greater than 0 and less than or equal to
100. </para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>NMTOKEN</para>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED, from <literal role="element">colspec</literal> else "50" (i.e.,
50%).</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<section>
<title><literal role="attribute">valign</literal> &mdash; vertical alignment</title>
<para>Text vertical positioning within the  <literal role="element">entry</literal>.</para>
<variablelist>
<varlistentry><term>Declared value</term>
<listitem>
<para>The enumerated values are: </para>
<informaltable frame="bottom" pgwide="1"><tgroup cols="2"><colspec colwidth="1in"
colsep="1"/>
<thead><row><entry>Value</entry><entry>Alignment</entry></row></thead>
<tbody><row>
<entry>top</entry>
<entry>top</entry>
</row><row>
<entry>middle</entry>
<entry>approximately vertically centered</entry>
</row><row>
<entry>bottom</entry>
<entry>bottom</entry>
</row></tbody></tgroup></informaltable>
</listitem>
</varlistentry>
<varlistentry><term>Default</term>
<listitem>
<para>IMPLIED from the closest ancestor with explicit specification of valign:</para>
<itemizedlist>
<listitem><para><literal role="element">row</literal> then</para>
</listitem>
<listitem><para><literal role="element">thead</literal> or <literal role="element">tbody</literal>.</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
</variablelist>
</section>
</section>
</section>
</section>
<appendix>
<title>Glossary</title>
<variablelist>
<varlistentry id="glspan"><term>span</term>
<listitem>
<para>A spanning table cell is one that occupies more than one column. In
this DTD, the only way a table cell  (<literal role="element">entry</literal>)
can span is by specifying both <literal role="attribute">namest</literal>
and  <literal role="attribute">nameend</literal> attributes. </para>
<para>Spanning and straddling are independent; a spanning cell can also straddle.</para>
</listitem>
</varlistentry>
<varlistentry id="glstraddle"><term>straddle</term>
<listitem>
<para>A straddling table cell is one that occupies more than one row. In this
DTD, the only way a table cell  (<literal role="element">entry</literal>)
can straddle multiple rows is by specifying a <literal role="attribute">morerows</literal>
attribute. </para>
<para>Spanning and straddling are independent; a spanning cell can also straddle.</para>
</listitem>
</varlistentry>
</variablelist>
</appendix>
<appendix>
<title>Acknowledgements</title>
<para>The following contributed to the development of this Memorandum:</para>
<itemizedlist>
<listitem><para>Harvey Bingham</para>
</listitem>
<listitem><para>Carla Corkern (ISOGEN)</para>
</listitem>
<listitem><para>Tony Graham (Mulberry Technologies)</para>
</listitem>
<listitem><para>Paul Grosso (Arbortext)</para>
</listitem>
<listitem><para>Eduardo Gutentag (Sun Microsystems)</para>
</listitem>
<listitem><para>Ken Hollman (Crane Softwrights)</para>
</listitem>
<listitem><para>Eve Maler (Arbortext)</para>
</listitem>
<listitem><para>Norbert Mikula (DataChannel)</para>
</listitem>
<listitem><para>Nam Jin Son (ISOGEN)</para>
</listitem>
<listitem><para>Marcy Thompson (ISOGEN)</para>
</listitem>
<listitem><para>B. Tommie Usdin (Mulberry Technologies)</para>
</listitem>
<listitem><para>Norman Walsh, Chair (Arbortext)</para>
</listitem>
</itemizedlist>
</appendix>
</article>
<?Pub *0000065627 0?>
