投稿日:2016.02.25
更新日:2024.08.27
SGMLとXMLとHTMLは、開発の経緯や利用目的は違いますが、タグで構成されるマークアップ言語である事を前回記しました。
このタグはスキーマ言語と呼ばれるデータによって仕様が決定しています。
ここでは代表的なスキーマ言語であるDTDと、XMLの為のスキーマ言語であるXML Schemaについて、その違いをみてみたいと思います。
今回も大雑把な解説になります。概念をつかむきっかけにでもなれば幸いです。
まずスキーマ言語について、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*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の方がより多くの機能を使えるので便利なはずです。
以上ご参考まで。