国土地理院 SVG 地図について

国土地理院 SVG 地図を JavaScript オブジェクトにする

国土地理院 SVG 地図を JavaScript オブジェクト化するプログラムを作りました。このプログラムの実行結果を,用意したサーバにキャッシュしてあります。SVG から JavaScript オブジェクトへのマッピングは暫定的なもので,当面の利用のことを念頭にコーディングしながら即興的に作ったものです。
JavaScript オブジェクトは,関数呼び出しの引数の中に埋め込み,JavaScript ファイルに格納しています。
考え方としては JSONP そのままです。(Remote JSON - JSONP) ただ,オブジェクトの記述は JSON の規約に満たない JavaScript の裸の記述にしていることと,関数名を決め打ちにして完全に静的な JavaScript ファイルにしているところ(ここが肝だったら,ごめんなさい JSONP という言葉を援用する必要はないですね。)が JSONP の記事とは違ってきています。この際においては,リソースを動的に生成する利点はないでしょう。逆に,基盤地図情報と言われるような情報を提供する際には,スケーラビリティを確保する観点からリソースは必ず静的なものにしなければならないと考えています。地理情報の分野では,何でも OGC WMS で処理するもんだという WS-* かぶれな幻想がいまだに破られていないように見えます。しかし,スケーラビリティを確保するためには静的に配置できるデータは静的に配置して,サーバの負荷を現実的なものにすると同時に,キャッシュ階層を活用できるようにしておくべきなのです。ふつうに Web をやっている人からすると,この言及は常識的に正しいことだと思っています。REST モヒカン族と呼ばれたら嬉しい。

その JavaScript オブジェクトを使って SVG 地図を復元する

その JavaScript オブジェクトを使って SVG 地図を復元するページを作りました。
JavaScript オブジェクト経由の SVG 地図
とりあえず普通に SVG 地図を見たときと同じような見え方になるようにしています。
このページ,クリックするかキーボードをたたいていただくと,ランダムに別の地図タイルを読み込むようにしています。このページ,国土地理院 SVG 地図が問題なく再生されているか確認するために作ったページです。
詳しい方はソースを追っていただければ,データが JavaScript オブジェクトから取り出されていることが分かると思います。
(上記のページが使っている JavaScript オブジェクトをご自由に使っていろいろ試していただくことはかまいませんが,オブジェクトの内容は予告なく変更してしまうことがあると思います。SVGJavaScript オブジェクトのマッピングも即興でやったんで文書はありませんし...)

動作確認状況

上記の復元ページ,Mac Safari3 beta, Mac Opera, Mac Firefox で動作を確認しています。Safari3 では時々日本語注記の文字化けが発生します。これは Safari3 が日本語周りで問題がある場合があるようだから,仕方ないのかなあ...。Opera では時々国土地理院 SVG 地図 JavaScript オブジェクトのパーズに失敗するようです。長過ぎるオブジェクトリテラルに対して評価に失敗するのかな?同じデータを,Safari3 や Firefox では正しく評価してくれるのですが...。

これのどこが嬉しいの?

国土地理院 SVG 地図の元のデータのように,SVG という XML 文書に埋め殺されたデータは,same origin のドキュメント以外からは満足に操作できない,死んだデータになっています。JavaScript オブジェクト化することにより,same origin でないサイトからも自由に国土地理院 SVG 地図の情報を取得することができるようになり,また表示方法のカスタマイズなど,ブラウザ上で自由な操作を行うことが可能になります。
「中継サーバなんか立てるの面倒くさい」アンド「JavaScript 大好き」という方,この JavaScript オブジェクトを使って力を発揮してくれると嬉しいです。発揮していただけるよう頑張ります。

技術小話: XHTMLSVG 要素を持つ構造にした理由

Mac Safari では,xlink:href 属性を持つ svg:script 要素を appendChild しても,そのスクリプトを評価してくれませんでした。src を持つ xhtml:script 要素ならもちろん Mac Safari でも OK なので,その目的で XHTMLSVG を包み込む構造にしています。
名前空間って,いちいち「先の副将軍」って言わせるみたいで,インスタンス文書レベルでそれをいちいち言わせないでほしい,と感じます。「水戸光圀公」でじゅうぶん分かるよ。君はじゅうぶん有名人だよ href さん。そういう名乗りは,スキーマ文書化を成功させたいのであれば,スキーマ文書化でやってほしいです。svg名前空間の中に xlink:href のコピーを作っておいて,スキーマ文書でそのことを説明しておけばいいじゃん。XML Schema 記述モヒカン族,みたいな人が仮にいらっしゃったら,その辺りの設計革命,頑張ってみてほしいと思います。インスタンス文書ではその辺りは隠蔽するのが正しいのではないかと思います。学習曲線が断然緩やかになりますよね。スキーマ文書なんて疑わしいという考えなら,SVG の仕様書で「href の仕様は XLink の href と同じ」と言っておけば十分だったんではないでしょうか。「水戸黄門」でも,「先の副将軍」という名前空間接頭辞は1ドキュメントに1回しか出てこないわけです。xlink;href という記述には,あのおじいさんについて言及するときに,いちいち毎回「先の副将軍」と言わせている感じがします。あるいは,誰かの名前を言うときに必ずお辞儀させるなり枕詞なりを言わせるような,そんな専制国家の慣習のようなことをさせているような感じ。そんなことをするから,貴族系 XML はもてはやされないのではないかと思います。
ただ,そもそも,もう少し視点を引いて考えると,Matzにっき(2003-05-07),なわけで,SVG だとか地理情報のような構造データに XML を使うという考え方自体が疑わしいわけで,本当はそのレベルでよくよく考えておく必要があります。この視点から考えてみると,SVGJavaScript オブジェクトにするということには,そういった意味での意義もあるのかも。処理系の言語である JavaScript の上に,構造データ記述用の DSL を作っているのが JSON,なのでしょうから。
でも,XML と比べれば DSL っぽい感じの構造データ記述言語である VRML は失敗したという指摘が考えられるかもしれません。でも,あれは符号化方式の問題が原因ではないでしょう。X3D が爆発的に流行するようであれば,私は間違っていたことになるのかもしれませんが,今のところ,状況は,私が間違っていないことを支持しているようです。
名前空間に関しては,「複数言語の語彙が『サラダボール的に混ざって』作った記述系は,人間が常用するものとしては存在しない。一つの言語に他の言語の語彙が移入するような場合,外来語として取り込まれるか,新しい混成語が生成されることになる。両方の言語が混成せず独立の言語のままで記述系を作り出すことはない。XML名前空間仕様が志向しているような仕方の語彙の混合は,そのような記述系の発生をも可能にするものであり,人間が日常やるような言語の使い方に対してはオーバースペックであることがある。」と感じます。多重継承のもつ複雑さと要らなさの組み合わせを,名前空間XML インスタンス文書での使用は持っている気がします。

2007-08-23追記: 複数言語がサラダボール的に混ざっていそうで混ざっていない事例

トルストイ戦争と平和」(amazon:戦争と平和)でのロシア貴族の皆さんの会話や思考は,ロシア語とフランス語との混合記述になっているようです。私はフランス語部分を斜体にした日本語訳しか読んでいないので,本当にこの混合を体感した訳ではないのですが,原文では,こんな感じになっているようです:

Так говорила в июле 1805 года известная Анна Павловна Шерер, фрейлина и приближенная императрицы Марии Феодоровны, встречая важного и чиновного князя Василия, первого приехавшего на ее вечер. Анна Павловна кашляла несколько дней, у нее был грипп, как она говорила (грипп был тогда новое слово, употреблявшееся только редкими). В записочках, разосланных утром с красным лакеем, было написано без различия во всех:
«Si vous n'avez rien de mieux � faire, Monsieur le comte (или mon prince), et si la perspective de passer la soir�e chez une pauvre malade ne vous effraye pas trop, je serai charm�e de vous voir chez moi entre 7 et 10 heures. Annette Scherer» 3.
― Dieu, quelle virulente sortie! 4 ― отвечал, нисколько не смутясь такою встречей, вошедший князь, в придворном, шитом мундире, в чулках, башмаках и звездах, с светлым выражением плоского лица.

http://ilibrary.ru/text/11/p.1/

ここに見られるような記述は,人間が複数言語を混合記述する限界だと思っているのですが,コンテキストごとに言語が切り替わるという程度の混合度合いしか持ちません。単語単位で切り替わったり,特定の形態素だけが別言語だったりということはありません。単語単位でフランス語が現れている場合もあったように記憶していますが,それは外来語として取り込まれた上で使われているように感じます。
XML 名前空間を最大限に自由に使ってしまった場合に現れるような細粒度語彙混合のインスタンス文書は,多分人間には煩雑すぎます。人間の理解能力あるいは理解意欲の範囲を超えるでしょう。XML 名前空間は,人間の理解意欲が許す範囲内でつつましやかに使うべきでしょう。