Inkscape 0.92で生成されたものはSVGバージョンが1.0
だった。古いと思われるのでSVG規格の仕様を調査して最適なファイルを手動生成した。
SVG画像
今回使用するのは前回までに作成したSVG画像を元にする。
これはInkscape 0.92によって生成されたSVG画像ファイルをベースにしている。
Inkscape 0.92 release noteによると2017-01-01
公開らしいので、2025-04-06
現在から見ると8年前になる。出力形式も古いはず。出力したSVGファイルを開くとversion="1.0"
だった。
作成当時はSVG規格の細かい仕様について考慮しなかったが、今回は仕様を考慮してテキストエディタで新しく妥当なSVG文書を書きたい。
SVG規格
バージョン
ver | 状態 | 更新日 |
---|---|---|
1.0 | W3C勧告 | 2001-09-04 |
1.1 | W3C勧告 | 2011-08-16 |
1.2 | W3C勧告 | 2008-12-22 |
2.0 | W3C勧告候補 | 2018-10-04 |
現状では2.0
で書くことが推奨されていると思われる。MDNの一部を見ると1.1
の表記は非推奨だったから(後述)。
正式には1.1
が最新だと思う。1.2
は2.0
により使われなくなったらしく、2.0
はまだ「W3C勧告候補」だという。その意味する所は理解できていないが、他は「候補」がないので、まだ最終段階ではないのだろう。
1.0
と1.1
の違いは誤記修正らしい。なので大差ないと思われる。
つまり2.0
一択ということで良いはず。ブラウザ実装が追いついているかは知らない。それを調べる方法がないとグーグルのAIが言っていたのでお手上げ。
DOCTYPE
SVG1.1
からDOCTYPEは非推奨になった。
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
SVG 文書に DOCTYPE 宣言を含める事は、推奨されない。
SVGはXMLのサブセットなのでファイルの冒頭にDOCTYPEを書いていたが、1.1
で非推奨になった。
属性
属性/版 | 1.0 | 1.1 | 2.0 | 注釈 | 概要 |
---|---|---|---|---|---|
xmlns |
必 | 必 | 必 | インライン時は省略可 | XML文書における名前空間xmlns="http://www.w3.org/2000/svg" |
viewBox |
必 | 必 | 必 | 省略すると表示崩れの原因になる。width ,height と一致させるべし。 |
ビューポートにあわせて収縮する領域 |
width |
任 | 任 | 任 | 単位px | ビューポートサイズ(幅) |
height |
任 | 任 | 任 | 単位px | ビューポートサイズ(高さ) |
version |
任 | 任 | 非 | 1.0 /1.1 (省略時1.0 ) |
文書のSVGバージョン |
xmlns:xlink |
条 | 条 | 非 | SVG内で<a> 使用時必須。インライン時省略可 |
xmlns:xlink="http://www.w3.org/1999/xlink" |
xml:space |
任 | 任 | 非 | - | SVG内空白保持是非(preserve 設定時に改行やタブがスペースに置換される)xml:space="preserve" /"default" |
印 | 意味 |
---|---|
必 | 必須 |
条 | 条件付き必須 |
任 | 任意(省略可) |
非 | 非推奨 |
これを元にどうマークアップすればいいかまとめる。
以下の属性は省略する。
version
は省略する(省略時は1.0
だが2.0
では非推奨)xmlns:xlink
は省略する(2.0
では非推奨でありhref
を使う)xml:space
は省略する(2.0
では非推奨であり改行やタブを使わない)
最小構成は以下。viewBox
のサイズは任意だが、ここでは256
とした。
index.html
<svg viewBox="0 0 256 256"></svg>
SVGファイルとして外部保存するならxmlns
必須。基本的には付けておいたほうが良いかも。
some.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"> </svg>
href
参照を使う場合は次のようにできる。これは2.0
の表記であり、Chrome 92で表示できた。
index.html
<svg> <def> <circle cx="50" cy="50" r="50" id="foo"></circle> </def> <use href="#foo" /> <use x="120" y="80" href="#foo" /> </svg>
ただし以下のように外部参照する場合はHTTPSサーバ上で動作させないと表示されなかった。
circle.svg
<svg xmlns="http://www.w3.org/2000/svg"> <def> <circle cx="50" cy="50" r="50" id="foo"></circle> </def> </svg>
index.html
<use href="./circle.svg#foo" /> <use x="120" y="80" href="./circle.svg#foo" />
尚、1.1
以下の場合はxmlns:xlink
で参照するようだが、現在MDNでは非推奨となっている。つまり、2.0
表記が推奨されているようだ。従って以下のxmlns:xlink
表記は古く、辞めるべき。
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <def> <circle cx="50" cy="50" r="50" id="foo"></circle> </def> <use xlink:href="#foo" /> <use x="120" y="80" xlink:href="#foo" /> </svg>
このことから、現在はSVG2.0を使うべきだと思われる。