2009-09-29 10 views
30

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

編集:

なぜW3C XML Schemaの言語:私は質問をするために私を促したものです私は読んでいた記事でこれを見つけましたか?

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

私は、XMLスキーマが(実際にあれば)より優れている理由を説明する例が欲しいと思います。

答えて

22

  • http://weblogs.asp.net/rchartier/archive/2006/03/21/440782.aspxからDTDのは、名前空間を認識されていません。 、速記略語、外部 コンテンツ、およびいくつかの条件付き解析を定義すること、または、より少ないC指向 -

  • DTDの#include#defineを有し、#ifdef

  • DTDはXML文書全体を記述します(「穴」を残しても)。スキーマは部分を定義することができます。

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

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

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

  • "有効なXML" の公式定義は、DTDが必要です。これは実用的ではないかもしれないので、不可能ではないとしても、多くの場合、 が有効であることが必要です。私の部分については

、それはあなたがXSDを持っている場合、いくつかのXMLのためのバリデータを書き込むことが非常に簡単です。私はDTDでこれを見たことはありませんが、私はそれが存在すると確信しています。

+2

XSDをXMLでインライン化することができます。適切な名前空間を使用し、スキーマを文書の中にネストするだけです。 WSDLファイルはこれを一般的に行います。 DTDはDoS攻撃の対象です。 http://en.wikipedia.org/wiki/Billion_laughsを参照してください。 – lavinio

+0

@lavinio、私はあなたがXSDをインライン展開することについて正しいと思います。私はこれを行う前にファイルを見ました。ビリオン笑いの攻撃に関する興味深い記事。 –

+4

XSDで実行できないDTD機能はありますか? –

4

Relax NG - XML文書を検証するためのもう1つの強力な言語であり、Schematronやその他の技術もDSDLです。リラックスNGは非常にシンプルで、BNFスキームと同様にスキームを書くことができるリラックスNGコンパクトという人間が読める形式です。

+0

はい! EditiXは、Relax NGで記述し、DTDまたはXSDに変換する方法を提供します。私はリラックスNGをプロにしています。 XSDは、私の中学校のエンジニアの中にはちょっと複雑です。 –

10

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

XML Schemaは完璧ではありません(XML Schemaの仕様や本を読んでみてください...)。それ以来多くの選択肢が開発されています(Schematron、Examplotron、RelaxNG)。これらはXMLスキーマに比べて技術的利点があるかもしれませんが、今日、XMLスキーマはますます普及しており、代替案が理にかなっているケースはほとんどありません。

5

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

関連する問題