HTML 3 (и 4 тоже) имел тэги с уникальным синтаксисом (тег p можно не закрывать, вы, наверное, знаете), а каждый тег имел уникальные аттрибуты (про color, bgcolor, align, border, cellspacing, colspan и другие вы, наверное, слышали); также имелись теги, назначение которых было или непонятно, или ненужно, или избыточно, или вообще являлось по сути подмножеством свойств CSS (span, например, такой дурацкий тэг; а ведь ещё всякие font и даже tt были). Однажды настал момент, когда всем стало понятно, что дальше так жить нельзя, и была предпринята попытка унифицировать синтаксис тэгов и множество атрибутов, перенести многие аттрибуты в CSS, где им самое место, и грохнуть непонятные и избыточные тэги. В результате появился XHTML, который можно было разобрать XML-парсером и отвалидировать, однако который оказался несовместим с актуальным HTML. Для того, чтобы браузер мог правильно выбрать набор правил для разбора, тип документа стали указывать через DOCTYPE. XHTML сам по себе просуществовал ещё какое-то время, и был смёржнут в HTML 5.