- 締切済み
DTDを記述する意味
DTDを使ってXMLの形式を厳密に定義する方法があると聞いて試してみたのですが、記述した形式を破っても何も起きません。たとえば以下のように <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE root [ <!ELEMENT root (a, b, c+)> ]> <root> <b>BBB</b> <a>AAA</a> </root> と書いた場合、「A,B,Cという要素をこの順番で配置せよ」という命令と「Cという要素を1つ以上配置せよ」という2つの命令を無視していますが、何かしらのエラーを返すといった動作は全くありません。HTML(XHTML)みたいな感じです(テキトーにコーディングしてもエラーを返さない点)。XMLのDTDはそれを守らないとエラーを返すような動作はしないのでしょうか?それではDTDの存在意義が分からなくなってしまいますが・・・
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- tekebon
- ベストアンサー率62% (36/58)
一般的に、XMLデータを読み込む場合には、XMLパーサと呼ばれるソフトウエアを使用します。 XMLパーサにはDTDを考慮して読み込む検証パーサと、考慮しない非検証パーサがあります。 最近では設定によって切り替えられるため、検証モード/非検証モードと言う場合もあります。 当然、検証モードで読み込まれなければ誤った書き方をしても、エラーにはなりません。 ちなみにIEで表示する場合は非検証モードになっているため、エラーが返るということはありません。
- laughsheep
- ベストアンサー率50% (11/22)
XMLを読み込むプログラムがエラーを返すようになっていなければ何もおきません。 通常はプログラムで検証機能を用いて内容を検証します。 検証機能はDTDに定義したないようと異なるXMLがあればエラーを返します。 XMLとDTDは単なるテキストファイルであり、それを読み込むプログラムがあって初めて意味のあるものとなります。 読み込むプログラムが検証しなければXMLが勝手に検証されることもありません。