用DTD - XML验证CDATA元素时出错



我试图用我正在编写的DTD验证一些xml,但我总是在具有CDATA数据类型的元素上得到验证错误。这样的

<!ELEMENT title (#CDATA)> 

我已经尝试使用textmate xml验证(XMLlint)和在线验证器(w3Schools)验证,我总是得到这个错误:

error: ContentDecl : Name or '(' expected
谁能解释一下这是怎么回事?

欢呼

完整的xml和dtd示例(我从这里拿走了这个,所以我希望它是有效的):

<?xml version="1.0"?>   
<!DOCTYPE bookstore [   
  <!ELEMENT bookstore (name,topic+)>   
  <!ELEMENT topic (name,book*)>   
  <!ELEMENT name (#PCDATA)>   
  <!ELEMENT book (title,author)>   
  <!ELEMENT title (#CDATA)>   
  <!ELEMENT author (#CDATA)>   
  <!ELEMENT isbn (#PCDATA)>   
  <!ATTLIST book isbn CDATA "0">   
  ]>   
<bookstore>   
  <name>Mike's Store</name>   
  <topic>   
    <name>XML</name>   
    <book isbn="123-456-789">   
      <title>Mike's Guide To DTD's and XML Schemas<</title>   
      <author>Mike Jervis</author>   
    </book>   
  </topic>   
</bookstore>  

这个例子很糟糕,元素内容模型没有(#CDATA)这样的东西。

  <!DOCTYPE bookstore [   
  <!ELEMENT bookstore (name,topic+)>   
  <!ELEMENT topic (name,book*)>   
  <!ELEMENT name (#PCDATA)>   
  <!ELEMENT book (title,author)>   
  <!ELEMENT title (#PCDATA)>   
  <!ELEMENT author (#PCDATA)>   
  <!ELEMENT isbn (#PCDATA)>   
  <!ATTLIST book isbn CDATA "0">   
  ]>   
<bookstore>   
  <name>Mike's Store</name>   
  <topic>   
    <name>XML</name>   
    <book isbn="123-456-789">   
      <title>Mike's Guide To DTD's and XML Schemas</title>   
      <author>Mike Jervis</author>   
   </book>   
  </topic>   
</bookstore>

更新:

W3C XML规范http://www.w3.org/TR/2008/REC-xml-20081126显然不允许在元素的内容模型中使用#CDATA。从生产45开始,一直到生产51。

最新更新