Что надо знать о DTD HTML 4

XHTML 1.0 Strict — это строго опредлённый набор возможных элементов, атрибутов и комбинаций.

Document Type Definition (DTD) описывающий XHTML 1.0 Strict содержит несколько неочевидных правил, которые надо знать, чтобы генерировать валидный xhtml, а не-валидный xhtml лучше не генерировать вообще.

Все основные элементы html делятся на две группы: блоковые (block) и внутри-строчные (inline).  Блоковые элементы по умолчанию растягиваются на всю доступную им ширину, а по высоте могут содержать одну или несколько строк, один или несколько блоков.  Типичный блоковый элемент — ul.  Типичный inline элемент — strong.

Entity-список block содержит блоковые элементы: p, h1..h6, ul, ol, dl, pre, div, noscript, blockquote, form, hr, table, fieldset, address.

Внутри элемента body могут быть элементы из списка block плюс элементы script, ins, del.  Но там не должно быть простого текста.

Всякий нормальный текст должен быть внутри элементов p, h1..h6, li, pre.  В дополнение к этому, текст может быть: внутри div, address, dt и dd, noscript.  А также внутри множества inline-элементов, типа a, span, i, b, em, strong, tt, big, small, dfn, code, samp, kbd, var, cite, abbr, acronym, q, sup, sub.

Элемент p не может содержать элементы p, h1..h6, div, ul, ol, dl.

А вот элемент div может содержать и текст, и div, и p, и другие block-элементы.  Но нужно понимать, что элемент div не имеет самостоятельного смысла, поэтому лучше, чтобы он не содержал голого текста (принцип семантической разметки (semantic markup)).

Атрибут alt необхидим каждому элементу img.

Элемент blockquote не может содержать голый текст.  Используйте p или pre внутри.