По мнению создателей языка HTML, несмотря на его ошеломляющий успех, он всё же полностью исчерпал себя и превратился в труднообозримого монстра, поддержка которого из-за чрезмерного набора тегов становится все более сложной. Поэтому история HTML заканчивается его четвертой версией; HTML 5 никогда создан не будет, не смотря на сообщения из некоторых источников — точнее говоря, таковым можно считать XHTML 1.0, 2.0, которые начинают новую эпоху языков рязметки Веб-документов, основанную на едином XML, который обеспечивает своим приложениям расширяемость и переносимость.

  • документы должны быть правильно сформированы

КОРРЕКТНО: вложенные элементы;
<p>here is an emphasized <em>paragraph</em>.</p>;
НЕКОРРЕКТНО: перекрывающиеся элементы;
<p>here is an emphasized <em>paragraph.</p></em>.

  • имена элементов и атрибутов должны быть в нижнем регистре

Документы XHTML должны использовать нижний регистр для всех имён элементов и атрибутов HTML. Это необходимо, поскольку XML чувствителен к регистру, например, < li > и < LI > это различные теги.

  • для непустых элементов необходимы конечные теги

КОРРЕКТНО: закрытые элементы;
<p>here is a paragraph.</p><p>here is another paragraph.</p>;
НЕКОРРЕКТНО: незакрытые элементы .
<p>here is a paragraph.<p>here is another paragraph.

  • значения атрибутов всегда должны быть заключены в кавычки;

КОРРЕКТНО: атрибут — в кавычках;
< table rows ="3"> ;
НЕКОРРЕКТНО: атрибут — не в кавычках.
< table rows =3> .

  • минимизация атрибутов;

XML не поддерживает минимизацию атрибутов. Пары атрибут/значение должны (обязаны) быть выписаны полностью. Имена атрибутов, такие как compact и checked , не могут появляться в элементах без определённых значений.

КОРРЕКТНО: неминимизированный атрибут;
< dl compact =" compact "> ;
НЕКОРРЕКТНО: минимизированный атрибут.
< dl compact >.

  • пустые элементы;

Пустые элементы обязаны иметь конечный тег, или стартовый тег обязан заканчиваться /> . Например, < br /> или < hr ></ hr > .

КОРРЕКТНО: законченные пустые теги;
< br />< hr />;
НЕКОРРЕКТНО: незаконченные пустые теги.
< br >< hr >
обработка пробелов в значениях атрибутов;

ПА вырезают ведущие и ведомые пробелы из значений атрибутов и превращают последовательности из одного или более пробельных символов (включая обрывы строки) в одиночный межсловный пробел (символ пробела ASCII в западных языках).

  • элементы Script и Style;

В XHTML элементы script и style объявлены как имеющие содержимое # PCDATA . Как результат этого, < и & будут рассматриваться как начало разметки, а мнемоники, такие как & lt ; и & amp ; , будут считаться процессором XML мнемониками символов < и & соответственно. Перенос содержимого элементов script или style в раздел, помеченный CDATA , позволит избежать расшифровки этих мнемоник.

<script> <![CDATA[ … unescaped script content … ]]> </script>
Альтернативой может быть использование внешних документов скриптов и стилей.

  • исключения SGML;

SGML предоставлял создателям ОТД* возможность исключать некоторые элементы как содержимое элемента. Такие запрещения (называемые "исключения") невозможны в XML .

Например, Строгое ОТД* HTML 4 ( Strict DTD ) запрещает вложение элемента ' a ' в другой элемент ' a ' на любую глубину. В XML об этом не может быть даже и речи. Хотя эти запрещения и могут отсутствовать в ОТД*, определённые элементы не могут вкладываться.

  • элементы с атрибутами "id" и "name";

HTML 4 определил атрибут name для элементов a , applet, form, frame, iframe, img и map. HTML 4 также ввёл атрибут id . Оба эти атрибута созданы для использования в качестве идентификаторов фрагмента.

В XML идентификаторы фрагмента имеют тип ID, и в элементе может быть только один атрибут типа ID. Таким образом, в XHTML 1.0 атрибут id определён как атрибут типа ID . Чтобы быть уверенным, что документы XHTML 1.0 являются правильно структурированными документами XML, документы XHTML 1.0 ОБЯЗАНЫ использовать атрибут id для определения идентификаторов фрагмента, и даже в тех элементах, которые исторически имели также атрибут name .

Обратите внимание, что в XHTML 1.0 атрибут name этих элементов формально не рекомендуется и будет удалён в последующих версиях XHTML .

  • двойные тире в комментариях;

В комментариях двойные тире "—" могут обозначать только начало и конец комментария.

НЕПРАВИЛЬНО:
<!— использовать разделитель, написанный ниже — нельзя и этот комментарий — неверен —>
<!———————————>
ПРАВИЛЬНО:
<!— использовать разделитель, написанный ниже — — можно и этот комментарий — — верен —>
<!—==== — — — — ====—>

Таким образом, двойные тире "—" не обозначающие начало и конец комментария в его тексте должны быть чем-либо заменены или разделены пробелом, например "- -".