14 May 2001 
 SPECS/DOCUMENTS/Technical Work

CALS Table Model Document Type Definition

OASIS Technical Memorandum TM 9502:1995

Harvey Bingham, Interleaf
Chair, Table Interchange Subcommittee
OASIS
1995 October 19

© 1995 OASIS. 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.

Abstract

This OASIS Technical Memorandum consists of a recommendation for an update to the CALS table model DTD model that will be submitted to the appropriate CALS authority with the expectation that it will be accepted as the next revision of the official CALS table model and that a Formal Public Identifier will be assigned to facilitate referencing of this model.

Note that the set of element and attribute declarations in the markup declaration module section of this document partially defines the CALS 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.

Technical Memorandum 9502:1995
 Committee Draft: 1995 August 2
 Committee Draft: 1995 August 14
 Final Technical Memorandum: 1995 October 19

Introduction

This OASIS recommendation for an update to the CALS table model DTD model will be submitted to the appropriate CALS authority with the expectation that it will be accepted as the next revision of the official CALS table model and that a Formal Public Identifier will be assigned to facilitate referencing of this model.

Specific changes of substance from the table model contained in the Example DTD published in MIL-HDBK-28001 (30 June 95) include:

  • allow content model for table to include title on the graphic+ form of table content when there are no tgroups;
  • change most explicit attribute defaults from value to #IMPLIED to allow value inheritance, possibly from a style sheet (i.e., tocentry on <table>; align, char, and charoff on <tgroup>; valign on <tbody>, <thead>, and <tfoot>; and rotate and morerows on <entry>);
  • repair an error in <entrytbl> content model to eliminate the one or more repetitions of (colspec*,spanspec*,thead?,tbody)+.

Finally, a Formal Public Identifier is suggested.

Note that the set of element and attribute declarations in the next section of this document partially defines the CALS 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.

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, analogous structure of entrytbl, 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.

CALS Table model DTD module

Semantic description for the CALS table model

Note that the above set of element and attribute declarations in the previous section only partially defines the CALS 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.

Element and attribute description for <table>Element/AttributeFull NameDescription

<table

Table

Identifies a table.

Optional Attributes

frame =x

FRAME: Describes position of outer rulings.
 Declared Value = sides (left and right), top (below title), bottom (after last <row> possibly of <tfoot> material), 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 or entry tables that appear at the edges of the table.
Default = IMPLIED (implies value from tabstyle, possibly in style specification if available, if not, implies "all").

colsep =x

COLSEP: Default for all <tgroup>s in this <table>. If a number other than zero, display the internal column rulings to the right of each <entry> or <entrytbl>; if zero, do not display them. Ignored for the rightmost column, where the frame setting applies.
Declared Values = %yesorno; (NUMBER)

Default = IMPLIED (implies value from tabstyle in style specification if available, if not, implies "1").

rowsep =x

ROWSEP: Default for all <tgroup>s in this <table>. If other than zero, display the internal horizontal row ruling below each <entrytbl> or <entry> ending in a <row>. If zero, do not display them. Ignored for the last <row> of the <table>, where the frame value applies.
Declared Value = %yesorno; (NUMBER)
 Default = IMPLIED (implies value from tabstyle if used, if not, implies "1").

tabstyle =x

tocentry =x

shortentry =x

TABSTYLE: The identifier for a table style defined for the application, possibly in the style specification.
 Declared Value = NMTOKEN
Default = IMPLIED (no external style attribute definitions specified)

TOCENTRY: If other than zero, and the <title> is present, this table <title> should be included in the list of tables. (Ignore that table title in forming the list of tables if the optional <title> is omitted.)
Declared Value = %yesorno; (NUMBER)
Default = IMPLIED (implies value from style specification if any, else "1").

SHORTENTRY: If the value is zero, the element's <shorttitle> (or <title>, if no short title is given) is not used in the <coverindex> or any other type of compiled listing. Any other numeric value triggers the use of the <shorttitle>, or <title> in its absence. It is an error if neither <shorttitle> nor <title> occur and shortentry is non-zero.
Declared Value = %yesorno; (NUMBER)
Default = IMPLIED (implies value from style specification if any, else "0").

orient =x

ORIENT: Orientation of the entire <table>.
Declared Value = port (table writing direction, along rows, is parallel to the marginal page header and footer text), or land (table writing direction is 90 degrees counterclockwise to header/footer text). The land value means 90 degrees counterclockwise from the current page orientation. The land value only rotates the table content, not the page header/footer. No non-table material need go in the presentation area of a page with a land table.
Default = IMPLIED (implies value from tabstyle in style specification if available, if not, implies "port").

pgwide =x

PGWIDE: If zero, the maximum available width for the <table> 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 <table> 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".
Declared Value = %yesorno; (NUMBER)
Default = IMPLIED (implies value from the style specification if available, if not, the default is determined by the presentation system).

%bodyatt;

%BODYATT;: Any of the attributes in the associated Attribute Set may be used with this element.
 Default = As appropriate for each attribute in the set.

%secur;>

%SECUR;: Any of the attributes in the associated Attribute Set may be used with this element.
 Default = As appropriate for each attribute in the set.

Element and attribute description for <tgroup>Element/AttributeFull NameDescription

<tgroup

Table Group

Each <tgroup> effectively identifies a new portion of a <table>. The <colspec>s and <spanspec>s and the colnames and spannames in each <tgroup> are independent of any other <tgroup>. The <colspec>s in a <tgroup> apply to its <tbody>. The <colspec>s in a <tgroup> shall be in left-to-right column order. Explicit colnums in the different <colspec>s of a <tgroup> shall be unique, in ascending order left-to-right, in the range 1 to the number of <colspec>s, which is not to exceed the value of the cols attribute of <tgroup>.

The colnames in the different <colspec>s of a <tgroup> shall be unique. (A colname may have the same value as the colnum of the same <colspec> if restricted to digits.) The <colspec>s of <tbody> also apply to <thead> and <tfoot>, unless replaced by <colspec>s in a <thead> or <tfoot>. Such replacement <colspec>s are confined to affecting the <thead> or <tfoot> in which they occur. They do not replace any like-named or numbered <colspec>s in the <tgroup> for use in <tbody>.

All <tgroup>s of a <table> shall have the same width, so the <table> frame can surround them uniformly. Each <thead>, <tfoot>, and <tbody> has that total width as well. Let the minimum table width by the sum of the fixed portions of the set of <colspec> colwidths in any of <tgroup>, <thead>, and <tfoot> which should not exceed the indicated total width, determined from the <table> 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.

cols =x

tgroupstyle =x

colsep =x

The total width may be specified with colwidths having some fixed parts and some proportional parts. When any proportional parts are specified, the unit proportion is determined by starting with the target table width determined from the <table> pgwide value non-zero for full width, "0" for galley column width (possibly affected by current indents). Reduce that by sum of border widths and column ruling widths and the fixed parts of the various <colspec> colwidths to get the available proportional width. Sum the proportional factors N over all columns with proportional parts "N*" and including "1*" for each implicit colwidth when the value of the <tgroup> cols exceeds the number of <colspec>s in that <tgroup>. 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 <colspec>.
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.

Required Attribute

COLS: Number of columns in the <tgroup>.
 Declared Value = NUMBER

Optional Attributes

TGROUPSTYLE: A name for a unique <tgroup> style, possibly defined in a style specification. The tgroupstyle needn't be unique across all <table>s tagged to the DTD.
 Declared Value = NMTOKEN
Default = IMPLIED (no external style attribute definitions specified)

COLSEP: Default for all <colspec>s in this <tgroup>. If other than zero, display the internal column rulings to the right of <entry> or <entrytbl>; if zero, do not display them. Ignored for the last column, where the frame setting applies. Possible default source for <spanspec>, <entrytbl>, or <entry>.
 Declared Value = %yesorno; (NUMBER)
Default = IMPLIED, value from tgroupstyle if any, else from <table> if any, else "1"

rowsep =x

ROWSEP: Default for <colspec>s in this <tgroup>. If other than zero, display the internal horizontal row ruling below each <entry> or <entrytbl> . If zero, do not display them. Ignored for the last <row> of the <table>, where the frame value applies. Possible default source for <spanspec>, <row>, <entrytbl>, or <entry>.
Declared Value = %yesorno; (NUMBER)
 Default = IMPLIED, (means use value from tgroupstyle if any, else from <table> if any, else "1").

align =x

ALIGN: 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.
Declared Value = 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.)
Default source for <colspec> align. Possible default source or <spanspec>, <entrytbl>, or <entry>.
 Default = IMPLIED (means use value from tgroupstyle if any, else "left".)

char =x

CHAR: If align="char", the value is the single alignment character source for any implied char values for <colspec> in this <tgroup> The char shall not be an SDATA entity.
Default source for <colspec> char. Possible default source for <spanspec>, <entrytbl>, or <entry>.
Declared Value = CDATA
Default = IMPLIED (means use value from tgroupstyle if any, else "" meaning right-alignment of content that is #PCDATA or other inline text to the left of charoff).

charoff =x

CHAROFF: For align ="char", percent of the current column width to the left of the (left edge of) the alignment character specified in char value.
Default source for <colspec> charoff. Possible default source for <spanspec>, <entrytbl>, or <entry>.
Declared Value = NUTOKEN
Default = IMPLIED (means use value from tgroupstyle if any, else "50").

%secur;>

%SECUR;: Any of the attributes in the associated Attribute Set may be used with this element.
 Default = As appropriate for each attribute in the set.

Element and attribute description for <colspec>Element/AttributeFull NameDescription

<colspec

colnum =x

colname =x

colwidth =x

colsep =x

rowsep =x

align =x

char =x

charoff =x>

Column Specification

Specifies a column, a vertical portion of a <table>, or <entrytbl>. The default values come from the <tgroup>, <thead>, or <tfoot> starting the current (enclosing) group. Each <colspec> is for a single column, so it properly has a column number, colnum, implicitly in order starting from 1, and an optional colname by which it is known when used in any <spanspec> or in <entrytbl> or <entry>. A set of <colspec>s on <thead> or <tfoot> should be complete for all columns (and if any <colspec> is explicitly provided in a <thead> or <tfoot>, any missing <colspec>s are implicitly supplied). This set overrides those on the containing <tgroup> and applies to just the <thead> or <tfoot>. Any references from <entry>s within the <thead> or <tfoot> to colname, namest, or nameend refer to values defined by the set of <colspec>s in the <thead> or <tfoot>. If there is no <colspec> used within a <thead> or <tfoot>, then the <colspec>s of the containing <tgroup> or <entrytbl> are used. <Colspec>s from the containing <tgroup> apy to <tbody>.

The number of columns should be determined by the cols attribute on the <tgroup> element, not by the number of <colspec>s actually defined. If the number in cols is larger than the number of <colspec>s, then additional <colspec>s of colwidth "1*" should be inferred. <colspec>s can be numbered or unnumbered, and if numbered should be increasing in sequential order starting at 1. Unnumbered <colspec>s are interpreted as being numbered incrementally (one more than the previous column number), with the first <colspec> starting at 1. Any mismatch in <colspec> numbering, or a number of <colspec>s greater than cols, is an error.

Optional Attributes

COLNUM: Number of column, counting from 1 at left of the table. The value of colnum is not useful to identify a column in either a <spanspec>, <entrytbl>, or <entry>, so serves no functional purpose other than a consistency check on the order of the <colspec>s.
 Declared Value = NUMBER
Default = IMPLIED (colspec is the next one in order)

COLNAME: Name of column, used to specify the position or horizontal span of columns in a row, by reference in <entry> or <entrytbl> using colname, or namest with nameend. Also used by reference with namest and nameend in <spanspec>.
 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 <tgroup> and <entrytbl>.
Declared Value = NMTOKEN
Default = IMPLIED (colspec cannot be referenced without colname)

COLWIDTH: Either proportional measure of the form number*, i.e., "5*" for 5 times the proportion, or "*" (which is equivalent to "1*"); fixed measure, i.e., 2pt for 2 point, 3pi for 3 pica; or mixed measure, i.e., 2*+3pt. Coefficients are positive integers or fixed point numbers.
 Declared Value = CDATA
Default = IMPLIED (means obtain value from a named style specification if any. If there is no such value, or if the value is "" [the null string] then assume a proportion of "1*".)

The fixed unit values are case insensitive. The standard list of allowed unit values is "pt" (points), "cm" (centimeters), "mm" (millimeters), "pi" (picas), and "in" (inches). The default fixed unit should be interpreted as "pt" if neither a proportion nor a fixed unit is specified.

COLSEP: Default for <entry>s or <entrytbl> starting in this column (within the <tgroup> or <entrytbl>).
Default for <spanspec> whose namest matches this colname.
Declared Value = %yesorno; (NUMBER)
Default = IMPLIED, from closest ancestor <entrytbl> if any or <tgroup>.

ROWSEP: Default for <spanspec> with namest matching this colname. Default for <entry>s or <entrytbl>s starting in this column and not determined by spanname, if no rowsep value is provided in the top <row> where their content is provided.
 Declared Value = %yesorno; (NUMBER)
Default = IMPLIED, from closest ancestor <entrytbl> if any or <tgroup>.

ALIGN: Text horizontal position within the column or spanning columns.
Declared Value = left, (quad flush left), center (centered), right (quad flush right), justify (both quad left and right), or char (positioned by charoff).
Possible default source for <spanspec> using this column as its namest, or for <entrytbl> or <entry>
Default = IMPLIED (means use value from <tgroup> if any, or its tgroupstyle, else "left".)

CHAR: Default source for <spanspec>, and <entry>s or <entrytbl>s starting in this column. If align ="char", the value is the single alignment character source for any implied char values for <entry> immediately in this column The char shall not be an SDATA entity.
 Declared Value = CDATA
Default = IMPLIED, from closest ancestor: <entrytbl> if any or <tgroup>.

CHAROFF: Default source for <entry>s or <entrytbl>s starting in this column. For align="char" on an <entry> 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.
Declared Value = NUTOKEN
Default = IMPLIED, from closest ancestor: <entrytbl> if any or <tgroup>.

Element and attribute description for <spanspec>Element/AttributeFull NameDescription

<spanspec

namest =x

nameend =x

spanname =x

colsep =x

rowsep =x

align =x

Spanned Column Specification

Identifies a horizontal span of columns and associated attributes that can subsequently be referenced by its spanname for repeated use in <entry>s or <entrytbl>s in different <row>s. A <spanspec> is defined in its context: <tgroup> or <entrytbl>. (The <spanspec>s from the containing <tgroup> apply to <tbody>.) A <spanspec> uses column names from <colspec>s defined in that context. It gets default values from the <colspec> that provides the namest. Namest and nameend identify the first and last columns in increasing left-to-right order that identify the span. The reason colname is used rather than colnum in identifying <spanspec> is that the names are independent of revisions that may change the number of inserted/deleted columns, as long as namest remains to the left of (has a smaller colnum than) nameend. In a <thead> or <tfoot>, if any <colspec>s are redefined, the <tgroup> <spanspec>s are ignored in references to spanname from <entry>s within this <thead> or <tfoot>. When such redefinition occurs, any spaing should be by namest and nameend.

Required Attributes

NAMEST: Name of leftmost column of span. Name must refer to some colname in a <colspec> of the nearest ancestor <entrytbl> if any or <tgroup>.
Declared value = NMTOKEN

NAMEEND: Name of rightmost column of span. Name must refer to some colname in a <colspec> of the nearest ancestor <entrytbl> if any or <tgroup>.
Declared value = NMTOKEN

SPANNAME: Name of the horizontal span. Source for <entrytbl> or <entry>.
Declared value = NMTOKEN

Optional Attributes

COLSEP: Default for all <entry>s (or <entrytbl>s) that refer to this spanname in this context <tgroup> or <entrytbl>. If other than zero, default is to display the internal column ruling to the right of any affected <entry> (or <entrytbl>); if zero, default to not display it. Ignored for the last column, where the table frame setting applies.
Declared Value = %yesorno; (NUMBER)
Default = IMPLIED, from namest column's <colspec>.

ROWSEP: Default for top <row> of <entry>s (or <entrytbl>s) that refer to this spanname in this context <tgroup> or <entrytbl>. If other than zero, display the internal horizontal row ruling below each <entry> or <entrytbl>. If zero, do not display it. Ignored for the last row of the table, where the frame specification determines the ruling.
Declared Value = %yesorno; (NUMBER)
Default = IMPLIED, from namest column's <colspec>.

ALIGN: Text horizontal position within the spanning columns.
Declared Value = left, (quad flush left), center (centered), right (quad flush right), justify (both quad left and right), or char (positioned by charoff).
Possible default source for <entry> or <entrytbl> referring to this spanname.
Default = IMPLIED (means use value from tgroupstyle if any, else "center".)

char =x

CHAR: Default for all <entry>s (or <entrytbl>s) that refer to this spanname in this <tgroup>; or within an <entrytbl> for all <entry>s that refer to the spanname local to that <entrytbl>. If align="char", the value is the single alignment character on which the first to occur of this character in any <entry> that uses this spanname with implied charoff and align="char" is aligned. Entries not containing this character are right-aligned to the left of the charoff position. The char shall not be an SDATA entity.
Declared Value = CDATA
 Default = IMPLIED, from namest column's <colspec>.

charoff =x>

CHAROFF: Default for all <entry>s (or <entrytbl>s) that refer to this spanname in this <tgroup>; or within an <entrytbl> for all <entry>s that refer to the local spanname from a <spanspec> in that <entrytbl>. For align="char", provides the percent of the width of the current span of columns to the left of the (left edge of) the alignment character for <entry>s that use this spanname with implied charoff and align="char".
Declared Value = NUTOKEN
 Default = IMPLIED, from namest column's <colspec>.

Element and attribute description for <thead>Element/AttributeFull NameDescription

<thead

Table Head

Identifies the heading <row>s of a <tgroup> or <entrytbl>, displayed as the first rows, and again at the top of any continuation after a physical break between <rows> in <tbody>.

Any occurrence of <colspec> to redefine a column redefines the full set with its own name space and using the same total width as the enclosing <tgroup> or <entrytbl>. (An implicit default <colspec> with a width of "1*" is assumed for any <colspec> not explicitly redefined.) These redefined <colspec>s apply only to the contained <entry>s. References to spanname in such <entry>s are not supported; if spanning is required, use namest and nameend. If no <colspec>s occur in this <thead>, the <colspec> and <spanspec> sets of the containing <tgroup> apply.

Optional Attributes

valign =x

VALIGN: Default text vertical positioning within the <entry>s.
Declared Value = top, middle (approximately vertically centered), or bottom. Provides default value for <row>s and <entry>s in <thead>.
Default = IMPLIED (implies "bottom").

%secur;>

%SECUR;: Any of the attributes in the associated Attrib