我最近一直在研究如何在 VOS 和 OpenVOS 上处理 XML(可扩展标记语言)数据,我觉得将我的研究成果分享给更广泛的受众会很有帮助。
什么是XML?
以下关于XML的描述摘自戴夫·默瑟(Dave Mercer)所著的《XML入门指南》(Osborne/McGraw Hill,2001年)。
“SGML(标准通用标记语言)是一项国际标准(ISO 8879),用于定义一种既可供人阅读又可供机器读取的、与设备和系统无关的信息表示方法。符合 SGML 规则的语言被称为应用程序,而 HTML 就是一种 SGML 应用程序。 […] HTML 并未提供以标准方式扩展自身(如新增标签、属性、数据结构或内容类型)的机制……XML 并非像 HTML 那样是一种预定义的语言,而是一种预定义的语言定义方法,同时避免了 SGML 过于复杂的特性。从技术上讲,XML 包含了 SGML 功能的一部分。”
XML 模式是一种定义特定 XML 文档(或文档类)的方法。它描述了文档的结构,包括可使用的元素、属性、数据类型和约束,这与定义数据库的方式非常相似。
XML 文档类型定义(DTD)的作用与模式类似。
XML 问世已有十多年,目前存在多种竞争产品和方法,以及一系列相关标准。此外,市面上也有许多关于 XML 的专业书籍。O’Reilly 出版了一本名为《Learning XML》的书,或许能为您提供帮助。请参阅www.oreilly.com。 由 O’Reilly 维护的http://xml.com/网站提供了许多有用的文章和链接。
XML 标准由万维网联盟(World Wide Web Consortium)发布,其网站地址为http://www.w3.org。这些标准读起来相当枯燥,因此我不建议大家去阅读它们。
XML 与 HTML 相似,且与 HTML 有着相似的渊源,但它是一种通用性更强的编码格式。HTML 描述了数据在网页上显示时的样式。HTML 本身并不记录一个数字代表数量、价格还是库存编号。而 XML 通常不关注数据的外观,它描述的是数据的含义。 XML的一个常见应用是创建特定数据库的文本编码。XML能够明确指出某个字段是数值价格,另一个字段是字母数字的库存编号,以此类推。 XML文档中的所有数据均以文本形式编码,这意味着像字节序或浮点数的二进制表示法这类棘手问题不再存在。因此,XML正逐渐被认可为一种适用于计算机间数据通信的优质语言。
XML 处理工具
我知道有两个常用的开源包用于处理XML。第一个是Expat,第二个是Xerces。这两个包都是于1999年开发的。Expat是由一位个人开发的;Xerces则出自IBM之手。
处理 XML 有两种相互竞争的模型。一种是文档对象模型(DOM),另一种是 XML 简单 API(SAX)。SAX 方法(Expat 采用该方法)以线性方式读取 XML 文档,每当遇到标记元素时,就会调用一个处理函数。 DOM 方法则会读取整个 XML 文档,并构建出树状结构的层次体系。可以将 SAX 视为顺序访问方法,而 DOM 则是随机访问方法。Xerces 同时支持 SAX 和 DOM API。还有第三方软件包为 Expat 提供了 DOM API(参见“simkin”)。
虽然我们使用“XML文档”这一术语,但在实际应用中,XML编码的文本可以是文件,也可以是数据流。通常情况下,您需要提供负责收集文本并将其传递给解析器的函数,因此文本可以来自任何来源。
外籍人士
Expat 专为读取 XML 并针对每个出现的 XML 元素执行相应操作而设计。我尚未看到任何文档表明它能够创建基于 XML 的数据流。Expat 采用 C 语言编写。此外,Xerces 也有适用于 Perl 和 Java 的版本。
expat 移植版可在以下地址获取:
外籍人士的官方网站是:
以及
SourceForge 主页上有一篇关于 expat 的精彩介绍;链接如下:
您可以在http://www.libexpat.org/ 上找到其他使用 expat 的开源软件包的链接。
XERCES
Xerces 既能读取也能写入 XML 数据流。Xerces 采用 C++ 编写,旨在供 C++ 程序调用。
2008年年中,汤姆·马洛里和我Stratus 移植了Xerces 2.8.0版本。我们的目标平台是V系列平台。Xerces的当前版本为3.0.1。如果您有兴趣获取此移植版本,请联系您的客户团队。
xerces 的主网站是:
该选哪一个?
如果你只是想解析XML编码的文档,且你的处理流程支持按顺序读取数据流,那么我建议使用expat。虽然它是用C语言编写的,但得益于所有VOS编程语言都能调用用其他任何编程语言编写的函数和子程序这一特性,你可以从任何VOS语言中调用expat。
如果您的需求包括对 XML 文档执行随机访问操作,或者您想创建 XML,并且您熟悉 C++ 编程,那么我建议您使用 Xerces。
如果您需要帮助,以便为您的应用程序添加处理 XML 文档的功能,请联系您当地的Stratus 团队。
