2013-05-10 136 views
1

嘿傢伙我有一個外部XML DTD代碼,但是當我嘗試驗證它時,我似乎得到一個錯誤。我的代碼有低於:DTD元素的XML驗證

<!DOCTYPE catalog [ 
    <!ELEMENT catalog (book)+> 
    <!ELEMENT book (title, authors, year_published, ISBN, number_of_pages, price) > 
    <!ELEMENT title (#PCDATA)> 
    <!ELEMENT authors (author)> 
    <!ELEMENT author (first_name, last_name, gender)> 
     <!ELEMENT first_name (#PCDATA)> 
     <!ELEMENT last_name (#PCDATA)> 
     <!ELEMENT gender (#PCDATA)> 
    <!ELEMENT year_pusblished (#PCDATA)> 
    <!ELEMENT ISBN (#PCDATA)> 
    <!ELEMENT number_of_pages (#PCDATA)> 
    <!ELEMENT price (discount)> 
     <!ATTLIST price discount (yes|no) "no">]> 

我知道的一切是正確的,但是當我驗證它的錯誤信息出現:包含或指向文檔類型聲明必須是

「,標記聲明良好Line 3 Column 4「

我檢查了一切,但我似乎無法得到它的工作。你們能幫忙嗎?

+0

好問題。 「year_pusblished」中有錯字,但這不是導致錯誤的原因。 http://validator.w3.org/check似乎說這個DTD是可以的。你從Xerces得到錯誤嗎?也許它有一個錯誤? – LarsH 2013-05-10 02:25:55

+0

這與HTML無關;這純粹是關於XML驗證。 – 2013-05-10 10:35:03

+2

[DTD Element Assistance]的可能重複(http://stackoverflow.com/questions/16473171/dtd-element-assistance) – mzjn 2013-05-10 11:04:39

回答

0

您似乎已使用http://www.validome.org/xml/validate/工具,它會在您的問題中發出確切的錯誤消息,並且在其他方​​面也不是特別有用。一般來說,免費XML驗證器的質量是...變化的。一個更好的工具是http://xmlvalidator.new-studio.org

如果追加下面這個簡單的XML元素,並使用更好的工具驗證,你得到的問題,一個更好的主意:

<catalog> 
<book> 
<title></title> 
<authors> 
<author> 
<first_name></first_name> 
<last_name></last_name> 
<gender></gender> 
</author> 
</authors> 
<year_published></year_published> 
<ISBN></ISBN> 
<number_of_pages></number_of_pages> 
<price></price> 
</book> 
</catalog> 

您會收到以下錯誤信息:

行25列17 :元素類型「year_published」必須聲明。

第28行第16列:元素類型「price」的內容不完整,必須匹配「(折扣)」。

第一個錯誤很簡單:只需在元素聲明中修復拼寫year_pusblished(刪除第一個s)即可。

第二個不太明顯,但很簡單:您已將price元素聲明爲(discount)作爲內容模型。這意味着一個price元素必須包含一個discount元素,僅此而已,並且這沒有任何意義(雖然從形式上講它是可能的,但是您需要聲明元素discount)。你可能想僅允許字符數據內容(有優惠的適用性在discount屬性指定):

<!ELEMENT price (#PCDATA)>