在Xml parser的实现中,DTD的实现是一个比较麻烦的地方。麻烦之处不在于DTD的逻辑部分,而在于如何处理DTD的外部Entity,比如,DTD文件间的相互调用。
比如如下的DTD声明:
<!ENTITY imported-file SYSTEM "imported-file">
%imported-file;
上面两段DTD语句,首先声明一个参数化的external Entity, 紧接着引用该external entity,表示导入该DTD文件作为整个DTD的一部分。那么,当Xml Parser遇到这种DTD声明时,该怎么处理呢?
一种方案是,根本不去Parse 该Entity的内容,而是简单的当作一个外部实体,传给应用程序处理。这种方案最为简单,问题是被导入的文件逻辑上是DTD的一个组成部分,其中可能声明了Element,Attlist等,不Parse该文件将导致DTD Validate失败。
第二种方案是,尝试parse该external entity. ok,如果该external entity表示的确实是一个DTD文件,没有问题,但是如果该entity所指向的对象只是一个简单的文本文件,而本身并不是一个有效的DTD文件,那么有可能产生错误。即时可以处理这种Parse错误,也要防止其它的几个问题,比如文件之间的循环引用。最为麻烦的是,有可能用户并不希望将该entity对应的文件作为dtd的一个部分。当xml文件不符合dtd校验,而该文件瞧好包含一个正确的dtd声明时,有可能导致dtd validate的无效性。本应该报错的,现在成了正确的xml文件了。
当然,正确的做法是,每次发现external entity的声明时,发送给用户一个信息,由用户指定特定的动作。这种方案麻烦的时,xml parser使用的时候接口比较麻烦,必须由用户先给Parser指定一个entity动作,然后才能开始Parse.
本人以OpenOffice的xml文件为例,分别使用.Net的xml parser和Xerces c++进行parse,在不指定任何Entity handler的情况下,.Net parser没有问题,而Xerces c++则会报错。出错的地方就是DTD的校验部分。可见这两个Parser在external dtd的处理上有着明显的差异。另外,XmlSpy 2004也能够正常校验。
分享到:
相关推荐
xml与DTD,xml与DTD,xml与DTD,xml与DTD
使用DTD验证XML文档 一、 DTD的定义: a) DTD是Document Type Defintion的缩写,即文档类型定义。DTD用来描述XML文档的结构。...c) DTD使应用程序可以使用一个标准DTD校验从外部接收的XML数据是否有效。
很好的一个关于DTD验证XML的一些文档,内容丰富。需要了解的速速下载
DTD实际上可以看作一个或多个XML文件的模板,这些XML文件中的元素、元素的属性、元素的排列方式/顺序、元素能够包含的内容等,都必须符合DTD中的定义。XML文件中的元素,即我们所创建的标记,是根据我们应用的实际...
XML例子 DTD例子 XSL例子 XLD例子 DOM解析
关于XML的DTD教程,关于XML的DTD教程,关于XML的DTD教程
XML、DTD、Schema笔记、使用方法、注意事项,尤其是对XML和DTD比较详细
关于XML中DTD的简单写法,包括引用外部DTD之类的典型说明
xml dtd html 源程序 数据与模版 生成 html
XML Schema 与 XML DTD的技术比较与分析XML Schema 与 XML DTD的技术比较与分析
与xml相关内部dtd与外部dtd实例,内部dtd调用与外部dtd调用实例!
dtd例子xmldtd
[实验目的] 1、安装并学习如何使用XMLSPY集成开发...3、掌握如何在DTD文档中声明元素及其内容模型、属性,以及实体的声明和使用;使用内部/外部DTD规则,对XML数据文档的有效性进行约束。 某软件学院XML课程实验答案
学习XML语言的DTD如何去写,如何更好的写出XML语言的DTD文档,对进一步深入学习XML有很大帮助。
《XML》实验任务书 (1) XML Basics & DTD [实验目的] 1、安装并学习如何使用XMLSPY集成开发环境完成XML相关的开发工作。 2、熟悉和掌握XML规范的基本内容,包括XML声明、注释、处理指令、元素、属性、CDATA段、...
DTD规范XML文档编写级XML文档的一般书写格式
xml转换dtd工具jar
xml dtd xsd 的编写 标准格式可以供学习参考用
最新版的mybatis配置xml文件所需的dtd文件
XML DTD和XmlSchema标准参考手册!!!!!!!!!!!!!!!!!!!!!!