Les paramètres SVG tels que «xmlns» et «version» sont-ils nécessaires?

204

Dans environ la moitié des exemples svg que je vois sur Internet, le code est enveloppé dans un langage simple et simple <svg></svg> balises .

Dans l'autre moitié, les balises svg ont beaucoup d'attributs complexes comme celui-ci:

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

Ma question est: est-ce correct d'utiliser les simples balises svg? J'ai essayé de jouer avec les plus compliqués, et tout fonctionne bien de mon côté si je ne les inclue pas.

Lars
la source

Réponses:

207

Tous les agents utilisateurs (navigateurs) ignorent l'attribut de version, vous pouvez donc toujours le supprimer.

Si vous intégrez votre ligne SVG dans une page HTML et servez cette page text/htmlpuis xmlns attributs ne sont pas nécessaires . L'incorporation de SVG en ligne dans des documents HTML est une innovation assez récente qui est venue dans le cadre de HTML5.

Si toutefois vous servez votre page en tant que image / svg + xml ou application / xhtml + xml ou tout autre type MIME qui oblige l'agent utilisateur à utiliser un analyseur XML, les attributs xmlns sont requis . C'était la seule façon de faire les choses jusqu'à récemment, donc il y a beaucoup de contenu servi comme ça.

Robert Longson
la source
5
"Tous les UA ignorent l'attribut de version, vous pouvez donc toujours le supprimer." - mais qu'est-ce que spec a à dire à ce sujet? «Les navigateurs vous permettront de vous en tirer» est (ou a été à un certain moment) vrai de nombreuses pratiques qui sont (ou étaient) sans ambiguïté incorrectes.
Mark Amery
Dans IE11, si je le mets <!DOCTYPE svg xmlns="www.w3.org/2000/svg">en marche, mais si j'enlève les xmlns ou si je le change, <!DOCTYPE svg xmlns="www.example.com">ça ne marche pas. Pourquoi donc?
Donald Duck
8
Pourrait-on citer une source pour cette réponse, s'il vous plaît?
2540625
69
J'ai écrit une fraction importante du code SVG dans Firefox et je le dis. N'est-ce pas assez bon? Sinon, j'ai quand même ajouté quelques liens.
Robert Longson
1
@Marcel pas si ces données-uris sont image / svg + xml, ce qui est généralement le cas, alors la dernière partie de la réponse est valable.
Robert Longson
228

L' xmlns="http://www.w3.org/2000/svg"attribut est:

  • Requis pour les fichiers image / svg + xml . 1
  • En option pour inline <svg> . 2

L' xmlns:xlink="http://www.w3.org/1999/xlink"attribut est:

  • Requis pour les fichiers image / svg + xml avec les attributs xlink : . 1
  • En option pour inline <svg> avec XLink: attributs. 2

L' version="1.1"attribut est:

  • Recommandé pour se conformer aux normes de fichiers image / svg + xml . 3
  • Apparemment ignoré par chaque agent utilisateur. 4
  • Supprimé dans SVG 2. 5

1 Internationalized Resource Identifiers (RFC3987)
2 Depuis HTML5
3 Extensible Markup Language (XML) 1.0
4 Probablement jusqu'à la sortie d'autres versions majeures.
5 SVG 2, Recommandation candidate du W3C, 07 août 2018

nordinateurs
la source
2
Doit-il être http ou https?
JohannesB
2
@JohannesB les deux protocoles sont compatibles: D
ncomputers
1
@JohannesB ici oui vous avez un inline exemple HTTP HTTPS et image / svg + xml fichier avec inline svg avec XLink attribue par exemple HTTP HTTPS
ncomputers
1
Merci, je suppose que Nick Craver fait aussi des erreurs;)
JohannesB
2
Ne confondez pas l' versionattribut de la déclaration xml ( <?xml version...) avec l' versionattribut de l' <svg>élément. Le premier concerne la version du langage de balisage XML, tandis que le dernier spécifie la version de SVG. L'auteur de cette réponse a fait cette erreur en se référant au XML, pas à la spécification SVG en ³. J'ai essayé de le corriger, mais certains idiotes ont rejeté la modification.
Bachsau
7

Je voudrais ajouter aux deux réponses, mais je n'ai aucun point, j'ajoute une nouvelle réponse. Lors de tests récents sur Chrome (version 63.0.3239.132 (version officielle) (Windows 64 bits)), j'ai constaté que:

  1. Pour le SVG en ligne qui est directement entré dans le fichier HTML, via l'éditeur de texte ou javascript et elm.innerHTML, les attributs xmlns ne sont pas nécessaires, comme indiqué dans les deux autres réponses.
  2. Mais pour le SVG en ligne chargé via javascript et AJAX, il y a deux options:
    • Utilisez xhr.responseTextet elm.innerHTML. Cela ne nécessite pas les xmlns.
    • Utilisez xhr.responseXML.documentElementet elm.appendChild()ou elm.insertBefore(). Cette méthode de création du SVG en ligne produit des résultats mi-cuits sans que l'espace de noms SVG de base ne soit déclaré, comme dans xmlns="http://www.w3.org/2000/svg". Le <svg> se charge dans le HTML, mais les fonctions au niveau du document, telles que celles getElementById()qui ne sont pas reconnues sur l'élément <svg>. Je suppose que c'est parce qu'il utilise l'analyseur XML XMLHttpRequest en dehors du HTML.
jamess
la source
0

À propos de l'attribut de version SVG dit MDD WebDoc

Déconseillé depuis SVG 2
Cette fonctionnalité n'est plus recommandée. Bien que certains navigateurs puissent toujours le prendre en charge, il peut avoir déjà été supprimé des normes Web pertinentes, être en cours de suppression ou ne peut être conservé qu'à des fins de compatibilité. Évitez de l'utiliser et mettez à jour le code existant si possible; consultez le tableau de compatibilité au bas de cette page pour guider votre décision. N'oubliez pas que cette fonctionnalité peut cesser de fonctionner à tout moment.

L'attribut version est utilisé pour indiquer à quelle spécification un document SVG est conforme. Il n'est autorisé que sur l'élément racine. Il est purement consultatif et n'a aucune influence sur le rendu ou le traitement.

PS: Le SVG 2 est encore loin de devenir un standard.

Velusamy Velu
la source