JATS Guide
Index Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Tables

  • 1 Apr 2026: Revised
Draft
The information on this page has recently been updated. Please send comments via this comment form.

Introduction

Tables should be tagged using the <table-wrap> element. The <table-wrap> element directly contains elements that hold information such as the table’s label, caption, accessibility text, and table footers.

An @id attribute should be placed on the <table-wrap> element.

All citations to a table using <xref> should point to the @id attribute on <table-wrap>.

Footnotes for a table should be placed in the <table-wrap-foot> element.

Figures that are actually tables should be tagged tables.

Alternative text that describes the table for accessibility, if provided, should be tagged in <alt-text> or <long-desc>. See the topic on Accessibility for more information.

Table Model

Within <table-wrap> there are two table models available in JATS to capture tabular information: the OASIS CALS Table Model, which uses the <oasis:table> element, and the NISO JATS XHTML-based Table Model, which uses the <table> element.

For new content that is being typeset the OASIS CALS Table Model should be used.

For content that is being converted from pre-existing XML, either table model can be used depending on the table model that is used in the source XML. However, TFO currently does not display tables that are tagged using the NISO JATS XHTML-based Table Model so the OASIS CALS Table Model is preferred.

Table Headers

Headers in a table are cells that contain labels that describe the data in the table. Headers are helpful in understanding both the structure and content of a table. Headers require specific tagging to support both display of the table and use of screen readers for accessibility.

Headers cells are typically located at the top of a column and apply to all cells in the same column below the header cell. Header cells are also typically located at or near the start of a row and apply to all cells in the same row. It is also possible for header cells to be located anywhere within a table.

A good way to determine whether a cell should be tagged as a header is to ask if the table were to be divided by a page break would it make sense to repeat the cell where the table continues after the page break.

Headers for columns should be tagged using <oasis:thead> in the OASIS CALS Table Model (or <thead> in the NISO JATS XHTML-based Table Model).

The OASIS CALS Table Model does not provide elements or attributes for identifying headers within a table that are not column headers, such as headers for rows and irregular header cells within a table. Visual distinctions, such as lines or bold or italic text styling, are often used to denote headers, however visual distinctions alone are not sufficient for accessibility. To cover this gap, two mechanisms from the HTML table model have been adapted for use in the OASIS CALS Table Model:

  1. <?header scope?> - This processing instruction can be placed within <oasis:entry> to identify a table cell as a header and describe its scope. The scope value should be either row, column, rowgroup, or colgroup.
  2. <?headers IDREFS?> - This processing instruction can be placed within <oasis:entry> to identify the headers that are relevant to the cell. The IDREFS value should be a space separated list of @id values referencing the <oasis:entry> elements that provide the headers for the cell. Each <oasis:entry> element referenced must have an @id attribute.
Processing Instruction HTML equivalent Meaning
<?header row?> scope="row" on <th> the header relates to all cells of the row it belongs to
<?header column?> scope="column" on <th> the header relates to all cells of the column it belongs to
<?header rowgroup?> scope="rowgroup" on <th> the header belongs to a rowgroup and relates to all of its cells
<?header colgroup?> scope="colgroup" on <th> the header belongs to a colgroup and relates to all of its cells
<?headers IDREFS?> headers="IDREFS" on <td> or <th> A list of space-separated strings corresponding to the @id attributes of the elements that provide the headers for this header cell.
Previously, these instructions provided a list of values that could be used in a @specific-use attribute on an element within <oasis:entry>, such as <bold>, <italic>, or <styled-content>, to identify a cell as a header by layering a semantic attribute onto visual styling. This list of @specific-use attribute values was aligned with the HTML @scope attribute: row-header, rowgroup-header, col-header, and colgroup-header. This tagging has been deprecated in favor of using the processing instructions described on this page, which provide more flexible tagging that can be used in both new content and older content.

Examples

Example 1: Table with header cells in the top row only

<table-wrap id="T0001">
    <caption>
        <title>Table with header cells in the top row only</title>
    </caption>
    <oasis:table>
        <oasis:tgroup cols="2">
            <oasis:thead>
                <oasis:row>
                    <oasis:entry>Province</oasis:entry>
                    <oasis:entry>Capital</oasis:entry>
                </oasis:row>
            </oasis:thead>
            <oasis:tbody>
                <oasis:row>
                    <oasis:entry>British Columbia</oasis:entry>
                    <oasis:entry>Victoria</oasis:entry>
                </oasis:row>
                <oasis:row>
                    <oasis:entry>Nova Scotia</oasis:entry>
                    <oasis:entry>Halifax</oasis:entry>
                </oasis:row>
                <oasis:row>
                    <oasis:entry>Ontario</oasis:entry>
                    <oasis:entry>Toronto</oasis:entry>
                </oasis:row>
            </oasis:tbody>
        </oasis:tgroup>
    </oasis:table>
</table-wrap>

Example 2: Table with header cells in the first column only

<table-wrap id="T0002">
    <caption>
        <title>Table with header cells in the first column only</title>
    </caption>
    <oasis:table>
        <oasis:tgroup cols="4">
            <oasis:tbody>
                <oasis:row>
                    <oasis:entry><?header row?><bold>Province</bold></oasis:entry>
                    <oasis:entry>British Columbia</oasis:entry>
                    <oasis:entry>Nova Scotia</oasis:entry>
                    <oasis:entry>Ontario</oasis:entry>
                </oasis:row>
                <oasis:row>
                    <oasis:entry><?header row?><bold>Capital</bold></oasis:entry>
                    <oasis:entry>Victoria</oasis:entry>
                    <oasis:entry>Halifax</oasis:entry>
                    <oasis:entry>Toronto</oasis:entry>
                </oasis:row>
            </oasis:tbody>
        </oasis:tgroup>
    </oasis:table>
</table-wrap>

Example 3: Table with two levels of headers across the top, a total row at the bottom, and a footnote

<table-wrap id="t0008" orientation="portrait" position="float"> 
    <label>Table 5.</label> 
    <caption><p>Number of substances involved in human exposure cases.</p></caption> 
    <oasis:table frame="topbot"> 
        <oasis:tgroup cols="5"> 
            <oasis:colspec colnum="1" colname="col1" colwidth="80pt"/> 
            <oasis:colspec colnum="2" colname="col2" colwidth="80pt"/> 
            <oasis:colspec colnum="3" colname="col3" colwidth="80pt"/> 
            <oasis:colspec colnum="4" colname="col4" colwidth="80pt"/> 
            <oasis:colspec colnum="5" colname="col5" colwidth="80pt"/> 
            <oasis:thead> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left"></oasis:entry> 
                    <oasis:entry namest="col2" nameend="col3" rowsep="1" align="center">Human exposures</oasis:entry> 
                    <oasis:entry namest="col4" nameend="col5" rowsep="1" align="center">Fatal exposures<xref ref-type="table-fn" rid="TF16"><sup>a</sup></xref></oasis:entry> 
                </oasis:row> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left">No. of Substances</oasis:entry> 
                    <oasis:entry colname="col2" align="center"><italic>N</italic></oasis:entry> 
                    <oasis:entry colname="col3" align="center">&#x0025;</oasis:entry> 
                    <oasis:entry colname="col4" align="center"><italic>N</italic></oasis:entry> 
                    <oasis:entry colname="col5" align="center">&#x0025;</oasis:entry> 
                </oasis:row> 
            </oasis:thead> 
            <oasis:tbody valign="top"> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left">1</oasis:entry> 
                    <oasis:entry colname="col2" align="char" char=".">1,858,385</oasis:entry> 
                    <oasis:entry colname="col3" align="right">87.86</oasis:entry> 
                    <oasis:entry colname="col4" align="right">598</oasis:entry> 
                    <oasis:entry colname="col5" align="right">43.08</oasis:entry> 
                </oasis:row> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left">2</oasis:entry> 
                    <oasis:entry colname="col2" align="char" char=".">159,710</oasis:entry> 
                    <oasis:entry colname="col3" align="right">7.55</oasis:entry> 
                    <oasis:entry colname="col4" align="right">327</oasis:entry> 
                    <oasis:entry colname="col5" align="right">23.56</oasis:entry> 
                </oasis:row> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left">3</oasis:entry> 
                    <oasis:entry colname="col2" align="char" char=".">53,855</oasis:entry> 
                    <oasis:entry colname="col3" align="right">2.55</oasis:entry> 
                    <oasis:entry colname="col4" align="right">214</oasis:entry> 
                    <oasis:entry colname="col5" align="right">15.42</oasis:entry> 
                </oasis:row> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left">4</oasis:entry> 
                    <oasis:entry colname="col2" align="char" char=".">22,485</oasis:entry> 
                    <oasis:entry colname="col3" align="right">1.06</oasis:entry> 
                    <oasis:entry colname="col4" align="right">97</oasis:entry> 
                    <oasis:entry colname="col5" align="right">6.99</oasis:entry> 
                </oasis:row> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left">5</oasis:entry> 
                    <oasis:entry colname="col2" align="char" char=".">9,764</oasis:entry> 
                    <oasis:entry colname="col3" align="right">0.46</oasis:entry> 
                    <oasis:entry colname="col4" align="right">74</oasis:entry> 
                    <oasis:entry colname="col5" align="right">5.33</oasis:entry> 
                </oasis:row> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left">6</oasis:entry> 
                    <oasis:entry colname="col2" align="char" char=".">4,814</oasis:entry> 
                    <oasis:entry colname="col3" align="right">0.23</oasis:entry> 
                    <oasis:entry colname="col4" align="right">24</oasis:entry> 
                    <oasis:entry colname="col5" align="right">1.73</oasis:entry> 
                </oasis:row> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left">7</oasis:entry> 
                    <oasis:entry colname="col2" align="char" char=".">2,504</oasis:entry> 
                    <oasis:entry colname="col3" align="right">0.12</oasis:entry> 
                    <oasis:entry colname="col4" align="right">22</oasis:entry> 
                    <oasis:entry colname="col5" align="right">1.59</oasis:entry> 
                </oasis:row> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left">8</oasis:entry> 
                    <oasis:entry colname="col2" align="char" char=".">1,427</oasis:entry> 
                    <oasis:entry colname="col3" align="right">0.07</oasis:entry> 
                    <oasis:entry colname="col4" align="right">9</oasis:entry> 
                    <oasis:entry colname="col5" align="right">0.65</oasis:entry> 
                </oasis:row>
                <oasis:row> 
                    <oasis:entry colname="col1" align="left">&#x003E;&#x2009;&#x003D;9</oasis:entry> 
                    <oasis:entry colname="col2" align="char" char=".">2,242</oasis:entry> 
                    <oasis:entry colname="col3" align="right">0.11</oasis:entry> 
                    <oasis:entry colname="col4" align="right">23</oasis:entry> 
                    <oasis:entry colname="col5" align="right">1.66</oasis:entry> 
                </oasis:row> 
                <oasis:row> 
                    <oasis:entry colname="col1" align="left"><?header row?>Total</oasis:entry> 
                    <oasis:entry colname="col2" align="left">2,115,186</oasis:entry> 
                    <oasis:entry colname="col3" align="right">100.00</oasis:entry> 
                    <oasis:entry colname="col4" align="right">1,388</oasis:entry> 
                    <oasis:entry colname="col5" align="right">100.00</oasis:entry> 
                </oasis:row> 
            </oasis:tbody> 
        </oasis:tgroup> 
    </oasis:table> 
    <table-wrap-foot>
        <fn id="TF16"><label><sup>a</sup></label><p>Includes cases with RCF of 1-Undoubtedly responsible, 2-Probably responsible, or 3-Contributory. This excludes reports with outcome of Death INDIRECT.</p></fn>
    </table-wrap-foot>
</table-wrap>