Валидация HTML — миф
Пришло время и я открою главную тайну:
Нет ничего страшного если ваш сайт невалиден из-за 2-3х аттрибутов которые придумали вы сами.
Попробуйте придумать вескую причину почему это утверждение в корне неправильно прежде чем читать дальше.
Давайте для начала представим себя на месте микроволновки будущего. Скажем, вы, как строгая и недорогая микроволновка, поддерживаете отображение только (!) XHTML. Скорее всего вряд-ли вы будете валидировать каждый документ перед рендерингом, это займет лишнее процессорное время, а кроме того вам нужна была бы DTD, умение валидировать по ней (на всякий случай напомню, что valid документ это не просто well-formed). Скорее вам же дешевле будет просто попытаться его отобразить. Никто не спорит, что незакрытый тэг или неправильная вложенность (случай not well-formed) может серьезно сбить с толку парсер XHTML кода, но неужели при обнаружении невалидного аттрибута (в случае not valid XHTML) вы очистите экран и покажете домохозяйке ошибку? Нет. Потому что вы их не обнаружите. Потому что вам не нужно обнаруживать их. Вы будете искать только те аттрибуты, которые поддерживаете, которые сможете отобразить. Если даже вы будете делать цикл по всем атрибутам элемента, уверен, нет смысла обрабатывать неизвестные.
Спецификация HTML и XHTML с самого начала включала полезную рекомендацию: при обнаружении неизвестного атрибута или элемента браузеру рекомендуется его игнорировать. Представьте себе, иначе невозможно было бы обеспечить forward compatibility и сидели бы мы только на HTML 3.2.
<input type="text" required="required" name="creditcard" accept="[0-9]" pattern="[0-9]{13,16}" />Да, это не валидный XHTML, что автоматически означает что это вообще не XHTML. Но это не значит что он не совместим с XHTML и что любой XHTML браузер не сможет его вывести используя принцип graceful degradation.
Придумывайте свои аттрибуты и элементы, создавайте им поддержку в JavaScript, не стоит использовать class/rel/for для указания признака обязательного поля формы, нет смысла использовать комментарии типа <!-- BEGIN block1 --> для указания блоков. Это создает проблемы тому же верстальщику. Используйте required=«required». Используйте <block name=«block1»>. Расширяйте XHTML в рамках только вашего сайта. Обеспечивайте совместимость с теми у кого выключен JavaScript. И никто ничего плохого вам не скажет.
Нет никакого смысла равняться на идеальный браузер, который понимает только Strict XHTML. Его еще не создали только потому что он никому не нужен и это не самоцель W3C (хотя некоторые почему-то так и думают). Ведь основы любой грамотной спецификации (что отличает ее от «замка на песке») — не стремление к ужесточению, а обеспечение гибкости, совместимость в обе стороны и грамотное продумывание graceful degradation. И это все уже давно реализовано в рамках HTML и XHTML. Просто начинайте получать удовольствие от этих продуманных принципов.