Нужны ли параметры SVG, такие как "xmlns" и "версия"?

Примерно в половине примеров svg, которые я вижу в Интернете, код обернут в простые простые теги <svg></svg>.

В другой половине теги svg имеют много сложных атрибутов, таких как:

<svg 
  xmlns="http://www.w3.org/2000/svg" 
  version="1.1" 
  xmlns:xlink="http://www.w3.org/1999/xlink"> 

У меня вопрос: можно ли использовать простые теги SVG? Я пытался поиграть со сложными, и все отлично работает, если я их не включу.

Ответ 1

Все пользовательские агенты (браузеры) игнорируют атрибут версии, поэтому вы всегда можете его удалить.

Если вы встраиваете свой SVG файл в HTML-страницу и используете эту страницу как text/html то атрибуты xmlns не требуются. Встраивание SVG-кода в HTML-документы является сравнительно недавним нововведением, появившимся как часть HTML5.

Если же вы служите страницу как изображение /SVG + XML или приложение /XHTML + XML или любой другой тип MIME, который заставляет агент пользователя использовать XML - анализатор, то атрибуты Xmlns необходимы. До недавнего времени это был единственный способ сделать что-то, поэтому много контента обслуживается так.

Ответ 2

Атрибут xmlns="http://www.w3.org/2000/svg":

  • Требуется для файлов image/svg + xml. 1
  • Необязательно для встроенного <svg>. 2

xmlns:xlink="http://www.w3.org/1999/xlink":

  • Требуется для файлов image/svg + xml с атрибутами xlink:. 1
  • Необязательно для встроенного <svg> с атрибутами xlink:. 2

Атрибут version="1.1":

  • Рекомендуется для соответствия стандартам image/svg + xml files. 3
  • Видимо игнорируется каждым пользовательским агентом. 4
  • Удалено в SVG 2. 5

1Интернационализированные идентификаторы ресурсов (RFC3987)
2С HTML5
3Расширяемый язык разметки (XML) 1,0
+4 Вероятно, до выхода дальнейших основных версий.
5SVG 2, Рекомендация кандидата W3C, 7 августа 2018 г.

Ответ 3

Я хотел бы добавить к обоим ответам, но у меня нет баллов, я добавляю новый ответ. В недавних тестах на Chrome (Версия 63.0.3239.132 (Официальная сборка) (64-битная Windows)) я обнаружил, что:

  1. Для встроенного SVG, который непосредственно вводится в файл HTML через текстовый редактор или javascript и elm.innerHTML, атрибуты xmlns не нужны, как указано в двух других ответах.
  2. Но для встроенного SVG, который загружается через javascript и AJAX, есть два варианта:
    • Используйте xhr.responseText и elm.innerHTML. Это не требует xmlns.
    • Используйте xhr.responseXML.documentElement и elm.appendChild() или elm.insertBefore(). Этот метод создания встроенного SVG приводит к получению полупеченных результатов без объявления базового пространства имен SVG, как в xmlns="http://www.w3.org/2000/svg". <Svg> загружается в HTML, но функции уровня документа, такие как getElementById(), не распознаются в элементе <svg>. Я предполагаю, что это потому, что он использует XMLHttpRequest XML-парсер вне HTML.

Ответ 4

Об атрибуте версии SVG в MDN WebDoc говорится

Устаревшая версия с SVG 2
Эта функция больше не рекомендуется. Хотя некоторые браузеры могут все еще поддерживать его, возможно, он уже удален из соответствующих веб-стандартов, может быть в процессе отброшено или может храниться только в целях совместимости. Избегать использования и обновите существующий код, если это возможно; см. таблицу совместимости в нижней части этой страницы, чтобы направить ваше решение. Знать, что это функция может перестать работать в любое время.

Атрибут version используется для указания, какая спецификация SVG документ соответствует. Это разрешено только для корневого элемента. Это носит чисто рекомендательный характер и не влияет на рендеринг или обработку.

PS: SVG 2 еще далеко не стал стандартом.