この質問を Google で検索しましたが、XML スキーマと DTD (文書型定義) が何であるか、また XML スキーマが DTD に比べてなぜ強力であるかがよくわかりません。
どのようなご指導もいただければ幸いです。
ベストアンサー1
からDTDとスキーマの違いのセクションDTD をスキーマに変換する記事:
DTD と XML スキーマの決定的な違いは、XML スキーマが XML ベースの構文を使用するのに対し、DTD は SGML DTD から引き継いだ独自の構文を使用していることです。DTD は新しい構文を習得する必要があることから批判されることが多いですが、構文自体は非常に簡潔です。XML スキーマの場合はその逆で、冗長ではありますが、タグと XML も使用するため、XML の作成者にとって XML スキーマの構文はそれほど難しくないはずです。
DTD の目的は、SGML DTD を XML DTD に変換するアプリケーションのために、SGML との互換性を維持することでした。ただし、XML の目的の 1 つである「XML マークアップの簡潔さは最小限の重要性しかない」という点に鑑みれば、構文を簡潔に保つことに特に問題はありません。
[...]
では、DTD を変換するときに特に重要になる可能性のある他の違いは何でしょうか? 見てみましょう。
タイピング
DTD と XML スキーマの最も大きな違いは、要素および属性の宣言と組み合わせてスキーマでデータ型を作成し、使用できることです。実際、これは非常に重要な違いであるため、XML スキーマ勧告の半分はデータ型と XML スキーマに充てられています。データ型については、本書のパート III「XML スキーマ データ型」で詳しく説明します。
[...]
発生制約
DTD とスキーマが大きく異なるもう 1 つの領域は、出現回数の制約です。第 2 章「スキーマ構造」の以前の例 (または DTD を使用した独自の作業) を思い出すと、要素の出現回数を制限するために使用できる 3 つの記号 *、+、および ? があります。
[...]
列挙
たとえば、要素があり、シャツのサイズ属性を定義して、ユーザーが小、中、大のサイズを選択できるようにしたいとします。この場合、DTD は次のようになります。
<!ELEMENT item (shirt)> <!ELEMENT shirt (#PCDATA)> <!ATTLIST shirt size_value (small | medium | large)>
[...]
しかし、
size
要素になりたい場合はどうすればよいでしょうか。DTD ではそれができません。DTD では、要素のテキスト コンテンツに列挙型を指定できません。ただし、スキーマのデータ型により、前の例で列挙型を宣言したときに、実際に という が作成され、simpleType
これsize_values
を要素で使用できるようになりました。<xs:element name="size" type="size_value">
[...]