为什么这个DTD几乎完全相同的双胞胎不会失败?

时间:2012-09-19 22:41:32

标签: xml xml-dtd

给出这个XML文件片段:

<Active>
  <SystemName Permissions="RW" Datatype="STRING" Case="MIXED_RESPECT">NASCENT Default System Name</SystemName>
  <ModelNumber Permissions="RO" Datatype="STRING" Case="MIXED_RESPECT">A104S2</ModelNumber>

<!-- snip snip snip -->

以及与之匹配的相应DTD片段:

<!ELEMENT Active (SystemName,ModelNumber,SerialNumber....)>
   <!ELEMENT ModelNumber (#PCDATA)>
      <!ATTLIST ModelNumber Permissions   CDATA #FIXED "RO">
      <!ATTLIST ModelNumber Datatype      CDATA #FIXED "STRING">
      <!ATTLIST ModelNumber Case          CDATA #FIXED "MIXED_RESPECT">
   <!ELEMENT SystemName (#PCDATA)>
      <!ATTLIST SystemName  Permissions   (RW|RO) "RO"
                            Datatype      CDATA #FIXED "STRING"
                            Case          CDATA #FIXED "MIXED_RESPECT">

<!-- snip snip snip -->

在针对DTD运行XML时出现以下错误:

/home/.../Active.xml:7: element ModelNumber: validity error : No declaration for attribute Permissions of element ModelNumber
  <ModelNumber Permissions="RO" Datatype="STRING" Case="MIXED_RESPECT">A104S2</M
                                                                          ^
/home/.../Active.xml:7: element ModelNumber: validity error : No declaration for attribute Datatype of element ModelNumber
  <ModelNumber Permissions="RO" Datatype="STRING" Case="MIXED_RESPECT">A104S2</M
                                                                          ^
/home/.../Active.xml:7: element ModelNumber: validity error : No declaration for attribute Case of element ModelNumber
  <ModelNumber Permissions="RO" Datatype="STRING" Case="MIXED_RESPECT">A104S2</M

<!-- snip snip snip -->

有人可以解释它在抱怨什么吗?我看着谷歌,直到我睁大眼睛。 SystemName有效,它识别出ModelNumber等是它可以看到的元素!Attlist's!

1 个答案:

答案 0 :(得分:1)

您的分析对我来说是正确的:您的验证器没有看到ModelNumber属性的声明。您显示的DTD片段确实有它们,并且DTD和文档实例以相同的方式拼写所有内容,并且我无法使用您显示的片段在我的系统上复制问题。

一个可能的原因是您的验证器没有读取您认为正在阅读的DTD。测试的一种方法是在您认为正在使用的DTD中引入语法错误或抑制SystemName的某个属性,并查看错误消息是否更改。

祝你好运。