首页 理论教育 对象与事件的接口设计

对象与事件的接口设计

时间:2023-06-27 理论教育 版权反馈
【摘要】:语法分析器有两类接口:基于对象接口和基于事件的接口。DOM是基于对象的语法分析器的标准的API。作为基于对象的接口,DOM通过在内存中显示地构建对象树来与应用程序通信。图6-2 将XML结构映射成应用程序结构SAX是基于事件的接口,基于事件的语法分析器将事件发送给应用程序。在XML语法分析器中可以处理以下方面的事件。在XML早期,DOM得益于W3C批准的官方API这一身份。

对象与事件的接口设计

语法分析器有两类接口:基于对象接口和基于事件的接口。DOM是基于对象的语法分析器的标准的API。作为基于对象的接口,DOM通过在内存中显示地构建对象树来与应用程序通信。对象树是XML文件中元素树的精确映射。

DOM易于学习和使用,因为它与常用的XML文档关系密切,两者的语法十分相似。在现实应用中,DOM的最常见应用便是操作XML文件中的数据,例如,浏览器程序和编译器程序。

然而,对于大多数应用程序,处理XML文档只是其众多任务中的一种。例如,记账软件包可能导入XML格式的发票数据,但这不是其主要用途。计算账户余额、跟踪支出以及使付款与发票匹配才是主要活动。DOM模型不太适合记帐应用程序,因为在那种情况下,应用程序必须在内存中维护数据的两个副本(一个是DOM树,另一个是应用程序自己的结构)。在内存维护两次数据会使应用程序运行效率下降。对于桌面应用程序来说,这可能不是主要问题,但是它可能会导致服务器瘫痪。对于不以XML为中心的应用程序,SAX是明智的选择。实际上,SAX并不在内存中显式地构建文档树。它使应用程序能用最有效率的方法存储数据。

应用程序如何在XML树及其自身数据结构之间进行映射,如图6-2所示。

978-7-111-52203-4-Part02-183.jpg

图6-2 将XML结构映射成应用程序结构

SAX是基于事件的接口,基于事件的语法分析器将事件发送给应用程序。这些事件类似于用户界面事件,例如,浏览器中的ONCLICK事件或者Java中的AWT/Swing事件。

事件通知应用程序发生了某件事并需要应用程序作出反应,在浏览器中,通常为响应用户操作而生成事件:当用户单击按钮时,按钮产生一个ONCLICK事件。

在XML语法分析器中,事件与用户操作无关,而与正在读取的XML文档中的元素有关。在XML语法分析器中可以处理以下方面的事件。

□元素开始和结束标记。(www.xing528.com)

□元素内容。

□实体。

□语法分析错误

语法分析器在读取文档时生成事件的过程,如图6-3所示。

978-7-111-52203-4-Part02-184.jpg

图6-3 语法分析器生成事件

这两种API中没有一种在本质上是最好的,它们适用于不同的需求。在需要更多控制时使用SAX;要增加方便性时,则使用DOM,例如,DOM在脚本语言中很流行。

采用SAX的主要原因是效率。SAX比DOM做的事要少,但提供了对语法分析器的更多控制。当然,如果语法分析器的工作减少,则意味着开发者有更多的工作要做。而且,正如我们已讨论的,SAX比DOM消耗的资源要少,因为它不需要构建文档树。在XML早期,DOM得益于W3C批准的官方API这一身份。逐渐地,开发者选择了功能性而放弃了方便性,并转向了SAX。

SAX的主要限制是它无法向后浏览文档。实际上,激发一个事件后,语法分析器就将其“忘记”。如我们所看到的,应用程序必须显式地缓冲其感兴趣的事件。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈