2012-02-15 110 views
1

我有一個外部DTD的XML文件......這裏是DTD:XML DTD failling驗證

<!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驗證精對DTD,但是當我確認在Dreamweaver中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 2012-02-15 11:03:40

+0

@Rado XML的其餘部分超過1300行。這不是以我構造XML的方式拋出錯誤,而是以我在DTD中聲明元素的方式拋出錯誤。 – 2012-02-15 11:10:32

回答

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的驗證) – 2012-02-15 11:30:06

+0

@GeorgeReith我沒有Dreamweaver,所以我不能真正幫助你。你可以嘗試包含一個xmlns聲明,看看是否有幫助。在DTD中的<!ELEMENT slideshow(slide +)>'之後添加'<!ATTLIST slideshow xmlns CDATA #FIXED'>'看看你是否得到不同的錯誤。您可能需要將xmlns添加到每個元素,但是,我不再使用dreamweaver,因此我不知道。祝你好運! – Rado 2012-02-15 12:03:51

+0

好的,謝謝你的輸入+1對你的時間 – 2012-02-15 13:16:56

0

這是一個很大的評論,所以我把它添加爲答案。

在以@Rado的評論,你說:「這是當我嘗試驗證文檔類型聲明的實際內容」 ......這是否意味着你想驗證 DOCTYPE聲明?像這樣?:

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

如果是這樣,那將無法工作。你必須有一個根元素,這將解釋「The element stack is empty」錯誤。

驗證您的XML文件時,將會對您的doctype聲明進行驗證。 DTD也應該在那個時候進行驗證。

如果要驗證與XML分開的DTD,則必須驗證DTD文件本身。我也沒有Dreamweaver,但是您的DTD在oXygen中驗證通過。

+0

我相信問題是驗證dtd,而不是XML。 – Rado 2012-02-15 17:53:25

+0

我確實驗證了dtd文件本身。我想這是Dreamweaver的劣質驗證工具。 – 2012-02-16 08:49:32