xsi:nil その他

訳あって pythonXML Schema を触る日々。generateDS.py は ref 属性のネームスペースを無視する (追記: つまり、QNAME ではなく ':' 以前を取り除いて単なる NCNAME として扱う) のでダメダメであった。直そうにもソースも一枚岩で手のつけようがない。かくして自分でゴリゴリ書きはじめる。悪い癖でけっこう。

そういえば、Tim Bray御大が「W3C XML Schemas (XSD) suck」と確信から口をすべらせ、「あー、言っちゃったよ」と誰もが思った去年の秋頃。それでも RELAX NG は根本的にネーミングが悪いがために普及しなかったのであろうという有力な推察については最後まで触れられておらず歯がゆい思いをしたのは記憶に新しい。

XML Schema で個人的に一番よくないと思う点は、同じ名前のタグに意味を多重化しているところ、言い替えると、文脈によってタグの意味が変わるところだ。これでは人間にとっても機械にとってもフレンドリーじゃない*1

例えば はトップレベルで使われると宣言的になるけど、, の中では外側の要素の仕様を定義するのに使い、かつ宣言的に使うこともできるよう設計されている。 

しかし、xsi:nil (where xsi denotes http://www.w3.org/2001/XMLSchema-instance) はヒドイ。どんだけ nil を表現したかったのか。

*1:ビットマスクにはじまり、URLエンコードのエスケープといい、なぜか皆ある要素に意味を多重化したがるのを見てきたけど、世の中のバグの少なくとも半数以上はそれが原因といってもいい過ぎじゃない気がする。