Cómo se organizan las reglas

Esto describe cómo están estructuradas las 145 reglas del catálogo, útil para interpretar un resultado o para encontrar la regla que buscas. Refleja lo que ya existe en el conjunto de reglas, no un diseño abstracto.

Automáticas frente a manuales

Cada regla tiene uno de dos valores en la propiedad type, y la diferencia está en lo que la regla es capaz de decidir, no en qué resultado informa:

  • automática: decide de forma determinista, sin heurísticas y sin adivinar. Puede informar fail. cantTell igual aparece aquí, en estas situaciones: existe una violación real pero por sí sola no establece que el criterio de WCAG asignado falle (un requisito de autoría de ARIA, o el modelo de contenido de HTML, cuyo nombre/rol/valor expuesto sigue siendo válido: desde core 1.15, incertidumbre spec-only, en las reglas de estructura ARIA y HTML); la regla decide de forma determinista que se incumple una buena práctica, no reclama ningún Criterio de Éxito, y lo que encontró no tiene por qué perjudicar a nadie, ya que el rol o el elemento sigue llegando tal cual a la tecnología de asistencia (aria-allowed-role, landmark-role-name-present, etiquetadas como buena práctica); o la regla solo puede confirmar que un mecanismo está presente, mientras que si lo que está presente es realmente válido le corresponde a una regla hermana (aria-required-children, emparejada con aria-prohibited-children); o la regla no puede decidir sin adivinar, así que pregunta en lugar de fallar: un nombre que puede venir de una raíz shadow cerrada, de ElementInternals que el motor no puede leer o de contenido anidado a demasiada profundidad para leerlo (las reglas *-name-present), texto que puede recortarse o solaparse al aumentar el espaciado (text-spacing-content-loss), un bloque de consulta de medios de orientación que gira un elemento distinto del contenido de la página (css-orientation-lock), un texto provisional por debajo de su relación de contraste cuyos colores no se puede saber si son de la página o del navegador, o un carácter suelto que hace de nombre de su control por debajo de su relación de contraste (contrast-minimum), o un color o tamaño que no se puede calcular (las reglas de contraste, target-size-minimum). Una regla que lanza una excepción también se informa como cantTell, como red de seguridad.
  • manual: indica que una persona tiene que decidir; la regla no puede decidir si lo que encontró es un problema. Informa cantTell o notApplicable, y pass solo cuando lo que encuentra es la respuesta que no requiere juicio; nunca fail. landmark-unique no puede decidir si dos regiones de referencia que comparten nombre son un problema (la APG lo permite cuando su contenido es idéntico), así que eso es cantTell; pero «todos los nombres son distintos» es un hecho, así que eso es pass. Una regla que pide a una persona juzgar cada elemento que encuentra, como si el texto alternativo de una imagen es preciso, nunca informa pass. Una regla manual que solo pregunta donde una heurística encuentra una señal, y no encuentra ninguna, informa notApplicable, no pass: solo se aplica a lo que señala su heurística, y no encontrar nada ahí no demuestra que todo esté bien. image-redundant-alt busca texto alternativo que repite el texto junto a la imagen; no encontrar ninguno no dice nada sobre si el texto alternativo es correcto. form-control-label-quality, password-paste-enabled, scrollable-region-focusable e image-of-text hacen lo mismo.

Una regla etiquetada como buena práctica no reclama ningún Criterio de Éxito, y aun así informa fail cuando lo que decide es en sí una barrera: un encabezado vacío se anuncia como un encabezado sin nada dentro (empty-heading, como lo informa la regla ACT del W3C correspondiente). Su fail dice que no se cumple la expectativa de la propia regla, no la de un criterio: ningún resultado agregado de WCAG lo cuenta. Cuando el hallazgo puede no perjudicar a nadie, informa cantTell en su lugar, como arriba.

Que una regla manual informe cantTell no es el mismo evento que una regla automática informe cantTell, aunque el valor sea idéntico: la regla automática ya decidió y te está diciendo lo que encontró; la regla manual te está diciendo que la cuestión no es decidible a partir del marcado en absoluto. En ambos casos, el cantTell de una regla de core dice cómo responderlo (howToCheck), y algunos dicen hacia dónde apunta la evidencia de la página (lean, consulta el esquema de salida). Consulta Resultados e informes para ver la referencia completa de resultado/gravedad/confianza.

Cómo están estructurados los ID de regla

Un ID de regla generalmente es <family>-<intent>: qué elementos/mecanismo apunta la regla, y luego qué pregunta hace sobre ellos. La familia de alternativas de imagen (WCAG 1.1.1) es el ejemplo más claro:

ID de reglaFamiliaIntenciónTipo
img-alt-presentimgpresentautomática
img-alt-qualityimgqualitymanual
img-alt-decorativeimgdecorativemanual
  • present: verifica que exista un mecanismo requerido. Normalmente automática.
  • quality: verifica idoneidad, corrección o significado. Siempre manual.
  • decorative: verifica el tratamiento correcto de contenido puramente decorativo. Siempre manual.

La intención determina si una regla puede ser automática: "¿algo está presente?" suele ser decidible solo a partir del marcado, mientras que "¿es bueno?" casi nunca lo es. Esta es también la lógica detrás de los enlaces de Reglas relacionadas en cada página de regla: las reglas que comparten una familia (todo lo anterior al último segmento - del ID) son las que se agrupan ahí. El conjunto de reglas abarca docenas de familias además de img: aria-*, contrast-*, dialog-*, iframe-*, label-*, link-*, list-*, landmark-*, y más; el catálogo es la lista actual y generada.

Las reglas nunca mezclan familias: cada una consulta un tipo de elemento, usando las funciones auxiliares apropiadas para él. Por eso también el conjunto de reglas tiene 145 reglas específicas en lugar de una docena de reglas amplias: dos comprobaciones que difieren en lo que deciden, a qué apuntan o qué faceta de WCAG cubren se mantienen como reglas separadas en lugar de fusionarse, de modo que un resultado nunca tiene que desambiguarse posteriormente para decir qué se encontró exactamente.

Facetas de WCAG

Un Criterio de Éxito de WCAG suele ser más grande de lo que una sola regla puede decidir de forma determinista. Internamente, cada SC se descompone en "facetas" con nombre: para 1.1.1 Contenido no textual, eso incluye cosas como si un atributo alt está presente, si su texto es significativo, y si las imágenes decorativas están correctamente marcadas como nulas. Una regla se asigna a una o más facetas, y varias reglas comúnmente cubren distintas facetas del mismo SC, que es exactamente lo que hace arriba la familia img-alt para 1.1.1.

Esto importa al leer un resultado compuesto (resultado agregado por WCAG-SC): un compuesto solo pasa cuando sus reglas comprueban todo lo que pide el criterio, y aún no lo hace ninguno. Así que, cuando todas las comprobaciones automatizadas de un criterio salen sin fallos, el compuesto es can't tell, comprobado en parte: las facetas que cubren sus reglas se cumplen, y una persona comprueba el resto. Consulta Conformidad para ver las tres capas (reglas atómicas, facetas, compuestos) y cómo se calcula realmente el resultado de un compuesto. Cada faceta de un criterio que evalúa una regla tiene un procedimiento, cómo la comprueba una persona a mano (ver Procedimientos de prueba).