XML DTD无法验证

XML DTD无法验证,xml,validation,exception,dreamweaver,dtd,Xml,Validation,Exception,Dreamweaver,Dtd,我有一个带有外部DTD的XML文件。。。以下是DTD: <!ELEMENT slideshow (slide+)> <!ELEMENT slide (image,date,time,narrative*,character*)> <!ELEMENT image (#PCDATA)> <!ELEMENT date (#PCDATA)> <!ELEMENT time (#PCDATA)> <!ELEMENT narrative (#P

我有一个带有外部DTD的XML文件。。。以下是DTD:

<!ELEMENT slideshow (slide+)>
<!ELEMENT slide (image,date,time,narrative*,character*)>
<!ELEMENT image (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT time (#PCDATA)>
<!ELEMENT narrative (#PCDATA)>
<!ELEMENT character (name,dialogue*)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT dialogue (#PCDATA)>
<!ATTLIST dialogue name CDATA #IMPLIED>

我不明白为什么会这样,有人知道吗

我认为dtd的定义方式没有任何问题。使用Kate的XML验证器成功验证:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE slideshow SYSTEM "slideshow.dtd">
<slideshow>
  <slide>
    <image>dsds</image>
    <date>dsads</date>
    <time>dsads</time>
    <narrative>fdfd</narrative>
    <narrative>fdfd</narrative>
    <character>
      <name>dasdsa</name>
      <dialogue name="dsds">dsads</dialogue>
    </character>
  </slide>
</slideshow>

DSD
dsads
dsads
fdfd
fdfd
达斯萨
dsads

[编辑]我和dreamweaver联系了一台机器,我相信我发现了问题所在。当没有定义dtd时,dreamweaver尝试回退到已知模式并验证文档。默认回退可以在编辑->首选项->验证程序中设置,默认情况下,它设置为对照HTML4.0进行检查。由于dtd不是有效的XML或HTML文件,验证程序会正确显示错误。我认为dreamweaver无法正确验证dtd,因此我建议您要么忽略错误,要么使用XML模式代替dtd,因为它是一个正确的XML文档。您的dtd是有效的。

我认为dtd的定义方式没有任何问题。使用Kate的XML验证器成功验证:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE slideshow SYSTEM "slideshow.dtd">
<slideshow>
  <slide>
    <image>dsds</image>
    <date>dsads</date>
    <time>dsads</time>
    <narrative>fdfd</narrative>
    <narrative>fdfd</narrative>
    <character>
      <name>dasdsa</name>
      <dialogue name="dsds">dsads</dialogue>
    </character>
  </slide>
</slideshow>

DSD
dsads
dsads
fdfd
fdfd
达斯萨
dsads

[编辑]我和dreamweaver联系了一台机器,我相信我发现了问题所在。当没有定义dtd时,dreamweaver尝试回退到已知模式并验证文档。默认回退可以在编辑->首选项->验证程序中设置,默认情况下,它设置为对照HTML4.0进行检查。由于dtd不是有效的XML或HTML文件,验证程序会正确显示错误。我认为dreamweaver无法正确验证dtd,因此我建议您要么忽略错误,要么使用XML模式代替dtd,因为它是一个正确的XML文档。您的dtd是有效的。

这是一个有点多的评论,所以我添加它作为一个答案

在@Rado的评论中,您说“这是在我尝试验证文档类型声明的实际内容时”……这是否意味着您只尝试验证doctype声明?像这样

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE slideshow SYSTEM "slideshow.dtd">

如果是这样,那就行不通了。必须有根元素,这可以解释“
元素堆栈为空”错误

验证XML文件时,将验证doctype声明。此时还应验证DTD


如果要单独验证DTD和XML,则必须验证DTD文件本身。我也没有Dreamweaver,但您的DTD在中验证得很好。

这是一个有点多的评论,所以我将其添加为一个答案

在@Rado的评论中,您说“这是在我尝试验证文档类型声明的实际内容时”……这是否意味着您只尝试验证doctype声明?像这样

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE slideshow SYSTEM "slideshow.dtd">

如果是这样,那就行不通了。必须有根元素,这可以解释“
元素堆栈为空”错误

验证XML文件时,将验证doctype声明。此时还应验证DTD


如果要单独验证DTD和XML,则必须验证DTD文件本身。我也没有Dreamweaver,但是您的DTD在中可以很好地验证。

如果没有其余的XML,将很难提供帮助you@RadoXML的其余部分超过1300行。这并不是因为我构造XML的方式出错,而是因为我在DTD中声明元素的方式出错you@RadoXML的其余部分超过1300行。这并不是对我构建XML的方式,而是对我在DTD中声明元素的方式产生错误。请尝试验证物理
slideshow.DTD
文件。当我尝试验证文档类型声明的实际内容时,我的XML页面验证得很好(与上面的页面一样,结构也一样)。(我正在使用dreamweaver的验证)@GeorgeReith我没有dreamweaver,所以我不能真正帮助你。您可以尝试包含一个xmlns声明,看看这是否有帮助。将
添加到DTD中的
之后,查看是否出现其他错误。您可能需要将xmlns添加到每个元素中,但我没有使用dreamweaver,所以我没有任何线索。祝你好运@我相信我找到了错误的原因。它不能解决您的问题,但我认为您可以忽略它,或者转到xsdTry验证物理
slideshow.dtd
文件。当我尝试验证文档类型声明的实际内容时,我的XML页面验证得很好(与上面的页面一样,结构也一样)。(我正在使用dreamweaver的验证)@GeorgeReith我没有dreamweaver,所以我不能真正帮助你。您可以尝试包含一个xmlns声明,看看这是否有帮助。将
添加到DTD中的
之后,查看是否出现其他错误。您可能需要将xmlns添加到每个元素中,但我没有使用dreamweaver,所以我没有任何线索。祝你好运@我相信我找到了错误的原因。它不能解决您的问题,但我认为您可以忽略它,或者转到xsdI。我相信问题在于验证dtd,而不是XML。我确实在验证dtd文件本身。我猜这是dreamweaver的劣质验证工具。我相信问题在于验证dtd,而不是XML。我确实在验证dtd文件本身。我猜这是dreamweaver的劣质验证工具。