Matterhorn 09-003 · PDF/UA-1 UA1:7.2-1
Right map, wrong element: the type a reader ends up with
Once role mapping has been resolved, the effective type still does not describe the content.
The condition, as the protocol states it. “The structure type (after applying any role-mapping as necessary) of a structure element is not semantically appropriate.”
Matterhorn Protocol 1.1, checkpoint 09, index 09-003, section UA1:7.2-1. The protocol marks this as requiring human judgement.
What a screen reader actually does
The reader announces the wrong role.
What “after role mapping” means
Most tagged PDFs are not tagged with the standard vocabulary directly. They carry the producer’s names — the author’s styles, usually — and a role map that resolves each to a standard type:
/RoleMap << /Heading1 /H1
/BodyText /P
/Callout /BlockQuote >>
45 0 obj
<< /Type /StructElem
/S /Heading1 % the tag as written
/P 9 0 R /Pg 3 0 R
/K [ 12 ] >> % "The best decision we made all year"
endobj
That element’s /S is Heading1. The role map turns it into H1, and H1 is what a reader acts on. Condition 09-003 is the case where that resolved type is wrong for this element — here, because the text under it is a pull quote that was given the Heading1 style for its size.
The map is right: every other Heading1 in the document is a heading. The element is wrong.
What the user hears
A pull quote announced as heading level 1, sitting in the heading list among the chapter titles. A user scanning headings to find their place gets a sentence lifted from the text instead of a section, and lands in the middle of one.
The general form is the same for any type: the reader announces the resolved role and offers that role’s navigation. A paragraph that resolves to Caption is attached to no figure; a label that resolves to H3 adds a level to the outline; a footnote that resolves to P is no longer a note.
Where it comes from
Styles chosen for appearance. The usual source: the author needed big bold text and used the heading style that had it. The producer maps the style faithfully; the style was the wrong one.
Role maps edited to fix one use. Somebody changes Callout → BlockQuote to Callout → Note because one callout was a note, and every other callout becomes a note too. That edit fixes one element under this condition and breaks the rest under 02-002.
Targets chosen by a tool. Any repair that gives unknown names a target guesses from the name, and a guess is right for some elements and not others.
How to check it free
You need two things side by side: what each custom name resolves to, and what each element is.
- Read the map. In Acrobat Pro, Tags panel →
Options → Edit Role Map. Adobe’s Content and Tags panel documentation describes it as where the document’s role mappings are added, changed and deleted. Note what each custom name becomes, following chains to the end. - Walk the tree with the map in mind. Tags panel, Highlight Content on. For each custom-tagged element, read it as its resolved type: this
Heading1is anH1; is the highlighted content a top-level heading? - Concentrate on names that cover several kinds of content. A style used for one thing is either right everywhere or wrong everywhere (that is 02-002). A style used for two things is where this condition lives.
- Listen. A screen-reader pass through the heading list finds misplaced headings faster than reading the tree.
How to fix it free, in Acrobat Pro
Change the element, not the map. From Adobe’s documentation:
In the Tags panel, select the element, choose Properties from the Options menu, choose a new type from the Type menu, and click Close. Choose a standard type — BlockQuote for the pull quote — rather than another custom name, so the fix does not depend on the role map at all. (A pull quote that only repeats a sentence the reader meets anyway in the body is often better as an artifact; that is a judgement about the document too.)
On the page, with the Reading Order tool: select Show Page Content Groups and Page Content Order, select the region, and click the button for the type it should be, where the tool has one.
If many elements share the problem, fix the source instead: give the pull quotes their own style, with its own mapping, and export again.
What Taggart does
Taggart has no check for 09-003. It raises no 09-003 finding, so the condition does not appear in the review queue or in the conformance statement’s count of undecided judgements.
It does resolve the role map when it reads the tree, so its structure checks — headings, lists, tables — look at the resolved type, as a reader does. A Heading1 mapped to H1 is a heading to Taggart’s heading checks.
For the review, the reading-order editor shows each element’s resolved role and, when you select one whose tag was mapped, the tag as written beside it — <H1> (tagged Heading1) — so the element and its resolution are on one line. The screen-reader preview reads the tree announcing resolved roles: the pull quote above comes out as heading level 1, The best decision we made all year, between the headings that belong there.
Taggart’s own role-map repair, which gives unresolved names a target from a table or a guess from the name, is one of the tools that can cause this condition, and each mapping it writes is listed in the change log for you to check against the elements that use it.
How Taggart handles it
No software can decide this one, and Taggart has no check for it, so it never appears among the findings or in the review queue. It is on the list of conditions Taggart asks you to confirm by hand before it writes the PDF/UA claim into the file — the claim waits until you have.
Whatever Taggart changes, the page still looks identical. Fixes edit the PDF object model, not the content streams, and every remediation is re-rendered and compared against the original at structural similarity ≥ 0.999 before you get the file back. A tool that quietly reflows your document is worse than no tool.
Frequently asked questions
How is this different from 01-006?
They ask the same question from two places. 01-006 is in checkpoint 01, Real content tagged, under clause 7.1, and asks whether a structure type and its attributes fit. 09-003 is in checkpoint 09, Appropriate Tags, under clause 7.2, and says explicitly that the type to judge is the one left after role mapping. For a document tagged only with standard types they come to the same thing; for one tagged with custom names, 09-003 is the one to keep in mind.
How is it different from 02-002?
02-002 is the role map entry, which applies to every element with that tag. 09-003 is one element. If every element tagged Sidebar is a sidebar and the map sends Sidebar to Table, fix the map. If the map sends Heading1 to H1 and one Heading1 element is a pull quote, fix that element.
Should I change the element or the map?
Count. If the name is wrong for most of its elements, change the map entry. If it is wrong for a few, change those elements' type to a standard type directly — a standard type needs no mapping, and the map stays right for everything else.
Why does a custom name that sounds right not help?
Because a reader never acts on the name. Heading1 means nothing until the role map turns it into H1, and an element called Callout that maps to P is a paragraph however descriptive its name. Review the resolved type, not the label.
Where this sits in the standards
| Standard | Reference |
|---|---|
| Matterhorn Protocol 1.1 | Checkpoint 09 (Appropriate Tags), index 09-003 |
| PDF/UA-1 (ISO 14289-1) | Clause 7.2-1 |
| WCAG 2.1 | 1.3.1 Info and Relationships — Level A |
| EN 301 549 / Section 508 / ADA Title II | All three point at WCAG 2.1 Level AA for non-web documents, so a Level A or AA criterion here is in scope for each of them. |
Related conditions
- 02-002 Role mapping is semantically inappropriateThe role map terminates at a standard type, but the wrong one — a custom "Sidebar" mapped to Table, or "PullQuote" mapped to Figure.
- 01-006 Structure type is not semantically appropriateThe tag does not match the nature of the content: a heading tagged as a paragraph, a data table tagged as a layout container, a caption tagged as body text. This is the judgment call that no validator can make for you.
- 02-001 Non-standard tag mapping does not terminate with a standard typeA custom tag name is present in the role map but the chain of mappings never arrives at a structure type defined in ISO 32000-1, 14.8.4. Mapping may be indirect — a custom type may map to another custom type — but it must eventually terminate.
- 09-002 Structure elements are nested in a semantically inappropriate mannerNesting that is syntactically legal but semantically nonsense — a Table inside an H2, a paragraph containing a section.
Other conditions in checkpoint 09
Checkpoint 09 covers appropriate tags. These are its other failure conditions; the ones without a link are in the rule set but do not have a written page yet.
- 09-001 Tags are not in logical reading orderThe order of elements in the structure tree does not match the order a human would read the page. This is the single most common substantive defect in tagged PDFs and the one Acrobat's own tooling handles worst.
- 09-002 Structure elements are nested in a semantically inappropriate mannerNesting that is syntactically legal but semantically nonsense — a Table inside an H2, a paragraph containing a section.
- 09-004 A table-related structure element does not conform to ISO 32000-1, Table 337The table grammar is broken: a TD outside a TR, a TR outside Table/THead/TBody/TFoot, a Table with no rows, or rows that span different numbers of columns.
- 09-005 A list-related structure element does not conform to ISO 32000-1, Table 336The list grammar is broken: an LI outside an L, an Lbl or LBody outside an LI, a list item with no LBody.
- 09-006 A TOC-related structure element does not conform to ISO 32000-1, Table 333TOCI appears outside a TOC, or a TOC contains children other than TOC and TOCI.
- 09-007 A Ruby-related structure element does not conform to ISO 32000-1, Table 338RB, RT or RP appears outside a Ruby element, or Ruby has an illegal child sequence.
- 09-008 A Warichu-related structure element does not conform to ISO 32000-1, Table 338WT or WP appears outside a Warichu element, or Warichu has an illegal child sequence.
Check your own file. Taggart’s validator is free and unlimited — 75 of the 87 Matterhorn conditions software can decide, with the other 12 listed for you to confirm; no watermark, no expiry, and no account needed up to 60 pages.
This condition needs a person’s judgement, so there was nothing for a tool to check. Written from ISO 14289-1 and the Matterhorn Protocol on . The Acrobat steps follow Adobe’s documentation and were not walked through by hand. Last updated .