Diary?::2006-03-30

00:22

今日は親父の四十九日なので、また面倒臭いことをやらにゃあならん。全く、俺も死んだ後にこういう面倒ごとを残すのかと思うと死ぬ気が無くなるね。

17:59

ギターの基礎テクニックの一つのチョーキング、これ英語では bending って書くんだよな。ブリッジミュートは palm mute だし、他にもいろいろと異なっている。海外のサイトを見てて混乱したんだけどこれ。

ここまで違うと、一体どこからチョーキングとかの言葉が来たのか気になるな。

22:59

XML を SAX で処理する場合、名前空間の変化が少しいやらしいことになる。気がする。例えば次の XML 文書を考えてみる。

<root xmlns="http://example.com"
      xmlns:x="http://example.org">
	<node>
		...
	</node>
	<x:node>
		...
	</x:node>
	<node xmlns="http://example.org">
		...
	</node>
	<node>
		...
	</node>
</root>
  1. root 以下はデフォルトで example.com の名前空間
  2. 最初の node は example.com の名前空間
  3. 次の node は example.org の名前空間
  4. 三番めの node 以下はデフォルトで example.org の名前空間
  5. 最後の node はデフォルトが example.com に戻る

これを Python の SAX モジュールで処理すると、名前空間のマッピング処理が呼ばれるタイミングが

  1. root の開始処理直前で com, org とマッピング開始
  2. 三番めの node 開始処理直前で org をデフォルトにマッピング
  3. 三番めの node 終了処理直後に org のマッピング終了
  4. root の終了処理直後に org, com とマッピング終了

それで何が問題かっつーと、今俺が書いている処理は特定の名前空間の部分は処理をして、他の部分はそのまま残すというものなのだけど。 XML 名前空間の宣言も当然一緒に残しておく必要があるわけで、それで処理を書き足さないといけなくなってしまった。

それでまあそうするかというと、スタック構造でそれぞれの名前空間への URI のマッピングを保存しておけばいいのだけど。 startPrefixMapping() メソッドが呼ばれるたびにスタックに積んで、 endPrefixMapping() メソッドが呼ばれるたびにスタックから降ろすと。

こうしてみると、名前空間の宣言が属性を書くようなスタイルで書けて、さらにルートの要素以外でも書けるのがなんだかなあと思わなくもない。それこそ XML ファイルの冒頭でのみ宣言できるようにしておけばいいんじゃないかと思ったが、それだとどこで書けばいいんだよ。 Comment vs PI:オマケ:ターゲット名はなぜ修飾できないか?おコメント欄で指摘されている「XML 文書の書き出しのときに
面倒だと James Clark が指摘」のまさにそれにドンピシャで引っかかりそうだ。

結局今の XML の姿が一番妥当なのかな。

Written by Kuwata Chikara
Creative Commons