Является ли эта декларация HTML повторяющейся - PullRequest
2 голосов
/ 27 октября 2010

У меня есть объявление типа документа, как показано в первых 2 строках.

В третьей строке тег html также имеет объявление xmlns и xml: lang и lang.Является ли какой-либо из этих xmlns, xml: lang или lang повторяющимся?Дублируют ли они что-нибудь из doctype.Я хотел бы сохранить тип документа и удалить все объявления в третьей строке, если они повторяются.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

</html>

Ответы [ 5 ]

1 голос
/ 27 октября 2010

Если вы используете XHTML, то (согласно другим комментариям здесь) вам нужно указать все эти вещи. Все это требуется для вашей страницы, чтобы соответствовать спецификации (страницы XHTML не будут работать, если они не соответствуют 100% спецификации).

Однако в вашем вопросе говорится, что вы хотите упростить свой код. При существующем положении вещей, используя XHTML, вы не можете. Но если вы переключитесь на спецификацию HTML5, то сможете значительно упростить процесс.

HTML5 не требует сложного типа документа и не требует каких-либо объявлений пространства имен XML. Документ HTML5 будет выглядеть так:

<!DOCTYPE html>
<html>
....
</html>

Я уверен, что вы согласитесь, это намного проще и легче для чтения.

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

1 голос
/ 27 октября 2010

Они не повторяются. Пространство имен XML для XHTML и объявление doctype не совпадают. Также нет атрибутов xml:lang и lang. Спецификация XHTML 1.0 требует, чтобы все они были включены.

Список атрибутов для элемента <html>, как описано в XHTML 1.0 Strict DTD , выглядит следующим образом:

<!ATTLIST html
  %i18n;
  id          ID             #IMPLIED
  xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
  >

(где %i18n - внутренняя сущность, представляющая атрибуты интернационализации xml:lang, lang и dir, см. Ниже)

Обратите внимание на четвертую строку. В нем говорится, что xmlns является атрибутом данного значения URI и фиксирован в том же URL-адресе пространства имен. Это означает, что если вы опустите атрибут или предоставите ему другое пространство имен, ваш документ будет недопустимым строгим XHTML.

Сущность %i18n соответствует этим атрибутам:

<!-- internationalization attributes
  lang        language code (backwards compatible)
  xml:lang    language code (as per XML 1.0 spec)
  dir         direction for weak/neutral text
-->
<!ENTITY % i18n
 "lang        %LanguageCode; #IMPLIED
  xml:lang    %LanguageCode; #IMPLIED
  dir         (ltr|rtl)      #IMPLIED"
  >

Атрибут lang предназначен для обратной совместимости (т. Е. HTML ≤ 4.01), а xml:lang описывается XML 1.0 (отсюда видно пространство имен xml). Я не слишком уверен в точной причине, почему xml:lang должен предшествовать lang, но это имеет смысл, учитывая, что XHTML - это просто HTML, «переформатированный» в синтаксис XML (так сказать).

Атрибут dir по умолчанию равен ltr (текст слева направо), если не указан, следовательно, это не обязательный атрибут.

1 голос
/ 27 октября 2010

Нет, тип документа и пространство имен документа xml - это разные вещи.

1 голос
/ 27 октября 2010

Чтобы соответствовать строгому стандарту XHTML, как указывает ваш DOCTYPE, вы должны указать атрибут xmlns.

Корневой элемент документа должен обозначать пространство имен XHTML с помощью атрибута xmlns [XMLNAMES].Обозначение пространства имен для XHTML: "http://www.w3.org/1999/xhtml".

Контрольная точка № 3 из http://www.w3.org/TR/xhtml11/conformance.html

0 голосов
/ 27 октября 2010

Нет, ничего похожего на дублирование.

Мы можем упомянуть атрибуты lang и xml:lang.Значение атрибута xml:lang имеет приоритет

xmlns должно быть там, если тип документа находится в строгом режиме.

...