SVGのサポートを考えてみると、

昔、辞典を作成する際に、SVGの要素がブラウザにおいて、どれくらいサポートされているのか調べたことがありました。今でも時々、調べることがあるのですが、サポートは三段階に分けることができます。

第一段階:SVGの核となるもの

  • svg要素
  • g要素(defs要素)
  • path要素
  • title要素
  • linearGradient要素
  • radialGradient要素
  • stop要素

多くのブラウザやビューアで対応している要素が以上のものです。
この7つの要素(defs要素を入れれば、8つ)だけで、いろんなSVG画像を表現できます。おそらく、画像を編集したいというだけの人は、他の要素を使う機会なんてめったにないでしょう。

第二段階:SVGの基本的な画像

第一段階に加えて、

  • circle要素
  • ellipse要素
  • rect要素
  • polyline要素
  • polygon要素
  • image要素
  • use要素
  • symbol要素
  • a要素など

これらは基本的な形やハイパーリンクを提供できるので、重宝します(path要素でも代用できます)。ここまでは、多くのブラウザで対応できますし、混乱もありません。問題は第3段階からです。

第三段階:SVGの拡張

明らかに、静止画像の域を超えてしまうのが、この段階です。つまり、SVGを拡張した形となっています。ブラウザも対応がまちまちです。

SVG Animation(アニメーション)

文字通り、画像を動かすアニメです。script要素をはじめ、animate要素などがあります。

SVG Font(フォント)

フォントをSVGで記述することができるようになります。text要素やfont要素で実現できます。ここまでくると、SVGは「画像」ではなくて、「文書」と呼んでいいくらいです。

SVG Filter(フィルター、あるいはエフェクト)

光源とか、ぼかしとか。画像にさまざまな効果を与えることができます。

モバイル対応を謳っているSVG Tinyにおいて、フィルターを除く第3段階までサポートするようになっています。ですが、第3段階からは明らかに、ハードルが高くなっていっています。
XSLがXSLTXMLを別のXMLアプリケーションに変換する言語)とXSL-FO(スタイルシートXML化したもの)に分かれたように、

  1. 静止画像や地図用のSVG(第2段階まで)
  2. SVGアニメーション
  3. SVGフォント
  4. SVGエフェクト

と仕様を目的別に分割していけばいいのに、と思った次第です。