【问题标题】:XML Validation of DTD ElementsDTD 元素的 XML 验证
【发布时间】:2013-05-10 19:47:23
【问题描述】:

大家好,我有一个外部的 XML DTD 代码,但是当我尝试验证它时,我似乎得到了一个错误。我的代码如下:

<!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">]>

我知道一切都是正确的,但是当我验证它时出现错误消息:

“文档类型声明中包含或指向的标记声明必须格式正确。第 3 行第 4 列”

我已经检查了所有内容,但似乎无法正常工作。你们能帮忙吗?

【问题讨论】:

  • 好问题。 “year_pusblished”中有错字,但这不是导致错误的原因。 validator.w3.org/check 似乎说这个 DTD 没问题。您是否从 Xerces 收到错误消息?也许它有一个错误?
  • 这与HTML无关;这纯粹是关于 XML 验证。
  • DTD Element Assistance的可能重复

标签: xml xsd dtd


【解决方案1】:

您似乎使用了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 列:元素类型“价格”的内容不完整,必须匹配“(折扣)”。

第一个错误很简单:只需修复元素声明中的拼写year_pusblished(删除第一个s)即可。

第二个不太明显,但很简单:您已经声明了price 元素,其中(discount) 作为内容模型。这意味着price 元素必须包含discount 元素,仅此而已,这实际上没有任何意义(尽管从形式上讲这是可能的,但是您需要声明元素discount)。您可能只想允许字符数据作为内容(折扣的适用性在discount 属性中指定):

<!ELEMENT price (#PCDATA)>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多