可能因为微软、IBM这样的商业公式和开源社区在数据表达方面的不谋而合,以及再加上W3C推波助澜XML的相关技术总是和应用结合得非常紧密。XML从产生就不乏优秀的工具。在最近一个项目中,我们就使用了原生的XML存储数据库Berkely DBXML(BDB)。
其实,DBXML使用了大量优秀的开源工具来实现,其中数据存储使用Berkely DB,XML解析使用XercesC,XPath的实现使用Pathan(2.3以前),XQilla(2.3以后)。关于这几个库,我将官方网站的介绍摘录如下:
- Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents.
- Pathan is a open source library which allows developers using Xerces-C to parse and evaluate XPath expressions for XML node selection.
- XQilla is an XQuery and XPath 2 library and command line utility written in C++ , implemented on top of the Xerces-C. XQilla is originally based on an open source project called Pathan, that was hosted by Decisionsoft and implemented XPath 2. However, XQilla has been developed and improved considerably from the Pathan code base.
- Xalan is an XSLT processor for transforming XML documents into HTML, text, or other XML document types
在接下来的工作中,我们希望把存储的XML表达出来。我们通过XSL来实现XML的表达,有趣的是XSL
本身也是XML,又是一个有趣的递归。
把DBXML与XSL联系起来。我们找到了一个DBXML API中函数,他可以将XML Node 以Xerces DOMDocument 方式返回:
xercesc_2_6::DOMDocument *XmlDocument::getContentAsDOM() const;
我们要还要引入一个库Xalan C++。Xalan C++可以将生成的结果存储在一个Xerces DOMDocument中;可以使用
TransformToXercesDOM将XercesDOM作为转换的源。
在XML开源软件中还有一支,那就是来自MIT的xmlsoft.org。其中最著名的libxml2和基于libxml2的libxslt,均应用到gnome上。这些都是C的API包,在此基础上有C++绑定,PHP绑定,perl绑定等等。debian下的php-mod-xml就源自这里。
openoffice的OpenDocument基于XML,xml.openoffice.org上也有一些实现,同样值得关注。