Темы HTML по сравнению с XHTML и XHTML как текст/HTML по сравнению с XHTML как XHTML довольно сложны. К сожалению, трудно получить полное изображение, так как информация распространена главным образом по частям вокруг сети или прокладывается под землей глубоко на техническом жаргоне W3C. Кроме того, существует некоторая распространяемая дезинформация. Я предлагаю сделать это категорическим ТАК ресурс о теме, описывая самые важные аспекты:
Каковы практические последствия каждого?
Что такое распространенные ошибки?
Какова важность надлежащих типов MIME для каждого?
Как различные браузеры обрабатывают их?
Я хотел бы видеть один ответ на технологию. Я делаю это общественной Wiki, так вместо того, чтобы внести избыточные ответы, отредактируйте ответы для завершения изображения. Не стесняйтесь запускаться с тупиков. Также не стесняйтесь редактировать этот вопрос.
Одна из трудностей описания этого явно состоит в том, что терминология в официальных спецификациях изменилась с годами с тех пор, как впервые был введен HTML. Нижеследующее основано на терминологии HTML5. Кроме того, «файл» используется как общий термин для обозначения файла, документа, входного потока, потока октетов и т. Д., Чтобы избежать необходимости делать тонкие различия.
HTML и XHTML определяются в терминах языка и сериализации.
Язык определяет словарь элементов и атрибутов и их модель содержания, то есть какие элементы разрешены внутри каких других элементов, какие атрибуты разрешены для какого элемента, а также назначение и значение каждого элемента и атрибута.
Сериализация определяет, как разметка используется для описания этих элементов и атрибутов в текстовом документе. Это включает в себя, какие теги требуются и какие могут быть выведены, а также правила для этих выводов. Он описывает такие вещи, как то, как должны быть размечены пустые элементы (например, «>» против «/>») и когда значения атрибутов должны быть заключены в кавычки.
Спецификация HTML 4.01 - это текущая спецификация, которая определяет как язык HTML, так и сериализацию HTML.
XML 1.0 определяет сериализацию, но оставляет определение языка другими спецификациями, которые называются «XML-приложениями»
. Используются обе спецификации XHTML 1.0 и 1.1. По сути, они используют тот же язык, что и HTML 4.01, но используют другую сериализацию, совместимую со спецификацией XML 1.0. т.е. XHTML - это приложение XML.
Спецификация HTML5 (по состоянию на 18 апреля 2010 г., черновик) описывает новый язык как для HTML, так и для XHTML. Этот язык в основном является надмножеством языка HTML 4.01, но предназначен только для обратной совместимости с существующими веб-инструментами (например, браузерами, поисковыми системами и инструментами разработки), а не с предыдущими спецификациями, в которых возникают различия. Таким образом, значения некоторых элементов иногда меняются по сравнению с более ранними спецификациями. Точно так же каждая из сериализаций обратно совместима с текущими инструментами.
Когда текстовый файл отправляется в браузер, он анализируется в его внутренней структуре памяти (объектной модели). Для этого он использует синтаксический анализатор, который следует либо правилам сериализации HTML, либо правилам сериализации XML. Какой синтаксический анализатор он использует, зависит от того, какой тип контента он определяет, для нелокальных файлов на основе HTTP-заголовка «content-type». Внутренне, после того как файл был проанализирован, браузер обрабатывает объектную модель почти одинаково, независимо от того, была ли она изначально предоставлена с использованием сериализации HTML или XHTML.
Чтобы браузер мог использовать свой синтаксический анализатор XHTML, HTTP-заголовок типа содержимого должен быть одним из типов содержимого XML.Чаще всего это либо application / xml
, либо application / xhtml + xml
. Любой тип содержимого, отличный от XML, будет означать, что файл, независимо от того, соответствует ли он всем языку XHTML и правилам сериализации или нет, не будет обрабатываться браузером как XHTML.
Использование типа содержимого HTTP text / html
(или в большинстве резервных сценариев, когда тип содержимого отсутствует или любой другой тип, отличный от XML) заставит браузер использовать свой анализатор сериализации HTML.
Одно из ключевых различий между двумя анализаторами заключается в том, что анализатор сериализации HTML выполняет восстановление после ошибок. Если входной файл для синтаксического анализатора не соответствует правилам сериализации HTML, синтаксический анализатор восстановится способами, реконструированными из предыдущих браузеров, и продолжит построение своей объектной модели, пока не достигнет конца файла. HTML5 содержит первое нормативное определение восстановления, но ни один из основных браузеров не предоставил реализацию алгоритма, включенного в выпускной версии по состоянию на 26 апреля 2010 года.
В отличие от этого, синтаксический анализатор сериализации XML останавливается, когда обнаруживает что-либо, что он не может интерпретировать как XML (т.е. когда он обнаруживает, что файл не является правильно сформированным XML). Это требуется от парсеров по спецификации XML 1.0.
Большинство современных браузеров поддерживают как анализатор HTML, так и анализатор XML. Однако в Microsoft Internet Explorer версии 8.0 и более ранних синтаксический анализатор XML не может напрямую создавать объектную модель для визуализации в виде HTML-страницы.Однако структура XML может быть обработана с помощью файла XSLT для создания потока, который, в свою очередь, будет проанализирован с помощью анализатора HTML для создания объектной модели, которая может быть отображена.
Начиная с версии Internet Explorer 9 Platform Preview, XHTML, предоставляемый с использованием типа содержимого XML, можно анализировать напрямую таким же образом, как и в других современных браузерах.
Когда их XML-анализаторы обнаруживают, что их входные файлы не являются правильно сформированными XML, некоторые браузеры отображают сообщение об ошибке, а другие показывают страницу как созданную до момента, когда была обнаружена ошибка, а некоторые предлагают пользователю возможность повторно проанализируйте файл с помощью анализатора HTML.
Файлы HTML и XHTML могут начинаться с объявления определения типа документа (DTD), которое указывает язык и сериализацию, которые используются в документе. Валидаторы, такие как http://validator.w3.org/ , используют эту информацию для сопоставления языка и сериализации, используемых в файле, с правилами, определенными в DTD. Затем он сообщает об ошибках в зависимости от того, где нарушаются правила в DTD из-за разметки в файле.
Не все правила сериализации и языка HTML могут быть описаны в DTD, поэтому валидаторы проверяют только подмножество всех правил, описанных в спецификациях.
HTML 4.01 и XHTML 1.0 определяют DTD Strict, Transitional и Frameset, которые различаются языковыми элементами и атрибутами, которые разрешены в совместимых файлах.
Валидаторы на основе HTML5, такие как validator.nu , больше похожи на браузеры, обрабатывая страницу в соответствии с типом содержимого HTTP и используя набор правил, не основанный на DTD, так что они обнаруживают ошибки, которые невозможно описать. по DTD.
Браузеры не проверяют отправленные им файлы. Они также не используют какое-либо объявление DTD для определения языка или сериализации файла.Однако они используют его, чтобы угадать эпоху, в которую была создана страница, и, следовательно, вероятное поведение при синтаксическом анализе и рендеринге, которое автор ожидал от браузера в то время. Соответственно, они определяют три режима синтаксического анализа и рендеринга, известные как режим Quirks, режим Limited Quirks (или почти стандартный) и стандартный режим.
Любой файл, обслуживаемый с использованием типа содержимого XML, всегда обрабатывается в стандартном режиме. Для файлов, проанализированных с помощью парсера HTML, если DTD не предоставлено или DTD определено как очень старый, браузеры используют свой режим причуд. Вообще говоря, файлы HTML 4.01 и XHTML, обрабатываемые как text / html, будут обрабатываться в ограниченном режиме причуд, если они содержат переходное DTD, и в стандартном режиме, если используется строгое DTD.
Если DTD не распознается, режим определяется сложным набором правил. В одном из особых случаев опущены общедоступный и системный идентификаторы, а объявление выглядит просто . Это, как известно, самое короткое объявление типа документа, при котором текущие браузеры будут рассматривать файл как стандартный режим. По этой причине это объявление используется для файлов, совместимых с HTML5.
) очень сильно падают, если Javascript недоступен. *
*
Требуются некоторые пояснения и примеры.
XHTML имеет зрелые инструменты контроля качества, но более свободные DTD (например,
Документ XHTML, обслуживаемый приложением типа MIME / xhtml + xml (см. Ниже), должен на 100% соответствовать стандартам XML, т.е. он должен быть «правильно сформированным XML». Даже один неэкранированный амперсанд может привести к тому, что синтаксический анализатор (браузер) выдаст предупреждение и откажется от рендеринга документа. При создании динамических сайтов XHTML, которые могут включать в себя контент, предоставленный третьими сторонами (например, любой пользовательский ввод), необходимо проявлять большую осторожность, чтобы избежать любых недопустимых последовательностей символов, не допустить недопустимых тегов или атрибутов и правильно вложить все элементы.
, в результате чего остальная часть документа будет рассматриваться как сценарий вместо этого HTML) или отображать другие проблемы. XHTML, обслуживаемый как text / html, не является ни XHTML, ни HTML. Он обрабатывается браузером как HTML, но поскольку это не HTML, он рассматривается как суп из тегов. Поскольку Internet Explorer не знает, как обрабатывать XHTML с помощью application / xhtml + xml, его нужно будет обслуживать как text / html только для IE. Это означает, что XHTML для IE всегда является супом из тегов, если только не рассматриваются различия между HTML и XHTML (см. Различия с HTML 4 ).
Добро пожаловать в мир боли. У вас возникают проблемы с прокси-сервером ниже по потоку (вам нужно варьировать кеширование в зависимости от того, какой заголовок запроса вы выполняете по условию). Структура документа изменяется (например, таблицы без тега Когда XHTML-документ анализируется с использованием правильного типа MIME application / xhtml + xml, могут быть различия при манипулировании элементами DOM через Javascript. Некоторые скрипты, которые не были подготовлены должным образом, могут работать по-другому или давать сбой в среде XHTML. На самом деле это не так уж и сложно, и на самом деле это не имеет особого значения. Что еще вам нужно знать? HTML и XHTML бывают разных видов, а именно Переход в глубину с помощью Разверните могут иметь или не иметь элемент
в зависимости от типа содержимого). По сути, создание двух практически идентичных документов - это большая работа.
XHTML и Javascript
Примеры: в HTML команда JavaScript, например console.log (document.body.tagName);
выведет «BODY», тогда как та же команда в XHTML выведет «body ".
И если у вас есть
.. table в разметке, firstChild
таблицы в JavaScript будет tr
в XHTML, но TBODY
в HTML.
Преимущества использования XHTML (как application / xhtml + xml)
*
Пункт требует доработки.
Строгий, переходный и набор фреймов
Почему?
Строгий
, Переходный
и Набор фреймов
. Каждый «диалект» определяет другой набор элементов, которые разрешено использовать. Strict
ограничивает некоторые из ваших параметров из коробки (например, невозможность указать целевые
атрибуты ), которые делают его запрет для многих. Основные различия
Похожие вопросы: