requiredOwnedElements — это ключевой атрибут библиотеки
aria-query для работы с ARIA-ролями и их требованиями к
дочерним элементам. Он представляет собой объект, где каждая роль
сопоставляется с массивом объектов, описывающих необходимые
дочерние элементы, включая их роли и свойства. Основное
назначение этого свойства — обеспечить валидность структуры DOM с точки
зрения доступности.
В aria-query роли определяются через карту
roles, где каждая роль описывает свои ограничения, включая
requiredProps, supportedProps,
requiredContextRole и requiredOwnedElements.
Атрибут requiredOwnedElements особенно важен для
интерактивных и сложных компонентов, таких как menu,
listbox, grid.
requiredOwnedElementsЭлемент requiredOwnedElements имеет следующую типовую
структуру:
{
roleName: [
{
requiredElement: 'childRole',
requiredElementContext: 'optionalContext',
min: 1,
max: null
}
]
}
Пояснения к полям:
null означает отсутствие верхней границы.Пример из aria-query для роли list:
const listRequiredElements = {
list: [
{ requiredElement: 'listitem', min: 1, max: null }
]
};
Это означает, что каждый элемент с ролью list должен
содержать как минимум один элемент с ролью listitem. Если в
DOM отсутствуют такие дочерние элементы, это нарушает требования
ARIA.
requiredOwnedElements используется для
валидаторов и линтеров, которые проверяют соответствие
структуры элементов ARIA. Например:
Пример функции для проверки DOM:
import { roles } from 'aria-query';
function validateRequiredChildren(elementRole, childrenRoles) {
const requiredChildren = roles.get(elementRole)?.requiredOwnedElements || [];
return requiredChildren.every(({ requiredElement, min }) => {
const count = childrenRoles.filter(r => r === requiredElement).length;
return count >= min;
});
}
// Пример использования
const isValid = validateRequiredChildren('list', ['listitem', 'listitem']);
console.log(isValid); // true
Здесь мы извлекаем requiredOwnedElements для
родительской роли и проверяем, что все обязательные дочерние роли
присутствуют в DOM в нужном количестве.
requiredOwnedElements тесно взаимодействует с другими
ключами aria-query:
requiredProps — свойства, которые
должны присутствовать у родителя.supportedProps — свойства, которые
могут присутствовать, но не обязательны.requiredContextRole — определяет роли
контейнера, в которых может находиться элемент.Это позволяет создавать комплексные правила валидации:
Списки и элементы списка
list → listitem (минимум 1)menu → menuitem или
menuitemcheckbox/menuitemradioТаблицы и сетки
grid → row (минимум 1)row → gridcell (минимум 1)Компоненты с комбинированной структурой
tablist → tabtabpanel → любое количество элементов контентаЭти паттерны позволяют линтерам и библиотекам для тестирования доступности автоматически выявлять ошибки структуры и предотвращать нарушения стандартов ARIA.
Для крупных проектов полезно строить карты зависимостей
ролей, где requiredOwnedElements становится
источником истинной структуры ARIA-компонентов. Это облегчает:
Можно создавать функции, которые на основе
requiredOwnedElements генерируют DOM, соответствующий
стандарту, или автоматически предупреждают разработчика при
несоответствии ролей.