dedlfix: Validator

Beitrag lesen

echo $begrüßung;

“One possible cause for this message is that you have attempted to put a block-level element (such as "<p>" or "<table>") inside an inline element (such as "<a>", "<span>", or "<font>").”
Was ich nicht verstehe? Denn Sinn und was ich ändern soll? Was da eigentlich der Fehler is........

Es gibt nun einmal gewisse Regeln, die "der Erfinder" von HTML aufgestellt hat. Wenn du HTML schreiben möchtest, das diesen Regeln gerecht wird, dann musst du dich entweder an diese Regeln halten, keinen Validator fragen ob du das tust oder einfach das Ergebnis des Validators ignorieren. Dann solltest du dich aber auch nicht wundern, wenn jemand dein HTML gemäß den Regeln interpretiert, es missversteht und dann irgendwas draus macht. (Außerdem gibt es noch Fehlinterpretationen der Browser, aber das ist ein anderes leidliches Thema.)

Die Regeln stehen in der HTML-Spezifikation. Da es verschiedene Versionsstände gibt, teilst du dem Interpretierenden durch eine Dokumenttyp-Deklaration mit, gemäß welcher du den nachfolgenden HTML-Code geschrieben hast. Es gibt eine vorwiegend maschinenlesbare Form des Regelsatzes. Nehmen wir beispielsweise die für HTML 4.01 Strict. Der Teil der für ein FORM-Element zuständig ist, hat leider keinen Anker zum Verlinken, doch eine Kopie des Teils befindet sich im erläuternden Teil der HTML-Spezifikation: The FORM element.

Die Zeile
  <!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->
liest man so:

<!ELEMENT

Im Folgenden wird ein Element beschrieben.

FORM

Es heißt FORM.

- -

Start-Tag und Endtag müssen vorhanden sein. Ein O stände für optional. - O hieße, Start-Tag ist Pflicht, End-Tag nicht. Beispiel: IMG-Element

(%block;|SCRIPT)+ -(FORM)

Diese Elemente dürfen enthalten sein. %block steht zusammenfassend für eine Reihe von Elementen. Das + heißt, sie können beliebig oft vorkommen, aber mindestens eins der Liste muss vorhanden sein. -(FORM) besagt, dass das FORM-Element, welches in %block enthalten ist, ausgenommen ist.

-- interactive form -->

Das ist ein Kommentar und der Abschluss desselben und des einleitenden <! von oben.
Daran anschließend steht eine Liste der erlaubten Attribute <!ATTLIST ... Beim IMG-Element siehst du beispielsweise, dass src und alt REQUIRED sind.

Nun steht in der FORM-Element-Beschreibung aber nicht, wo das FORM-Element überall auftauchen darf. Du hast aber gesehen, dass zu einem Element die erlaubten Kindelemente aufgeführt sind. Also schauen wir uns mal das B-Element an

<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">
<!ELEMENT (%fontstyle;|%phrase;) - - (%inline;)*>

B befindet sich mit anderen Elementen zusammengefasst in %fontstyle und darf %inline enthalten. Und wenn du den %inline-Links folgst wirst du kein FORM-Element finden.

Für mich hat es sich bewährt, zu wissen, welche Elemente zu den Block- und welche zu den Inline-Elementen gehören. Hinzu kommt die Faustregel: Block-Elemente können Block- und Inline-Elemente enthalten und Inline-Elemente können nur Inline-Elemente enthalten. Fließtext gehört mit zu Inline, ist aber kein Element.
Von dieser Faustregel gibt es natürlich Ausnahmen. Hier ein paar Beispiele:

  • FORM (Block) darf nur Blockelemente (plus SCRIPT) enthalten.
  • P (Block) darf nur Inline- und keine Block-Elemente enthalten.
  • UL (Block) darf nur LI enthalten.
  • IMG-Element (Inline) darf keine Elemente enthalten.
  • BUTTON (Inline) darf %flow und damit auch Block-Elemente enthalten. Einschränkungen sind ebenfalls aufgeführt.

echo "$verabschiedung $name";