SGMLとXMLとHTMLは、開発の経緯や利用目的は違いますが、タグで構成されるマークアップ言語である事を前回記しました。このタグスキーマ言語と呼ばれるデータによって仕様が決定しています。

ここでは代表的なスキーマ言語であるDTDと、XMLの為のスキーマ言語であるXML Schemaについて、その違いをみてみたいと思います。

今回も大雑把な解説になります。概念をつかむきっかけにでもなれば幸いです。

スキーマ言語

まずスキーマ言語について、Wikipediaには下記のようにありました。

スキーマ言語(スキーマげんご)とはXMLやSGML等で文書を作成する際、その文書構造を定義する言語を言う。
出典:Wikipedia

ここでの「文書構造を定義する」とは、つまりタグのルールを決めるという事です。

例えば、医薬品添付文書のSGMLだと<warnings>タグと</warnings>タグの間に、【警告】の内容を記載するというルールがあります。

このようなルールを決めているのがスキーマ言語で、医薬品添付文書のSGMLの場合、「Package_insert.dtd」というDTDがそれにあたります。

開発経緯

DTDはもともとSGMLのスキーマ言語として開発されました。

その後、SGMLをベースにXMLとHTMLが開発されます。SGMLを踏襲してスキーマ言語はDTDでした。

やがてXMLが広く普及し様々な場面で利用されるにあたり、DTDよりさらに高機能なスキーマ言語が求められるようになります。そこでXML用のスキーマ言語として新たに開発されたのがXML Schemaです。

データ形式

拡張子 文法
DTD .dtd 独自の文法
XML Schema .xsd XMLの文法

DTDは、「.dtd」という拡張子のデータで作成されます。
XML Schema「.xsd」という拡張子のデータで作成されます。

文法について、DTDは、独自の文法で記述されますが、XML Schema自身自体がXMLの文法で記述されます。
この点はXML Schemaの扱いやすさの一因ともなっています。

SGMLとXMLとHTMLの対応スキーマ言語

以上を踏まえて、SGMLとXMLとHTMLの場合、対応するスキーマ言語は下記のようになります。

SGML XML*1 HTML*2
*1:実際にはXMLに適応するスキーマ言語はDTDとXML Schemaの他にもあります。
*2:DTDによる定義はHTML4.01まで、HTML5以降はDTDを扱わないようですが解説は割愛します。
DTD
XML Schema

XML SchemaはXML用のスキーマ言語なので、適応するのは当然XMLのみです。
XML Schemaの利用の不可は、SGMLとXMLの大きな違いの1つと言えます。

機能の違い

肝心のDTDとXML Schemaの機能面での相違点について、ほんの一部ですが下記に記します。
どうしても技術的な内容になるので、参考までに確認いただければと思います。

DTD XML Schema
タグの使用回数の指定 0回、1回、∞回 任意の回数を指定可
データ入力の指定 文字列のみ 数値や文字列、日付や時間…
名前空間の利用 不可
タグの登場回数の指定

DTDは、タグの使用回数を指定する際、0回と1回と∞回(何回使用しても可)でしか指定出来ませんが、XML Schemaは、任意の回数に指定できます。

データ入力の指定

タグ内に入力する文字を、DTDは単なる「文字列」としてしか指定出来ませんが、XML Schemaは、「文字列」はもちろん、「数値」の範囲を指定したり、「日付」「時間」を指定したり、かなり詳細な設定が可能です。

名前空間の利用

XML Schemaは、DTDには使えない、「名前空間」という機能を利用出来ます。「名前空間」を一言で解説するのは難しいのですが、1ファイルのXMLに対して、複数のXML Schemaを参照して、より拡張性の高いデータの作成、参照が可能になります。

XML SchemaはDTDと比べ、他にも様々な機能が追加されています。

まとめ

DTDとXML Schemaはタグの仕様を決定するスキーマ言語
XML SchemaはXMLの為に開発されたスキーマ言語、DTDよりも高機能
XMLを扱う場合は、DTDでもXML Schemaでもタグの仕様を決められますが、XML Schemaの方がより多くの機能を使えるので便利なはずです。
以上ご参考まで。