尝试验证XML到DTD-错误说ENTITY未解析

时间:2014-03-14 17:19:15

标签: xml dtd xml-validation

我正在尝试使用Oxygen XML Editor工具在DTD上验证XML文档 在我的代码结束时,会出现一条错误消息 E {XERCES} ENTITY" myent"没有解开。

有谁知道这个错误意味着什么,如果是这样,如何修复它以使其运行以便我可以验证XML?

参数已关闭,其示例如下所示。

   <authentication board="myent"/>

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

Xerces错误说的基本上是ENTITY&#34; myent&#34;未被声明为未解析的实体。

最有可能的情况(我猜测,因为您还没有提供DTD),属性board被声明为类型ENTITY。类型为ENTITY的属性必须与DTD中声明的相应未解析实体的名称匹配。

来自spec

属性类型ENTITY有效性约束:

  

ENTITY类型的值必须匹配名称生成,类型的值   ENTITIES必须匹配名称;每个名字必须与一个名字相匹配   在DTD中声明的未解析实体。

spec中未解析实体的定义:

  

未解析的实体是其内容可能或的资源   可能不是文本,如果是文本,可能不是XML。每个未解析的   实体具有关联的符号,由名称标识。超越   要求XML处理器为实体制作标识符   和应用程序可用的符号,XML没有约束   关于未解析实体的内容。

这是board属性被声明为类型ENTITY而没有相应的未解析实体声明的示例:

<!DOCTYPE authentication [
<!ELEMENT authentication EMPTY>
<!ATTLIST authentication
          board ENTITY #REQUIRED>
]>
<authentication board="myent"/>

以上示例将生成错误(使用下面的第一个示例直接从oXygen复制):

E [Xerces] ENTITY "myent" is not unparsed.

如果我们添加实体声明(和表示法(NDATA)声明;请参阅spec),XML现在有效:

<!DOCTYPE authentication [
<!ELEMENT authentication EMPTY>
<!ATTLIST authentication
          board ENTITY #REQUIRED>
<!NOTATION bar SYSTEM "bar">
<!ENTITY myent SYSTEM "FOO" NDATA bar>    
]>
<authentication board="myent"/>