XHTML
XHTML — переформулировка HTML 4 в виде строгого XML. Правила корректности, DOCTYPE, xmlns и почему HTML5 вытеснил его.
XHTML (Extensible HyperText Markup Language) — это переформулировка HTML 4.01 в виде строгого приложения XML, созданная в 2000 году и опубликованная Консорциумом Всемирной паутины (W3C). Он использует тот же набор тегов, что и HTML, но соблюдает правила корректности XML: каждый тег должен быть закрыт, написан в нижнем регистре и правильно вложен.
Для новых проектов предпочтительнее использовать HTML5. XHTML 1.0 во многом вытеснен HTML5, который сохраняет дисциплину корректной разметки как необязательный полиглот-стиль, оставаясь при этом значительно более гибким и функциональным. Эта страница полезна прежде всего как справочный материал о стандарте прошлого, который вы ещё можете встретить в старых кодовых базах.
Изначальная цель состояла в том, чтобы сделать документы более строгими и предсказуемыми — так, чтобы их мог обрабатывать любой стандартный XML-процессор и использовать в широком спектре устройств и инструментов. Из-за жёстких правил один пропущенный закрывающий тег мог полностью заблокировать отображение документа при его доставке как настоящего XML.
Правила корректности
Принципиальное отличие HTML от XHTML состоит в том, что XHTML должен быть корректным XML. Ниже приведены правила, каждое из которых проиллюстрировано неверным и правильным вариантом.
Структура документа и DOCTYPE
Каждый документ XHTML должен начинаться с XHTML-объявления <!DOCTYPE> и содержать элементы <html>, <head>, <title> и <body>. Элемент <html> также должен объявлять пространство имён XML с помощью атрибута xmlns.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Title of the document</title>
</head>
<body>
Content of the page
</body>
</html>Атрибут xmlns
xmlns="http://www.w3.org/1999/xhtml" — это объявление пространства имён XML. Оно сообщает XML-парсеру, что элементы документа принадлежат словарю XHTML, а не какому-либо другому языку XML. Этот атрибут обязателен на корневом элементе <html> каждого документа XHTML. URL является идентификатором, а не ссылкой, которую загружает браузер.
Варианты DOCTYPE для XHTML
XHTML 1.0 определяет три DOCTYPE, каждый из которых указывает на отдельный DTD. В приведённом выше примере используется Transitional — наиболее распространённый выбор.
- Strict — чистая разметка без презентационных элементов. Устаревшие презентационные элементы и атрибуты (такие как
fontилиbgcolor) не допускаются; стилизация возложена на CSS. - Transitional — допускает устаревшие презентационные возможности для совместимости со старым содержимым.
- Frameset — аналогичен Transitional, но разрешает документы с
<frameset>, разделяющие окно на фреймы.
Закрывайте каждый элемент
В HTML некоторые закрывающие теги можно опускать, но в XHTML каждый элемент должен быть закрыт. Пустые элементы без содержимого (например, br, hr, img) закрываются сами по себе с помощью завершающего слеша.
<!-- Wrong (HTML-style, not closed) -->
A break: <br>
An image: <img src="smile.gif" alt="Always smile">
<!-- Right (self-closed for XHTML) -->
A break: <br />
An image: <img src="smile.gif" alt="Always smile" />Используйте нижний регистр в именах тегов и атрибутов
XML чувствителен к регистру, поэтому <P> и <p> — это разные теги. XHTML требует, чтобы все имена элементов и атрибутов были написаны в нижнем регистре.
<!-- Wrong -->
<BODY>
<P>Some paragraph</P>
</BODY>
<!-- Right -->
<body>
<p>Some paragraph</p>
</body>Заключайте все значения атрибутов в кавычки
Все значения атрибутов должны быть заключены в кавычки, в том числе числовые.
<!-- Wrong -->
<table width=100%>
<!-- Right -->
<table width="100%">Правильно вкладывайте элементы
Пересечение тегов запрещено; внутренние элементы должны закрываться до закрытия внешнего родителя.
<!-- Wrong (overlapping) -->
<strong><em>This text is bold and italic</strong></em>
<!-- Right (properly nested) -->
<strong><em>This text is bold and italic</em></strong>Запрет минимизации атрибутов
В HTML boolean-атрибуты могут стоять самостоятельно (checked). XHTML запрещает такое сокращение: каждый атрибут должен иметь значение, а для boolean-атрибутов значение повторяет имя.
<!-- Wrong (minimized) -->
<input type="checkbox" name="flower" value="rose" checked />
<!-- Right -->
<input type="checkbox" name="flower" value="rose" checked="checked" />Предпочитайте id вместо name
В XHTML атрибут name на таких элементах, как якоря, считается устаревшим, поэтому для идентификации элементов рекомендуется использовать атрибут id.
Преимущества XHTML
- Все теги должны быть закрыты и правильно вложены, что делает разметку последовательной и более читаемой.
- Будучи корректным XML, документы могут надёжно обрабатываться универсальными XML-инструментами и передаваться в специализированные среды, такие как устройства для чтения шрифтом Брайля и другое вспомогательное программное обеспечение.
- XHTML поощряет чёткое разделение структуры и презентации, работая совместно с CSS для стилизации.
XHTML и HTML
Несколько ключевых различий между ними:
- Базовый стандарт. HTML является приложением SGML; XHTML является приложением XML.
- Происхождение. HTML произошёл от SGML; XHTML производен от XML и HTML 4.
- История. HTML был создан Тимом Бернерсом-Ли в начале 1990-х годов (Wikipedia); XHTML 1.0 стал рекомендацией W3C в 2000 году (Wikipedia).
- Разбор. HTML использует снисходительный, отказоустойчивый парсер; XHTML, доставляемый как XML, требует строгого XML-парсера, отвергающего некорректные документы.
XHTML и HTML5
- Чувствительность к регистру. XHTML чувствителен к регистру; HTML5 (как и классический HTML) — нет.
- DOCTYPE. DOCTYPE в XHTML длинные и ссылаются на DTD; HTML5 использует короткое
<!DOCTYPE html>. - MIME-тип. HTML5 доставляется как
text/html; строгий разбор XHTML требуетapplication/xhtml+xml. - Устойчивость к ошибкам. HTML5 корректно восстанавливается после многих ошибок разметки, тогда как XHTML их отвергает.
- Статус. HTML5 является современным стандартом для всех устройств; XHTML 1.0 теперь считается устаревшим.