web-dev-qa-db-fra.com

SVG en HTML5 - quand la déclaration XML `<? Xml version =" 1.0 "encoding =" UTF-8 "?>` Est-elle nécessaire?

Lors de l'utilisation de SVG dans HTML5: la déclaration XML est-elle <?xml version="1.0" encoding="UTF-8"?> nécessaire avec SVG

  • sous forme d'images via <img> ou
  • comme CSS background-images?

Ceci est légèrement lié à " les paramètres SVG tels que" xmlns "et" version "sont-ils nécessaires ". Les problèmes d'espaces de noms sont clarifiés si nécessaire par les deux réponses et le cours intensif de l'espace de noms MDN .

Mais SVG 1.1 n'inclut pas de déclaration sur la nécessité d'une déclaration XML ou quand elle pourrait être omise?

Exemple sans déclaration:

<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
  <circle id="circle--red" cx="30" cy="30" r="30" fill="#f00"/>
</svg>

Mise à jour 2016-07-04 : clarification de la question concernant la déclaration XML . Merci @Martin Honnen! Mise à jour 2017-10-24 : remplacé par "UTF-8" en majuscules et ordre d'attribut optimisé SVGO.

19
Volker E.

Pour HTML5, la bonne ( déclaration DOCTYPE est

<!DOCTYPE html> 

Il est nécessaire de spécifier le mode standard complet pour le navigateur.

Ce que vous avez montré,

<?xml version="1.0" encoding="utf-8"?>

est un ( Déclaration XML . Il s'agit de facultatif pour XML 1. et requis pour XML 1.1 , mais

  • XML 1.1 n'est pas largement utilisé.
  • version="1.0" et encoding="utf-8" sont de toute façon les valeurs par défaut.

Utilisez une déclaration XML en HTML5 lorsque vous souhaitez spécifier un encodage différent, en particulier lorsque le fichier peut être consommé non seulement par les navigateurs mais également par les processeurs XML.

Pour plus d'informations, voir HTML5: vocabulaire et API associées pour HTML et XHTML.

Remarque concernant le SVG interne (merci, @ Quentin ): le SVG intégré dans un document HTML5 ne doit pas avoir de déclaration XML indépendante. Seulement un La déclaration XML est autorisée en XML bien formé, et elle doit être en haut, si n'importe où. Voir cette réponse pour plus de détails sur les exigences de placement de la déclaration XML.

Remarque concernant les SVG externes (merci, @ Kaiido ): SVG référencé via HTML5 img ou CSS background-images doit avoir sa propre déclaration XML et doit utiliser la déclaration DOCTYPE suivante:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
          "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

Remarque concernant le SVG externe (mise à jour) (merci, @ user314159 ):

Per 1.3. SVG namespace and DTD of the Scalable Vector Graphics (SVG) 2 W3C Working Draft 09 juillet 2015 :

Une DTD n'est pas fournie dans cette spécification, car l'utilisation de DTD pour valider des documents est connue pour être problématique. En particulier, les DTD ne gèrent pas les espaces de noms avec élégance et la gamme de contraintes qu'ils peuvent exprimer est limitée. Il est recommandé aux auteurs de ne pas inclure de déclaration DOCTYPE dans les documents SVG.

[Je souligne.]

14
kjhughes

J'ai trouvé des informations ici https://oreillymedia.github.io/Using_SVG/extras/ch01-XML.html que la déclaration XML et DOCTYPE n'est pas nécessaire ...

La déclaration XML n'est requise que si vous utilisez un codage de caractères non Unicode (techniquement, tout autre chose que UTF-8 ou UTF-16).

Vous pouvez également inclure une déclaration SGML DOCTYPE, mais elle n'est plus recommandée pour SVG.

1
mikep