XML Schemaは、こうしたDTDではチェックできない要素の値まで規定できるスキーマ言語として渇望されていたものだ。これを利用することにより、XMLを利用するプログラムの中でXMLが正当性をチェックするためのコードをさらに減らすことが可能になる。
細かい型指定
XML SchemaではDTDと同様に要素や属性の名前、出現する順番や回数といった基本的な要素を規定できるのに加えて、それぞれの値を細かく限定することができる。XML Schemaで組み込まれている型指定としては
- 文字列(string)
- 正否(boolean)
- 数値をあらわすもの(integer、negativeIntegerなど)
に加えて、
- 日付や時間をあらわすもの
- XMLやXML Namespaceで規定されている型(ID、IDREF、ENTITYなど)
と数多くの型が用意されている。さらに、こうした型をベースとして使い、さらに制限を加えることもできる。たとえば、ベースとなる型は「integer」で、「1から50の間の数字」といった指定が可能だ。このように指定した要素や属性が、これに該当しない50以上の数値などを値として持っていた場合、それはエラーとして処理される。
正規表現
そしてもう1つ、強力なチェック機能を提供しているのが正規表現を使って値の指定である。たとえば「\d{3}-\d{4}」という正規表現を用いることで、「3桁の数字の後に-(ハイフン)があり、その後に4桁の数字が続く」値を指定できる。これによって、日本の郵便番号を表わす値であるべき要素や属性の部分で、それ以外の値をエラーにできるわけだ。
構文はXML
こうした値のチェックに加え、もう1つ大きいのがXML Schemaの構文がXMLであるという点だ。DTDの構文はXMLとはまったく異なっており、パーサがDTDによるXMLの検証をサポートするためには、XMLの解析に加えて、DTD独自の構文の解析のためのルーチンも必要だった。しかし、XML Schemaであれば検証を行なうXML文書も、そしてスキーマが書かれた文書も同じXMLとして解析できる。また、開発者だけでなくユーザーにもメリットがある。XMLとDTDの2つの構文を覚える必要はなく、XMLの書き方だけを覚え、後はXML Schemaが規定する要素や属性の名前、値の指定の仕方といった書き方を覚えればいい。XML Schemaは標準となりうるか
XML Schemaが普及すれば、これまでプログラム側で行なっていたXML文書をチェックするためのロジックを、XML Schema側に移すことができる。これによって、プログラム側のポータビリティの向上し、開発の効率化を進められる。
ただ、XML Schemaの普及にまるで壁がないわけではない。まず1つは前回も述べたように、規格があまりにも膨大すぎるという点。こうした巨大な規格は、修得するユーザーにも、そしてそれをサポートするプログラム側にも大きな負担を強いる。特にパーサ側は、XML Schemaが勧告となっても即座に対応することは難しいだろう。
そしてもう1つは、登場があまりに遅すぎたことだ。XMLが多くの場所で活用されるにつれて、DTDよりも強力なスキーマ言語が渇望されていたが、XML Schemaは規格が大きくなるにつれて進行の遅れが目立ちはじめ、現在でも勧告には至っていない。その間にいくつかのスキーマ言語が登場しており、これに加えてXML Schemaが勧告となることで混乱する可能性がある。こうした壁を乗り越えてXML Schemaが標準として君臨するのか、あるいは別のスキーマ言語が主流となるのか、今後の動向を注意深く見守りたい。