Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

Что понимается под пространством имён в спецификации HTML5?

#html #xml #html5 #xhtml #namespace


Выдержка из спецификации:


  In HTML documents, elements in the HTML namespace may have an xmlns
  attribute specified, if, and only if, it has the exact value
  "http://www.w3.org/1999/xhtml". This does not apply to XML documents.


Переводится примерно: "В HTML документах элементы в HTML-пространстве имён могут
иметь атрибут xmlns, если он имеет точное значение "http://www.w3.org/1999/xhtml". "

И тут я понял, что вообще ничего не понимаю. Я думал, что для html нет понятия пространство
имен. 

Ссылка HTML пространство имен в спецификации ведет на список:

Пространство имён HTML это: http://www.w3.org/1999/xhtml 
Пространство имён MathML это: http://www.w3.org/1998/Math/MathML
Пространство имён SVG это: http://www.w3.org/2000/svg 
Пространство имён XLink это: http://www.w3.org/1999/xlink 
Пространство имён XML это: http://www.w3.org/XML/1998/namespace 
Пространство имён XMLNS: http://www.w3.org/2000/xmlns/


И я совсем не могу понять, что такое имеется ввиду под пространством имен в данной
спецификации? Пространство имен html ведет вообще на xhtml спецификацию. Причем тут
html5 и xhtml? И как это связано с пространством имен?

Что значит фраза "элементы в HTML-пространстве имён могут иметь атрибут xmlns"? В
html пространстве имен это где? И как работает этот атрибут в html5?
    


Ответы

Ответ 1



Про атрибут xmlns По поводу xmlns, в том же тексте, сразу после приведённой в вопросе цитате сказано следующее: Note: In HTML, the xmlns attribute has absolutely no effect. It is basically a talisman. It is allowed merely to make migration to and from XHTML mildly easier. Заметка: В HTML, xmlns атрибут не имеет никакого эффекта. Это просто талисман. Он лишь позволяет проще выполнить преобразования в и из XHTML документов. С этим разобрались, xmlns в HTML нам не потребуется. Его конечно можно использовать для HTML-элементов, но это не имеет смысла, так как для всех структур в HTML документе уже есть предустановленные значения "пространства имён", список которых приведён в вопросе, и изменить их на другие значения никто не позволит. Проще говоря, нижепревидённые примеры равнозначны: А вот так уже не получится, так как xmlns попросту игнорируется, и html всё равно будет располагаться в пространстве имён "http://www.w3.org/1999/xhtml", как было сказано выше. Про пространство имён По аналогии с именами классов, пакетов и т.п из языков программирования, пространство имён позволяет отличить один элемент от другого, когда они имеют одинаковое название, но принадлежат разным пространствам имён. Где это может произойти в HTML? Например когда мы используем svg в html: Ссылка в SVG Ссылка в HTML И нам потребовалось изменить размер шрифта у ссылки в svg. Просто написать в стилях a { font-size: 1.5em } уже не получится, так как это правило применится и к обычной ссылки тоже. Вот здесь на помощь приходят возможности CSS по работе с пространствами имён. Для этого в CSS выполним такие действия: 1) Используя ключевое слово @namespace указываем наименование "приставки" пространства имён, с каким мы будем иметь дело: @namespace svg url(http://www.w3.org/2000/svg); Заметка: адрес пространства имён для SVG взят из спецификации, а вместо svg можно использовать другое наименование. 2) Теперь с помощью приставки svg можно обратиться непосредственно к метке , которая расположена в , с помощью специального синтаксиса CSS: svg|a { font-size: 1.5em; } Итог Атрибут xmlns в HTML не нужен. Спецификация за нас определила названия пространств имён для конкретных структур HTML, XML, SVG и их элементов. Для того чтобы в CSS получить доступ к конкретному элементу с использованием пространства имён необходимо использовать форму namespace|css-selector, предварительно дав наименование для пространства имён с помощью @namespace.

Комментариев нет:

Отправить комментарий