🧚 PXE Specifics and Limits
Specifics
PXE Content Model
The PXE Content Model (opens in a new tab) is the specification for PXE Master tagging. Refer to its documentation of the table element (opens in a new tab) as necessary for the details of the non-accessibility requirements of PXE table tagging.
Tracking Classes
In order to keep track of which tables were analyzed, what this analysis determined, and whether remediation took place, we will add tracking classes to all tables we process. If the table already has a class or classes, do not replace them. Add to them.
table-remediated
Used when changes have been made to the table to improve its accessibility.
This class must be present on a table for it to be considered "COMPLETE".
<table class="informaltable largetable">...</table>table-not-remediated
Used when a table has accessibility issues that have been deemed out of scope and no changes have been made.
This class is only for use on tables in "NEEDS remediation" categories, and should only be used in rare cases that have been approved by CI.
<table>...</table>Creating New GUIDs (IDs)
If you must create new elements that require id attributes (e.g. adding headers to a table that doesn't have them), do not attempt to use the GUID format. GUIDs can only be assigned by the PXE Workflow Server or an error will be generated. Use any unique string in the id attribute such as "newid1", "newid2", "newid3", etc. Once your upload is processed, the server will convert these to GUIDs automatically.
Block-Level Elements Within Cells
Header cells (<th> elements) cannot contain block-level elements (e.g. <p>), and data cells (<td> elements) should only contain them when necessary (e.g. an <ol> or <ul> with multiple list items). Single-item lists should be stripped from all table cells, including the inner <p>.
This header contains a paragraph. | • This header contains a list. |
|---|---|
• This cell contains a single item list. |
|
<table>
<tbody>
<tr>
<th scope="col">
<p>This header contains a paragraph.</p>
</th>
<th scope="col">
<ul>
<li><p>This header contains a list.</p></li>
</ul>
</th>
</tr>
<tr>
<td>
<ul>
<li><p>This cell contains a single item list.</p></li>
</ul>
</td>
<td>
<ul>
<li><p>This cell contains a</p></li>
<li><p>multiple item list.</p></li>
</ul>
</td>
</tr>
</tbody>
</table> Limits
As mentioned in the Introduction, there are limits to how we can remediate tables within the PXE Workflow. We will regularly determine that an ideal solution for some tables is out of scope.
Tables Must Remain Tables
Often, lists are presented as a table. Sometimes, content is presented within a single-cell table in order to give it a "contained" appearance. These tables can work well for visual users, but result in an unnecessarily verbose experience for screen reader users. Despite this, we cannot convert a table to a definition list, for example. We must do our best to remediate such tables without completely overhauling them.
We Won't Remediate Small Tables
Small tables is defined as having only one or two rows or columns. Even with unideal table headers (or none at all), it is still fairly easy for a screen reader user to navigate and understand the content without it being too much to track in working memory.
We Won't Remediate Tables Prestented as Images or Containing All Images
The work of OCRing and/or manually handling such content has been deemed out of scope. Tables containing images should still be remediated as much as possible, but we will not convert image content to HTML.
Dealing With Difficult Remediations
For some difficult remediations, a simpler approach may be appropriate.
Example 1
The following table is actually a definition list spread across four columns. The first and third are the terms and the second and fourth are definitions. There does not appear to be a reason for using this method beyond a desire to fit more of the terms on a single printed page. Furthermore, the term/definition sets in the first and second columns have no discernable relationship to the corresponding sets they share rows with in the third and fourth columns. Ideally, this would have never been presented as a table and would be instead tagged as a definition list. That said, because tables must remain tables, we won't it convert to a definition list. What makes this one particularly challenging is the original authors spread some term and definition values across two rows–e.g. decrescendo (decresc.) / decreasing in volume; this is actually may present the biggest barrier to comprehension for screen reader users.
To avoid having to move term/definition sets between rows after concatenating the split terms and definitions, you can use rowspan to remove the resulting empty cells. Then, the headers and id technique should be used to associate each definition with its term. Because of the simple format of this table, it's possible to apply headers and id programmatically (more information on this to come once the table remediation software goes into production).
| accelerando | becoming faster | andante | moderately slow |
| agitato | excited | animato | animated |
| allargando | becoming broader | appassionato | impassioned |
| allegretto | moderately fast | a tempo | at normal tempo |
| allegro | fast | brilliante | brilliant |
| cantabile | singing | moderato | at moderate tempo |
| crescendo | increasing in | pianissimo | very soft |
| (cresc.) | volume | (pp) | |
| decrescendo | decreasing in | piano | soft |
| (decresc.) | volume | (p) | |
| diminuendo | decreasing in | presto | very fast |
| (dim.) | volume | rallentando | becoming slower |
| dolce | sweet, soft | (rall.) | |
| energico | energetic | risoluto | determined |
| espressivo | expressive | ritardando | becoming slower |
| (espr.) | (rit.) | ||
| forte | loud | schnell | fast |
| (f) | sostenuto | sustained | |
| fortissimo | very loud | spiritoso | spirited |
| (ff) | staccato | detached | |
| furioso | furious | (stacc.) | |
| giocoso | humorous | stringendo | quickening |
| grazioso | graceful | (string.) | |
| langsam | slow | tempo primo | at the original |
| larghetto | slow | tempo | |
| largo | very slow | tenuto | held, sustained |
| lento | slow | (ten.) | |
| maestoso | majestic | tranquillo | quiet, calm |
| marcato | marked | vif | lively |
| (marc.) | vivace | quick | |
| mezzo forte | moderately loud | vivo | lively |
| (mf) | zart | tender, delicate | |
| mezzo piano | moderately soft | ||
| (mp) |
<table class="informaltable largetable" id="P700101391900000000000000000729E">
<tbody>
<tr>
<td id="P700101391900000000000000000729F"><i>accelerando</i></td>
<td id="P70010139190000000000000000072A0">becoming faster</td>
<td id="P70010139190000000000000000072A1"><i>andante</i></td>
<td id="P70010139190000000000000000072A2">moderately slow</td>
</tr>
<tr>
<td id="P70010139190000000000000000072A3"><i>agitato</i></td>
<td id="P70010139190000000000000000072A4">excited</td>
<td id="P70010139190000000000000000072A5"><i>animato</i></td>
<td id="P70010139190000000000000000072A6">animated</td>
</tr>
<tr>
<td id="P70010139190000000000000000072A7"><i>allargando</i></td>
<td id="P70010139190000000000000000072A8">becoming broader</td>
<td id="P70010139190000000000000000072A9"><i>appassionato</i></td>
<td id="P70010139190000000000000000072AA">impassioned</td>
</tr>
<tr>
<td id="P70010139190000000000000000072AB"><i>allegretto</i></td>
<td id="P70010139190000000000000000072AC">moderately fast</td>
<td id="P70010139190000000000000000072AD"><i>a tempo</i></td>
<td id="P70010139190000000000000000072AE">at normal tempo</td>
</tr>
<tr>
<td id="P70010139190000000000000000072AF"><i>allegro</i></td>
<td id="P70010139190000000000000000072B0">fast</td>
<td id="P70010139190000000000000000072B1"><i>brilliante</i></td>
<td id="P70010139190000000000000000072B2">brilliant</td>
</tr>
<tr>
<td id="P70010139190000000000000000072B3"><i>cantabile</i></td>
<td id="P70010139190000000000000000072B4">singing</td>
<td id="P70010139190000000000000000072B5"><i>moderato</i></td>
<td id="P70010139190000000000000000072B6">at moderate tempo</td>
</tr>
<tr>
<td id="P70010139190000000000000000072B7"><i>crescendo</i></td>
<td id="P70010139190000000000000000072B8">increasing in</td>
<td id="P70010139190000000000000000072B9"><i>pianissimo</i></td>
<td id="P70010139190000000000000000072BA">very soft</td>
</tr>
<tr>
<td id="P70010139190000000000000000072BB">(cresc.)</td>
<td id="P70010139190000000000000000072BC">volume</td>
<td id="P70010139190000000000000000072BD">(pp)</td>
<td />
</tr>
<tr>
<td id="P70010139190000000000000000072BE"><i>decrescendo</i></td>
<td id="P70010139190000000000000000072BF">decreasing in</td>
<td id="P70010139190000000000000000072C0"><i>piano</i></td>
<td id="P70010139190000000000000000072C1">soft</td>
</tr>
<tr>
<td id="P70010139190000000000000000072C2">(decresc.)</td>
<td id="P70010139190000000000000000072C3">volume</td>
<td id="P70010139190000000000000000072C4">(p)</td>
<td />
</tr>
<tr>
<td id="P70010139190000000000000000072C5"><i>diminuendo</i></td>
<td id="P70010139190000000000000000072C6">decreasing in</td>
<td id="P70010139190000000000000000072C7"><i>presto</i></td>
<td id="P70010139190000000000000000072C8">very fast</td>
</tr>
<tr>
<td id="P70010139190000000000000000072C9">(dim.)</td>
<td id="P70010139190000000000000000072CA">volume</td>
<td id="P70010139190000000000000000072CB"><i>rallentando</i></td>
<td id="P70010139190000000000000000072CC">becoming slower</td>
</tr>
<tr>
<td id="P70010139190000000000000000072CD"><i>dolce</i></td>
<td id="P70010139190000000000000000072CE">sweet, soft</td>
<td id="P70010139190000000000000000072CF">(rall.)</td>
<td />
</tr>
<tr>
<td id="P70010139190000000000000000072D0"><i>energico</i></td>
<td id="P70010139190000000000000000072D1">energetic</td>
<td id="P70010139190000000000000000072D2"><i>risoluto</i></td>
<td id="P70010139190000000000000000072D3">determined</td>
</tr>
<tr>
<td id="P70010139190000000000000000072D4"><i>espressivo</i></td>
<td id="P70010139190000000000000000072D5">expressive</td>
<td id="P70010139190000000000000000072D6"><i>ritardando</i></td>
<td id="P70010139190000000000000000072D7">becoming slower</td>
</tr>
<tr>
<td id="P70010139190000000000000000072D8">(espr.)</td>
<td />
<td id="P70010139190000000000000000072D9">(rit.)</td>
<td />
</tr>
<tr>
<td id="P70010139190000000000000000072DA"><i>forte</i></td>
<td id="P70010139190000000000000000072DB">loud</td>
<td id="P70010139190000000000000000072DC"><i>schnell</i></td>
<td id="P70010139190000000000000000072DD">fast</td>
</tr>
<tr>
<td id="P70010139190000000000000000072DE">(f)</td>
<td />
<td id="P70010139190000000000000000072DF"><i>sostenuto</i></td>
<td id="P70010139190000000000000000072E0">sustained</td>
</tr>
<tr>
<td id="P70010139190000000000000000072E1"><i>fortissimo</i></td>
<td id="P70010139190000000000000000072E2">very loud</td>
<td id="P70010139190000000000000000072E3"><i>spiritoso</i></td>
<td id="P70010139190000000000000000072E4">spirited</td>
</tr>
<tr>
<td id="P70010139190000000000000000072E5">(ff)</td>
<td />
<td id="P70010139190000000000000000072E6"><i>staccato</i></td>
<td id="P70010139190000000000000000072E7">detached</td>
</tr>
<tr>
<td id="P70010139190000000000000000072E8"><i>furioso</i></td>
<td id="P70010139190000000000000000072E9">furious</td>
<td id="P70010139190000000000000000072EA">(stacc.)</td>
<td />
</tr>
<tr>
<td id="P70010139190000000000000000072EB"><i>giocoso</i></td>
<td id="P70010139190000000000000000072EC">humorous</td>
<td id="P70010139190000000000000000072ED"><i>stringendo</i></td>
<td id="P70010139190000000000000000072EE">quickening</td>
</tr>
<tr>
<td id="P70010139190000000000000000072EF"><i>grazioso</i></td>
<td id="P70010139190000000000000000072F0">graceful</td>
<td id="P70010139190000000000000000072F1">(string.)</td>
<td />
</tr>
<tr>
<td id="P70010139190000000000000000072F2"><i>langsam</i></td>
<td id="P70010139190000000000000000072F3">slow</td>
<td id="P70010139190000000000000000072F4"><i>tempo primo</i></td>
<td id="P70010139190000000000000000072F5">at the original</td>
</tr>
<tr>
<td id="P70010139190000000000000000072F6"><i>larghetto</i></td>
<td id="P70010139190000000000000000072F7">slow</td>
<td />
<td id="P70010139190000000000000000072F8">tempo</td>
</tr>
<tr>
<td id="P70010139190000000000000000072F9"><i>largo</i></td>
<td id="P70010139190000000000000000072FA">very slow</td>
<td id="P70010139190000000000000000072FB"><i>tenuto</i></td>
<td id="P70010139190000000000000000072FC">held, sustained</td>
</tr>
<tr>
<td id="P70010139190000000000000000072FD"><i>lento</i></td>
<td id="P70010139190000000000000000072FE">slow</td>
<td id="P70010139190000000000000000072FF">(ten.)</td>
<td />
</tr>
<tr>
<td id="P7001013919000000000000000007300"><i>maestoso</i></td>
<td id="P7001013919000000000000000007301">majestic</td>
<td id="P7001013919000000000000000007302"><i>tranquillo</i></td>
<td id="P7001013919000000000000000007303">quiet, calm</td>
</tr>
<tr>
<td id="P7001013919000000000000000007304"><i>marcato</i></td>
<td id="P7001013919000000000000000007305">marked</td>
<td id="P7001013919000000000000000007306"><i>vif</i></td>
<td id="P7001013919000000000000000007307">lively</td>
</tr>
<tr>
<td id="P7001013919000000000000000007308">(marc.)</td>
<td />
<td id="P7001013919000000000000000007309"><i>vivace</i></td>
<td id="P700101391900000000000000000730A">quick</td>
</tr>
<tr>
<td id="P700101391900000000000000000730B"><i>mezzo forte</i></td>
<td id="P700101391900000000000000000730C">moderately loud</td>
<td id="P700101391900000000000000000730D"><i>vivo</i></td>
<td id="P700101391900000000000000000730E">lively</td>
</tr>
<tr>
<td id="P700101391900000000000000000730F">(mf)</td>
<td />
<td id="P7001013919000000000000000007310"><i>zart</i></td>
<td id="P7001013919000000000000000007311">tender, delicate</td>
</tr>
<tr>
<td id="P7001013919000000000000000007312"><i>mezzo piano</i></td>
<td id="P7001013919000000000000000007313">moderately soft</td>
<td />
<td />
</tr>
<tr>
<td id="P7001013919000000000000000007314">(mp)</td>
<td />
<td />
<td />
</tr>
</tbody>
</table>