Skip to content
§9.1.4

Header-Only Tables

A header with no data—is that a table?

✅ NormativeSettled. The requirement holds as written.📄 Page ruleCan be applied from the page alone.Read §9.1.4 in the RFC ↗

The requirement

The output MUST NOT contain a table that is a header with no body. A header row MUST either be rendered together with its body or, where no body can be joined to it, rendered as ordinary text — never as an orphan header row standing as a table.

When it applies

The failure: a header row becomes a table of its own while the rows it describes end up in a neighbouring region as plain text. The result claims there is a table with no data in it, and separately claims there is a run of loose numbers with no meaning.

Sketch of the printed page — layout, not output
Emitted:   | Duration | Factor |     ← header-only table…

           1   0.94                  ← …its body rendered as plain text
           2   0.91                    from the neighbouring region

Reading the examples. Each one pairs a source page with the output the rule expects. ✅ Sample: the rule applies. ❌ Counter-sample: it looks like it applies and does not, or a rendering got it wrong. A non-conforming output, in red, is shown only for contrast. … marks content left out of an excerpt.

The point, in a small example

The crop has no body and no joinable continuation. Do not manufacture a header-only HTML table. These pages are made up to isolate the rule.

01

✅ SampleConstructedThe rule applies

Headers without a body are ordinary text

This is the complete available crop. No data rows or adjoining page are available. Preserve the labels without creating an empty table or inventing rows.

Source page
Header-Only Tables — Headers without a body are ordinary text. Source page.
Non-conforming output

What the rule rules out.

Markdown
<table><tr><th>Product</th><th>Quantity</th><th>Price</th></tr></table>
Expected output
Markdown
Product
Quantity
Price
Header-Only Tables · Source page

Headers without a body are ordinary text

Header-Only Tables — Headers without a body are ordinary text. Source page.

Joining a header to its body

A header row with no rows under it belongs to the body immediately below or beside it. The header and body MUST be rendered as one table only when all three hold:

  • the body is immediately adjacent — the next thing on the page, not across a gap of other content;
  • the column bounds match — the body's columns line up under the header's;
  • nothing sits in between — no paragraph, no other table, no unrelated band.

If any condition fails, the merge MUST NOT be made (never invent): the stray header line MUST be rendered as text rather than as a one-row table.

How large a gap is too large is not fixed. A gap large enough to put the adjacency in doubt counts as a failed condition, and the header is not merged.

The one exception

A blank pre-printed form is headers plus empty rows, and there the structure genuinely is the content: it MUST be rendered, rows included — see Empty Pre-Printed Grids (§9.1.3). That case has a body of printed empty rows. It is not a header standing alone.

Look-alike

Two similar pages that call for different decisions. Synthetic, for teaching the boundary.

A header row and nothing under it. Is there a table here?

A

A stray header line

DurationFactor
Rates apply from inception.
1 0.94
2 0.91
The convention

Not a table. Find the body or annotate it as text.

B

A blank pre-printed grid

NameDateAmount
The convention

A table. Keep every printed empty row.

Look at the structure. What evidence changes the answer?

More

Rule id tables-header-only-tables · tables degenerate failure-mode