HTML 4, HTML 5, XHTML, MIME - окончательный ресурс

Темы 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 для каждого?
Как их обрабатывают разные браузеры?

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

Ответ 1

Содержание.

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

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

Одна из трудностей описания этого заключается в том, что терминология в официальных спецификациях менялась с годами, поскольку HTML был впервые представлен. Ниже приведена терминология HTML5. Кроме того, "файл" используется как общий термин для обозначения файла, документа, потока ввода, потока октетов и т.д., Чтобы избежать необходимости делать мелкие различия.

Языки и сериализация

HTML и XHTML определяются в терминах языка и сериализации.

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

Сериализация определяет, как разметка используется для описания этих элементов и атрибутов в текстовом документе. Сюда входят те теги, которые требуются, и которые могут быть выведены, и правила для этих выводов. Он описывает такие вещи, как то, как должны быть помечены элементы void (например, " > " vs "/ " > " ), и когда значения атрибутов должны быть указаны.

Технические характеристики

Спецификация 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-заголовке "контент-тип". Внутри, как только файл был разобран, браузер обрабатывает объектную модель почти таким же образом, независимо от того, был ли он первоначально предоставлен с использованием сериализации 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, XHTML, поставляемый с использованием типа содержимого XML, может быть проанализирован непосредственно так же, как и другие современные браузеры.

Когда их синтаксические анализаторы XML обнаруживают, что их входные файлы не являются хорошо сформированными XML, некоторые браузеры отображают сообщение об ошибке, а другие отображают страницу, созданную до той точки, где была обнаружена ошибка, а некоторые предлагают пользователю возможность повторите анализ файла с помощью своего парсера HTML.

Валидаторы и определения типов документов

Файлы HTML и XHTML могут начинаться с объявления типа определения документа (DTD), которое указывает язык и сериализацию, которые используются в документе. Валидаторы, такие как http://validator.w3.org/, используют эту информацию для соответствия языку и сериализации, используемым в файле, против правил, определенных в DTD. Затем он сообщает об ошибках, основанных на том, где нарушены правила в DTD, отмеченные в файле.

Не все правила сериализации и языка HTML могут быть описаны в DTD, поэтому валидаторы проверяют только подмножество всех правил, описываемых спецификациями.

HTML 4.01 и XHTML 1.0 определяют DTD с четными, переходными и Frameset, которые отличаются элементами и атрибутами языка, которые разрешены в совместимых файлах.

Валидаторы на основе HTML5, такие как validator.nu, ведут себя как браузеры, обрабатывают страницу в соответствии с типом содержимого HTTP и используют не DTD основанный на правилах, чтобы они ломали ошибки, которые не могут быть описаны DTD.

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

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

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

Если DTD не распознается, режим определяется сложным набором правил. Одним из особых случаев является то, что публичные и системные идентификаторы опущены, а декларация - просто <! DOCTYPE html > . Это, как известно, кратчайшее объявление doctype, где текущие браузеры будут рассматривать файл как режим стандартов. По этой причине это объявление указано для HTML5-совместимых файлов.

Ответ 2

XHTML

контроль качества

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

Приложение MIME-типа /xhtml + xml против текста /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 (как application/xhtml + xml)

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

* Параграф нуждается в некоторой полировке.

Ответ 3

HTML

QA

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

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

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

* Необходимы некоторые пояснения и примеры.

Ответ 4

Строгий против переходного или фрейметта

Почему?

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

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

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

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

Ответ 5

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

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

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