Чи потрібні такі параметри SVG, як "xmlns" та "version"?


203

Приблизно в половині прикладів svg, які я бачу в Інтернеті, код загортається в прості прості <svg></svg>теги.

У другій половині теги svg мають безліч складних атрибутів на зразок цього:

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

Моє запитання: чи нормально використовувати прості теги svg? Я спробував пограти зі складними, і все працює добре, якщо я не включаю їх.

Відповіді:


206

Усі користувальницькі агенти (браузери) ігнорують атрибут версії, тому ви завжди можете скинути це.

Якщо ви вбудовуєте SVG вбудований на сторінку HTML і обслуговуєте цю сторінку, text/htmlто атрибути xmlns не потрібні . Вбудований SVG вбудований в документи HTML - це досить недавнє нововведення, яке стало частиною HTML5.

Якщо ж ви служите сторінку як зображення / SVG + XML або додаток / XHTML + XML або будь-який інший тип MIME , який викликає призначений для користувача агент використовувати XML - аналізатор , то в Xmlns атрибути будуть необхідні . Це був єдиний спосіб робити речі до недавнього часу, тому тут подається багато вмісту.


5
"Усі UA ігнорують атрибут версії, тому ви завжди можете скинути це." - але що spec має сказати з цього питання? "Браузери дозволять вам відійти від цього" є (або в якийсь момент було) правдою для багатьох практик, які є (або були) однозначно неправильними.
Марк Амері

У IE11, якщо я ставлю <!DOCTYPE svg xmlns="www.w3.org/2000/svg">це, він працює, але якщо я забираю xmlns або змінюю його, <!DOCTYPE svg xmlns="www.example.com">він не працює. Чому так?
Дональд Дак

8
Чи не могли б бути вказані джерела на цю відповідь?
2540625

69
Я написав значну частину SVG-коду у Firefox, і я так кажу. Це недостатньо добре? Якщо ні, то я все одно додав посилання.
Роберт Лонгсон

1
@Marcel якщо не, якщо ці дані-uris є image / svg + xml, як правило, це стосується остаточної частини відповіді.
Роберт Лонгсон

228

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 . 3
  • Мабуть, ігнорується кожним користувальницьким агентом. 4
  • Видалено у SVG 2. 5

1 Інтернаціоналізовані ідентифікатори ресурсів (RFC3987)
2 З HTML5
3 Розширювана мова розмітки (XML) 1.0
4 Можливо, до виходу подальших основних версій.
5 SVG 2, Рекомендація кандидата W3C, 07 серпня 2018 року


2
Чи потрібно це http або це також може бути https?
ЙоханнесB

2
@JohannesB сумісні обидва протоколи: D
ncomputers

1
@JohannesB Так, у вас є накреслений приклад HTTP HTTPS та файл image / svg + xml з вбудованим svg із прикладом атрибутів xlink HTTP HTTPS
ncomputers

1
Дякую, здогадайтесь, Нік Крейвер також помиляється;)
ЙоханнесB

2
Не помиліться versionатрибутом декларації xml ( <?xml version...) для versionатрибута <svg>елемента. Перший стосується версії мови розмітки XML, а другий - версії SVG. Автор цієї відповіді допустив цю помилку, посилаючись на XML, а не на специфікацію SVG у ³. Я спробував це виправити, але деякі ідіоти відхилили редагування.
Бахсау

7

Я хотів би додати обидві відповіді, але у мене немає балів, я додаю нову відповідь. В останніх тестах на Chrome (версія 63.0.3239.132 (Official Build) (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.

0

Про атрибут версії SVG говорить MDN WebDoc

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

Атрибут версії використовується для вказівки, яким специфікаціям відповідає SVG-документ. Це дозволено лише на кореневому елементі. Він суто дорадчий і не впливає на надання чи обробку.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.