数値文字参照

'のようなものは「数値文字参照」であって、「数値実体参照」という言葉はない、というのを関係ないエントリで読んだ。
なるほど、XMLの文書を見直してみると、確かにそう書いてある。
で、なぜこういう風に間違えるのかを考えてみると・・・「SGMLのころって直接文字を指定する方法なんて無かったので、この手のものは全て実体だった*1」という気がしてきた。つまり「実体+参照」は係り結びになっていて、「文字+参照」という発想が言語回路に載っていないのだと思う。
SGMLを直接いじったことがない人も、HTMLを通して関わっていたのだと思う。
逆に言うと、XMLでは「文字は基本的に全て文字コードの中に収まっている」ことが前提になっている。XMLスキーマに至っては「文字実体参照」を追加定義できないので文字コードにない文字は使用できない。まぁ、UNICODEで大抵の文字はそろうので機械的には問題ないのだが、「文字コードを憶えている」訳はないので人間には優しくない(笑)。XMLは機械に優しく人間に厳しい仕様になっているからなぁ。


ちなみに、私の考えではExtensible Markup Language - WikipediaDTDに関する記述は微妙に間違っている。
DTDを使う人がいるのは、XML Schema*2では文字実体参照が追加できないからだ。データというより「文書」といった方がよいものでは、未だにUNICODEをはみ出すような文字が必要になることが多い(何しろ、数学とかでは演算記号が追加で定義されなりする)ので、そのための仕組みを持っていないXML Schemaは採用できなかったのだと思う。そもそも、XHTMLDTDで定義されているし。*3
RELAX NGはその点どうなのだろうか・・・未だに調べられていない。しかし、策定したのがOASISであって、OASISというとDocBook DTDの策定団体なので、文字実体参照を追加定義する方法を用意しているのではないかと思われる。でも、手元にRELAX NGを扱える処理系がないのでどうしようもない(笑)

*1:画像になったりするものとも特に区別していなかった。

*2:この名前はいつ見ても気持ち悪い。なぜならDTDXMLスキーマだからだ。

*3:これがXML Schemaで定義されていたとすると、ほとんど全ての記号を文字コードで直接入力することになっていたはず。それはあまりにも不可能な仕様なので、DTDで定義されたのだろう。でも、XHTMLではDTDで使用できない名前空間も使用するので、非常に分かりにくいことになっている気がする。