XML仕様はSGML仕様を劇的に単純化しましたが、それでもまだ複雑です。この複雑さにつきあう必要はありません。むしろ、積極的に単純なところだけを使ったほうがいいと思います。
ハナシが複雑になるだけでロクなもんじゃないと僕が思ってる点(要望)を挙げます。
- DOCTYPE宣言とDTDは削除すべきである。
- ユーザー定義の実体は削除すべきである。代わりに、定義済み文字実体を必要なだけ準備する(例: , α)
- コメント、CDATAセクション、実体参照は、テキストとしてのXMLソースにあってもいいが、パーズした後に残す必要はない。
- ただし、コメント、CDATAセクション、実体参照を忠実に残すパーザーを禁止はしない。すべてのパーザーにそのような保存を要求してはいけない、ということ。
- 空白処理とバリデーションは切り離すべきである。
現状で一番の頭痛の種は、 , αのような文字実体を使うためには、(正式には)DOCTYPE/DTDが必須になってしまうことです。しょうがないから、次のような必要悪DOCTYPE宣言でパーザーをなだめることになります。
<!DOCTYPE hoge [
<!ENTITY nbsp " " >
<!ENTITY alpha "α" >
]>
もし、DOCTYPE/DTD関係(実体もこれに含まれる)がソックリなくなってくれたら、みんなハッピーになれると思いますよ。「こんなもん使わない」と決めるだけでも、随分と心が軽くなるでしょう。
(XML適用/運用の原則、おしまい)