- Stufe
- A
- Seit
- WCAG 2.0
- Einträge
- 66 / 193
4.1.1 Syntaxanalyse
Der Code einer Seite muss wohlgeformt sein (Tags geschlossen, Elemente korrekt verschachtelt, kein Attribut und keine id doppelt), damit Software, die ihn liest, nicht raten muss.
/ Was es verlangt
Dieses Kriterium stammt aus einer Zeit, in der Screenreader HTML selbst analysierten und über fehlerhaftes Markup stolperten. Es verlangt von Inhalt in einer Auszeichnungssprache vier Dinge: Elemente haben vollständige Start- und End-Tags, sie sind gemäß ihrer Spezifikation verschachtelt, kein Element trägt dasselbe Attribut zweimal, und jede id ist eindeutig, außer die Spezifikation erlaubt es anders. War das Markup fehlerhaft, reparierte jedes Werkzeug es auf seine Weise, und eine Beschriftung oder Tabelle konnte am falschen Element landen.
Heute repariert der Browser Markup nach einem festen Algorithmus und übergibt assistiver Technologie einen fertigen Baum, deshalb hat das W3C 4.1.1 aus WCAG 2.2 entfernt. Für WCAG 2.0 und 2.1 hat es einen Hinweis veröffentlicht, wonach das Kriterium für Inhalte in HTML oder XML als stets erfüllt gelten soll. Wichtig bleibt die Folge: Eine doppelte id, durch die ein label oder ein aria-labelledby-Verweis auf das falsche Element zeigt, wird jetzt unter 1.3.1 oder 4.1.2 gemeldet.
Das W3C hat dieses Kriterium in WCAG 2.2 als überholt entfernt; es bleibt Teil von WCAG 2.0 und 2.1, wo es laut W3C für Inhalte in HTML und XML als stets erfüllt zu behandeln ist.
/ Woran Seiten scheitern
- Derselbe id-Wert steht an zwei oder mehr Elementen einer Seite.
- Eine Komponente wie ein Formular oder ein Dialog ist zweimal eingebunden, und jede id darin wiederholt sich.
- Ein Element wird geöffnet und nie geschlossen, oder zwei Elemente werden in der falschen Reihenfolge geschlossen.
- Ein Element steht dort, wo die Spezifikation es nicht erlaubt, etwa ein div in einem p oder ein Link in einem Link.
- Ein Element trägt dasselbe Attribut zweimal, zum Beispiel zwei class-Attribute.
/ So prüfen Sie es selbst
- Lassen Sie die Seite durch den kostenlosen W3C Nu Html Checker laufen, über die Adresse oder durch Einfügen des Quelltexts.
- Filtern Sie die Ergebnisse nach vier Arten von Meldungen: doppelte ID, nicht geschlossenes Element, Element als Kind nicht erlaubt und doppeltes Attribut.
- Listen Sie in der Browserkonsole die id-Werte auf, die in der gerenderten Seite mehr als einmal vorkommen. Per Skript eingefügter Inhalt erscheint nie im rohen Quelltext.
- Suchen Sie für jede doppelte id auf der Seite nach den Attributen for, aria-labelledby, aria-describedby und aria-controls, die diesen Wert verwenden. Das sind die Duplikate, die verändern, was ein Nutzer hört.
/ So beheben Sie es
- Geben Sie jeder id einen Wert, der auf der Seite eindeutig ist, und beginnen Sie mit denen, auf die for, aria-labelledby, aria-describedby und aria-controls verweisen.
- Wird eine Komponente mehr als einmal gerendert, bilden Sie ihre ids aus einem Schlüssel der Instanz oder einem erzeugten Suffix und nicht aus einer festen Zeichenkette.
- Schließen Sie jedes Element, das ein End-Tag braucht, und korrigieren Sie die Reihenfolge von End-Tags, die sich überschneiden.
- Holen Sie Blockinhalt aus p-Elementen heraus und setzen Sie niemals ein a-Element oder eine Schaltfläche in ein anderes.
- Löschen Sie wiederholte Attribute, sodass jedes Element nur ein class-, id- oder style-Attribut behält.
/ Was unser Scanner prüft
Zwei Prüfungen sehen nur auf ids. Die Prüfung duplicate-id liest die gerenderte Seite und meldet eine id, die im selben Baum mehr als einmal vorkommt, wobei Dokument und jeder Shadow Root getrennt zählen. F77 aus HTML_CodeSniffer meldet jeden id-Wert, der sich im Dokument wiederholt. Keine untersucht End-Tags, Verschachtelung oder wiederholte Attribute, und keine sagt, ob ein Duplikat tatsächlich ein label oder einen ARIA-Verweis bricht.
/ Wer es verletzt, nach unseren eigenen Messungen
| Stelle | Sektor | Vorkommen | Wert |
|---|---|---|---|
| Poznań | city · PL | 154 | 1 |
| Stuttgart | city · DE | 88 | 6 |
| Gdańsk | city · PL | 74 | 2 |
| Bundesrat | government · DE | 70 | 14 |
| Phoenix | city · US | 67 | 1 |
| Seattle | city · US | 66 | 12 |
| Wrocław | city · PL | 40 | 2 |
| Baltimore | city · US | 32 | 7 |
| Radom | city · PL | 26 | 2 |
| State of Texas | government · US | 26 | 22 |
| Internal Revenue Service | government · US | 22 | 20 |
| Amtrak | transport · US | 20 | 4 |
| Centrum e-Zdrowia | health · PL | 14 | 60 |
| Politechnika Łódzka | education · PL | 12 | 5 |
| Szczecin | city · PL | 12 | 2 |
| Robert Koch-Institut | health · DE | 11 | 10 |
| Cook County | government · US | 10 | 13 |
| Politechnika Śląska | education · PL | 10 | 2 |
| Rzeszów | city · PL | 10 | 8 |
| Freie Universität Berlin | education · DE | 8 | 7 |
| State of Washington | government · US | 7 | 9 |
| Bundesregierung | government · DE | 6 | 4 |
| Statistisches Bundesamt | government · DE | 6 | 9 |
| Uniwersytet Gdański | education · PL | 6 | 18 |
| Uniwersytet Wrocławski | education · PL | 6 | 15 |
| Uniwersytet Łódzki | education · PL | 6 | 9 |
| New York City | city · US | 5 | 37 |
| Bundesministerium der Finanzen | government · DE | 4 | 13 |
| Hannover | city · DE | 4 | 10 |
| Krajowa Administracja Skarbowa | government · PL | 4 | 5 |
| Nashville | city · US | 4 | 12 |
| Nürnberg | city · DE | 4 | 2 |
| Politechnika Poznańska | education · PL | 4 | 4 |
| Szkoła Główna Handlowa | education · PL | 4 | 12 |
| Warszawski Uniwersytet Medyczny | education · PL | 4 | 13 |
| Berliner Verkehrsbetriebe | transport · DE | 3 | 21 |
| Bundesverfassungsgericht | government · DE | 3 | 18 |
| Senat RP | government · PL | 3 | 24 |
| Austin | city · US | 2 | 20 |
| Białystok | city · PL | 2 | 37 |
| Boston | city · US | 2 | 6 |
| Bundesministerium des Innern | government · DE | 2 | 10 |
| Bydgoszcz | city · PL | 2 | 7 |
| Centers for Disease Control | health · US | 2 | 8 |
| Department of Labor | government · US | 2 | 46 |
| Deutsche Bahn | transport · DE | 2 | 5 |
| Gdynia | city · PL | 2 | 7 |
| Hamburg | city · DE | 2 | 23 |
| Katowice | city · PL | 2 | 10 |
| Köln | city · DE | 2 | 16 |
| Lublin | city · PL | 2 | 17 |
| Opole | city · PL | 2 | 8 |
| Pacjent.gov.pl | health · PL | 2 | 9 |
| Philadelphia | city · US | 2 | 8 |
| Polski Instytut Sztuki Filmowej | culture · PL | 2 | 7 |
| State of Florida | government · US | 2 | 8 |
| Toruń | city · PL | 2 | 11 |
| Uniwersytet Jagielloński | education · PL | 2 | 1 |
| Uniwersytet Warszawski | education · PL | 2 | 4 |
| Uniwersytet im. Adama Mickiewicza | education · PL | 2 | 12 |
| Urząd Ochrony Danych Osobowych | government · PL | 2 | 6 |
| Düsseldorf | city · DE | 1 | 9 |
| Generalna Dyrekcja Dróg Krajowych i Autostrad | transport · PL | 1 | 34 |
| Instytut Pamięci Narodowej | government · PL | 1 | 43 |
| Politechnika Warszawska | education · PL | 1 | 12 |
| Portland | city · US | 1 | 87 |
Eine Seite je Stelle, automatisch im Wochenrhythmus gemessen. Behebungen seit dem letzten Durchlauf erscheinen beim nächsten, und jede Eintragsseite bietet ein Recht auf Gegendarstellung.
/ Fragen zu diesem Kriterium
Ist 4.1.1 Syntaxanalyse noch erforderlich?
Nicht in WCAG 2.2, dort wurde es als überholt entfernt. In WCAG 2.0 und 2.1 steht es weiterhin, ebenso in Normen, die auf 2.1 aufbauen, etwa EN 301 549 in Version 3.2.1. Für diese Versionen hat das W3C erklärt, dass das Kriterium für Inhalte in HTML oder XML als stets erfüllt gelten soll, ein Validierungsfehler allein ist also kein Verstoß mehr.
Warum wurde die Syntaxanalyse aus WCAG 2.2 entfernt?
Das Kriterium sollte assistive Technologie schützen, die HTML direkt analysierte und durch fehlerhaftes Markup aus dem Tritt geraten konnte. Heute liest assistive Technologie den Accessibility Tree, den der Browser aufbaut, und Browser reparieren Markup auf standardisierte Weise. Das W3C kam zu dem Schluss, dass die Probleme nicht mehr bestehen oder von anderen Kriterien abgedeckt werden, vor allem von 1.3.1 und 4.1.2.
Sind doppelte ids noch ein Problem für die Barrierefreiheit?
Sie können es sein. Teilen sich zwei Elemente eine id, löst ein label mit for-Attribut oder ein Verweis per aria-labelledby oder aria-describedby auf das erste davon auf. Ein Feld kann dann mit dem Namen eines anderen Feldes angesagt werden. Unter WCAG 2.2 wird das als Verstoß gegen 1.3.1 oder 4.1.2 gemeldet. Eine doppelte id, auf die nichts verweist, schadet niemandem.
