仕事で XML 形式のフォーマットを定義することになりまして、せっかくだからと DTD も書いてみることにしました。
今までは内部でしか使わなかったので特に必要性を感じなかったんですが、今度は外部とやりとりをすることになったので、チェックも兼ねて書いてみることにした次第です。
XML 形式のフォーマットを定義する方法には、おもに DTD と XML Schema の二種類があります。
DTD にはいろいろと問題点が指摘されていて、それを置き換えるために生まれたのが XML Schema ですが、それでもなお DTD を採用したのは、私が慣れているからw
HTML4.0 の頃はふつーに読んでたし。
ところがよくよく思い出してみると、 XML 時代の DTD って読んだことがないんですよ。
XHTML に移行したときも HTML4.01 との差分だけ覚えたんで、その DTD を読むことはしませんでした。
そこで復習もかねて HTML4.01 と XHTML1.0 の DTD を比較してみると……全然違うやん。
一番の違いは、開始/終了タグの省略可否。
# XML はどちらも省略不可だから、削られて当然だわな
そして、コメントの位置。
# 要素型宣言とかの中にコメント入れるよか、処理は楽だわな
てことで、XML の DTD について勉強し直すことになりました。
……うん、まぁ、だいたいわかった。
理解の甘い箇所がいくつもありますが、そこは書きながら調べるだけのこと。
何とかなるでしょ。
XML 文書と DTD を連携して検証するツールを見つけましたので、チェックも便利です。
http://park15.wakwak.com/~yoshitomo/junk/index.html
↑の「XML 検証インターフェース」
ダウンロードして、検証したい XML ファイルを D&D するだけ。
しかし DTD 最大の欠点は、文字種の制約をかけられないことでしょうね。
たとえば値として数値だけを許したい場合でも「文字列」としか表現できません。
真偽値は列挙型で代用できますのでまだマシですが、せめて整数型とか実数型ぐらいは定義しておいてほしかったです。
パターンマッチまであれば理想ですね。
これは XML Schema に移行することも考えた方がいいかなぁ。