`
v5browser
  • 浏览: 1140860 次
社区版块
存档分类
最新评论

Xml DTD校验中关于external entity的实现策略。

 
阅读更多

在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,xml与DTD,xml与DTD

    使用DTD验证XML文档

    使用DTD验证XML文档 一、 DTD的定义: a) DTD是Document Type Defintion的缩写,即文档类型定义。DTD用来描述XML文档的结构。...c) DTD使应用程序可以使用一个标准DTD校验从外部接收的XML数据是否有效。

    DTD验证XML详解

    很好的一个关于DTD验证XML的一些文档,内容丰富。需要了解的速速下载

    XML-DTD实例讲解

     DTD实际上可以看作一个或多个XML文件的模板,这些XML文件中的元素、元素的属性、元素的排列方式/顺序、元素能够包含的内容等,都必须符合DTD中的定义。XML文件中的元素,即我们所创建的标记,是根据我们应用的实际...

    XML DTD XSL XLD DOM

    XML例子 DTD例子 XSL例子 XLD例子 DOM解析

    XML的DTD教程

    关于XML的DTD教程,关于XML的DTD教程,关于XML的DTD教程

    XML、DTD、Schema

    XML、DTD、Schema笔记、使用方法、注意事项,尤其是对XML和DTD比较详细

    XML DTD简单设计

    关于XML中DTD的简单写法,包括引用外部DTD之类的典型说明

    xml dtd html 源程序

    xml dtd html 源程序 数据与模版 生成 html

    XML Schema 与 XML DTD的技术比较与分析

    XML Schema 与 XML DTD的技术比较与分析XML Schema 与 XML DTD的技术比较与分析

    xml与dtd调用相关实例

    与xml相关内部dtd与外部dtd实例,内部dtd调用与外部dtd调用实例!

    dtd例子xml

    dtd例子xmldtd

    《XML》实验(1) -- XML Basics & DTD

    [实验目的] 1、安装并学习如何使用XMLSPY集成开发...3、掌握如何在DTD文档中声明元素及其内容模型、属性,以及实体的声明和使用;使用内部/外部DTD规则,对XML数据文档的有效性进行约束。 某软件学院XML课程实验答案

    使用DTD规范XML文档

    学习XML语言的DTD如何去写,如何更好的写出XML语言的DTD文档,对进一步深入学习XML有很大帮助。

    XML实验(1) - XML Basics & DTD

    《XML》实验任务书 (1) XML Basics & DTD [实验目的] 1、安装并学习如何使用XMLSPY集成开发环境完成XML相关的开发工作。 2、熟悉和掌握XML规范的基本内容,包括XML声明、注释、处理指令、元素、属性、CDATA段、...

    DTD规范XML文档编写

    DTD规范XML文档编写级XML文档的一般书写格式

    XML2DTD.jar

    xml转换dtd工具jar

    xml dtd xsd 标准格式

    xml dtd xsd 的编写 标准格式可以供学习参考用

    mybatis配置xml最新dtd文件

    最新版的mybatis配置xml文件所需的dtd文件

    XML DTD,XmlSchema标准参考手册

    XML DTD和XmlSchema标准参考手册!!!!!!!!!!!!!!!!!!!!!!

Global site tag (gtag.js) - Google Analytics