Что нужно для XHTML?
В одном из интервью мне был задан вопрос, о котором я никогда не задумывался: "У нас уже есть HTML, который отвечает всем требованиям написания веб-страницы, так что же нужно для XHTML?"
Я много гуглил, а также прочитал много статей, но не могу понять, почему появился XHTML. Пожалуйста, объясните мне.
16 ответов
На самом деле я пишу это, чтобы спросить, почему вышеупомянутые три поста, которые говорят о совместимости браузера и хорошо сформированном HTML, были отклонены?
Как известно, HTML является отраслевым стандартом. Браузеры реализованы так, что они отображают размеченный контент, как описано в стандарте HTML. К сожалению, есть области, которые не были четко определены в HTML: что происходит, если пользователь забыл закрывающий тег, или что делать, если упомянутое изображение не найдено? некоторые браузеры используют тег 'alt', чтобы иметь текстовый элемент-заполнитель, а некоторые браузеры отображают тег 'alt' в качестве всплывающей подсказки. Известный режим "причуд" браузеров является результатом отсутствия ясности. Из-за этого стало вполне возможно, что одна и та же веб-страница будет отображаться по-разному в разных браузерах.
Также с ростом использования HTML появилась еще одна проблема: она не была расширяемой - не было возможности добавлять пользовательские теги.
XHTML решает вышеуказанные проблемы:
- принять XML для предоставления расширяемых тегов.
- обеспечить "строгий" стандарт для веб-браузеров
XHTML имеет четко определенные правила относительно структуры, и они могут быть применены программно. Проверьте различные онлайн "XHTML Validators". Они скажут, правильно ли сформирован ваш XHTML или нет (и выделят проблемные области). Из-за этих строгих правил ваша страница будет более или менее гарантированно выглядеть одинаково во всех браузерах, поддерживающих XHTML.
[примечание], если вы хотите проверить выше, пожалуйста, обратитесь к тексту "Head First XHTML и CSS"
Потому что это действительный XML. Это очень помогает, так как вы можете использовать множество инструментов, изначально разработанных для XML, таких как анализаторы XML, XSLT, XPath, XQuery, ...
Нормальный HTML - это диалект SGML, который не разбирается без знания схемы.
<ul>
<li>one
<li>two
<li>three
</ul>
правильный HTML, но не правильный XML. Если вы хотите разобрать это, вы должны знать, что ul
-элементы должны быть закрыты, но li
нет.
XHTML также позволяет встраивать другие диалекты XML, такие как MathML, Ruby, SVG и т. Д. (При желании вы также можете встраивать XHTML в другие диалекты XML).
Если вы просто "делаете веб-страницу", вам не обязательно нужен XHTML. Но если вы программно генерируете страницу, вы можете обнаружить, что инструменты для генерации XML лучше, чем те, которые генерируют HTML.
В дополнение к ответу Йоханнеса, HTML слишком свободен в своих интерпретациях и толерантности, где строгая формализация XHTML отрицает это.
Терпимость приводит к дисперсии, что приводит к несовместимости браузера, что приводит к темной стороне.
Из вики:
Поскольку они должны быть правильно сформированы, настоящие документы XHTML позволяют выполнять автоматизированную обработку с использованием стандартных инструментов XML - в отличие от HTML, для которого требуется относительно сложный, снисходительный и обычно настраиваемый анализатор. XHTML можно рассматривать как пересечение HTML и XML во многих отношениях, поскольку это переформулировка HTML в XML.
Приведение HTML в соответствие со стандартами XML обеспечивает более последовательный анализ страницы. В то время как в HTML, например, вам было разрешено иметь теги не по порядку <b><u>test</b></u>
Теперь вы не можете, они должны быть закрыты в порядке их открытия. Подобные вещи значительно упрощают анализ DOM (который сейчас активно используется в AJAX).
Я уверен, что вы наверняка сталкивались с этой статьей из W3.Эта статья может многому научиться. Короче говоря, XHTML придерживается правил xml помимо того, что у него есть набор тегов HTML. Самые важные различия:
* XHTML elements must be properly nested
* XHTML elements must always be closed
* XHTML elements must be in lowercase
* XHTML documents must have one root element
Здесь я вижу кучу ответов с отголосками, которые делают неверные предположения о том, как работают браузеры. Итак, позвольте мне дать 2 цента по этому вопросу.
Прежде всего, почему существует XHTML?
был организован двухдневный семинар, чтобы обсудить необходимость новой версии HTML в XML. Мнение на семинаре было ясным "Да": с HTML на основе XML другие языки XML могли включать биты XHTML, а документы XHTML могли включать биты других языков разметки. Мы также могли бы воспользоваться преимуществами редизайна, чтобы очистить некоторые из более неопрятных частей HTML и добавить некоторые новые необходимые функции, такие как улучшенные формы.
Короче говоря, XHTML был создан по двум причинам:
- Чтобы разрешить смешивать другой контент (например, mathml и svg) в одном документе с четкими правилами форматирования.
- Расширить и очистить HTML.
Делать вещи проще для проверки не было целью проектирования, а также не было чем-то необходимым, потому что валидаторы HTML4 существуют и являются всеобъемлющими.
Разве XHTML легче разбирать для браузеров?
И да и нет. Разобрать XML проще, чем суп из тегов HTML, но, если вы не используете MIME-тип xhtml+xml или application/xml для своей страницы XHTML, браузеры анализируют его с помощью механизма синтаксического анализа HTML. Тем не менее, если вы используете xml-типы MIME, IE блокирует ваш контент. Это поведение объясняется в блоге IE. Нет никакой разницы в том, как браузеры обрабатывают XHTML и HTML, если вы используете его с типом mime text/html!
Да, они делают! Ты врешь!
Действительно, они делают, но только из-за doctype. Браузеры используют типы документов в верхней части HTML-документов, чтобы определить, следует ли им использовать стандартный режим или режим причуд (= режим ошибок). Все действительные документы XHTML содержат тип документа, который запускает режим стандартов. Тем не менее, в HTML вы можете получить тот же результат, добавив "" вверху вашей страницы.
Так вы говорите, что у XHTML нет цели?
Не за что. XHTML имеет много преимуществ:
- Он может быть преобразован с использованием инструментов XML, таких как XSLT
- Это может быть легче проанализировано в коде на стороне сервера
- Он может интегрировать пользовательскую разметку, все еще проходя проверочный тест
Итак, я должен использовать это тогда?
Как всегда, ответ "это зависит".
- Серверная сторона, возможно, полезная. Если вы хотите иметь преимущества XML на стороне сервера, вы должны использовать вариант XHTML, будь то XHTML1 (сериализация HTML4 в виде XML) или XHTML5 (сериализация HTML5 в виде XML).
- На стороне клиента, не полезно. Я настоятельно рекомендую избегать предоставления вашим пользователям типа mime XML. Синтаксический анализ XML не сочетается с изящной обработкой ошибок, и вместо документа возникает только "ошибка синтаксического анализа XML", если на вашей странице есть проблема с разметкой. Если вы никогда не пишете ошибок, вам понадобится изящная обработка ошибок.
А как насчет HTML5? Это конкурирует с XHTML?
Нет, это не так. HTML5 имеет две сериализации, одну как HTML, а другую как XML. Преимущество состоит в том, что оба теперь имеют строгие правила синтаксического анализа. Вы получите предсказуемое поведение во всех браузерах, независимо от используемого вами подхода. Однако HTML5, анализируемый как HTML, имеет преимущество изящной обработки ошибок. Вот почему я предпочитаю такой подход. Как всегда, YMMV.
XHTML - это попытка стимулировать разработку "правильно сформированного" HTML.
HTML развивался более 10 лет. Его реализация и реализация браузеров, которые его анализируют и отображают, не совсем согласованы. Вот почему кросс-браузерная совместимость является основной головной болью.
HTML основан на SGML (стандартном обобщенном языке разметки). XML также является производным от SGML, поэтому они являются своего рода двоюродными братьями. XHTML объединяет их, обеспечивая (теоретически) преимущества XML для HTML. Это включает в себя четко определенную схему, которая может быть надежно проверена, опрошена и преобразована.
Почему был создан XHTML?
- HTML не очень расширяемый. XHTML стремился исправить это, введя пространства имен, чтобы такие языки, как MathML или SVG, могли быть встроены.
- XMl намного проще для анализа, чем SGML (формат, используемый HTML до версии 5)
- Из-за огромного количества сайтов с ошибками браузеры пытались исправить неверную разметку. Новые браузеры должны были попытаться исправить это таким же образом. XHTML пытается повысить стандарты, указав, что будет отображаться только структурно правильный код.
Насколько хорошо это удалось?
- XHTML широко распространен, но почти всегда используется с MIME-типом text / html из-за несовместимости с Internet Explorer (до версии 8). Многие из этих страниц на самом деле сломались бы, если бы служили XML. Таким образом, ни одно из трех вышеперечисленных преимуществ не было реализовано.
- Многие люди решили использовать XHTML, так как думали, что это обеспечит лучшую совместимость в будущем. Работа над XHTML2.0 остановлена, и хотя HTML5 будет иметь сериализацию XHTML, этому, похоже, уделяется минимальное внимание. XHTML не предоставляет преимуществ совместимости в будущем в обозримом будущем. Mozilla и Safari рекомендуют использовать только HTML.
- HTML со строгим DTD уже имеет более чистый формат. HTML5 пойдет дальше, удалив переходный DTD, удалив ненужные элементы и определив стандартный способ синтаксического анализа документов со степенью обратной совместимости. Браузеры по-прежнему будут исправлять ошибки для сериализации HTML, вместо того чтобы принудительно исправлять разметку, но, по крайней мере, они будут делать это таким же образом. Те, кто заботится о правильном коде, все равно будут использовать валидаторы.
Что нужно для XHTML?
У XHTML были похвальные цели, и, возможно, он сможет достичь их в будущем. Я не могу рекомендовать XHTML для возможных будущих преимуществ, которые он может предоставить, когда HTML теперь намного проще. Вы действительно должны использовать XHTML только в том случае, если предыдущий код или ваши инструменты заставляют вас это делать.
Я думаю, что это помогает браузерам правильно отображать HTML, не делая предположений о том, где теги должны быть закрыты. Каждый раз, когда браузер предполагает что-то, вы знаете, что происходит.
XHTML заставляет вас писать более понятный код, который легче поддерживать, визуализировать более последовательно и легче подключить к DOM. Сравнение XHTML с HTML похоже на сравнение языка программирования со строгой типизацией и языка программирования со свободной типизацией.
Как уже упоминалось выше, XHTML позволяет вам играть с SVG и MathML. Я хотел бы добавить RDFa в этот список. RDFa позволяет вам добавлять семантику к вашему контенту, которая не покрыта микроформатами. Лично я много работал с Dublin Core и Friend-of-a-Friend.
XHTML просто о связи между системами. HTML очень трудно анализировать из-за большого количества возможных вариаций относительно того, что правильно сформировано. Поскольку XML является строгим в своей интерпретации, эта проблема была удалена.
Подумайте о RESTful архитектуре. Если URL-адрес является постоянным местом для элемента, то системы, которые захотят получить доступ к этому элементу, должны иметь возможность использовать информацию, полученную при доступе к URL-адресу. XHTML не делает это возможным как таковое, потому что система уже может анализировать HTML и извлекать необходимую информацию. XML просто делает это проще. Не существует ограничивающего предопределенного набора тегов, которые затрудняют классификацию данных в документе (хотя технически вы можете сделать это в HTML, потому что браузеры проигнорируют его). Вы можете использовать все, что хотите, чтобы классифицировать, какие данные извлекаются.
В двух словах: XHTML часто выгоден и предпочтительнее HTML, когда вы хотите использовать инструмент на основе XML для манипулирования / преобразования / генерации HTML-страниц на стороне сервера.
Множество примеров можно найти в основанных на компонентах средах MVC, таких как Sun Oracle JSF, которые используют Facelets в качестве технологии представления на основе XHTML. Компоненты на стороне сервера определены в XSD, а страницы анализируются с использованием SAX-анализатора. Вы даже можете добавить <!DOCTYPE html>
наверх страницы, чтобы Facelets генерировали "чистый" действительный и строгий HTML5. Microsoft ASP.NET MVC имеет похожую технологию просмотра.
Когда вы пишете HTML вручную, XHTML не приносит особой пользы, или он должен отталкивать от "крутости" использования (чрезмерно) раскрученной технологии.
Смотрите также:
XML - это формат обмена данными - он идеально подходит для создания веб-сайтов, потому что, в конце концов, мы имеем дело с информацией, и эта информация должна быть просканирована и понята компьютерами (например, поисковыми системами).
Если я хочу сканировать ваш сайт и анализировать его содержимое, я могу сделать это только в том случае, если это XML.
Разбор HTML - это кошмар.
Потому что XHTML имеет гораздо больше смысла!
Дело в том, что, хотя что-то может и не дать больше технических возможностей, это все же является улучшением, если его переделать, просто чтобы быть более ясным и логичным. Вот почему рефакторинг кода является хорошей идеей, даже если он не меняет функциональность. Вот почему Brainfuck не был хорошим языком программирования, даже если бы он имел все возможности Java.
XHTML имеет больше смысла, потому что базовая структура тегов и их атрибутов всегда согласована - не зависит от семантики тегов. То, как это становится более понятным, становится очевидным, как только вы ознакомитесь с его отличием от HTML, но, например, теги всегда упорядоченно вложены, все теги должны закрываться, имена должны быть в нижнем регистре, значения атрибутов должны иметь ограничивающие символы вокруг них.