createElement против createElementNS - PullRequest
       8

createElement против createElementNS

58 голосов
/ 17 ноября 2011

Какая разница между этими двумя?Я имею в виду реальную, существенную разницу.Что будет в будущем для обычных createElement?

SVG - это xml, а не html.Я понимаю.Поэтому мы используем createElementNS(ns_string, 'svg') А затем setAttributeNS(null,,).Зачем?Почему бы не setAttributeNS('my_ns',,)?

Почему ns_string должно быть http://www.w3.org/2000/svg, а не какой-нибудь случайной строкой?Какова цель пространства имен, если существует только одно пространство имен?

Какова цель ns в обычном html?Должен ли я изменить все экземпляры createElement на createElementNS в моем существующем коде?

Я читаю спецификацию DOM-Level-2 .но я все еще озадачен.

1 Ответ

48 голосов
/ 17 ноября 2011

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

Какова цель пространства имен, если существует только одно пространство имен?

Существует множество пространств имен, используемых для идентификации различных типов XML, и различные версии таких типов.

SVG и MathML - это два вида XML, каждый со своими собственными пространствами имен, которые могут быть встроены в HTML5, и они часто используют XLink, другое пространство имен XML. Многие другие XML-схемы с соответствующими пространствами имен используются для передачи сообщений между клиентами и серверами и для хранения данных.

XHTML - это попытка выразить HTML как допустимый XML. У него есть собственное пространство имен.

Так что мы используем createElementNS (ns_string, 'svg') и затем setAttributeNS (null ,,). Зачем? Почему бы не установить атрибутANS ('my_ns' ,,) ???

Вероятно, вам следует попытаться последовательно использовать setAttributeNS с URI пространства имен при использовании createElementNS с URI пространства имен.

XML был определен в несколько этапов. Первая версия спецификации ничего не говорила о пространствах имен, но оставила достаточно синтаксиса, чтобы XML с пространствами имен мог быть указан поверх XML без пространств имен с использованием префиксов и специальных атрибутов xmlns. XML-спецификация гласит:

"Пространства имен в XML-рекомендации [Имена XML] присваивают значения именам, содержащим символы двоеточия. Поэтому авторам не следует использовать двоеточие в именах XML, кроме как для целей пространства имен, но процессоры XML должны принимать двоеточие в качестве символа имени. «

Пространства имен XML позволяют приложениям обработки XML знать, с чем они имеют дело, и позволяют смешивать несколько видов XML в одном документе.

Почему ns_string должно быть "http://www.w3.org/2000/svg"

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

При использовании с xmlns:svg он также сообщает браузеру, что префикс svg: означает SVG, а не какой-то другой диалект XML.

...