0

给定这个 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 的元素!

4

1 回答 1

1

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

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

祝你好运。

于 2012-09-20T23:36:05.950 回答