30

DTDおよびXMLスキーマの長所/短所は何ですか(後者の正式な名前が何であるかさえわかりません!)?どちらが良いですか?同じことをするために2つの方法が必要なのはなぜですか?

編集:私が読んでいた記事でこれを見つけました。それが私に質問をするように促したものです:

なぜW3CXMLスキーマ言語なのか?

W3CXMLスキーマ言語だけがスキーマ言語ではありません。実際、XML仕様では、スキーマを表現する方法として文書型定義(DTD)が記述されています。さらに、プレリリースバージョンのJAXBリファレンス実装はDTDでのみ機能しました。つまり、XMLスキーマ言語で記述されたスキーマでは機能しませんでした。ただし、XMLスキーマ言語はDTDよりもはるかに豊富です。たとえば、XMLスキーマ言語で記述されたスキーマは、DTDで表現できない(または簡単に表現できない)構造関係とデータ型を記述できます。DTDをW3CXMLスキーマ言語に変換するために使用できるツールがあるため、以前のバージョンのJAXBリファレンス実装で使用したDTDベースのスキーマがある場合は、http://java.sun.com/developer/technicalArticles/WebServices/jaxb/#binsch

XMLスキーマが優れている理由を説明する例が欲しいと思います(実際にそうであれば)。

4

4 に答える 4

21

http://weblogs.asp.net/rchartier/archive/2006/03/21/440782.aspxから

  • DTD は名前空間に対応していません。

  • DTD には#define#include、 、および #ifdef-- または、あまり C 指向ではなく、省略形、外部コンテンツ、およびいくつかの条件付き解析を定義する機能があります。

  • DTD は XML ドキュメント全体を記述します (たとえ「穴」が残っていても)。スキーマは部分を定義できます。

  • XSD には型システムがあります。

  • XSD には、要素または属性のコンテンツが「どのように見えるか」を記述するためのより豊富な言語があります。これは型システムに関連しています。

  • DTD を XML ドキュメントにインラインで配置できますが、XSD ではこれを行うことはできません。これは、DTD がより安全であることを意味します (複数ではなく、1 つのバイトストリーム (xml/dtd) のみを保護する必要があり
    ます)。

  • 「有効な XML」の正式な定義には、DTD が必要です。これは非現実的かもしれないので、不可能ではないにしても、多くの場合、まったく同じではない schema-valid で解決する必要があります。

私の場合、XSD がある場合、XML のバリデーターを作成するのは非常に簡単です。存在することは確かですが、DTD でこれを見たことはありません。

于 2009-09-29T04:42:48.343 に答える
10

数年前には、XML スキーマではなく DTD を使用する理由がありました (XML ツールでより一般的であるか、より適切にサポートされていました)。しかし今日では、DTD の代わりに XML スキーマを使用しない理由はないと思います。XML スキーマははるかに強力です。

ただし、XML スキーマは完璧にはほど遠いものであり (XML スキーマに関する仕様または本を読んでみてください...)、それ以来、多くの代替手段が開発されてきました (Schematron、Examplotron、RelaxNG)。これらは XML スキーマよりも技術的な利点があるかもしれませんが、今日では XML スキーマが非常に普及しているため、別の方法が理にかなっているケースはほとんどありません。

于 2009-10-27T16:05:54.843 に答える
5

XML スキーマは、より複雑な検証を実行できます。たとえば、DTD が XML 要素のデータ型が整数か文字列かをチェックできるかどうかなどです。一方、XML スキーマは、xml 要素が大文字または正の整数で始まる文字列である場合など、より複雑な検証を実行できます。最後に、XML スキーマは XML 構文を使用し、Web サービスの開発には当然の選択です。

于 2009-12-22T11:51:54.157 に答える
4

XML ドキュメントを検証するためのもう 1 つの強力な言語である Relax NG と、Schematron およびDSDLのその他のテクノロジもあります。Relax NG は非常にシンプルで、人間が読める形式を持っています — Relax NG Compact は、BNF スキームに似たスキームの記述を可能にします。

于 2009-09-29T05:28:05.310 に答える