14 May 2001 
 SPECS/DOCUMENTS/Technical Work

TABLE INTEROPERABILITY: Issues for the CALS Table Model

OASIS Technical Research Paper 9501:1995

Eric Severson , Interleaf
 Co-chair, Table Interchange Subcommittee
 OASIS

 Harvey Bingham, Interleaf
Co-chair, Table Interchange Subcommittee
 OASIS
 1995 November 21

© 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

To help address the existing interoperability issues when using tabular material ("tables") in SGML implementations, SGML Open's Technical Committee formed a Table Interchange subcommittee to research these issues.

Because the CALS table model has proliferated widely, it was chosen as the initial starting point. Although it has evolved to the point of a de facto standard, the specification leaves a large number of semantics open to interpretation which in turn has made interoperability difficult to achieve. As its first major task, the Committee therefore set out to identify and document ambiguities in the CALS table model specifications, identify and document related interoperability issues between OASIS vendor products, and lay the groundwork for developing a proposed clarification of the standard that will minimize ambiguity and maximize interoperability.

This paper summarizes the results of this initial work, identifies the sources of current interoperability issues for the CALS model, and summarizes the most common set of practices currently followed by SGML Open vendors.

Technical Research Paper 9501:1995
 Committee Draft: 1995 May 10
Committee Draft: 1995 August 5
 Final Draft Technical Research Paper: 1995 September 15
 Final Technical Research Paper: 1995 November 21

Background

For the last several years, SGML users have been pointing out that there are major interoperability issues when using tabular material ("tables") in SGML implementations. First, SGML itself does not prescribe any standard way of encoding tables, leaving that to individual applications which may have taken different, possibly incompatible approaches. Furthermore, even when an application standard has been defined (such as the U.S. Department of Defense CALS model), different vendors' products may handle the same table in different ways.

Recognizing the importance of this issue, OASIS's Technical Committee formed a Table Interchange subcommittee in 1994 to research current interoperability issues and recommend changes that would resolve the bulk of these problems. The Committee's mission has involved two fundamental goals:

  • to promote the interoperability of SGML tables throughout the OASIS vendor base; and
  • to suggest a framework for the next generation of SGML table markup, with a focus on data representation in addition to table geometry and formatting.

 Because the CALS table model in particular has proliferated widely, appearing in a large number of other applications, it was chosen as the initial starting point. Although it has evolved to the point of a de facto standard, the CALS table model's design was never actually completed. The specification leaves a large number of semantics open to interpretation which in turn has made interoperability difficult to achieve.

As its first major task, the Committee therefore set out to identify and document ambiguities in the CALS table model specifications, identify and document related interoperability issues between SGML Open vendor products, and lay the groundwork for developing a proposed clarification of the standard that will minimize ambiguity and maximize interoperability.

This paper summarizes the results of this initial work, identifies the sources of current interoperability issues for the CALS model, and summarizes the most common set of practices currently followed by SGML Open vendors.

A brief introduction to the CALS table model

The present "baseline" CALS table model was officially released on 26 June 1993 as part of the U.S. Department of Defense SGML standard MIL-M-28001B. First released in 1990 as part of the previous MIL-M-28001A specification, it has now been adopted, sometimes with small modifications, in a large variety of non-military industry applications. These include commercial aerospace (ATA and AECMA), computer documentation (DocBook), automotive (J2008), semiconductors (Pinnacles), telecommunications, and many site-specific uses. Even within the Department of Defense, several versions have evolved (e.g., 38784C vs. 38784D vs. Navy MID, etc.).

Designed to handle a variety of complex tables in military technical documents, the CALS table model focuses on encoding two-dimensional row and column geometry with basic formatting features such as cell alignment, borders, and rotation. It anticipates complex cell content, such as multiple paragraphs, lists, and graphics, and even provides for one level of nested tables within cells. Other than providing a facility for logically naming columns (e.g., "state" and "population" rather than simply "column 1" and "column 2"), it does not address semantic encoding of the content. Structurally, the CALS table model presumes that tables are made up of an optional title plus one or more TGROUPs, each of which has its own body (TBODY) and its own independent set of optional column headings (THEAD) and footings (TFOOT). The column definitions for each TGROUP are provided by COLSPEC elements, which can be inferred if desired, and special COLSPECs can be provided for THEAD and TFOOT.

Each THEAD, TBODY, and TFOOT section within a TGROUP is made up of a series of ROWs. ROWs are formed as a left-to-right sequence of cells (ENTRYs), which can contain mixtures of text, graphics, and more complex structural objects such as list items. An ENTRY may span more than one column (horizontal spanning) and more than one row (vertical spanning), depending on how its attributes are set. As a shortcut for defining horizontal spans, optional SPANSPEC elements can be added at the TGROUP level, each referring to spans across column names defined in COLSPECs.

A table cell can contain either a simple ENTRY or an ENTRYTBL, which is essentially a table-within-a-table. ENTRYTBLs cannot contain TGROUPs (they are implicitly a TGROUP themselves), and cells within an ENTRYTBL cannot contain other ENTRYTBLs. Also, although ENTRYTBLs may span more than one column, they are constrained to one row.

Cell formatting attributes are limited to text alignment (both horizontal and vertical), cell borders (rulings), and rotation. For all but the last of these there is a complex inheritance scheme that allows values to be defaulted and overridden at multiple levels.

The dimensions of tables interoperability

Interoperability potentially covers anything that would surprise a user when moving tables between different SGML systems. In essence, it has to do with answering the key question of the frustrated user: "If I spent time and energy getting this table right on one SGML system, why doesn't it automatically work on another?"

However, interoperability is not as straightforward as one might think. In fact, it is to some extent in the eyes of the beholder. Interoperability can be defined (and is defined by users) in at least two different ways:

  • Preservation of SGML syntax (exact set of SGML tags and attributes must not change as a table is passed through multiple systems in sequence—i.e., imported and then re-exported at each step).
  • Preservation of format (visual appearance of the table must not change as table is passed through multiple systems in sequence—i.e., imported and then re-exported at each step).

 In the first, data-centric view, detailed differences in format are tolerated when rendering across different systems. However, it is essential that original SPANSPEC definitions, for example, are faithfully carried through from input to output. It is also essential to maintain and allow edits to data (e.g., TFOOT) that is not supported for rendering purposes. Put another way, users are not surprised if their tables don't always look the same, but are upset if any of the detailed tags or attributes change when passed through multiple systems.

In the second, appearance-centric view, detailed differences in SGML syntax are tolerated when interchanging tables between different systems. It doesn't matter, for example, that original SPANSPECs are transformed into individual spanned cells, with a new set of SPANSPECs generated upon export. What is essential is that the table continues to look the same. Put another way, users are not surprised if detailed tags or attributes change when passed through multiple systems, but are upset if their tables don't always look the same.

Ideally we would achieve both kinds of interoperability simultaneously. However, in practice part of the interoperability problem comes from the difference in these two viewpoints, and from not understanding these differences. As vendors we must have a very clear definition that can be readily understood by users. But users must also understand the limits of any definition, realizing that interoperability is partly implementation and partly education.

Interoperability must also be carefully defined at a specific level. For example, one user might conclude format has been preserved if the all cells maintain the same left, right, top, and bottom borders. Another might disagree because line widths are different between two systems. This becomes especially tricky when the difference between page-oriented and pageless systems is considered. "Looking the same" is not an intuitively obvious judgment.

Of course, the keys to interoperability must still be addressed through specific features and functional behavior of the products themselves. Thus another cut at interoperability, one which we have adopted here, breaks the issues down into three implementation-oriented categories:

  • Differences in supported features (e.g., Vendor A supports ENTRYTBL, Vendor B does not; therefore tables have to be handled differently when moving data between systems).
  • Differences in interpretation of supported features (e.g., both Vendor A and Vendor B support COLSEP, but Vendor A interprets it as the left separator, Vendor B interprets it as the right; therefore tables look different when moving data between systems). These differences may come in several forms:
    • Differences in the specific semantic attached to a tag or attribute (e.g., does FRAME override the borders of outside cells, or does it constitute an entirely separate "frame" around the whole table?).
    • Differences in the assumed defaults where none are specified (e.g., does #IMPLIED all the way to the top level mean that cell rulings are assumed on or off?).
    • Differences in inheritance path/precedence order (e.g., does formatting on SPANSPEC override that of COLSPEC or vice versa?).
    • Mismatches when dealing with redundant information (e.g., Vendor A uses COLNAME and ignores NAMEST, but Vendor B uses NAMEST and ignores COLNAME).
  • Differences in definition and handling of error conditions (e.g., when defined cell alignment conflicts between the ENTRY and an applied SPANSPEC, Vendor A arbitrarily uses the SPANSPEC definition, Vendor B identifies an ambiguity and rejects the table; therefore an "acceptable" table on one system may be rejected by another).

In a perfect world, competent vendors acting in good faith would avoid any such differences between their products. However, Einstein's "God is in the details" applies here with a vengeance. Two products may easily seem to support the same feature set in the same manner; for example, each might support the use of COLSPECs and allow the number of COLSPECs to differ from the defined number of COLS. But upon deeper inquiry, it can turn out that one assumes the actual number of columns is defined by COLS, inferring COLSPECs if needed and ignoring any excess COLSPECs, while the other uses the number of COLSPECs to determine the actual number of columns, resetting COLS to match. Thus, even though things seem to match up at a high level, in fact a subtle but potentially quite serious interoperability problem exists.

Finally, in analyzing interoperability it is important to understand what the underlying model was actually intended to do. The CALS table model, for example, was purposely designed to deal only with the structural aspects of tabular information, together with basic presentation choices (e.g., rulings around cells, alignment, etc.). It was not meant to dictate precise rules for typesetting, composition or screen display, or the complex interactions between table and page layout. Nor does it specify how to handle errors. If we try to measure interoperability at a higher level of precision, we have already gone beyond the scope of the CALS table model itself.

Our definition of interoperability

We have chosen to define interoperability in terms of the ability to support an agreed-upon exchange feature set using an agreed-upon, unambiguous set of semantics. We assume that standards for identifying and processing error conditions must be included as part of the agreed-upon semantics.

We believe this provides a pragmatic working definition that vendors and users can both understand objectively. While not absolutely comprehensive, we think it will be sufficient to prevent any significant differences in the look and behavior of CALS tables when moving between OASIS vendor products. Of course, because of the complex nature of the interoperability problem, it is also important to note that some differences will inevitably continue to exist between individual products. Success must be measured in terms of removing all significant issues, not in achieving absolute perfection.

Methodology for the study

After a brief review of the CALS standard and current vendor products, the Committee recognized that the "interoperability issue" was in fact made up of a large number of subtle ambiguities and small differences in interpretation. Taken individually, each problem was minor and could easily escape notice. When added together, however, they created an overall issue with major implications.

Because the essence of the problem was lurking in the details, the Committee felt it was imperative to take a very thorough, rigorous approach. Therefore we began by combing through the existing CALS table model and related tag/attribute definitions, attempting to identify every possible area of potential ambiguity or misunderstanding. From this baseline, we then created a highly detailed vendor questionnaire, consisting of over one hundred questions designed to pinpoint all possible areas of difference between products. These were in turn broken down into eight major categories:

  • Backbone table structure/format.
  • Row/column structure.
  • Cell formatting - Column widths.
  • Cell formatting - Rotation and alignment.
  • Cell formatting - Cell borders.
  • Cell formatting - Inheritance.
  • Cell content.
  • General.

 Individual questions focused on both differences in the set of supported features across vendor products, and in the way each vendor had interpreted the semantic details. The "general" questions were designed to elicit comments that might shed additional light on the issues from slightly different angles. Furthermore, to minimize the possibility of misunderstanding, we encouraged participants to attach comments of unlimited length to each response. A complete list of survey questions is contained in Appendix A.

All OASIS vendors were invited to participate in filling out the questionnaire, with the goal of obtaining a large enough representative sample on which to base solid conclusions. In addition, we solicited input from other past and current members of the CALS technical committee that architected and now maintains the CALS table model. After this process was complete, we had obtained a wealth of information, including completed questionnaires for seven OASIS vendors that provide authoring, publishing, and electronic viewing products that support CALS SGML tables. While a few vendors elected not to participate for various reasons, a vast majority of the largest and most experienced SGML vendors were included, and virtually all OASIS vendors offering related products were members of our committee. Therefore we felt confident that our sample of seven vendors was a sufficient base for analysis.

After a few iterations in which vendors were allowed to obtain clarifications and refine their answers, results were formally tabulated in matrices and cross-analyzed to extract the key issues. See the detailed survey results in Appendix B. In the initial extraction process, we identified "significant" issues on the following basis:

  • If a specific feature appeared to be fully supported by less than two-thirds of our representative sample (i.e., by four or less vendors), this feature was identified as a significant issue.
  • If a specific semantic interpretation was not unanimously agreed upon, it was also identified as a significant issue.

A summary of the most commonly supported features was then constructed by excluding those features that had been identified as significant issues.

Similarly, a list of key ambiguities/differences was drawn up consisting of all specific semantics that had been identified as significant issues. A summary of most commonly supported semantic interpretations was formulated using the interpretation shared by the largest number of vendors in our sample.

Summary of findings

Vendors agreed on the great bulk of table features and semantic interpretations included in the survey. As expected, a number of detailed differences surfaced between the products surveyed. However, most of these were relatively subtle. Following our working definition of tables interoperability, we separated these into two fundamental categories, summarized below:

  • Differences in the specific set of features supported (e.g., some vendors support ENTRYTBL, some do not.
  • Differences in interpreting tag/attribute semantics (e.g., in the absence of a strict definition, vendors have made slightly different assumptions about how cell format attributes are inherited and overridden).

A summary of these results in matrix form can be found in Appendix B.

Unsupported Features

Our analysis shows the following features are generally unsupported:

  • Backbone Table Structure/Format: TFOOT, ORIENT attribute, PGWIDE attribute, TABSTYLE/TGROUPSTYLE attributes.
  • Row/Column Structure: Preservation of SPANSPEC/COLNAMEs from import through export, separate COLSPECs at the THEAD and TFOOT level, ability to redefine columns within THEAD and TFOOT.
  • Cell Formatting - Column Widths: decimal values for proportional COLWIDTHs, support for mixed COLWIDTHs (proportional plus fixed measure within same column).
  • Cell Formatting - Rotation and Alignment: ROTATE attribute, CHAROFF attribute.
  • Cell Formatting - Cell Borders: None.
  • Cell Formatting - Inheritance: Preservation of inheritance structure from import through export, inheritance of cell alignment/cell borders from SPANSPEC.
  • Cell Content: ENTRYTBL, and when supported multiple TGROUP equivalents within ENTRYTBL.

Differences in Interpretation

Our analysis shows there are differences in interpretation in the following areas:

  • Backbone Table Structure/Format: FRAME as override for outer cell borders, default for FRAME attribute.
  • Row/Column Structure: Whether number of columns is determined by COLS attribute or set of COLSPECs, interpretation when these are different, ability for COLSPECs/ENTRYs to be in non-sequential (i.e., other than strictly increasing) order, whether gaps are allowed between ENTRYs, use of SPANSPECs in THEAD/TFOOT, precedence of COLNAME/NAMEST/NAMEEND/SPANSPEC, error handling for logical inconsistencies.
  • Cell Formatting - Column Widths: list of allowed "fixed unit" values, default fixed unit, default method for determining COLWIDTH.
  • Cell Formatting - Rotation and Alignment: default for ALIGN.
  • Cell Formatting - Cell Borders: defaults for COLSEP/ROWSEP, interpretation of FRAME attribute.
  • Cell Formatting - Inheritance: Precedence order of inheritance paths for ALIGN, VALIGN, ROWSEP and COLSEP, precedence order using COLSPECs within THEAD/TFOOT.
  • Cell Content: Processing of ENTRYTBLs.

Summary of most common practices

As a means of laying the groundwork for establishing table interoperability between vendor products, this section summarizes the practices and commonly supported interpretations by OASIS vendors. These include:

  • most commonly supported features;
  • features not commonly supported;
  • most common semantic interpretations.

Summary of most commonly supported features

The following represents the set of features most commonly supported by OASIS vendors at the time of our survey. Please note that not all vendors support each of these features in every case (see the detailed survey results in Appendix B.)

Backbone Table Structure/Format

  • Support for multiple TGROUPs within the same table.
  • Use of THEAD with auto-replication across pages.
  • TBODY element.
  • Use of the FRAME attribute on TABLE (all defined values: TOP, BOTTOM, TOPBOT, ALL, SIDES, NONE).
  • Use of the COLS attribute on the TGROUP element.

Row/Column Structure

  • Use of COLSPEC to define column specifications.
  • Horizontal spans by using SPANSPECs referenced by SPANNAME, and alternatively by explicit NAMEST/NAMEEND attributes on individual cells.
  • Vertical spans using MOREROWS on individual cells or horizontally spanned cells.

Cell Formatting

  • Either fixed or proportional COLWIDTHs for individual columns (e.g., column 1 has width "1*" and column 2 has width "1in".
  • Decimal values for fixed COLWIDTHs.
  • Support for ALIGN attribute (all defined values: LEFT, RIGHT, CENTER, JUSTIFY, CHAR).
  • Support for CHAR attribute to specify value for "CHAR" alignment.
  • Support for VALIGN attribute (all defined values: TOP, MIDDLE, BOTTOM).
  • Support for ROWSEP and COLSEP attributes.
  • Full inheritance of cell format attributes other than through SPANSPEC.

Cell Content

  • Pure text within table cells, including multiple structured textual objects (e.g., lists, warnings, etc.).
  • Single notation object (e.g., equation or graphic), not mixed with text, within table cells.
  • Mixed text and graphics in table cells, but with no explicit relative positioning among graphics and text (as the size of textual material presentation is system-dependent).

Features not commonly supported

The following features were not found to be commonly supported at the time of our survey.

Backbone Table Structure/Format

  • Use of the TFOOT element.
  • Use of ORIENT, PGWIDE, and TABSTYLE attributes on the TABLE element.
  • Use of the TGROUPSTYLE element on the TGROUP element.

Row/Column Structure

  • Preservation of SPANSPEC/COLNAMEs from import through export (i.e., preservation of precisely the same set of named COLSPECs and SPANSPECs, as opposed to exporting a format-equivalent but different set).
  • Separate COLSPECs at the THEAD and TFOOT level (allowing redefinition of columns within THEAD and TFOOT).
  • Ability for COLSPEC and ENTRY elements to be in non-sequential (i.e., other than strictly increasing) order.
  • Ability for gaps to occur between ENTRYs in a table row (e.g., a situation in which explicit ENTRY elements are included for columns 1 and 3, thereby forcing an ENTRY element for column 2 to be inferred).

Cell Formatting

  • Either fixed or proportional COLWIDTHs for individual columns (e.g., column 1 has width "1*" and column 2 has width "1in".
  • Decimal values for fixed COLWIDTHs.
  • Support for ALIGN attribute (all defined values: LEFT, RIGHT, CENTER, JUSTIFY, CHAR).
  • Support for CHAR attribute to specify value for "CHAR" alignment.
  • Support for VALIGN attribute (all defined values: TOP, MIDDLE, BOTTOM).
  • Support for ROWSEP and COLSEP attributes.
  • Full inheritance of cell format attributes other than through SPANSPEC.

Cell Content

  • Pure text within table cells, including multiple structured textual objects (e.g., lists, warnings, etc.).
  • Single notation object (e.g., equation or graphic), not mixed with text, within table cells.
  • Mixed text and graphics in table cells, but with no explicit relative positioning among graphics and text (as the size of textual material presentation is system-dependent).

Features not commonly supported

The following features were not found to be commonly supported at the time of our survey.

Backbone Table Structure/Format

  • Use of the TFOOT element.
  • Use of ORIENT, PGWIDE, and TABSTYLE attributes on the TABLE element.
  • Use of the TGROUPSTYLE element on the TGROUP element.

Row/Column Structure

  • Preservation of SPANSPEC/COLNAMEs from import through export (i.e., preservation of precisely the same set of named COLSPECs and SPANSPECs, as opposed to exporting a format-equivalent but different set).
  • Separate COLSPECs at the THEAD and TFOOT level (allowing redefinition of columns within THEAD and TFOOT).
  • Ability for COLSPEC and ENTRY elements to be in non-sequential (i.e., other than strictly increasing) order.
  • Ability for gaps to occur between ENTRYs in a table row (e.g., a situation in which explicit ENTRY elements are included for columns 1 and 3, thereby forcing an ENTRY element for column 2 to be inferred).

Cell Formatting

  • Use of fractional decimal values for proportional COLWIDTHs.
  • Support for mixed COLWIDTHs (proportional plus fixed measure within same column).
  • Use of ROTATE and CHAROFF attributes.
  • Use of SPANSPECs to specify default values for spanning ENTRY formatting attributes.
  • Preservation of inheritance structure from import through export (i.e., preservation of precisely the same set of attribute values on the same elements throughout the table structure, as opposed to exporting a format-equivalent but different set).

Cell Content

  • Preservation of precise positioning of mixed text and graphics elements within table cells.
  • Use of ENTRYTBL element.

Summary of most common semantic interpretations

The following represents a consolidated list of semantic interpretations most commonly followed by OASIS vendors. Please note that not all vendor products currently implement all of these interpretations in each case. (See the detailed survey results in Appendix B.)

Backbone Table Structure/Format

  • The FRAME attribute is interpreted as determining the outer cell borders for the top, bottom, left, and right sides of the table. Specifically, FRAME is the only way to cause to appear or not the left and top outer cell borders for the table, and override settings at lower levels for outer cell borders on the bottom and right sides of the table. It is not interpreted as specifying a separate frame outside the boundaries of the defined cells.
  • If not provided by a style specification, the #IMPLIED value for the FRAME attribute (i.e., at the TABLE level) is interpreted as "ALL".
  • The ORIENT attribute "LAND" value is interpreted as 90 degrees counterclockwise from the current page orientation. The "LAND" value only rotates the table content, not the page header/footer or other text outside the table element.
  • If not provided by a style specification, the #IMPLIED value for the ORIENT attribute (i.e., at the TABLE level) is interpreted as "PORT" (no relative rotation).
  • If the ORIENT attribute is set to "PORT" and the PGWIDE attribute is set to "1" (yes), then the table presentation spans multiple text columns to fill the entire width of the page. If the ORIENT attribute is set to "PORT" and the PGWIDE attribute is set to "0" (no), then the table presentation spans only the width of the current text column. If the ORIENT attribute is set to "LAND" then the PGWIDE attribute is not meaningful.
  • If not provided by a style specification, the #IMPLIED value for the PGWIDE attribute (i.e., at the TABLE level) is interpreted as "1" (width of page).
  • The TABSTYLE attribute (on TABLE) and the TGROUPSTYLE attribute (on TGROUP) are interpreted respectively as providing a "hook" to apply style information for either the table as a whole or a specific TGROUP.

Row/Column Structure

  • The number of columns is determined by the COLS attribute on the TGROUP element, not by the number of COLSPECS actually defined. If the number of COLS is larger than the number of COLSPECs, then additional COLSPECs of length "1*" are inferred (all other attributes left as #IMPLIED). COLSPECs can be numbered or unnumbered, and are in sequential order. Unnumbered or inferred COLSPECs are implicitly numbered incrementally (one more than the previous column number), with the first COLSPEC starting at 1. It is an error for more than one COLSPEC to have the same number, either through specification or implicit numbering. It is also an error for the number of a COLSPEC to be greater than COLS.
  • If not provided by a style specification, the #IMPLIED value for the COLWIDTH attribute in explicit COLSPECs is interpreted as proportional value "1*".
  • ENTRYs can be tied to a specific column, or have column inferred. In any case, they are in strictly increasing column order for a row. Unnumbered ENTRYs are interpreted as being numbered incrementally (one more than the column number of the last previously used column in the row). Note that columns may already be in use due to the completion of a horizontal span from an entry earlier in this row or a "MOREROWS=N" on an entry in a prior row. The first ENTRY of a row starts in the first unused column of this row (usually column 1 unless it is already in use due to a vertical span from a prior row). It is an error for more than one ENTRY to have the same number, either through specification or implicit numbering. It is also an error to have more ENTRYs than are allowed in a row. The number of ENTRYs allowed in a row is calculated as follows:
  • the number of columns (COLS),
  • minus the number of columns in the row consumed by MOREROWS=N encroachment from a prior row,
  • minus the total number of ENTRYs covered by spans in the row,
  • plus the number of spans in the row.
  • A row into which a vertical straddle occurs because of a "MOREROWS=N" on an entry from a prior row has no entry in that column. Therefore an entry without a specific column falls into the next non-vertically straddled column. It is an error for any MOREROWS=N specification to cause encroachment beyond the end of any THEAD, TFOOT, or TBODY.
  • When determining the column placement of any given ENTRY or ENTRYTBL, a horizontal span always takes precedence over a single column specification. For example, if both SPANNAME and COLNAME are specified, the SPANNAME takes precedence.
  • If a horizontal span is desired, this may be accomplished either by using SPANNAME or an explicit NAMEST and NAMEEND without specifying SPANNAME. If both SPANNAME and NAMEST/NAMEEND are specified, NAMEST/NAMEEND are ignored. Note, there is no consensus that COLNAME can be used as part of specifying a span.
  • If neither SPANNAME nor an explicit NAMEST/NAMEEND pair are specified, then the ENTRY or ENTRYTBL is placed within a single column. In this case, if NAMEST is specified it takes precedence over any COLNAME value. If NAMEST is not present, COLNAME is used. If neither is specified, the entry goes into the next available column in the row.
  • Within a TGROUP or ENTRYTBL, no two COLSPECs and no two SPANSPECs can have the same name, nor can a COLSPEC and a SPANSPEC have the same name (i.e., COLSPEC and SPANSPEC names share the same name space within each TGROUP or ENTRYTBL).

Cell Formatting

  • The standard list of allowed "fixed unit" values for COLWIDTH is "pt" (points), "cm" (centimeters), "mm" (millimeters), "pi" (picas), and "in" (inches). The default fixed unit is interpreted as "pt" if a unit is not specified.
  • If not otherwise specified, COLWIDTH is always assumed to be proportional with value "1*".
  • Cell formatting defined explicitly through attributes on ENTRY elements takes precedence over any other specification. However, for list or other paragraph styles, the align formatting is consistent with those styles for those elements occurring outside the table, but constrained to a presentation area that is the entry width (unless the style of such elements is explicitly determined otherwise by a style specification).
     If not defined explicitly on ENTRY, a formatting attribute is determined by following an inheritance scheme going from higher to lower levels (as defined here). In this case, the lowest level at which the attribute has been defined takes precedence over the value derived from higher levels (e.g., ALIGN defined on COLSPEC or SPANSPEC overrides any default defined on TGROUP). If an attribute is never explicitly defined, and the CALS table model does not provide an explicit default value at the highest level, then the attribute's value is defaulted from an accompanying style specification if possible. If there is no such specification or default provided, an agreed-upon default is assumed as specified herein.
  • COLSPEC and SPANSPEC attribute values are themselves defaulted in the same manner from higher levels. Inferred COLSPECs are assumed to default all their formatting attributes from higher levels.
  • When applying the inheritance schemes, an ENTRY inherits its formatting attributes through the appropriate COLSPEC if either NAMEST or COLNAME is used to determine the column, and through the appropriate SPANSPEC if SPANNAME is used to determine the column (and span).
     If inheritance is through the SPANSPEC, then the SPANSPEC itself inherits its default values through the COLSPEC corresponding to NAMEST (the first column of the span).
     Similarly, if an ENTRY uses NAMEST and NAMEEND to specify a horizontal span (as opposed to SPANNAME), then the ENTRY inherits its formatting attributes through the COLSPEC corresponding to NAMEST (the first column of the span).
  • The inheritance path for ALIGN, CHAR, and CHAROFF is ENTRY<COLSPEC/SPANSPEC<TGROUP.
  • The inheritance path for VALIGN is ENTRY<ROW<THEAD/TBODY/TFOOT.
  • An ENTRY inherits ROWSEP from the applicable ROW, SPANSPEC, COLSPEC, TGROUP, or TABLE in that order. (Note that ENTRYs inherit from both rows and columns, but prefer ROWSEP information from the former.) If neither ENTRY nor any of its ancestors specifies ROWSEP, and if a style specification does not provide a value, then ROWSEP is taken to be "1" (rulings between columns).
  • The inheritance path for COLSEP is ENTRY<COLSPEC/SPANSPEC<TGROUP<TABLE.
  • The #IMPLIED value for the ALIGN attribute (i.e., at the TGROUP level) is interpreted as "LEFT".
  • A structured text element (e.g., list item) within an ENTRY gets its relative alignment directly from that element's format specification, rather than from the ALIGN attribute for the entire ENTRY.
  • The #IMPLIED value for the VALIGN attribute (i.e., at the THEAD/TBODY/TFOOT level) is interpreted as "BOTTOM" for THEAD, and "TOP" for TBODY and TFOOT.
  • The CHAR and CHAROFF attributes shall be meaningful for an ENTRY only when the related ALIGN attribute is set to "char" alignment.
  • The CHAR attribute shall contain only a single character to which the column is aligned. If this character occurs more than once in cell content, its leftmost occurrence is used for alignment. If this character does not occur in a specific cell, then that cell content shall right-align to the left of the offset point specified by CHAROFF (50 percent if CHAROFF is not used). The value for CHAR shall not be an SDATA entity.
  • The #IMPLIED value for the CHAR attribute (i.e., at the TGROUP level) is "" (no character). Defaulting to "no character" shall be interpreted as causing the content to right-align to the left of the offset point specified by CHAROFF (50 percent if CHAROFF is not used). This is equivalent to the behavior when an individual cell does not contain the specified CHAR value.
  • The CHAROFF percentage is measured to the left edge of the first CHAR (the alignment character) in the entry content.
  • The #IMPLIED value for the CHAROFF attribute (i.e., at the TGROUP level) is interpreted as "50" (alignment occurs at 50 percent of the current cell width).
  • COLSEP and ROWSEP are interpreted as adding a single light ruling respectively to the right and bottom sides of the cell. (Note that until more descriptive attributes are added for cell rulings, "a single light ruling" is still somewhat ambiguous and could result in slightly different visual appearances across systems.)
  • If not provided by a style specification, the #IMPLIED value for the COLSEP attribute (i.e., at the TABLE level) is interpreted as "1" (rulings between columns).
  • If not provided by a style specification, the #IMPLIED value for the ROWSEP attribute (i.e., at the TABLE level) is interpreted as "1" (rulings between rows).
  • COLSEP values for the last column, and ROWSEP values for the last row, are always overridden by the FRAME attribute on TABLE, whether the value of FRAME is explicitly provided or is defaulted.
  • The ROTATE attribute (on ENTRY) value of "1" (yes) is interpreted as rotating the ENTRY 90 degrees counterclockwise from the current table cell orientation, with a default of "0" (no relative rotation). Thus rotation is cumulative for a "LAND" table.

Cell Content

  • An ENTRYTBL is permitted to contain only one portion with TBODY element, repairing an error in the original CALS content model that permitted repeatable portions with distinct TBODYs.
  • NAMEST, NAMEEND, COLNAME and SPANNAME attributes for ENTRYTBL are interpreted exactly as for an ENTRY.
  • The COLS attribute for an ENTRYTBL is interpreted exactly as at the TGROUP level for the table as a whole. Within the ENTRYTBL, the same rules for interpreting and inferring COLSPECs and ENTRYs are used as for the table as whole.
  • The TGROUPSTYLE attribute for ENTRYTBL is interpreted exactly as at the TGROUP level for the table as a whole (i.e., it provides a "hook" to apply style information to the specific ENTRYTBL&mdash;which implicitly contains one TGROUP).
  • COLSEP and ROWSEP attributes on an ENTRYTBL element are interpreted exactly as for an ENTRY, defining respectively the right and bottom side rulings for the ENTRYTBL as a whole. Explicit attribute values do not establish defaults for the ENTRYs that are content of the ENTRYTBL. Those defaults are inherited in the same manner as for an ENTRY. The top and left separators for an ENTRYTBL are specified on the possibly several ENTRYs (or ENTRYTBLs) sharing that separator above and to its left. The COLSEP and ROWSEP on the ENTRYTBL override the ones on ENTRYs in the last column and/or row of the ENTRYTBL. The FRAME attribute on the TABLE overrides the COLSEP and ROWSEP values for the ENNTRYTBL if the ENTRYTBL occurs in the last column and/or last row of the main table.
     The ultimate defaults for COLSEP and ROWSEP within the ENTRYTBL are interpreted as "1" (as is true at the TABLE level), independently from the COLSEP and ROWSEP values on the ENTRYTBL element itself.
  • ENTRYTBLs always fill the entire width of the containing column or span. ALIGN, CHAR, and CHAROFF attributes on an ENTRYTBL element are not to be interpreted as influencing the alignment of the ENTRYTBL as a whole.
  • Format attributes on an ENTRYTBL element (i.e., ALIGN, CHAR, and CHAROFF) provide default values for the cells within the ENTRYTBL (similar to such attributes at the TABLE and/or TGROUP level for the main table. If not set explicitly, these values are themselves defaulted through inheritance paths exactly as for an ENTRY in the main table.
  • Within the ENTRYTBL, inheritance paths and overrides are determined using the same rules as for the table as a whole.
  • There is no implication that multiple ENTRYTBLs in the same row will have the same number of subrows or their subrows aligned.

Next steps

As a result of this study the Committee plans to propose an SGML Technical Resolution that will provide a common definition of tables interoperability using the CALS model. We are also sharing our recommendations with the CALS Electronic Publishing Committee (EPC) as input to improving the CALS table model and its documented semantics. When this phase of the Committee's work is complete, we will move on to the second goal in our mission statement: suggesting a standard framework and set of approaches for the next generation of SGML table markup. This work will explore where the current CALS table model falls short, going beyond format and layout issues to a model which captures the author's intent for underlying table data in an unambiguous and interchangeable way. We expect this may include a set of standard approaches and DTD fragments for different purposes.

Appendix A: Survey questions

The following questions were submitted to all OASIS Member companies in order to find commonality and differences in the implementations of the CALS Table Model. Detailed answers identified more questions. Several rounds of clarification and augmentation of these questions occurred.

The results for the questions that bear on interoperability are grouped in the survey results in a slightly different order and are paraphrased along with the percentage of vendors indicating lack or difference in support.

Product questions

  • Do you offer a product (or products) that
    • accepts SGML-encoded tables
    • creates SGML-encoded tables
    • both?
  • Please provide the name of the product(s) and a brief description including the role of SGML-encoded tables.

Detailed questions: backbone table structure / format issues

  • Do you support multiple TGROUPs (i.e. a redefinition of columns within a table?
  • Do you support a separate THEAD section?
  • Do you support a separate TFOOT section?
  • Do you support the ORIENT attribute for TABLE (both portrait and landscape)?
  • If so, do you interpret landscape as 90 degrees counterclockwise from text alignment for the document?
  • What do you assume as the default value if ORIENT is not specified? (note this is #IMPLIED)
  • Do you support the PGWIDE attribute for TABLE?
  • If so, how do you interpret its "yes" and "no" values?
  • What do you assume as the default value if PGWIDE is not specified? (note this is #IMPLIED)
  • Do you support the TABSTYLE attribute for TABLE? If so, how is it used?
  • Do you support the TGROUPSTYLE attribute for TGROUP? If so, how is it used?
  • Do you support the FRAME attribute for TABLE?
  • If so, do you support all allowed FRAME values (top, bottom, topbot, all, sides, none)?
  • How do you interpret FRAME (e.g. frame surrounding the whole table or as a definition of the side rulings for the table itself)?
  • Do you assume ALL borders as the default value if FRAME is not specified? (note this is #IMPLIED.)

Detailed questions: row / column structure issues

  • Do you support horizontal spanning of cells across columns (NAMEST, NAMEEND)?
  • Do you support SPANSPECs?
  • Do you support separate COLSPECs at the THEAD level?
  • Do you support separate COLSPECs at the TFOOT level?
  • Do you allow the number of columns in a THEAD or TFOOT section to be different than the containing TGROUP?
  • How do you resolve a situation where the total width of columns defined in a THEAD or TFOOT is different than the total width of the TGROUP?
  • Do you support vertical spanning of cells across rows (MOREROWS)?
  • Do you use proportional width columns for columns without COLSPECs?
  • What happens if there are not as many COLSPECs defined as there are COLS for the TGROUP?
  • Do you ignore COLSPECs in excess of the number defined by the COLS attribute?
  • Do you allow some COLSPECs to be numbered and some not? (note COLNUM attribute is #IMPLIED)
  • If yes, what rules do you use to resolve a situation where some COLSPECs are numbered and some are not? (note COLNUM attribute is #IMPLIED)
  • How do you name COLSPECs you create?
  • Do you map COLSPECs to table column using the COLNUM attribute?
  • If yes, can the COLSPECs be out-of-order?
  • Do you permit some ENTRYs to refer to COLSPEC names and some not (note COLNAME attribute is #IMPLIED)?
  • What rules do you use to resolve a situation where some ENTRYs refer to COLSPEC names and some do not (note COLNAME attribute is #IMPLIED)?
  • Do you allow SPANSPECs to be referred to within THEAD and TBODY?
  • If so, how do you ensure that such SPANSPECs only refer to COLSPEC definitions applicable to THEAD and TFOOT? (note COLSPECs but not SPANSPECs can be defined within THEAD and TFOOT)
  • Do you allow overlap between COLSPEC and SPANSPEC names?
  • If not, how do you ensure that they do not overlap?
  • Do you ignore SPANNAME for ENTRIES that have both a NAMEST/NAMEEND and SPANNAME specified, or both a COLNAME and SPANNAME?
  • Can ENTRYs be accepted in any order if they explicitly identify the column?
  • When exporting a table, do you explicitly specify the COLNAME or NAMEST attribute for an entry immediately to the right of the spanned ENTRY?
  • When a table cell is "covered" by a preceding ENTRY with MOREROWS specified, do you require the covered entry to be
    • completely absent
    • tagged but with no data content
    • hidden by the spanning entry?
  • How do you handle the situation where all ENTRYs in a row are covered in this manner? (note that the DTD requires at least one ENTRY in each row)
  • Should the CALS table model be extended to include a concept of stub columns and stub hierarchies of first column(s) that would replicate for horizontal continuations of tables too wide to fit on a page?
  • Do you believe the CALS table model should be extended to include a concept of titled subgroups (e.g. "row heads")?

Column Widths

  • Do you support fixed COLWIDTHs?
  • If so, what is the list of all possible units and their abbreviations?
  • Size/distance paragraph. These are pi, pt, in, mm, cm, em. E.g. COLWIDTH = "2.5 inches" is not allowed&mdash;it should be "2.5 in" (and an appropriate error message is displayed).
  • Do you allow both integer and decimal values?
  • Are multiple units of measure allowed within the same table (e.g. column one measured in picas, but column two in inches)?
  • Is there a default unit if none is specified?
  • Do you support proportional COLWIDTHs?
  • Do you allow both integer and floating point [ed. decimal] values?
  • Do you support mixed (i.e. fixed plus proportional) COLWIDTHs?
  • What are the rules used to resolve each column's actual width?
  • Do you assume unit proportional measure as the default value if COLWIDTH is not specified? (note this is #IMPLIED)

Rotation and Alignment

  • Do you support the ROTATE attribute for ENTRYs?
  • If so, do you interpret its meaning as 90 degrees counterclockwise from text alignment of the table?
  • Do you support the ALIGN attribute?
  • If so, do you support all allowed values (left, right, center, justify, char) including use of CHAR and CHAROFF attributes?
  • Do you assume "left" as the default value if ALIGN is not specified? (note this is #IMPLIED at all levels)
  • Do you support CHAR alignment?
  • If CHAR is supported, do you have any limitation on the CHAR values that are allowable?
  • Do you allow a sequence of more than one character as the CHAR value? (note this is defined as CDATA).
  • Do you use the leftmost if the text to be aligned contains more than one occurrence of the specified CHAR value?
  • Do you ignore the CHAR alignment if so much text occurs to the left of that character, even if that amount requires line-wrap?
  • Does the CHAROFF percentage position to (l) left edge, (c) center, or (r) right of the CHAR
  • Do you support the VALIGN attribute?
  • If so, do you support all allowed values (top, middle, bottom)?

Cell Borders

  • Do you support COLSEP and ROWSEP?
  • If so, do you interpret COLSEP as the right border and ROWSEP as the bottom border?
  • Do you provide single light border rulings for yes?
  • Do you assume 1 "yes" for COLSEP unspecified (note it is #IMPLIED at all levels)
  • Do you assume 1 "yes" as the default values if ROWSEP is unspecified? (note it is #IMPLIED at all levels)
  • Do you use the FRAME attribute on TABLE to determine borders for the left side of the first column and the top of the first row?
  • If not, how do you determine these borders?
  • Do you also allow the FRAME attribute to override ROWSEP for cells in the last row, and to override COLSEP for cells in the last column?

Inheritance

  • Is the sequence for determining the ALIGN / CHAR / CHAROFF values ENTRY < ROW < COLSPEC < TGROUP?
  • If not, what are the inheritance rules for ALIGN / CHAR / CHAROFF?
  • Is the sequence for determining the VALIGN value ENTRY < ROW < (THEAD / TBODY / TFOOT)?
  • If not, what are the inheritance rules for VALIGN?
  • Is the sequence for determining the ROWSEP values ENTRY < ROW < SPANSPEC < COLSPEC < TGROUP < TABLE?
  • If not, what are the inheritance rules for ROWSEP?
  • Is the sequence for determining the COLSEP values ENTRY < SPANSPEC < COLSPEC < TGROUP < TABLE?
  • If not, what are the inheritance rules for COLSEP?
  • Does SPANSPEC formatting (alignment and borders) override ENTRY formatting attributes?
  • Does formatting from a COLSPEC defined in THEAD or TFOOT override a COLSPEC for the same column defined at the TGROUP level?
  • If COLSPEC from THEAD or TFOOT overrides that from TGROUP, does this apply to the cell alignment and border parameters?
  • If COLSPEC from THEAD or TFOOT overrides that from TGROUP, does this apply to COLWIDTH?

Detailed questions: cell content issues

  • Do you support graphics within table ENTRYs?
  • If so, are there any limitations on this other than those imposed by the DTD?
  • How do you handle input documents that do not match these limitations?
  • What happens if a graphic doesn't fit within the width of the table column (i.e. do you dynamically resize the image, clip it to fit, dynamically adjust the table geometry, etc.)?
  • How do you handle a situation where a page break occurs in the middle of a graphic?
  • Do you support other structural objects within table ENTRYs (e.g. warnings, cautions, notes, lists, content tags, emphasis, math, etc.)?
  • If so, are there any limitations on this other than those imposed by the DTD?
  • How do you handle input documents that do not match these limitations?
  • Do you support ENTRYTBL (tables within tables)?
  • If so, are there any limitations on this other than those imposed by the DTD?
  • How do you handle input documents that do not match these limitations?
  • Do you support multiple sets of column definitions within an ENTRYTBL (i.e. multiple TGROUP-like sections)? (note that the DTD allows one or more such sections)
  • How do you interpret COLSEP / ROWSEP attributes at the ENTRYTBL level (i.e. as the default value for all ENTRYs within the ENTRYTBL
  • like such attributes at the TABLE or TGROUP level
  • or as setting the overall right and bottom borders
  • thus overriding COLSEPs for the last column and ROWSEPs for the last row, like the FRAME attribute at a TABLE level)?
  • How do you interpret the ALIGN / CHAR / CHAROFF attributes at the ENTRYTBL level (i.e. as the default value for all ENTRYs within the ENTRYTBL
  • like such attributes at the TABLE or TGROUP level
  • or as somehow applying to the position of the ENTRYTBL within the column)?
  • What happens if an ENTRYTBL doesn't fit within the width of the table column (i.e. do you dynamically resize its column widths, clip it to fit, dynamically adjust the table geometry, etc.)?
  • How do handle a situation where a page break occurs in the middle of an ENTRYTBL?
  • How do you handle a situation where there are multiple ENTRYTBLs in the same row whose internal row boundaries in the different ENTRYTBLs don't match?
  • Are inheritance rules for cell formatting attributes within an ENTRYTBL the same as those for the table as a whole?
  • Do you believe the CALS table model should be extended to explicitly differentiate table footnotes from other footnotes?
  • Can you export as an entity a table that came from a "file" entity back to the original entity?

General questions

  • Do you support import/export of the CALS 28001B table model?
  • Please identify in detail any differences between the features supported on input versus output.
  • On input, do you support
    • any valid CALS 28001B table that parses against the DTD
    • a more restricted subset?
  • If the latter, how do you characterize this subset for your users (i.e. what are the rules for acceptable input)?
  • What size limits exist in table handling?
  • Do you support table features that go beyond the current limitations of the CALS table model?
  • Based on your experience, do you believe there is a need to extend or modify the CALS table model? What specific changes would you like to see?
  • Please list any interoperability issues of which you are aware between your CALS table support and that of any other product on the market.
  • Do you support the CALS 28001B table model for non-CALS applications that have adopted it in their DTDs?
  • If so, please describe the applications and indicate which of these have actually been implemented by your customers.
  • What other SGML table models do you support?

Appendix B: Detailed analysis of survey results

The survey questions and responses from seven vendors from Appendix A went through many iterations. The final results from the vendors in February 1995 are combined in two sets of tables.

  • Unsupported features, indicating as issues those places where there appear to be any differences in support issues (showing percent of vendors not supporting) and ISSUE if more than one third provide no or incomplete support. [ NOTE: The SGML Open vendors have had access to these results and many have indicated that they expect some reduction in the differences in their releases since this survey.]
  • Differences in interpretation, indicating all places where there appear to be issues (showing percent of vendors with differing interpretations, and considering an ISSUE if there is any difference. Such differences in interpretation result from inadequate semantic description. [ NOTE: Subsequent OASIS technical communications will include a CALS table model DTD subset with consensus support and explicit clarification of the semantic issues uncovered.]

From these two sets of tables, the significant issues were identified. The questions that lead to quantitative comparisons are paraphrased in the first column of the tables. the percentage scores in the second (larger scores are worse), and the (issue/non-issue) status in the third.

Unsupported features

The original survey distinguished among:

  • lack of support,
  • important support limitations, and
  • full support.

 The Scores below show the percent of vendors that do not provide full support. "ISSUE" status is assumed if more than 1/3 of vendors fail to fully support (score > 33%)

Backbone table structure / format

 

Backbone table structure / formatScoreStatus

Multiple TGROUPs (redefinition of columns)

29%

Separate THEAD section

0%

Separate TFOOT section

43%

ISSUE

ORIENT attribute (portrait vs. landscape)

57%

ISSUE

PGWIDE attribute (full page vs. column)

71%

ISSUE

TABSTYLE attribute (named styles)

86%

ISSUE

TGROUPSTYLE attribute (named group styles)

86%

ISSUE

FRAME attribute (outer borders)

14%

Row / column structure

Row / column structureScoreStatus

Horizontal spans using SPANSPEC

0%

Horizontal spans on cells using NAMEST/END

43%

ISSUE

Vertical spans using MOREROWS

14%

Preservation of SPANSPEC import to export

57%

ISSUE

Preservation of COLNAMEs import to export

57%

ISSUE

SPANSPECs allowed in THEAD and TFOOT

0%

Separate COLSPECs at the THEAD level

57%

ISSUE

Separate COLSPECs at the TFOOT level

71%

ISSUE

Different number of columns in THEAD or TFOOT

86%

ISSUE

Cell formatting - column widths

Cell formatting - column widthsScoreStatus

Fixed COLWIDTHs

14%

Decimal values for fixed COLWIDTHs

29%

Proportional COLWIDTHs

0%

Decimal values for proportional COLWIDTHs

57%

ISSUE

Mixed COLWIDTHs (proportional/fixed in one column)

57%

ISSUE

Cell formatting - rotation and alignment

Cell formatting - rotation and alignmentScoreStatus

ROTATE attribute (rotation of individual cells)

100%

ISSUE

ALIGN attribute - "left/right/center" values

14%

ALIGN attribute - "justify" value

29%

ALIGN attribute - "char" value (with CHAR attr)

29%

CHAROFF attribute

57%

ISSUE

VALIGN attribute - "top/middle/bottom" values

29%

Cell formatting - cell borders

Cell formatting - cell bordersScoreStatus

COLSEP / ROWSEP attributes

14%

Cell formatting - inheritance

Cell formatting - inheritanceScoreStatus

Preservation of inheritance import to export

57%

ISSUE

Inheritance of cell alignment from SPANSPEC

86%

ISSUE

Inheritance of cell borders from SPANSPEC

86%

ISSUE

Cell content

Cell contentScoreStatus

Graphics within table ENTRYs

0%

Mixture of text and graphics in table cells

29%

Other structural objects within table cells

14%

ENTRYTBL (tables within tables)

57%

ISSUE

Multiple TGROUPs within ENTRYTBL

71%

ISSUE

Differences in interpretation

The original survey results distinguish among implementations where semantic descriptions were inadequate:

  • different interpretation,
  • potential difference, and
  • consistent interpretation.

 "ISSUE" status is assumed if ANY vendor interprets things differently (score > 0%)

Backbone table structure / format

Backbone table structure / formatScoreStatus

ORIENT "landscape" as 90 degrees counter

0%

Default for ORIENT as "no relative rotation"

0%

PGWIDE "yes" as full page, "no" as column

0%

Default for PGWIDE as "full page"

0%

TABSTYLE as style name for entire table

0%

TGROUPSTYLE as style names for TGROUPs

0%

FRAME as override for outer borders

14%

ISSUE

Default for FRAME as "all borders on"

14%

ISSUE

Row / column structure

 

Row / column structureScoreStatus

Number of cols determined absolutely by COLS

43%

ISSUE

Create "1*" cols if less COLSPECs than COLS

43%

ISSUE

Ignore excess if more COLSPECs than COLS

57%

ISSUE

COLSPECs allowed to be non-sequential

57%

ISSUE

Fit unnumbered COLSPECs next in sequence

57%

ISSUE

ENTRYs allowed to be non-sequential

29%

ISSUE

Fit unnumbered ENTRYs next in sequence

43%

ISSUE

SPANSPECs in head/foot refer to local COLSPECs

43%

ISSUE

COLSPEC and SPANSPEC names allowed to overlap

29%

ISSUE

Precedence COLNAME->NAMEST/END->SPANSPEC

100%

ISSUE

Error if "covered" ENTRY present with content

14%

ISSUE

Cell formatting - column widths

Cell formatting - column widthsScoreStatus

Allowed fixed units exactly: IN, CM, MM, PI, PT

100%

ISSUE

Default fixed unit as "PT"

86%

ISSUE

Default for COLWIDTH as unit proportional (1*)

14%

ISSUE

Cell formatting - rotation and alignment

Cell formatting - rotation and alignmentScoreStatus

Default for ALIGN as "left"

29%

ISSUE

CHAR can be any ASCII character, but no SDATA

0%

CHAR can be a single character only

0%

Align on leftmost occurrence of CHAR

0%

Align to left side of char bounding box

14%

ISSUE

Cell formatting - cell borders

Cell formatting - cell bordersScoreStatus

COLSEP as right border / ROWSEP as bottom

0%

COLSEP / ROWSEP "yes" as single light ruling

0%

Default for COLSEP / ROWSEP as "yes"

14%

ISSUE

FRAME attribute determines left/top border

0%

FRAME attribute overrides right/bottom border

14%

ISSUE

Cell formatting - inheritance

Cell formatting - inheritanceScoreStatus

ALIGN precedence as entry<span<col<tgrp

57%

ISSUE

VALIGN precedence as entry<row<thead/body/foot

43%

ISSUE

ROWSEP precedence as entry<row<span<col<tgrp<tbl

86%

ISSUE

COLSEP precedence as entry<span<col<tgrp<tbl

71%

ISSUE

Local COLSPECs override for thead / tfoot

71%

ISSUE

Cell content

Cell contentScoreStatus

Graphics that don't fit resized not clipped

14%

ISSUE

ENTRYTBL format attrs apply only within

0%

ENTRYTBLs that don't fit resized not clipped

14%

ISSUE

Inheritance rules for ENTRYTBL same as table

0%