Типы HTML 4, HTML 5, XHTML, MIME - основной ресурс - PullRequest
29 голосов
/ 18 апреля 2010

Темы HTML против XHTML и XHTML как text / html против XHTML как XHTML довольно сложны. К сожалению, сложно получить полную картину, так как информация в основном разбросана по кусочкам по всему Интернету или глубоко скрыта в техническом жаргоне W3C. Кроме того, распространяется некоторая дезинформация. Я предлагаю сделать этот основной ресурс SO по теме, описывающий наиболее важные аспекты:

  • HTML 4
  • HTML 5
  • XHTML 1.0 в виде текста / html, application / xml + xhtml
  • XHTML 1.1 как приложение / xml + xhtml

Каковы практические последствия каждого?
Какие распространенные подводные камни?
Какова важность правильных типов MIME для каждого?
Как разные браузеры справляются с ними?

Я бы хотел видеть один ответ для каждой технологии. Я делаю это вики-сообществом, поэтому вместо добавления лишних ответов отредактируйте ответы, чтобы завершить картину. Не стесняйтесь начинать с окурков. Также не стесняйтесь редактировать этот вопрос.

Ответы [ 5 ]

38 голосов
/ 19 апреля 2010

Содержание.

  • Терминология
  • Языки и сериализации
  • Технические характеристики
  • Типы анализаторов и содержимого браузера (MIME)
  • Поддержка браузера
  • Валидаторы и определения типов документов
  • Режимы Quirks, Limited Quirks и Standards.

Терминология

Одна из трудностей описания этого заключается в том, что терминология в официальных спецификациях менялась с годами с момента появления 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 (по состоянию на 2010-04-18, черновик) описывает новый язык для HTML и XHTML. Этот язык в основном является расширенным набором языка HTML 4.01, но предназначен для обратной совместимости только с существующими веб-инструментами (например, браузерами, поисковыми системами и средствами разработки), а не с предыдущими спецификациями, где возникают различия. Таким образом, значение некоторых элементов иногда отличается от более ранних спецификаций. Точно так же каждая из сериализаций обратно совместима с текущими инструментами.

Типы анализаторов и содержимого браузера (MIME)

Когда текстовый файл отправляется в браузер, он анализируется во внутренней структуре памяти (объектная модель). Для этого используется синтаксический анализатор, который следует либо правилам сериализации 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 содержит первое нормативное определение восстановления, но ни один из основных браузеров не поставил реализацию алгоритма, включенного в версии выпуска на 2010-04-26.

Напротив, анализатор сериализации 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.

Режимы Quirks, Limited Quirks и Standards.

Браузеры не проверяют отправленные им файлы. Они также не используют DTD-декларации для определения языка или сериализации файла. Тем не менее, они используют его, чтобы угадать эпоху, в которой была создана страница, и, следовательно, вероятное поведение синтаксического анализа и рендеринга, которое автор ожидал от браузера в то время. Соответственно, они определяют три режима анализа и рендеринга, известные как режим Quirks, режим ограниченных Quirks (или почти стандартов) и режим стандартов.

Любой файл, обслуживаемый с использованием типа контента XML, всегда обрабатывается в стандартном режиме. Для файлов, анализируемых с использованием анализатора HTML, если DTD не предоставлен или DTD определен как очень старый, браузеры используют режим своих причуд. Вообще говоря, файлы HTML 4.01 и XHTML, обработанные как text / html, будут обрабатываться в режиме ограниченных причуд, если они содержат переходный DTD, и в режиме стандартов, если используется строгий DTD.

Если DTD не распознается, режим определяется сложным набором правил. В одном особом случае публичные и системные идентификаторы опущены, а объявление просто <! DOCTYPE html>. Известно, что это самое короткое объявление типа документа, в котором современные браузеры рассматривают файл как стандартный режим. По этой причине это объявление, указанное для файлов, совместимых с HTML5.

3 голосов
/ 18 апреля 2010

XHTML

QA

XHTML имеет зрелые инструменты QA, но более слабые DTD (например, <textarea rows="" - это ошибка соответствия в HTML 4.01 и XHTML 1.0, но только ошибка достоверности в HTML 4.01*).И это несмотря на то, что XHTML 1.0 теоретически является HTML 4.01, выраженным в формате XML.Существуют многочисленные различия, которые не описаны в разделе « Отличия с HTML 4 » спецификации.

Документ XHTML при подаче в приложении MIME-типа / xhtml + xml (см. ниже) должен соответствовать 100% стандартам XML, то есть он должен быть «правильно сформированным XML».Даже один неэкранированный амперсанд может заставить анализатор (браузер) выдать предупреждение и отказаться от визуализации документа.При создании динамических сайтов XHTML, которые могут включать в себя контент, предоставляемый третьими сторонами (например, любой пользовательский ввод), нужно быть очень осторожным, избегая любых недопустимых последовательностей символов, не допускать недопустимых тегов или атрибутов и правильно вкладывать все элементы.

Поддержка браузера

  • XHTML в виде текста / html хорошо поддерживается, но вы должны перепрыгнуть через совместимость обручи.Без перехода через эти циклы совершенно правильная страница может не отображаться (например, <script type="text/javascript" src="foo" />, в результате чего остальная часть документа будет обрабатываться как скрипт, а не HTML) или отображать другие проблемы.
  • XHTML как application / xhtml+ xml достаточно хорошо поддерживается большинством браузеров (могут существовать незначительные ошибки).Он не работает вообще в Internet Explorer <= 8. </li>

Приложение MIME-типа / xhtml + xml против text / html

XHTML, служащий текстом / html, не является ни XHTML, ни HTML,Он обрабатывается браузером как HTML, но, поскольку это не HTML, он рассматривается как теговый суп.Поскольку Internet Explorer не знает, как обрабатывать XHTML с помощью application / xhtml + xml, его нужно будет использовать как text / html только для IE.Это означает, что XHTML для IE всегда является супом-тегом, если только не прослеживаются различия между HTML и XHTML (см. Различия с HTML 4 ).

Добро пожаловать в мир боли.У вас возникают проблемы с прокси-серверами в нисходящем направлении (вы должны варьировать кэширование в зависимости от того, какой заголовок запроса вы выполняете по своему условию).Структура документа изменяется (например, таблицы без тега <tbody> могут иметь или не иметь элемент <tbody> в зависимости от типа содержимого).По большому счету нужно создать два практически идентичных документа.

XHTML и Javascript

Когда документ XHTML анализируется с правильным MIME-типом application / xhtml + xml, может произойтибыть различия при работе с элементами DOM через Javascript.Некоторые сценарии, которые не были подготовлены должным образом, могут работать по-другому или не работать в среде XHTML.
Примеры: в HTML команда JavaScript, такая как console.log(document.body.tagName);, выдаст «BODY», тогда как та же команда в XHTML выведет «body».
И если в разметке <table><tr>..</tr></table, то firstChild таблицы в JavaScript будет tr в XHTML, но TBODY в HTML.

Преимущества использования XHTML (as application / xhtml + xml)

  • Позволяет прямое чередование других форматов XML, таких как MathML и SVG.
  • Теоретически быстрее анализировать.Однако на практике разница незначительна.

* Абзац нуждается в некоторой полировке.

2 голосов
/ 18 апреля 2010

HTML

QA

  • HTML5 все еще имеет незрелые инструменты QA
  • HTML 4 существует уже давно и имеет очень зрелые инструменты QA

Поддержка браузеров

  • HTML 5 - Биты и кусочки поддерживаются различными браузерами. Вам нужен Javascript для поддержки большинства вещей, основные структурные элементы (такие как <section>) очень сильно падают, если Javascript недоступен *
  • HTML 4 хорошо поддерживается

* Требуются пояснения и примеры.

1 голос
/ 18 апреля 2010

Строгий против Переходного против Frameset

Почему?

HTML, а также XHTML выпускаются в различных вариантах, а именно Strict, Transitional и Frameset. Каждый «диалект» определяет различный набор элементов, которые разрешено использовать.

Прыжок в глубокий конец с Strict ограничивает некоторые из ваших опций "из коробки" (например, не может указать target атрибуты ), что делает его бесполезным для многих. 1014 *

Основные отличия

Пожалуйста, разверните

0 голосов
/ 19 апреля 2010

Это на самом деле не так уж сложно, и это действительно не имеет большого значения.

  • HTML и XHTML отличаются только синтаксисом.
  • Вы не можете использовать XHTML в качестве XML для Internet Explorer, и при этом вы не получаете никаких преимуществ в других браузерах.

Что еще нужно знать?

...