XML数据存储简介
如果仅按数据库这个术语的本质来看,XML文件就是数据库,它是数据的集合。在许多方面看起来它和其他文件没什么区别,无论如何,每个文件都含有某种类型的数据。作为一种“数据库”格式,XML有一些优势:例如,它是自描述的(所用的标签描述了数据的结构和类型,尽管缺乏语义),可交换的,能够以树型或图形结构描述数据。同样它也有缺点,例如,它显得有些繁琐,由于要对它进行解析和文本转换,所以数据访问速度较慢。
因此,尽管在数据量小、用户少和性能要求不太高的环境下,可以将XML 文档用作数据库,但是却不适用于用户量大、数据集成度高以及性能要求高的作业环境。
XML适合于用作所谓“数据库”的一个好例子就是.ini文件它包含应用程序的配置信息。与其写一个处理以逗号分隔(Comma-Delimited)的文件的解析器,开发一种小型的XML语言并写一个解释它的SAX程序要容易得多。此外,XML允许使用嵌套的实体,而逗号分隔的文件(Comma-Delimited Files)很难做到这点。然而,说它就是数据库还很勉强,因为它是线性读写的,而且仅用在程序开始和结束时。
比较适合于XML数据库的一些复杂的数据集就是个人通讯录(名字,电话号码,地址等),或用于描述浏览器书签以及用Napster偷来的MP3。然而,由于dBase Access之类的数据库物美价廉,即使在这种情况下似乎也没有多少理由把XML 文件作为数据库使用。XML的唯一真正好处就是数据的可交换性(Portable),由于有越来越多的工具可以用来对数据库进行XML序列化(Serializing),这一点好处似乎也要打些折扣。
本书中将对XML的经验是可以使用普通的文件系统中的文档保持XML的持续性。保存这些文档的方式与存储字处理文档或电子表格的方法相同———都保存为文件。因为它们是XML,你可以使用众多专门的XML编辑工具中的某一个来编辑它们。
1.文件系统的限制
在某些方面,基于文件的方法很好。然而,对于关键性的应用,这个文件系统的方法就不是太好了。将在这里总结一下这种方法的一些局限并且建立一个用户想实现的列表。
大小
第一个局限是文档大小。如果在书的目录列表中有20个出版商,每一个出版商有200本书
和50个作者会怎么样?用户所传递的XML文件将变得非常不实用。不仅仅是因为它太大了,而且如果你想维护文档的不同部分也变得难于操纵。例如,用户想处理巨大的文档,并且想检查同其他部分分离的部分文档。
并发性
正如用户可能想在文档不同部分间快速和简单地移动一样,用户也可能想让不同的人在不同的时间更新不同的部分。也许图书的编辑负责增加书名目和作者,经理考虑出版商。在一个文件系统中只有一个单一文档,在一个时间只能有一个人可以处理信息。如果一个编辑需要增加新的书目,同时会计更新作者的信息,一个人不得不等着其他人完成。的确,也可能两个人试图在同一时刻编辑同一文件,并且其中一个人所作的改变会完全丢失。例如,用户想允许许多人在同一时刻处理同一文档。
做这项工作的合适工具
也可能是这种情况,一个XML 编辑器可能不是处理一个文档不同部分的合适工具。用户可能让会计部门来维护作者信息,而不被文档的其他部分所牵扯,对于他们来说所选择的工
具可能是一个简单的表格。这个表格可能提供其他特性,如查电话号码或电话拨号。另一方面,维护书的列表工具可能需要包含书自身的草稿文档。例如,用户想使用最适合处理数据的工具来维护文档的各个部分。
版本
一个经常考虑的重要问题是控制同一文档的不同版本。用户想能够记录一个文档不同版本的轨迹。
安全
使用不同的工具处理文档的不同部分,并且允许不同的用户在同一时刻处理文档的不同部分引发出安全问题。例如,用户想控制一个文档的某一部分只有某人可以查看或修改。
综合性
集中和重复也存在对数据的集中和重复的问题。会计部门可能已经有一个作者的数据库,用于处理业务费用的支付。用户需要重复所有这些信息吗?当需要在目录中生成作者列表时,或者用户应该能够产生包含许多源的数据的XML文档吗?
2.解决问题
用普通的文件系统来解决这些问题是非常困难的。尽管大部分的操作系统允许许多用户同时打开一个文件,目前大部分的文本和XML编辑器不能很好地控制这些文件,让用户编辑同一文档的不同部分,并且不会影响他人的工作。另外,操作系统所应用的安全机制通常是在文件级的。这就意味着不同的人可被赋予不同的处理权限处理不同的文档,但是不能处理同一文档的不同部分。
为了解决上面所提出的问题,需要理解关于XML文档的不同观点。实际上,用户需要从用户基本的XML单元是一个文档的想法中脱离出来,而把它考虑成可操作的节点集。
对于那些刚接触XML的人来说,经常困惑的是假设存储XML文档的基本单元必须是在一个文件中的普通文本。因为一个文档必须是人可读的,所以假设就是文件必需被存储为一个文本文件,或者在一个文件系统内,或者也许在一个数据库的一个字段里。
换句话说,尽管用户花费了大量时间来看XML文档和它的结构,现实是用户应该考虑的文档应根据文档所能够表示的节点结构。