Don*_*ply 4 xml validation dtd cdata
我正在尝试使用我正在编写的DTD验证某些xml,但我总是在使用CDATA数据类型的元素上获得验证错误.像这样
<!ELEMENT title (#CDATA)>
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用textmate xml验证(XMLlint)和在线验证器(w3Schools)验证,我总是得到这个错误:
error: ContentDecl : Name or '(' expected
Run Code Online (Sandbox Code Playgroud)
谁能解释一下这里发生了什么?
干杯
完整的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>
Run Code Online (Sandbox Code Playgroud)
好吧,这个例子很糟糕,没有(#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>
Run Code Online (Sandbox Code Playgroud)
更新:
W3C XML规范http://www.w3.org/TR/2008/REC-xml-20081126显然不允许#CDATA在内容模型中使用元素.从45号生产开始,然后继续生产 51.