SVGのxlink:href属性について

国土地理院 SVG 地図を JavaScript オブジェクトにする」
http://d.hatena.ne.jp/hfu/20070822

JavaScriptオブジェクトにすると、使いやすくて、便利になるかもしれません。

それはそうと、その中の技術小話で、トラックバック先の著者は

SVG の仕様書で「href の仕様は XLink の href と同じ」と言っておけば十分だったんではないでしょうか

名前空間の必要性に疑問を投げかけておられます。確かに、名前空間は必要ないように思われます。

しかし、SVGのhref属性に限ってだけは必要です。
というのは、HTMLとSVGを比較すればわかります。

HTMLだと
<a href="h.jpg">トラの画像</a>を見つけました。

SVG(XLinkを利用しないと仮定)だと、
<a href="h.jpg">
 <text x="20" y="30">トラの画像</text>
 <circle ../>
</a>

HTMLは文字が中心ですから、さりげなくリンク先の情報を書くことができます。
ですが、SVGだと絵やデザインが中心となるわけですから、自然に書くことが難しくなります。

そこで、HTMLでも使われているようなtitle属性を使います。こうすれば、リンク先の情報を理解しやすくなります。

<a href="h.jpg" title="トラの画像">
 <circle ../>
</a>

しかし、これだと、circle(円)の画像そのものに「トラの画像」というタイトルがつけられているのだと勘違いされます。このことは、HTMLで表現するとわかりやすくなるでしょう。

<a href="h.jpg" title="トラの画像">
 <img src="cirle.png" ../>
</a>

というように紛らわしいのです。以上のような問題を避けるために、SVGではXLinkを使います。

<a xlink:href="h.jpg" xlink:title="トラの画像">
 <circle ../>
</a>

こうして、名前空間を使って、リンク先の情報であることを明言しているのです。
つまり、SVG名前空間は必要なのです。

注意点

「a要素のtitle属性はXLinkのtitleと同じ」と仕様に書けばいいじゃないかという人もいるかもしれません。
確かにそのとおりです。
ただし、SVGでは、use要素等、数多くの要素にxlink:href属性が使われている以上、大変な作業になると思います。