DTDの正解と不正解、なぜそうなのか

このQ&Aのポイント
  • DTDの問題で、あるインスタンスに対して正しいDTDは(1)であり、(2)は不正解とされています。しかし、(2)がなぜ不正解なのか疑問に思っている人もいます。ここでは、(1)と(2)の違いについて詳しく説明します。
  • インスタンスに対する正しいDTDは(1)であり、(2)は不正解です。この問題では、informationの子要素の出現回数が*か+かの違いがポイントです。詳細な解説を通じて、なぜ(2)が不正解なのかを理解しましょう。
  • 問題のインスタンスに対して正しいDTDは(1)であり、(2)は不正解です。この問題では、informationの子要素の出現回数が*か+かの違いによって正誤が分かれます。なぜ(2)が不正解なのか、詳しく解説します。
回答を見る
  • ベストアンサー

DTDについて

いつもお世話になっております。 以下のインスタンスに対して妥当なXML文書となるDTDはどれかという問題で、(1)は正解で(2)は不正解となっているのですが、自分は(2)がなぜ不正解なのかわかりません。正解じゃないの?と思っています。 お分かりになる方、お知恵を拝借できないでしょうか。よろしくお願いします。 (1)と(2)で違うのはinformationの子要素の出現回数が*か+かの違いです。 (インスタンス) <information><product>PC</product>と<product>モニタ</product>で<price>200000</price>円です。</information> (1) <?xml version="1.0"?> <!DOCTYPE information[ <!ELEMENT information (#PCDATA | product | price)*> <!ELEMENT product (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> (2) <?xml version="1.0"?> <!DOCTYPE information[ <!ELEMENT information (#PCDATA | product | price)+> <!ELEMENT product (#PCDATA)> <!ELEMENT price (#PCDATA)> ]>

  • ape5
  • お礼率85% (109/127)
  • XML
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
回答No.1

規則として#PCDATAは+に出来ないのよ。実は。 だからDTDの文法としてアウトなの。 http://www.isc.meiji.ac.jp/~miuraj/xml/xml_guide/xmldtd2.html

ape5
質問者

お礼

早速の回答ありがとうございます。 そういった情報は本には書いてなかったです・・・。 いつもありがとうございます。

関連するQ&A

  • 妥当なXML文書

    XML文書で、下記のあ)い)で、妥当なXML文書は あ)になります。 では、い)は妥当ではないとしたら、どの部分が妥当ではないでしょうか。 これが理解できずに困っています。 <a/>は親要素にならないのでしょうか。ルートになるからでしょうか。 よろしくお願いします。 あ) <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE a [ <!ELEMENT a (b?)> <!ELEMENT b (#PCDATA)> ]> <a/> い) <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE a [ <!ELEMENT a (b?)> <!ELEMENT b (#PCDATA)> ]> <a/><b/>

    • ベストアンサー
    • 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による文書型宣言の記述の仕方

    初心者ですが簡単な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の事を少しだけ勉強したのですが、少し疑問に思うことがありました。 documentを元にします。 DTDはまず<!ELEMENT document ()>と宣言すると習いました。その時、()の中に、…例えばtitle、body…などの要素を出現させる順に書かなくてはいけないのはわかりましたが、以下のように書かれていて分からなくなりました。 <!ELEMENT document (title, body)> <!ELEMENT title (#PCDATA)> <!ELEMENT body (chapter)> <!ELEMENT section (#PCDATA)> …… この場合はじめに宣言していた要素はtitleとbodyだけなのに、sectionも宣言していいのはなんででしょうか? documentで先に宣言しないといけない要素に決まりはあるのですか? よろしくお願いします。

  • 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
  • DTDファイルをクラスパスから読み込みたい

    DTDを利用したXMLファイルを読み込むDOMパーサーを作ってます。 表題のとおり、DOMパーサーがXMLファイル、DTDファイルを読み込む際に DTDファイルをローカルマシン(実行環境)のクラスパスにあるディレクトリ から読み込みたいのですがうまくいきません。 XMLパーサーにxercesを利用し、DOMを使ってます。 例えば、 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE pagecontrol SYSTEM "sample.dtd"> <PEOPLE> <NAME>afternoon_cafe</NEME> </PEOPLE> のようなXMLファイルを、DOMパーサーがparse()メソッドによりロード すると、"sample.dtd"をカレントディレクトリからしか検索しません。 この"sample.dtd"をクラスパスにあるディレクトリに置き、それを 読み込むようにしたいのですが、、、 どなたかわかる方がいれば、教えてください。 お願いします。

    • ベストアンサー
    • XML
  • XMLファイルからXML Schemaを参照する方法?

    XMLファイルの設計をしています。 今まではDTDを使っていたのですが、 勉強するとXML SchemaのほうがXMLの規則にそっていたり、 データ型が多かったりして都合が良い面があると学びました。 そこでXML Schemaを使いたいと思うのですが、 XML SchemaとメインのXMLのファイルはどのように関係させたら良いのでしょうか? DTDのときは以下のように書いていたと思います。 <!DOCTYPE root SYSTEM "sample.dtd" > このような記述をXML Schemaのときには、どのように記載するのだろうと 疑問に思いました。 私なりに調べてみたのですが、 XML Schemaの記述方法は、大まかに理解したのですが、 関係方法をどうすれば良いかは、見つけられませんでした。 本を読んでも、書かれているように思えません。 以下の2つのファイルがあった場合、 【element1.xml】は妥当なXML文書だそうですが、 どのように関連付いているのでしょうか? 【element.xs】 <?xml version="1.0" encoding="Shift_JIS" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- 要素宣言 --> <xs:element name="売上高" type="xs:integer" /> </xs:schema> 【element1.xml】 <?xml version="1.0" encoding="Shift_JIS" ?> <売上高>1000</売上高> もしよろしければ、教えて頂けませんか? ぜひご教示お願いいたします。

    • ベストアンサー
    • XML
  • DTDとXML Schemaでのデフォルト値の指定について

    以下のようなXMLをパーズするプログラムがあります。 ------------------------------------------------------------------ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setValidating(true); DocumentBuilder documentBuilder = factory.newDocumentBuilder(); Document doc = documentBuilder.parse(new InputSourc("a.xml")); ------------------------------------------------------------------ a.xmlに以下のようなXMLの構造をDTDで指定した場合のxmlをパーズさせると、 <!DOCTYPE a [ <!ELEMENT a (#PCDATA)> <!ATTLIST a a1 CDATA "abc"> ]> <a/> 上記のプログラム3行目のvalidationの設定がtrue、falseに関わらす、 <a a1="abc"/> というような形式のドキュメントオブジェクトが返ってきます。 ですが、以下のようにXMLの構造をXML Schemaで定義した場合、 a.xml <a xsi:noNamespaceSchemaLocation="b.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> b.xsd <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="a"> <xsd:complexType> <xsd:attribute name="a1" type="xsd:string" default="abc"/> </xsd:complexType> </xsd:element> </xsd:schema> 返ってくるドキュメントオブジェクトのa要素には、validationがtrueの場合はa1属性が含まれる、falseの場合は含まれません。 これは正しい動作なのでしょうか? また、XML Schemaの場合もvalidationがtrue、falseに関わらず、 デフォルト値が指定された属性を含めることはできないのでしょうか?

    • ベストアンサー
    • XML
  • 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で検証しようとしたらエラー、何が悪いのかさっぱり(--#;)

    ◎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)> 率直に聞きます。 自分のプログラム(文字数制限に付き、ソース公開不可、するなら補足で)がエラーが出るんですが、何が間違っているんでしょう? エラー内容:これは無効なコンテンツモデルです