XMLはメタ言語である。
メタ言語というのは、他の言語を作るための土台になる言語のことである。
例えば、XHTMLは、XMLを土台にして作ったWebページ記述用言語である。
.NETのコンフィグファイルやJavaのプロパティファイルは、XMLを土台にして作ったアプリケーション設定記述用言語で書いたものである。
わんくま勉強会の資料をXMLで書こうという話があった。この言語にSeminarMLというような名前をつけてもいいが、名前をつけなかったとしても、この言語は、XMLを土台にして作った勉強会情報記述用言語である。
よく、「データをXMLで記述する」と言うが、いきなり記述することはできない。
記述する前に、どういう要素を作るか、要素の階層構造はどうするか、属性はどうするかといったことを決めなければならない。
それを決めた時点で、(名前をつけようがつけまいが)「XMLを土台にしたそれ用言語」を作ったことになるのだ。
そして、実際にデータを記述するのに使うのは、その専用言語であって、XMLではない。
オブジェクト指向に倣って表現してもいい。
言語仕様をクラス、文書をインスタンスと考える。
例えば、XHTMLという規格はXHTMLクラスであり、それに従って書かれた個々のXHTML文書をインスタンスと考えるわけだ。
そうしたとき、XMLというクラスはあるが、そのインスタンスは存在しない。
XMLクラスは、それを土台として作った様々な言語――XHTMLやXSLTやXAMLやetc――クラスの親クラス、スーパークラスであり、抽象クラスなのだ。
抽象クラスだから直接のインスタンスが存在しない。抽象クラスだから、そこから派生させて様々な言語を作る土台になることしかできない。
XMLとはそういう言語なのである。