DTDにおいて、公開識別子を使用して外部DTDの参照、もしくはエンティティ宣言を行う場合、公開識別子からその内容をXMLパーサが解析可能である場合システム識別子は省略可能です。
質問なのですが、これはパーサがどういった挙動をとっているのでしょうか。XMLパーサにシステム識別子と公開識別子のマッピングが定義してあるのでしょうか??
ご存知の方ご教示ください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

まず,XMLではシステム識別子を省略できません。



http://www.w3.org/TR/REC-xml/#NT-doctypedecl

おそらく公開識別子のみでできる、というのはSGMLの話です。
僕はSGMLについて詳しくありませんが,
どうやら
http://www.kanzaki.com/docs/html/doctype.html#fpi
にあるような
「SGML Open catalog」という定義用のファイルを書くことができるようです。

#俺の予想だけど,当時は常時接続って稀で文書インスタンスのシステム識別子としてファイルパスを与えるのが一般的だったのかもしれない。マシンを移動する度に毎回システム識別子を書き換えるのは面倒だから外部にあるのも解らんでもない気がする。相対URIで書いて二つのファイルを持ち歩けばよかったんじゃないかと思うと,何か違うような気もするが。いずれにしても俺の予想だから当てにしてはいかんぞ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。ご指摘のようにXMLでは公開識別子を使用する場合、システム識別子は同時に指定する必要があるようです。また、XMLパーサの実装によるそうですが、公開識別子からdtdの場所を特定できるような実装をしている場合、システム識別子は利用しないようです。

お礼日時:2009/05/21 23:15

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング