DonutReply
DonutReply

Reputation: 3254

Error validating CDATA elements with DTD - XML

I'm trying to validate some xml with a DTD I'm writing but I always get a validation error on the elements with CDATA data types. Like this

<!ELEMENT title (#CDATA)> 

I've tried validating using textmate xml validation (XMLlint) and online validators (w3Schools) and I always get this error:

error: ContentDecl : Name or '(' expected

Can anybody explain what's going on here?

Cheers

Example of full xml and dtd (I took this from here so I'd expect it to be valid):

<?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>  

Upvotes: 4

Views: 8802

Answers (1)

forty-two
forty-two

Reputation: 12817

Well, the example was a bad one, there's no such thing as (#CDATA) for the element content model.

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

UPDATE:

The W3C XML specification, http://www.w3.org/TR/2008/REC-xml-20081126, clearly does not allow #CDATA in the content model for elements. Start at production 45 and follow throught to production 51.

Upvotes: 5

Related Questions