web-dev-qa-db-ja.com

HTML5のSVG – XML宣言 `<?xml version =" 1.0 "encoding =" UTF-8 "?>`はいつ必要ですか?

HTML5内でSVGを使用する場合:SVGでXML宣言<?xml version="1.0" encoding="UTF-8"?>が必要か

  • <img>経由の画像として、または
  • cSS background-images?

これは、「 「xmlns」や「version」などのSVGパラメータが必要です 」とわずかに関連しています。名前空間の問題は、2つの回答と MDN名前空間クラッシュコース によって、必要に応じて明確にされます

しかし、SVG 1.1には、XML宣言の必要性や省略可能な場合についての記述が含まれていませんか?

宣言のない例:

<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>

更新2016-07-04:質問がXML宣言に関するものであることを明確にしました 。 @Martin Honnen、ありがとう! Update 2017-10-24“ UTF-8“ uppercase に変更され、SVGO最適化属性の順序。

19
Volker E.

HTML5の場合、正しい DOCTYPE宣言

_<!DOCTYPE html> 
_

ブラウザに完全な標準モードを指定する必要があります。

あなたが示したこと、

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

XML宣言 です。 XML 1.0の場合はオプションです およびXML 1.1の場合は が必要です

  • XML 1.1は広く使用されていません。
  • とにかく、_version="1.0"_と_encoding="utf-8"_がデフォルトです。

別のエンコーディングを指定する場合、特にファイルがブラウザだけでなくXMLプロセッサでも使用される可能性がある場合は、HTML5でXML宣言を使用します。

詳細については、HTML5:ボキャブラリと関連するHTMLおよびXHTMLのAPIを参照してください。

内部SVGに関する注意(ありがとう、 @Quentin ):HTML5ドキュメント内に埋め込まれたSVGには、独立したXML宣言があってはなりません。 one XML宣言のみが整形式のXMLで許可されており、それは最上部にある必要があります。がある場合。 XML宣言の配置要件の詳細については、 この回答 を参照してください。

外部SVGに関する注意(ありがとう、 @海道 ):HTML5 imgまたはCSS _background-images_を介して参照されるSVGには独自のXML宣言が必要であり、次のDOCTYPE宣言を使用する必要があります。

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

外部SVGに関する注意(更新)(ありがとう、 @ user314159 ):

1.3あたり。 SVG名前空間とDTD / Scalable Vector Graphics(SVG)2 W3Cワーキングドラフト2015年7月9日

ドキュメントの検証にDTDを使用すると問題が発生することがわかっているため、この仕様ではDTDは提供されていません。特に、DTDは名前空間を適切に処理せず、DTDが表現できる制約の範囲は限られています。 SVGドキュメントにDOCTYPE宣言を含めないことをお勧めします。

[エンファシスが追加されました。]

14
kjhughes

私はここに情報を見つけました https://oreillymedia.github.io/Using_SVG/extras/ch01-XML.html XMLとDOCTYPE宣言は必要ありません...

XML宣言は、非Unicode文字エンコーディング(技術的には、UTF-8またはUTF-16以外)を使用している場合にのみ必要です。

SGML DOCTYPE宣言を含めることもできますが、SVGでは推奨されなくなりました。

1
mikep