日期:2009-09-28  浏览次数:20551 次

摘要:本论文简要的探讨了XML和数据库之间的关系,同时列出一些可以使用数据库处理XML文档的软件。虽然这里不打算详尽地介绍这些软件,但是笔者希望它能够描述使用数据库处理XML文档中的主要部分。



内容:


目录
1.0 简介
2.0 XML是数据库吗?
3.0 为什么使用数据库?
4.0 数据和文档的对比
4.1 以数据为中心的文件
4.2 以文档为中心的文件
4.3 数据、文档和数据库
5.0 存储和检索数据
5.1 转移数据
5.2 将文档结构映射为数据库结构
5.2.1 模板驱动的映射
5.2.2 模型驱动的映射
5.2.2.1 表格模型
5.2.2.2 特定数据对象模型
5.3 数据类型、空值、字符集和其他
5.3.1 数据类型
5.3.2 二进制数据
5.3.3 空值
5.3.4 字符集
5.3.5 处理指令
5.3.6 存储标记
5.4 从数据库的结构生成DTD及其互逆过程







1.0 简介


本论文简要的探讨了XML和数据库之间的关系,同时列出一些可以使用数据库处理XML文档的软件。虽然这里不打算详尽地介绍这些软件,但是笔者希望它能够描述使用数据库处理XML文档中的主要部分。这里有点偏向与关系数据库,因为我的经验如此。



2.0 XML是数据库吗?


在开始讨论XML和数据库之前,我们需要回答一个萦绕在很多心头的问题: "XML是数据库吗?"在严格意义上将,如果"XML"是指XML文档时,答案是"否"。尽管XML文档包含了数据,但是如果没有其他的软件来处理这些数据,它对于数据库的意义和其他文本文件没有什么区别。



如果在更为宽泛一些的意义上将,当"XML是指XML文档以及所有相关的XML的工具和技术时,答案则是"是"。 之所以肯定是由于XML提供了许多数据库中所需要的部分:存储(XML文档),结构(DTD,

XML schema语言),查询语言(XQL, XML-QL, QUILT等), 编程接口(SAX, DOM),等等。不过...XML还缺少很多在真实的数据库中所必备的内容: 有效的存储、索引、安全、交易、数据完备性、多用户访问、触发、多文档查询等。



因此如果在数据量一般、用户较少、性能要求不高的环境下可以把XML当作数据库来使用;而在大多产品的环境中,要求有许多的用户使用、需要严格的数据完整性并且对性能有很高的要求,XML就不能胜任了。而且,考虑到象dBase和Access等数据库既便宜又十分易用,因此甚至在第一种情况下XML都很少有理由充当数据库的角色。



3.0 为什么使用数据库?


当在考虑使用XML和数据库时,第一个要问自己的问题应该是:为什么我需要使用数据库?你需要将原有的数据导出?你需要保存你的Web主页?你是要在一个电子商务应用中使用数据库,而且其中XML当做传输的数据格式?这些问题的答案都将直接影响到你对数据库和中间件(如果有的话)的选择。



例如,假设你在电子商务应用程序中使用XML来进行数据传输。这是很好的方案,因为你的数据具有高度规范的结构,而XML中的那些实体和编码对你而言并不重要了。毕竟样你关心的仅仅是数据而不在于这些数据如何在文档中进行物理的存储。如果你的应用程序相对比较简单的话,关系数据库和数据传输中间件将可以满足你的需求;如果应用程序庞大而且复杂,那么你就需要一个完全支持XML的开发环境了。



从另一方面来说,假设你有一个从零散的XML文件创建的网站。你不仅需要管理这个网站,你还要提供方法让用户可以查询其中的内容。这时你的文件将非常的不规范,而实体的使用对你来说将变得很重要,因为这些文件的结构是网站的根本。在这个例子中,你就需要某类"原生

XML"数据库可以执行版本化、跟踪实体的使用并且支持如XQL这样的查询语言。



4.0 数据和文档的对比



笔者认为,在选择数据库时,最重要的判断因素可能是你是利用数据库来保存数据还是保存文档。如果你想保存数据,你需要的数据库主要是面向数据存储(例如关系型数据库或者面向对象型数据库)以及在数据库和XML文档之间相互转换。从另一个角度来将,如果你想存储文档,你需要一个专门设计用来存储文件的内容管理系统。



虽然你可以自己把文件保存在关系数据库或面向对象数据库中,可是你常会发现你的工作是在重复内容管理系统的功能。类似的,虽然一个内容管理系统通常是建立在面向对象数据库或关系数据库之上,但要是把一个内容管理系统当做数据库来使用就可能非常的令人困绕。



你需要存储数据还是文档,答案常常取决于你的XML文档。原因是XML文件分为两大类:以数据为中心和以文档为中心。.



4.1 以数据为中心的文件


以数据为中心的文件的特点是结构相当规范、数据颗粒度好(也就是说,数据中最小的独立单元是PCDATA元素或者是属性)、很少或者没有混合内容。其中同层次元素和PCDATA的出现顺序并不重要。典型的例子是,XML文档包含了销售定单、飞行安排、餐馆菜单等等。数据为中心的文档常被用于机器的使用,这时XML可能是多余的---它仅仅是数据传输的手段而已。



例如,下面的销售定单的文档就是以数据为中心的:




ABC Industries
123 Main St.
Chicago
IL
60609

981215



Turkey wrench:
Stainless steel, one-piece construction,
lifetime guarantee.

9.95

10




Stuffing separator:
Aluminum, one-year guarantee.

13.27

5






在XML的世界中,许多内容丰富的文档实际上都是数据为中心的。我们以显示图书信息的Amazo