Ошибки, часто встречающиеся при валидации XHTML

Амперсанд ("&")

Пример:
...

Вероятное сообщение валидатора: Unknown entity...

Что делать: Всегда использовать & вместо &.

Правильно:
...


Неправильная вложенность элементов

Пример:
...

Вероятное сообщение валидатора: Missing tag

Что делать: В XHTML элементы должны быть закрыты в порядке, обратном их открытию.

Правильно:
...


Весь DOCTYPE написан в нижнем регистре

Пример:
br> "http://w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd" >

Вероятное сообщение валидатора: Missing DOCTYPE

Что делать: DOCTYPE регистрозависим, надо писать правильно.

Так::
br> "http://w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >


Отсутствует закрывающий " /"

Пример:

Вероятное сообщение валидатора: Missing closing tag

Что делать: Так называемые "пустые элементы", например img или br, должны заканчиваться"/" c пробелом перед ним.

Правильно::


Тэги в верхнем регистре

Пример:
...

Вероятное сообщение валидатора: There is no such element...

Что делать: ?спользовать написание в нижнем регистре для всех HTML элементов и названий атрибутов. В XHTML документах все элементы и атрибуты должны быть в нижнем регистре. Это важно потому, что XML регистрозависим и для него и разные тэги.

Правильно::
...


Значения атрибутов не в кавычках

Пример:

Вероятное сообщение валидатора: Missing " "

Что делать: Все значения атрибутов должны быть в кавычках.

Правильно::


У img отсутствует атрибут alt

Пример:

Вероятное сообщение валидатора: required attribute "alt" not specified

Что делать: У всех тегов img должен быть атрибут alt, значение атрибута можно оставить пустым, если избражение является элементом оформления.

Правильно::

Common XHTML Validation Errors



Много комментариев (30) к “Ошибки, часто встречающиеся при валидации XHTML”

  1. korchasa :

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

    Что делать: Так называемые “пустые элементы”, например img или br, должны заканчиваться пробелом перед “/”.

    Может лучше так:

    Что делать: Так называемые “пустые элементы”, например img или br, должны заканчиваться “/” c пробелом перед ним.

    Логичнее, с точки зрения названия


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

    korchasa, спасибо, текст поправил.

    А про нижний регистр:

    http://w3.org/TR/2002/REC-xhtml1-20020801/#h-4.2

    4.2. Element and attribute names must be in lower case

    XHTML documents must use lower case for all HTML element and attribute names. This difference is necessary because XML is case-sensitive e.g.

  3. and
  4. are different tags.
  5. В XHTML документах все элементы и атрибуты должны быть в нижнем регистре.


  6. korchasa :

    Спасибо, за статью, теперь понял откуда у меня иногда вываливались ошибки валидации.

    Хотя я все равно не понимаю как из

    XML is case-sensitive e.g. and are different tags.

    следует

    XHTML documents must use lower case for all HTML element and attribute names

    Ведь код:
    Привет, мир!
    XML-валиден. Так бы и написали, что “во избежания недоразумений”


  7. korchasa :

    2Модератор:
    Сорри, забыл сущьности заменить – тэги пропали


  8. Elf :

    > XML-валиден. Так бы и написали, что “во избежания недоразумений”

    Во избежание нарушения DTD, именно в котором тэги и прописаны нижним регистром.


  9. Elf :

    Кстати, бывают тоже достаточно интересные и несразупонимаемые ошибки.
    Например, пустой ol/ul.

    Валидатор ругается на такой код:




    • korchasa :

      >> XML-валиден. Так бы и написали, что “во избежания недоразумений”
      >Во избежание нарушения DTD, именно в котором тэги и прописаны нижним регистром.

      Вот мне и интересно зачем их там так прописали! Зачем ограничивать себя, если можно этого не делать?

      Просто я привык их писать заглавными, чтобы оформление отделялось от контента.


    • Voldar :

      2 korchasa
      Дело в том, что xhtml, в отличии от html – это диалект xml-а. А xml с самого начала был регистрозависим.

      По теме поста.
      Часто из-за отсутствия alt у img документ не валидируется, приходится ставить alt=”", хотя это и не совсем правильно с точки зрения здравого смысла – не все картинки испольуются для передачи информации, часть из них это просто оформление.


    • Баранов Андрей :

      Voldar, спасибо, про alt действительно так и есть, добавлю.


    • Максим Россомахин :

      Voldar, если у вас присутствуют картинки оформительского характера — сделайте их фоновыми изображениями. А всё, что несёт хоть какой-то смысл, пусть имеет alt. Так порядка больше.


    • Mons :

      2 korchasa:
      как уже тут было сказано, XTML отличается от просто XML описанием DTD (Document Type Definition). да, в XML EM и em разные теги, но и тот и другой валиндый, а для XHTML DTD описывает существование тегов только в нижнем регистре.
      В принципе, насколько я помню, можно самому дополнить таблицу DTD и тем самым разрешить использование тех или иных entity.
      например для чистого XML’я часто подключают DTD от HTML, для того, чтобы использовать такие вещи, как • — и т.п.


    • Voldar :

      Максим, мы так и делаем :). Но изредка бывают моменты когда бекграундом оно не решается.
      Просто у меня еще свежи воспоминания, как мы с валидируемостью бились когда только-только о ней задумываться начали ;). На тот момент alt у картинок занимал не последнее место в списке “любимых граблей”.


    • Wizard :

      В принцыпе всё известное…
      Наверное, потому что это есть на W3С, хотя не всем же удобно а английском.
      2AKS_
      Не зыбывайте двойные ковычки :)


    • Виталий :

      Есть и намного более интересный ошибки, причем менее очевидные (для людей ни разу не видевших DTD). Нпример поля форм обязательно должны быть помещены в элемент блочного типа. Тоже самое и для элемента body – первый дочерний элемент тоже должен быть блочного типа.


    • Павел Владимирович :

      В xHTML гораздо больше мелких ошибок, на которые мы почти не обращаем внимания…


    • Hermann :

      А самое интересное то, что изучив и научивщись писать самому DTD, можно легко верстать не по документации, а именно по декларации DTD.


    • Suor :

      У меня такой вопрос валидатор (xhtml 1.1 и xhtml 1.0 strict) ругается на ul, вложенный непосредственно в ul – говорит: “document type does not allow element “ul” here; assuming missing “li” start-tag.”. При этом если li туда прописать, то в браузере естественно появляется маркер, который мне там совсем не нужен.


    • Баранов Андрей :

      Suor, укажите для UL style=”list-style: none;” – это уберет маркеры, а дочерним элементом у UL все-таки должен быть LI, если хотите, чтобы код соответствовал стандарту


    • Beastie :

      почему валидатор выдаёт ошибку на линк?
      123
      в целом всё выглядит вот так…

      –>
      сообщение валидатора.. “Error Line 9 column 18: document type does not allow element “a” here; missing one of “p”, “h1″, “h2″, “h3″, “h4″, “h5″, “h6″, “div”, “pre”, “address”, “fieldset”, “ins”, “del” start-tag.”


    • Beastie :

      почему валидатор выдаёт ошибку на линк?
      [a href="123.html"]123[/a]
      в целом всё выглядит вот так…
      [!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"]
      [html xmlns="http://w3.org/1999/xhtml" xml:lang="en" lang="en"]
      [head]


    • Баранов Андрей :

      Тоже самое и для элемента body – первый дочерний элемент тоже должен быть блочного типа

      Собственно, валидатор и сообщает о том, что ссылку следует поместить внутрь какого-нибудь из перечисленных элементов.


    • Beastie :

      т.е. если я хочу получить валидный XHTML 1.0 Strict
      все линки должны писаться таким образом?
      [div][a href=""][/a][/div]


    • Баранов Андрей :

      Не совсем. Достаточно сделать один контейнер div и внутри него разместить остальное содержимое страницы:

      [body]
      [h1][a href="#"][/a][/h1]
      [a href="#"][/a]
      [div]
      [a href="#"][/a]
      [p][a href="#"][/a][/p]

      [span][a href="#"][/a][/span]
      [/div]
      [body]

      т.о. первым дочерним для body будет блочный div, а внутри его можно разместить строковый А


    • Евгений :

      “Значеня атрибутов не в кавычках” – значен?я, исправьте, пожалуйста ;)


    • Баранов Андрей :

      Спасибо, не заметил.


    • Вячеслав Седов :

      картинки, которые не являются контентом, а являются элементом оформления по идее надо в css загонять


    • KPETuH :

      чем заменить target? не сильно разбираюсь в CSS там аналога не нашел…


    • Вадим :

      Добрый день. Хотел поинтересоваться по такому вопросу:

      Немогу ни где на форуме встроить тэги от до т.к. валидатор ругается слудующими словами:
      document type does not allow element "h3" here; missing one of "object", "applet", "map", "iframe", "button", "ins", "del" start-tag. Как бороться этой проблемой не смог понять. Если есть выход из создавшейся ситуации – буду очень признателен если ответите. Заранее спасибо, с уважением, Вадим.


    • Вадим :

      Система комментариев заблокировала текст, поэтому напишу начало занова:

      Немогу ни где на форуме встроить тэги от до т.к. валидатор ругается …


    • Вадим :

      от [h1][/h1] до [h3][/h3] (скобки заменил на [] )