Ошибка проверки элементов CDATA с DTD - XML - PullRequest
4 голосов
/ 23 сентября 2011

Я пытаюсь проверить некоторый xml с DTD, который я пишу, но я всегда получаю ошибку проверки элементов с типами данных 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>  

1 Ответ

5 голосов
/ 23 сентября 2011

Ну, пример был плохим, для модели содержимого элемента не существует такой вещи, как (#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>

UPDATE:

Спецификация W3C XML, http://www.w3.org/TR/2008/REC-xml-20081126, явно не допускает #CDATA в модели содержимого для элементов. Начните с производства 45 и следуйте указаниям на производство 51 .

...