aria-prohibited-children
Container-Rollen dürfen kein Kind mit unzulässiger Rolle besitzen
Prüft, dass jedes im Accessibility Tree besessene Kind einer Container-Rolle (list, listbox, menu, menubar, radiogroup, rowgroup, table, grid, treegrid, tablist, tree, row) eine der für diese Rolle zulässigen besessenen Rollen hat.
Anwendbarkeit. Gilt für Elemente mit einer expliziten, gültigen Rolle, die eine der Container-Rollen mit einem dokumentierten Eintrag „required owned elements“ ist (dieselbe Tabelle, die auch aria-required-children verwendet).
Erwartung. Jeder im Accessibility Tree besessene Nachfahre des Containers (nach dem Entfernen von Elementen mit role="none"/"presentation" sowie von jedem Wrapper mit „group“/„rowgroup“, den die erforderliche besessene Menge des Containers selbst nennt, als transparent für den Abgleich besessener Elemente gemäß WAI-ARIA – unabhängig davon, ob „group“/„rowgroup“ selbst zu den erforderlichen besessenen Rollen des Containers gehört) hat eine Rolle aus genau dieser Menge. Nichts anderes ist ein strukturell gültiges direktes Kind einer zusammengesetzten bzw. Container-Rolle, wobei „zulässig“ die erforderlichen besessenen Rollen des Containers umfasst sowie eine kleine Menge von Rollen, die er besitzen darf, ohne dass sie erforderlich sind (ein Trenner zwischen Menüeinträgen, eine Beschriftung in einem Grid). In einen Wrapper ohne Rolle wird hineingestiegen, um die Einträge zu erreichen, die eine Komponentenbibliothek darin vergräbt; sobald dort aber einer gefunden ist, gilt der Rest des Teilbaums dieses Wrappers als eigener Inhalt des Eintrags und wird nicht gegen den Container geprüft.
Was ein Befund meldet.
containerRole: die Rolle des Containers.containerSelector: ein Selektor für den Container.allowedOwnedRoles: die Rollen, die der Container besitzen darf. Jeder Eintrag ist ein Rollenname.childRole(ein Kind mit Rolle): die Rolle des Kinds, die nicht dazugehört; bei einem Link, einem Button oder einem anderen von sich aus fokussierbaren Steuerelement die Rolle seines Elements (link,button).nullbei einem Kind ohne Rolle.attr(ein Kind ohne Rolle oder ein von sich aus fokussierbares): was es zu einem eigenen Knoten macht: das globale aria-*-Attribut, das es trägt,tabindexodernativeFocusable, wenn es auch ohne tabindex den Fokus erhalten kann (ein Link, ein Button).
Diese Felder in data.details helfen, einen Befund zu lesen und zu reproduzieren. Außer reasonCode und den wenigen Feldern, die Ausgabeschema als stabil nennt, sind sie kein stabiler Vertrag: Ein Feld kann in einer Minor-Version umbenannt werden oder wegfallen, bauen Sie also nicht darauf auf.
Beispiele
<ul role="menubar"><li role="menuitem">File</li><li role="menuitem">Edit</li></ul>
Beide besessenen Kinder haben Rollen, die die Spezifikation für menubar erlaubt.
<div role="table"><div role="row"><div role="cell">x</div></div><div role="button">Not a valid table child</div></div>
role="table" erlaubt nur Kinder mit row (oder rowgroup); der Button ist ein unzulässiges besessenes Kind.