2012-02-15 18 views
1

を検証するためにfaillingするDTDです:XML DTDここに...私は外部のDTDとXMLファイルを持っている

<!ELEMENT slideshow (slide+)> 
<!ELEMENT slide (image,date,time,narrative*,character*)> 
<!ELEMENT image (#PCDATA)> 
<!ELEMENT date (#PCDATA)> 
<!ELEMENT time (#PCDATA)> 
<!ELEMENT narrative (#PCDATA)> 
<!ELEMENT character (name,dialogue*)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT dialogue (#PCDATA)> 
<!ATTLIST dialogue name CDATA #IMPLIED> 

そして、ここでは私のXMLファイルの先頭である:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE slideshow SYSTEM "slideshow.dtd"> 

XMLは、私はDreamweaverでDTDを検証するときしかし、次のエラーを検証するために失敗している、DTDに対して細かい検証:

line 1: Expected comment or CDATA[xml] 
line 3: An exception occurred! Type:EmptyStackException, Message:The element stack is empty[xml] 

なぜこれが起こっているのかわかりません、誰にも分かりますか?

+0

残りのXMLがなければ、 – Rado

+0

@Radoの残りの部分は1300行を超えています。これはXMLを構造化した方法でエラーを投げるのではなく、DTDの要素を宣言した方法です。 –

答えて

1

dtdの定義方法に問題はありません。これは、ケイトのXMLバリデータを正常に検証:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE slideshow SYSTEM "slideshow.dtd"> 
<slideshow> 
    <slide> 
    <image>dsds</image> 
    <date>dsads</date> 
    <time>dsads</time> 
    <narrative>fdfd</narrative> 
    <narrative>fdfd</narrative> 
    <character> 
     <name>dasdsa</name> 
     <dialogue name="dsds">dsads</dialogue> 
    </character> 
    </slide> 
</slideshow> 

[編集]私は、Dreamweaverで、マシンのホールドを持って、私は、問題を見つけたと信じています。 dtdが定義されていない場合、Dreamweaverは既知のスキーマに対してフォールバックを試み、ドキュメントを検証します。デフォルトのフォールバックは、edit-> preferences-> validatorで設定することができ、デフォルトではHTML 4.0に対してチェックするように設定されています。 dtdは有効なXMLまたはHTMLファイルではないため、バリデータはエラーを正しく表示します。私はDreamweaverがdtdを適切に検証できるとは思わないので、適切なXML文書であるため、エラーを無視するか、dtdのかわりにXMLスキーマを使用することをお勧めします。あなたのdtdは有効です。

+0

物理的な 'slideshow.dtd'ファイルを検証してみてください。私のXMLページは、あなたの上のものと同じように構造化されたものであると妥当性を検証します。それは、ドキュメント型宣言の実際の内容を検証しようとするときです。 (私はdreamweaverのバリデーションを使用しています) –

+0

@GeorgeReith私はDreamweaverを持っていないので、私は本当にあなたを助けることができません。あなたはxmlns宣言を含めると、それが役立つかどうかを調べることができます。あなたのDTDで '<!ELEMENT slideshow(slide +)>'の直後に '<!ATTLIST slideshow xmlns CDATA #FIXED ''>'を追加して、別のエラーが発生するかどうか確認してください。すべての要素にxmlnsを追加する必要があるかもしれませんが、私はDreamweaverを使用しないので、手がかりはありません。がんばろう! – Rado

+0

あなたのご意見ありがとうございました –

0

これはコメント用ですが、回答として追加しています。

@Radoへのコメントでは、「ドキュメントタイプ宣言の実際の内容を検証しようとしたときです...」というのは、のみを検証しようとしていることを意味します。 doctype宣言?このように:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE slideshow SYSTEM "slideshow.dtd"> 

もしそうなら、それは動作しません。あなたはルート要素を持っていなければなりません。それは "The element stack is empty"というエラーを説明します。

doctype宣言の検証は、XMLファイルの検証時に行われます。 DTDもその時点で検証されるべきです。

DTDをXMLとは別のものとして検証する場合は、DTDファイル自体を検証する必要があります。私もDreamweaverを持っていませんが、あなたのDTDはoXygenで妥当性を確認しています。

+0

私は問題がXMLではなくdtdを検証していると信じています。 – Rado

+0

私は本当にdtdファイル自体を検証しています。私はこれがDreamweaverのいたずらな検証ツールだと思います。 –

関連する問題