Прописные или строчные doctype?

182

При написании HTML5 doctype какой метод правильный?

<!DOCTYPE html>

или

<!doctype html>
joshnh
источник
Обычно это будет первый файл, хотя можно использовать любой из них <! DOCTYPE html>
Shadow
Мне удалось ответить на мой собственный вопрос, но я решил оставить его на тот случай, если у других возникнет аналогичная мысль. Я лично предпочитаю строчные буквы; ничто другое в HTML5 не является заглавной.
Джош
11
Google.com использует строчные буквы<!doctype html>
Leo Galleguillos
3
@HelloWorld: Это потому, что строчные буквы сжимаются лучше, потому что они более распространены. Для сайтов, которые получают миллионы посещений в день, это может иметь значение.
Заз
Как насчет файлов SVG?
Уильям Энтрикен

Ответы:

183

В HTML DOCTYPE нечувствителен к регистру. Следующие DOCTYPE действительны:

<!doctype html>
<!DOCTYPE html>
<!DOCTYPE HTML>
<!DoCtYpE hTmL>

В XML-сериализациях (т.е. XHTML) DOCTYPE не требуется, но если вы используете его, он DOCTYPEдолжен быть в верхнем регистре:

<!DOCTYPE html>

Смотрите XML-сериализацию HTML5, также известный как «XHTML5» :

Обратите внимание, что если вы не пишете DOCTYPEв верхнем регистре в документе XHTML, синтаксический анализатор XML вернет синтаксическую ошибку.

Вторая часть может быть написана в нижнем регистре ( html), верхнем регистре ( HTML) или даже в смешанном регистре ( hTmL) - все равно будет работать. Однако, чтобы соответствовать Рекомендациям по разметке полиглот для XHTML-документов , совместимых с HTML , его следует писать строчными буквами.

Матиас Биненс
источник
9
Нет, это неверно В SGML декларация типа документа - производство 110, в XML - производство 28. В обоих случаях оно объявляется как фиксированная строка «DOCTYPE» (которая не является тегом , это ключевое слово ). Так что в канонических определениях в соответствующих стандартах SGML и XML он всегда в верхнем регистре. Если вы обнаружите программное обеспечение, которое допускает использование «прописного типа» в нижнем регистре, это программное обеспечение не соответствует стандартам. Браузеры спроектированы так, чтобы быть «либеральными в том, что они принимают», но совместимый процессор XML должен пометить это как ошибку проверки.
Ичиро Фурусато
5
... и я должен отметить, что X / HTML5 также неверен в этом. Как указано, XHTML5 просто не является допустимой разметкой XML, и при этом это не может быть. В спецификации X / HTML5 есть множество ошибок. Я не отношусь к этому очень серьезно. Тот факт, что им пришлось создать « разметку полиглота » (совершенно новую концепцию), ясно говорит, что они наказаны.
Ичиро Фурусато
20
@Ichiro Я говорю о HTML, а не о SGML. Ни один браузер никогда не реализовывал SGML. Если бы они сделали, <title/foo/было бы эквивалентно <title>foo</title>. Только несколько валидаторов HTML используют SGML. Спецификация HTML5 - первая, которая проясняет это: whatwg.org/specs/web-apps/current-work/multipage/…
Матиас
2
@ TestSubject528491 Этот абзац относится ко второй части DOCTYPE ( html). Вот полное предложение: «Вторая часть может быть написана в нижнем регистре ( html), верхнем регистре ( HTML) или даже в смешанном регистре ( hTmL) - все равно будет работать. Однако, чтобы соответствовать Рекомендациям по разметке полиглот для XHTML-документов, совместимых с HTML, его следует писать строчными буквами ».
Матиас Биненс
15
@IchiroFurusato Вы можете прочитать о HTML5 . Цитата: «Однако, в отличие от предыдущих версий HTML, сериализация HTML [5] больше не рассматривается как применение SGML, а вместо этого определяет собственный синтаксис. Хотя синтаксис основан на SGML, он определяется таким образом, который больше похож на то, как браузеры фактически обрабатывают HTML в реальном мире, особенно в том, что касается обработки ошибок ».
Матиас Биненс
40

Если кто-то еще интересуется 2014 годом, пожалуйста, обратитесь к этому:

HTML5

W3 HTML5 Spec - Doctype

DOCTYPE должен состоять из следующих компонентов, в следующем порядке:

1. A string that is an ASCII case-insensitive match for the string "<!DOCTYPE".
...

Примечание: несмотря на то, что спецификация отображается во всех заглавных буквах, она не чувствительна

-------------------------------------------------- --------------------

XHTML5

W3 HTML5 - XHTML

This specification does not define any syntax-level requirements 
beyond those defined for XML proper.

XML documents may contain a DOCTYPE if desired, but this is not required 
to conform to this specification. This specification does not define 
a public or system identifier, nor provide a formal DTD.

Глядя на спецификацию XML, в ней указаны DOCTYPE прописными буквами, но я не могу найти ничего, в котором говорится, что «все заглавные буквы» необходимы (для сравнения, в приведенной выше спецификации HTML5 он отображается в примере со всеми заглавными буквами, но спецификация прямо указывает, что регистр не учитывается ).

-------------------------------------------------- --------------------

Разметка полиглота

W3 Полиглот Разметка - Введение

Иногда полезно иметь возможность обслуживать документы HTML5, которые также являются правильно сформированными документами XML.

W3 Полиглот Разметка - Доктип

В разметке полиглота используется объявление типа документа (DOCTYPE), указанное в разделе 8.1.1 [HTML5]. Кроме того, DOCTYPE соответствует следующим правилам:

* The string DOCTYPE is in uppercase letters.

Итак, обратите внимание, что разметка Ployglot использует обычный тип документа HTML5, но с дополнениями / изменениями. Для нашего обсуждения, наиболее заметно, что DOCTYPE объявлен во всех заглавных буквах .

-------------------------------------------------- --------------------

суммирование

Просмотреть раздел HTML против XHTML в W3

[Мнение] Я бы не стал слишком сильно беспокоиться о соответствии XML-требованиям, если вы не попытаетесь это сделать. Для разработки большинства клиентских и JS-серверов JSON заменил XML.

Поэтому я могу видеть, что это действительно применимо, если вы пытаетесь обновить существующую унаследованную систему на основе xhtml / xml, чтобы сосуществовать с новыми функциями HTML5. Если это так, посмотрите в спецификации разметки полиглота.

ucsarge
источник
18

Согласно последней спецификации , вы должны использовать что-то, для чего не учитывается регистр <!DOCTYPE html>. Таким образом, хотя браузеры должны поддерживать любой случай, который вы предпочитаете, разумно сделать вывод, что <!DOCTYPE html>это канонический случай.

Джон Меллор
источник
3
В спецификации довольно четко говорится, что тип документа должен содержать строку, которая является нечувствительным к регистру эквивалентом '<! DOCTYPE', следовательно, подразумевается, что '<! DOcTyPe' точно так же правильно.
Джошн
6
Как я уже сказал, спецификация требует, чтобы браузеры поддерживали любой случай, поэтому любой случай будет работать. Но спрашивающий явно ищет стандартную, каноническую форму, поэтому при отсутствии веских причин выбирать одно из другого, вы также можете использовать пример из спецификации ...
Джон Меллор
9
Спецификация последовательно записывает это как <!DOCTYPE html>, поэтому было бы разумно сделать вывод, что автор спецификации имеет небольшое предпочтение для этой конкретной капитализации. Я собираюсь использовать ту же заглавную букву, что и в спецификации, поскольку неплохо, чтобы эти вещи были согласованными, но если вы предпочитаете, <!dOcTyPeто будьте моим гостем :)
Джон Меллор
3
@joshnh Я не понимаю твоего замешательства. 1) Декларация DOCTYPE должна быть без учета регистра. 2) Спецификация HTML5 использует заглавные буквы "DOCTYPE html" в своих примерах. Весь этот ответ, кажется, говорит о том, что одна заглавная буква соответствует литературе, даже если все они действительны. Почему это так возмутительно?
2
Я думаю, что @joshnh неправильно понял, что пытался сказать Джон. FWIW, я согласен с мнением Джона о том, что при отсутствии какой-либо конкретной причины для форматирования определенным образом, предпочтение отдается тому, о чем говорится в спецификации, которую проверяют браузеры. Джон никогда не пытался утверждать, что это более правильно, только то, что это то, на чем можно основывать свои предпочтения - иначе это совершенно произвольный выбор, верно?
Райан Уильямс
7

Верхний или нижний регистр является «правильным». Однако, если вы используете веб-шрифты и заботитесь о IE7, я бы рекомендовал использовать <!DOCTYPE html>из-за ошибки в IE7, когда веб-шрифты иногда не работают при использовании <!doctype html>(например, в этом ответе ).

Вот почему я всегда прописываю прописные буквы.

JPW
источник
6

Стандарт HTML5 заключается в том, что теги нечувствительны к регистру.

http://www.w3schools.com/html5/tag_doctype.asp

Более технически: ( http://www.w3.org/TR/html5/syntax.html )

DOCTYPE должен состоять из следующих компонентов, в следующем порядке:

  1. Строка, которая является ASCII-регистронезависимым совпадением для строки <!DOCTYPE.
Стивен
источник
35
Я не доверяю W3Schools на 100%, они не связаны с W3C, и хотя большая часть их информации является хорошей, некоторые из них - нет.
Джош
Это довольно широко известно - вот ссылка на w3.org: w3.org/TR/html5/syntax.html
Стивен
4
W3Schools не имеет больше или меньше ошибок, чем другие сайты. ( Полностью случайный пример ) Возьмите информацию с небольшим количеством соли, обратитесь к страницам w3.org, если у вас возникнут сомнения, и все будет в порядке. Настоящие дураки - это те, кто считает, что W3Schools является официальным органом или что их сертификаты что-то значат.
Мистер Листер
8
@MrLister: Я не думаю, что было бы справедливо называть людей дураками, потому что они думают, что есть связь между чем-то под названием «W3Schools» и чем-то под названием «W3C». Оба достаточно похожи по имени и домену, чтобы вызвать путаницу, и предположение, что первое как-то подтверждается или связано с последним. Это явно намерение W3Schools, и это одна из причин, по которой они злят многих людей, которые понимают проблему. Тот факт, что большая часть их информации является неточной, усугубляет проблему (то есть это может быть немного простительно, если они действительно предоставят разумную услугу)
Бобби Джек,
Ссылка на tag_doctype.aspнедействительна (404), и этот вопрос касается doctypeобъявления, которое не является тегом ... В любом случае, вывод правильный: в HTML5 ключевое слово doctypeможет быть в верхнем, нижнем или смешанном регистре.
Авель
3

Вопрос вроде подразумевает, что есть только один правильный ответ, предлагает несколько вариантов выбора из двух и просит нас выбрать один. Я бы предположил, что для HTML5 оба <!DOCTYPE html>и <!doctype html>действительны.

Таким образом, браузер с поддержкой HTML5 будет принимать строчный и правильно обрабатывать HTML.

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

Clive
источник
0

Объявление doctype нечувствительно к регистру, и любая строка ASCII, которая соответствует

Стандарт HTML5

Ичоку Чинонсо
источник