2013-05-10 115 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)>