1. ホーム
  2. xml

[解決済み] XML SchemaとDTDの違いは何ですか?

2022-04-29 02:31:30

質問

ググってみたのですが、XMLスキーマとDTD(文書型定義)とは何か、なぜXMLスキーマの方がDTDより強力なのかがよくわかりません。

何かご指導いただければ幸いです。

解決方法は?

からの DTDとスキーマの違い のセクションは DTDをスキーマに変換する の記事を参照してください。

DTDと決定的に違うのは とXMLスキーマは、XMLスキーマが はXMLベースの構文を利用するのに対し DTDは、独自の構文を引き継いでいます。 SGMLのDTDから DTDは このため、よく批判されるのが 新しい構文を覚える必要がありますが、その構文は は、非常に簡潔なものです。その逆が XMLスキーマは 冗長でありながら、タグを活用し XMLの作者にとっては XMLスキーマの構文は のようなものです。

DTDの目的は、あるレベルを維持することでした。 のSGMLとの互換性 を希望するアプリケーションがあります。 SGMLのDTDをXMLのDTDに変換する。 しかし XMLの目標である「XMLマークアップのテラネス」。 は最小限の重要性しかありません。 シンタックスを維持することに は簡潔である。

[...]

では、DTDを変換する際に特に重要となるその他の違いにはどのようなものがあるのでしょうか。見てみましょう。

型付け

DTDとXML Schemaの最も大きな違いは、Schemaで要素や属性の宣言と一緒にデータ型を作成し、使用することができる点である。実際、XML Schema勧告の半分がデータタイピングとXML Schemaに割かれているほど、重要な違いなのです。データ型については、本書の第III部「XML Schema Datatypes」で詳しく説明しています。

[...]

オカレンス制約

DTDとSchemaが大きく異なるもう一つの領域は、出現制約です。第2章、"Schema Structure"の以前の例(またはDTDを使った独自の作業)を思い出すと、要素の出現回数を制限するために使用できる記号が3つあります。*、+、?

[...]

列挙

例えば、シャツの要素に size 属性を定義して、ユーザーが small, medium, large のどれかのサイズを選択できるようにしたいとします。DTDは次のようになります。

<!ELEMENT item (shirt)>
<!ELEMENT shirt (#PCDATA)>
<!ATTLIST shirt
    size_value (small | medium | large)>

[...]

しかし、もし size を要素にすることができますか?DTDではそれができない。DTDは、要素のテキストコンテンツに列挙を提供しません。しかし、Schemaによるデータ型のため、前の例で列挙を宣言したとき、実際には simpleType という size_values というように、要素で使用できるようになりました。

<xs:element name="size" type="size_value">

[...]