HTML » XHTML » XML

Основное различие между HTML и XHTML состоит в том, что в XHTML применяется синтаксис XML, который предназначен для помощи в разработке синтаксически корректных и правильных документов XML. XHTML представляет собой словарь XML, в то время как HTML — это лишь предшествующий XHTML язык разметки.

В связи с тем, что XHTML является приложением XML, некоторые действия. которые совершенно правильны в HTML4 на базе SGML, должны быть изменены. Перечислим правила, которые необходимо соблюдать при переходе от HTML к XHTML:

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

Это означает, что все элементы обязаны иметь закрывающий тег(например, <p></p>) или быть написаны в специальной форме(например, <br />), а также должна соблюдаться корректная вложенность элементов.

Хотя перекрывание элементов не допускалось и в SGML, некоторые браузеры лояльно к этому относились и в большинстве случаев отображали именно то, что хотел показать автор документа.

ПРАВИЛЬНО: вложенные элементы
<p>выделяем это <em>слово</em>.</p>

НЕПРАВИЛЬНО: элементы перекрываются
<p>выделяем это <em>слово.</p></em>

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

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

3. Правила написания значений атрибутов.

Все значения атрибутов, даже цифровые должны быть заключены в двойные("") или одинарные('') кавычки.

ПРАВИЛЬНО: атрибут в кавычках
<td colspan="8">

НЕПРАВИЛЬНО: атрибут не в кавычках
<td colspan=8>

Если значение атрибута содержит амперсанд, он должен выражаться мнемоникой ("&amp;"). Например, если атрибут href элемента <a> ссылается на скрипт CGI, который принимает параметры, он (атрибут) должен быть выражен так:
http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user, а не так:
http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user
.

Предопределенные значения атрибутов (например атрибут type элемента input) регистрозависимы и должны быть написаны в нижнем регистре. Однако, это не касается значений атрибутов определяемых авторами документов (например значения для атрибутов id, name или class), которые также регистрозависимы, но допускают использование символов в верхнем регистре.

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

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

ПРАВИЛЬНО: атрибут написан полностью
<dl compact="compact">

НЕПРАВИЛЬНО: атрибут минимизирован
<dl compact>

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

В HTML4 на базе SGML, некоторые элементы допускали отсутствие конечного тега при наличии других последующих элементов с закрывающими тегами. Такое отсутствие конечных тегов не допускается в XHTML на базе XML. Все элементы, за исключением тех, которые объявлены в определении типа документа как EMPTY, должны иметь конечный тег.

ПРАВИЛЬНО: закрытые элементы
<p>Здесь какой-то текст.</p><p>Еще параграф с текстом.</p>

НЕПРАВИЛЬНО: незакрытые элементы
<p>Здесь какой-то текст.<p>Еще параграф с текстом.

5. Пустые элементы

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

Для совместимости с устаревшими браузерами следует писать пробел перед /> в одиночном пустом элементе.

Следует использовать минимизированный синтаксис для тегов пустых элементов, например, <br /> так как альтернативный синтаксис <br></br>, допускаемый XML, дает непредсказуемые результаты во многих существующих браузерах.

При создании пустого объекта элемента, чья модель содержимого не EMPTY(например, пустой заголовок или параграф), не следует использовать минимизированную форму(т.е. нужно использовать <p> </p>, а не <p />).

ПРАВИЛЬНО: пустые теги закрыты
<br /><hr />

НЕПРАВИЛЬНО: пустые теги не закрыты
<br><hr>

6. Элементы <script> и <style>.

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

<script type="text/javascript">//<![CDATA[
  ... unescaped script content ...
//]]></script>

Разделы CDATA распознаются процессором XML и являются узлами в объектной модели документа(Document Object Model)

Альтернативой может быть использование внешних документов скриптов и стилей.

7. Исключения SGML.

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

Например, Строгое определение типа документа HTML4(Strict DTD) запрещает вложение элемента <a> в другой элемент <a> на любую глубину. Хотя эти запрещения и могут отсутствовать в определении типа документа, определенные элементы не могут вкладываться.

В XHTML:
<a> не может содержать другие элементы <a>.
<pre> не может содержать элементы <img>, <object>, <big>, <small>, <sub> или <sup>.
<button> не может содержать элементы <input>, <select>, <textarea>, <label>, <button>, <form>, <fieldset>, <iframe> или <isindex>.
<label> не может содержать другие элементы <label>.
<form> не может содержать другие элементы <form>.

8. Элементы с атрибутами "id" и "name"

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

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

Также следует помнить, что значение атрибута id в пределах документа должно быть уникальным.

В XHTML 1.1 для элементов a и map атрибут name удален, вместо него следует использовать атрибут id.

9. Двойные тире в комментариях

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

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

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

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

10. Символы < и & в тексте документа

Символы < и & в тексте документа должны быть заменены соответствующими последовательностями &lt; и &amp;.

Нет необходимости, но желательно заменять также и > на &gt;.

11. Вот образец минимального документа XHTML:

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
   <head>
      <title>
XHTML</title>
   </head>
   <body>
    <p>
Подробности о разметке на сайте W3C: <a href="http://w3c.org/MarkUp/"> http://w3c.org/MarkUp/ </a>.</p>
   </body>
</html>

Корневым элементом документа должен (обязан) быть <html>.

Корневой элемент документа обязан обозначить пространство имён XHTML путём использования атрибута xmlns[XMLNAMES]. Пространство имён XHTML определено в http://www.w3.org/1999/xhtml.

В документе обязано присутствовать объявление DOCTYPE, предшествующее корневому элементу(<html>).
Публичный идентификатор, включённый в объявление DOCTYPE, обязан быть ссылкой на одно из определений типа документа. O различных определениях DOCTYPE и их влиянии на отображение (X)HTML документа в браузерах можно прочитать в статье "Различное отображение HTML документов в браузере зависит от объявленного Doctype".



Много комментариев (18) к “HTML » XHTML » XML”

  1. Larisa :

    Ну блин, меня бесит вот это:

    >В XHTML 1.1 для элементов a и map атрибут name удален, вместо него следует использовать атрибут id.

    Почему все тупо переписывают этот пункт, но никто не вспоминает про input type=radio? Если id уникален, а name устарел, то как же теперь объединять радио-переключатели? Ведь обычно они идентифицируются одним именем!


  2. Баранов Андрей :

    Larisa,

    “В XHTML 1.1 для элементов a и map атрибут name удален, вместо него следует использовать атрибут id.”

    Здесь про input не сказано ни слова.


  3. Konstantin :

    Всё конечно здорово, но при создании страниц большим количеством табличной информации, для строк и ячеек таблиц очень часто объявляются кастомные атрибуты, для того чтобы потом можно было быстро позиционироваться на различного рода инфомации, а при новом подходе придётся писать горы скрипта.
    Например:

    и т.д.

    Очень удобно задавать такие вещи именно в виде атрибутов при генерации страницы на сервере, а теперь что же после каждого объявления tr и td еще и кучу скрипта генеить чтобы он эти атрибуты создавал и устанавливал?


  4. Sacred Phoenix :

    Я всегда придерживался и придерживаюсь строгих правил, но иногда бывают ошибки, на которые браузеры “закрывают глаза”, например:

    ПараграфА вот другой

    или

    XHTML в этом плане только радует. Но я не уверен насчёт объявления типа документа и метатега . Если писать мегатег, то браузер документ воспринимает как xml-документ, а не как XHTML-документ. А в этом случае браузер не проверяет наличие закрывающих тегов.

    + Я хотел бы дополнить пункт 3. По-моему допускается написание compact=”1″.


  5. Alex Vollmond :

    xhtml подходит для больших порталов со сложной стуктурой, на малых и средних сайтах
    лучше использовать старый добрый html3.2
    С пустыми альтами вообще гемор, похоже гаспода из W3C не понимают что ничто не определяет пустоту лучше, чем сама пустота.
    Ну янки они и есть янки.
    И вообще куму нужна эта валидность?!
    Люди смотрят сайты в браузере а не в валидаторе. И когда валидатор говорит, что table width=100% это ошибка, я вспоминаю крепким словом W3C
    Кто хочет поспорить пишите
    alex_vollmond[пёс]mail.ru
    или заходите в гости на мой сайт.


  6. tungusso :

    Прямым путем на webstandards.org.

    Зачем, почему и для чего это сделано.

    XHTML – язык структуры. Или Вы хотите сказать, что ваш /документ/ HTML – это не структура? Стиль – отдельно, структура – отдельно – это дао дизайнера, который заботится о пользователе, а не о себе.

    Засчет этого вам же самим не надо создавать еще один вариант для отображения на тех же Palm’ах и Pocket PC – они покажут только структуру – но она будет /доступна/.

    И ваш table width – извините, никуда не катит. Для этого есть CSS – это стиль.

    И это все, к счастью, не только мое имхо, а мнение многих дизайнеров, осознавших проблему верно.


  7. Николас :

    А можно ли бьявлять свои теги, как в XML? Потому, что его я знаю и HTML я тоже знаю. А вот XHTML – прозевал… напишите более подробню статью у ньом, а то информация этоц статьи есть на многи сайтах.
    Но всеравно спасибо.
    С уважением Николай.


  8. Баранов Андрей :

    Николас, вообще – можно, только при этом нужно написать свой DTD, где будут описаны новые элементы. Например, скопировать готовый, хоть HTML4 и добавить новые правила.
    Вот только W3C не рекомендуют это делать.


  9. DimonZi :

    Сразу говорю – идут претензии не к автору, а к W3C
    Знаете…некоторые правила XHTML откровенно бесят.

    а)Все теги в нижнем регистре
    Позвольте, пожалуйста, мне решать – в каком регистре писать. Тем более в верхнем регистре хоть и сложнее писать, но код становиться читабельным. ИМХО
    б) Для непустых элементов необходимы конечные теги.
    Бредовее придумать не могли, когда для перевода строки тоже нужен закрывающийся тег :D

    Бесят также необходимость альтов. Цитирую одного отпостившегося: “С пустыми альтами вообще гемор, похоже гаспода из W3C не понимают что ничто не определяет пустоту лучше, чем сама пустота.”
    От себя добавлю: на сайте есть сопроводительные иконки, которые просто облагараживают вид страницы и несут смысловую нагрузку на данную страницу. Но альты там абсолютно не нужны. Озадачивать пользователей альтом “*” не собираюсь :)
    Да и много там тупостей…

    ЗЫ сторонникам XHTML: разделить разметку и стиль можно и в HTML4 :) Что я с радостью и делаю, ибо не собираюсь подстраиваться под вышеперечисленные тупости.


  10. Павел :

    чертовщина с кодом комментирующих, невозможно уловить мысль, т.к. вместо кода в комментариях пустота! неужели не работает этот тег? проверяю:


  11. Павел :

    тег-то работает, но вот ещё бы все внутри него заменяли треугольные скобки на &lt &gt <!--==== - работает - ====-->


  12. root_ :

    Господа! Хватит нервничать! Время все расставит по своим местам.
    Если бы все зависело, например, от меня то я бы утвердил закон, который бы принуждал разработчиков браузеров поддерживать только последний W3C стандарт, а тот, кто будет идти против этого закона сажать в тюрьму как террористов.
    Если честно я и сам против некоторых нововведений.
    Но – миру нужен порядок!!!


  13. dark-demon :

    +1 ^_^


  14. Coock :

    Да однозначно надо соблюдать все правила и переходить на xml, это один из первых правильных шагов в истории веба. Или кому-то хочется на несколько лет назад, поверстать для двух-трех браузеров каждый сайт и в итоге получить ? Потом через некоторое время сам открываешь такое чудо и начинаешь разбираться заново :).
    Alex Vollmond советую пересмотреть подход к работе. html 3.2 это прошлый день.
    А w3c не трогайте :), все они правильно делают. Кстати функция альта не только в отображении текста там, где отключены картинки, голосовые браузеры произносят этот текст и люди с ограниченными физическими возможностями могут понять, о чем речь. Ну и не только для этого.


  15. Роман Чемисов :

    DimonZi:
    Позвольте, пожалуйста, мне решать – в каком регистре писать. Тем более в верхнем регистре хоть и сложнее писать, но код становиться читабельным. ИМХО.
    Ваше право решать в каком регистре писать свои XML-документы, но если Вы решили использовать XHTML (приложение XML), то код должен соответствовать DTD.


  16. SelenIT :

    По поводу пустых альтов – AFAIK, их надо указывать для того, чтобы текстовые браузеры (и какие-то породы обычных при отключенной графике) не выводили на месте картинок их адрес (что, естественно, выглядит очень неаккуратно).

    Еще, имхо, надо бы отметить, что от одних лишь указания XHTML-doctype и валидности документа браузер не станет парсить XHTML-страницу по-особому. Чтобы “ощутить вкус настоящего XHTML”, нужно отдавать страницу с соответствующим заголовком Content-type (эх, если бы еще все браузеры его понимали…). BTW, эта страница, с точки зрения W3C, с объявленным Doctype не должна отдаваться с HTML-ным Content-type, как это происходит на деле;).


  17. badman :

    Я правильно понял, при использовании XHTML, любой броузер ОБЯЗАН показать всё так как свёрстано? И больше не надо писать хаки под всякие ие???


  18. Андрей :

    badman, да.

    Спасибо, статья познавательная.



22 queries 0.177 seconds.