技術小話:xlink:href はやっぱり避けられる

はてなで良かった,そう思ったトラックバック,いただきました

GMT+2なので22日付になってしまい申し訳ないのですが,以下のような言及をいただきました。はてなで良かった。嬉しいです。

これだと、circle(円)の画像そのものに「トラの画像」というタイトルがつけられているのだと勘違いされます。(中略)以上のような問題を避けるために、SVGではXLinkを使います。(中略)こうして、名前空間を使って、リンク先の情報であることを明言しているのです。
つまり、SVG名前空間は必要なのです。

http://d.hatena.ne.jp/dhrname/20070822/1187793669

この記事を拝見して,いろいろ考えることができました。ここははてなですし,モヒカン族気取りで,殺伐と報告してみます。

私のスタンス,あるいは,要約。

名前空間の表示の有無は,属性が何を対象とした記述であるかと無関係だと思います。
よって,依然として,「xlink: をインスタンス文書に混入させることを回避することはできた」と考えています。
ただし,私のこの考えは仮定法であり後知恵であり,SVG 勧告の非難・改変・攻撃を意図したものではなかったことは説明した方が良いと思いました。そうではなくて,将来 XML 上の言語を設計する場合には,このような SVG の轍を踏むべきではないと主張したいです。言い換えれば,インスタンス文書に xlink:href と書かせるような言語設計は,一般的には悪い言語設計と見なすべき,という教訓が引き出せればと思っています。

発生が指摘されている「勘違い」の内容について分析

リンクのタイトルであることをアフォードする属性 title の付け方は,

<a href="tiger.jpg" title="トラの画像">
 <circle cx="0" cy="0" r="10"/>
</a>

です。 円にタイトルが付けられていることをアフォードする属性 title の付け方は,

<a href="tiger.jpg">
 <circle cx="0" cy="0" r="10" title="トラの画像"/>
</a>

となります。ここで,アフォードする,という難解な言い方をしているのは,属性 title が何のタイトルを指しているのかは,属性 title に関する勧告を見なければ分からないからです。(しかし,属性 title の規格を見てしまうと,勘違いの余地がなくなるので,規格の確認はここでは省略します。)XML 勧告とかそのあたりで,属性は要素を修飾するという役回りだという概念があると思います。そこから「推測できる」というくらいの意味で,アフォードすると言っています。
ここで,一歩踏み込んでみて,属性 title の意味について,XLink 勧告を引用してみると,

The title attribute is used to describe the meaning of a link or resource in a human-readable fashion,

http://www.w3.org/TR/xlink/#link-semantics

となります。a link or resource と The title attribute の位置関係は,明示されていないと言えばいないかもしれません。XLink 勧告に示された意味論を導入しても,状況は変わらない,ということになります。つまり,属性 href, title に xlink: を接頭しても,title が何のタイトルであるかという定義には影響がありません。
勘違いの発生と XLink の導入有無との関係は,確認することができませんでした。

名前空間の導入によっては問題は解決していない

指摘されている問題は,名前空間の導入によっては解決していないと考えます。そのことを主張するために,上記前者の SVG 記述を日本語に翻訳したものを示したいと思います。まずは,名前空間を入れていない場合

中心座標 (0, 0) 半径 10 の円を内容として持つ,タイトルが「トラの画像」あって tiger.png を指したハイパーリンク

という感じだとします。この SVG 記述に名前空間を仮に導入した

<a xlink:href="tiger.jpg" xlink:title="トラの画像">
 <circle cx="0" cy="0" r="10"/>
</a>

を日本語に逐語訳すると,

中心座標 (0, 0) 半径 10 の円を内容として持つ,XMLリンク言語にいう意味でのタイトルが「トラの画像」あって tiger.pngXMLリンク言語に言う意味で指したハイパーリンク

となるのではないでしょうか。名前空間の導入は,文の構造を複雑にはするものの,タイトルが何のタイトルなのかを明示するのには役立ちません。
SVGインスタンス文書に XLink名前空間接頭辞を明示する必要があるとすれば,それは別の理由によるのではないでしょうか。

AtomSVG と似たようなハイパーリンクを持ちながらも,インスタンス文書から名前空間接頭辞を排除している

逆に,属性 href に名前空間接頭辞を付けずに済ませた最近の言語を紹介し,私の主張を補強したいと思います。
その言語は,Atom Syndication Format です。Atom Syndication Format では,属性 href は単に,

4.2.7.1. The "href" Attribute

The "href" attribute contains the link's IRI. atom:link elements MUST
have an href attribute, whose value MUST be a IRI reference
[RFC3987].

http://www.ietf.org/rfc/rfc4287.txt

と定義されています。必要十分。オッカムの剃刀。←言葉の用法,微妙にずれてますすみません。

SVGxlink まわりの設計は過去の未来派 (retro-futuristic)

SVGxlink まわりの設計は,SVG が設計された時代においては,XML の輝かしい未来像を反映した,輝かしいものであったかもしれません。しかし,人間は実際にはそのような複雑で理詰めなインスタンス記述を好まず,その後の XML 上の言語で,成功をおさめた言語には,この設計はもう使われていません。また,SVGxlink まわりの設計で何か利用者が得をすることはなく,逆に XML 処理系のあまり使われない機能を踏むことで,SVG の活用を妨げる問題点があります。
SVG が既に勧告されてしまった今,SVG の為に私たちができることは,悲しむことと,言語の外部から回避手段を用意してあげることしかありません。SVG はこの問題点を抱えたまま走り続けることになるでしょう。
SVGxlink まわりの設計」を擬人化すると,アレクサンドル・ロトチェンコあたりになるのかな,と思いました。革命的な時期に楽観的な未来観を持って大胆に新しい考えを実現し,実際にその出来は美しく今でもその若い情熱には感動を覚えることはあるのですが,悲しいことに広く支持賞賛されることはなく,後継者も彼の延長線上には現れませんでした。でも,厳密には,彼の未来観そのものが問題をはらんでいたのではなく,彼の未来観に沿う形では世の中が動いてくれなかったことが問題ではあったのです。