Sven Rautenberg: validator.w3.org findet scheinbar auch nicht alles

Beitrag lesen

Moin!

(1) Each element type declaration generally describes three parts: a start tag, content, and an end tag.

(3) Some HTML element types allow authors to omit end tags (e.g., the P and LI element types). A few element types also allow the start tags to be omitted; for example, HEAD and BODY. The HTML DTD indicates for each element type whether the start tag and end tag are required.

Hm. Da steht zum einen, alle müssen Start- und End- Tag haben.

Nein, steht da nicht.

Absatz (1) schreibt: Eine Element-Deklaration beschreibt drei Teile: Ein Start-Tag, den Inhalt und ein End-Tag.

li, pl - der End- Tag darf weggelassen werden.

Das steht in Absatz (3).

Einige Elemente (head, body) erlauben _auch_ den Start- Tag wegzulassen.

Steht auch da.

Das bedeutet aber: aus (1) und (3) folgt: verwende ich einen der Start- Tags, dann muss ich auch den End- Tag verwenden. Verwende ich den End- Tag, dann muss ich auch den Start- Tag haben.

Das ist eben die falsche Schlussfolgerung (die ich auch hätte ziehen wollen, als ich das erste Mal antwortete). Ein Start-Tag ist dann nötig, wenn es verpflichtend ist. Sonst nicht. Genauso wie das End-Tag manchmal optional ist.

Ich kann _beide_ weglassen, aber nicht einen. - Wegen (1), dass doch wohl eine Grundregel des SGML ist.

Wenn in (1) stehen würde, dass ein Tag immer aus Start-Tag, Inhalt und End-Tag bestehen muss, würde Absatz (3) dennoch mitteilen, dass Start-Tags und End-Tags manchmal optional sein können, je nach DTD-Definition.

Genau das war auf meiner Seite mismatched... denke ich mal. Und ich würde mich mit meiner Lesart den Machern des Mozilla 1.2 anschließen... Verschachtelungsfehler.

Die DTD hat immer recht. Das Problem ist, dass der Browser die DTD irgendwie sinnvoll umsetzen muss. Es dürfte sich hierbei schlicht um einen Parsing-Fehler des Mozilla handeln.

Genauso, wie manche Elemente, deren End-Tag optional ist, durch andere Tags implizit geschlossen werden (validier mal <p>Text<table>...</table>Text</p>), werden gewisse Tags dann halt implizit geöffnet. Ich würde meinen, dass <body> dort implizit anfängt, wo das erste Tag auftritt, welches nur in <body> vorkommen kann - traditionell ist das ja <h1> ;)

Gut, dass du diesen Fehler gemacht hast - wir gewinnen eine völlig neue Sicht auf vermeintlich Altbekanntes. :)

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)