• ベストアンサー

DTDにおける公開識別子について

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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で書いて二つのファイルを持ち歩けばよかったんじゃないかと思うと,何か違うような気もするが。いずれにしても俺の予想だから当てにしてはいかんぞ。

MACKA
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A

  • 文書型定義と文書型宣言について

    文書型宣言の中に、文書型定義が含まれるようですが、これらすべてを合わせてDTDと呼べばいいのでしょうか? 文書型定義はたいてい一行で、それ以下の外部エンティティ参照のほうが行数が増えるのでしょうか? 検証済み文書の場合での話しになってしまったかもしれませんが、 整形式だとこの、文書型宣言、文書型定義と、XML宣言が省略できるということでしょうか。 まだ勉強をはじめたばかりですが、 よろしくお願いいたします。

    • ベストアンサー
    • XML
  • DTDと名前空間

    DTDと名前空間の関係について質問します。 XMLの本を読みDTDと名前空間の大まかなイメージを下記のようにつかみました。 DTD: XML文書の妥当性を規定し、DTD宣言で指定。 名前空間: ひとつのXML内で要素名の衝突を避けるために、xmlnsで指定。 XHTMLのDTD宣言 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> XHTMLの名前空間(http://www.w3.org/1999/xhtml) <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> XHTML文書の場合、DTDと名前空間がそれぞれひとつです。 しかし、ひとつのXMLドキュメントで複数の名前空間を利用する場合は、それぞれの名前空間に対して、DTDを宣言するのでしょうか。つまり複数のDTD宣言があるXMLドキュメントになるのでしょうか。 DTDと名前空間の関係が良く分かりません。 XML自体を勉強し始めたばかりで、まとまりのない質問で申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • XML
  • システム識別子省略すると?

    システム識別子省略するとどのような変化がありますでしょうか? (1) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> (2) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> (1)が省略したものですがブラウザの表示方法が異なるそうなのですが どのような変化があるのでしょうか? また無難なのは省略しないほうがいいのでしょうか? こうゆう場合は(1)がいい、こうゆうケースが(2)が適切など そういった事もあれば教えてください

  • XHTML1.1でのXML宣言とDTD宣言の書き方

    XML宣言によるレイアウトの崩れ等の質問はありましたが今回の質問と同じ内容は私には見当たらなかったため質問させて頂きます。 XHTMLでのXML宣言を <?xml version="1.0" encoding="utf-8"?> と記述しています。 上記の記述と <?xml version="1.0" encoding="UTF-8"?> とで、文字コードの大文字か小文字かの違いだけなのですがどちらの方が良いのでしょうか。 同じくDTD宣言を <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> と記述しています。 XMLでは大文字と小文字を区別して扱うため必ず半角で書かなければならないとされていますが、XHTMLでマークアップされているサイトのソースを見るとどこもXML宣言での文字コードとDTD宣言では大文字が使用されています。 細か過ぎるというのは分かっているのですが厳密にはどのような記載が正しいのでしょうか。 ※今回投稿カテゴリーの小カテゴリーにて”XML”を選択致しましたがXHTMLについての質問の場合”XML”と”HTML”どちらにするべきでしょうか。 合わせてご返答、又はご意見を頂戴できれば幸いです。

    • 締切済み
    • XML
  • 識別子の外部結合について

    識別子について調べていてわからないことがあり 質問させて頂きます。 以下のコードの場合変数aは外部結合ですか それとも外部結合以外となるのでしょうか。 識別子の宣言に対し同一ソースファイル内の関数内で その識別子の定義がある場合、その識別子は外部結合か どうかが知りたいのです。 ご存じの方すいませんがよろしくお願いします。 --test.c-- static int a; main() { ・・・ } function1() { a = 1; ・・・ } function2() { a = 1; ・・・ }

  • Perl での XML 処理での DTD 宣言につ

    Perl の XML::LibXML モジュールを使用して XML を処理しています。 例えば、 <?xml version="1.0" encoding="UTF-16" standalone="no"?> <!DOCTYPE aaa PUBLIC "-//bbb//CCCC//EN" "ddd.dtd" []> <doc> ....... </doc> のようなXMLに対してPerlで処理をして、 最後に documentElement を toString して書き出しています。 しかし、この場合、DTD宣言部分を書き出すことができません。 XML::LibXMLでこの部分を取得して書き出すことはできますでしょうか。 どうぞ、よろしくお願いします。

    • ベストアンサー
    • Perl
  • XMLのDTDによる文書型宣言の記述の仕方

    初心者ですが簡単なXMLのDTDによる文書型宣言の記述の仕方がよく分かりませんので教えてください。 XMLでは同じ要素名の要素でも親が異なる場合は別の要素として扱うことができます。例えば、要素Bの子の要素Dと、要素Cの子の要素Dがある場合、要素Bの子の要素Dには属性bdを、要素Cの子の要素Dには属性cdを定義できます。この場合にDTDによる文書型宣言を記述する場合、要素Bの子の要素Dと、要素Cの子の要素Dをどのように記述するのでしょうか。 例えば <A>  <B>   <D bd="123"></D>  </B>  <C>   <D cd="abc"></D>  </C> </A> というようなXMLインスタンスがあった場合 この場合のDTDによる文書型宣言の記述は <!DOCTYPE A [  <!ELEMENT A (B,C)>  <!ELEMENT B (D)>  <!ELEMENT D EMPTY>  <!ATTLIST D bd CDATA #REQUIRED>  <!ELEMENT C (D)>  <!ELEMENT D EMPTY>  <!ATTLIST D cd CDATA #REQUIRED> ]> と記述しましたがこれでは駄目でした。2つ目の要素DのELEMENTの宣言で、要素Dはすでに宣言されているというエラーになるのです。上記の例の場合にDTDによる文書型宣言はどのように記述するのでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • XML
  • 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の存在意義が分からなくなってしまいますが・・・

    • 締切済み
    • XML
  • XMLをDTDで検証しようとしたらエラー、何が悪いのかさっぱり(--#;)

    ◎Thread.xml <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE Thread SYSTEM "mybbs.dtd"> <Thread> <Response> <Name>暇人</Name> <Mail>暇人</Mail> <WebSite>http://www.yahoo.co.jp</WebSite> <Content> <h1>テスト</h1> <p>テスト</p> </Content> </Response> <Response> <Name>暇人2003</Name> <Mail>tomoyukibug@yahoo.co.jp</Mail> <WebSite>http://www.yahoo.co.jp</WebSite> <Content> <h1>テスト2</h1> <p>テスト2</p> </Content> </Response> </Thread> ◎mybbs.dtd <!ENTITY % xhtml-math-svg SYSTEM "xhtml-math-svg.dtd"> %xhtml-math-svg; <!ELEMENT Thread (Response)+> <!ELEMENT Content %body.content;> <!ELEMENT Email "( #PCDATA )" > <!ELEMENT WebSite "( #PCDATA )" > <!ELEMENT Name "( #PCDATA )" > <!ELEMENT Response (Name,Email,WebSite,Content)> 率直に聞きます。 自分のプログラム(文字数制限に付き、ソース公開不可、するなら補足で)がエラーが出るんですが、何が間違っているんでしょう? エラー内容:これは無効なコンテンツモデルです

  • FirefoxでのXML外部実体参照について。

    FirefoxでのXML外部実体参照について。 XMLをイチから勉強しているのですが、外部実体参照のところで分からなくなってしまいました。 <!ENTITY [要素名] SYSTEM "[ファイルパス]"> で外部ファイルを読み込もうとしているのですが、これがIE8なら期待通りに(外部ファイルを読み込んで)動いてくれるのですが、Firefox3だと動いてくれません。 ソースは以下の通りです。 ----------------------------------------- [members.xml] <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE members SYSTEM "members.dtd" [ <!ENTITY member1 SYSTEM "member1.xml"> ]> <members> &member1; </members> ----------------------------------------- [members.dtd] <!ELEMENT members (member)*> <!ELEMENT member (name, sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST member id ID #REQUIRED> ----------------------------------------- [member1.xml] <?xml version="1.0" encoding="Shift_JIS"?> <member id="0001"> <name>Tarou.Nihon</name> <sex>Male</sex> </member> ----------------------------------------- FirefoxとIEの間に何か違いがあるのでしょうか。 あと、<!ELEMENT>ですが、 <!ELEMENT members (member)*> と書くのと、 <!ELEMENT members (member*)> と書くのでは何か違いがあるのでしょうか。 以上2点、詳しい方がいればお教え下さい。宜しくお願い致します。

    • ベストアンサー
    • XML
このQ&Aのポイント
  • 印刷汚れの問題で困っています。トナーが出すぎて周りが真っ黒になり、用紙にも汚れがつきます。
  • 新品純正カートリッジを交換したところ、すぐにカートリッジが黒く汚れ周りが真っ黒になり、印刷物にも汚れがつきます。何度もカートリッジ周辺を掃除しても改善されません。
  • 私の環境はWindows11で、無線LANで接続されています。電話回線はひかり回線です。
回答を見る