- ベストアンサー
DTDにおける公開識別子について
DTDにおいて、公開識別子を使用して外部DTDの参照、もしくはエンティティ宣言を行う場合、公開識別子からその内容をXMLパーサが解析可能である場合システム識別子は省略可能です。 質問なのですが、これはパーサがどういった挙動をとっているのでしょうか。XMLパーサにシステム識別子と公開識別子のマッピングが定義してあるのでしょうか?? ご存知の方ご教示ください。
- みんなの回答 (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で書いて二つのファイルを持ち歩けばよかったんじゃないかと思うと,何か違うような気もするが。いずれにしても俺の予想だから当てにしてはいかんぞ。
お礼
ご回答ありがとうございます。ご指摘のようにXMLでは公開識別子を使用する場合、システム識別子は同時に指定する必要があるようです。また、XMLパーサの実装によるそうですが、公開識別子からdtdの場所を特定できるような実装をしている場合、システム識別子は利用しないようです。