table-th-has-data-cells
<th>要素は少なくとも1つのデータセルを説明する必要があります
<th>要素を含む表に、それらの見出しが説明する<td>データセルも1つ以上含まれていることを確認します。
適用範囲:表のセマンティクスを保持し、アクセシビリティツリーに含まれる<table>要素のうち、表示され、アクセシビリティツリーに含まれ、rowheader/columnheader以外の明示的なロールで上書きされていない<th>を1つ以上含むものに適用されます。ARIAのみの同等の構造にも適用されます。つまり、ロールがgrid/treegridに解決され(ネイティブの<table>は関係しない)、対象となるcolumnheader/rowheaderロールの要素を1つ以上含む要素です。ロールはユーザーエージェントと同じ方法で解決します。role属性のうち既知のロールを指す最初のトークンを大文字と小文字を区別せずに照合し、既知のトークンがないrole属性の場合は暗黙のロールがそのまま残ります。ARIAだけの形では、ElementInternalsによってgrid、treegrid、見出し、セルのいずれかのロールを与えられたカスタム要素(this.attachInternals().role)も、別のロールを示すrole属性がなければ、そのrole属性を持つ要素と同じように扱われます。
期待される結果:表のどこかに<td>も1つ以上含まれています。また、colspanやrowspanのない表(またはaria-colspan、aria-rowspan、aria-colindexのないgrid)では、各見出しセルに、HTMLの表モデルによって割り当てられるデータセルがあります。つまり、scopeが許す範囲で同じ列または行のその後にある、headers属性を持たないデータセル、またはheaders属性でその見出しセルを示すデータセルです。
検出結果が報告する内容:
row、column:割り当てのない見出しセルの位置で、0から数えます。行は上から、セルは行内で左から数えます。
これらのdata.detailsのフィールドは、検出結果を読み解き、再現するのに役立ちます。reasonCodeと、出力スキーマで安定と明記された一部のフィールドを除き、安定した契約ではありません。マイナーリリースで名前が変わったり、なくなったりすることがあるため、これらに依存した実装はしないでください。
例
<table><tr><th>Name</th></tr><tr><td>Apple</td></tr></table>
表に、<th>が見出しとなる<td>が1つ以上あります。
<table><tr><th>Name</th></tr></table>
表に<th>はありますが、<td>はどこにもありません。
確認方法
このルールが判断できない場合はcantTellを報告し、判断を人に委ねます。ルールが投げかける各質問を、理由コードごとに、答えるための手順とともにここに示します。検出結果にも同じ手順がhowToCheckとして、スキャンの言語で含まれます。出力スキーマを参照してください。
TABLE_TH_NO_ASSIGNED_CELL
- レポートに示された見出しセルを見つけてください(行と列は0から数えて示されています)。
- scopeの指定に従って、列内でその下にあるセル、または行内でその後にあるセルを確認してください。
- その見出しがデータのラベルとなることを意図しているか判断してください。見出しを付けるべきセルがない、または見出しとしてマークアップされている場合、そのセルは何のラベルにもなっていません。
- スクリーンリーダーがあれば、表のデータセルを移動し、この見出しが読み上げられることがあるかを控えてください。
満たす場合:見出しはデータのラベルとなることを意図していない(通常のセルにできる)か、見出しを付けるデータが、見出しが割り当てられるようにマークアップされています。
満たさない場合:データのラベルとなるべき見出しにデータセルが割り当てられておらず、その関係が伝わらないため、WCAG 1.3.1を満たしません。