| 积木首页 | 500多种网页特效 | 函数手册 | 广播电台 | 高清晰图片素材 | 服务器合租 | 万年历 | 网友最新浏览记录 |
| 程序开发 | ![]() |
网页设计 | ![]() |
搜索引擎 | ![]() |
特效代码 | ![]() |
操作系统 | ![]() |
防范病毒 | ![]() |
黑客技术 | ![]() |
图形图象 | ![]() |
电脑硬件 | ![]() |
网络技术 | ![]() |
服 务 器 | ![]() |
数 据 库 | ![]() |
网文精粹 |
摘要:本论文简要的探讨了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及其互逆过程
本论文简要的探讨了XML和数据库之间的关系,同时列出一些可以使用数据库处理XML文档的软件。虽然这里不打算详尽地介绍这些软件,但是笔者希望它能够描述使用数据库处理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都很少有理由充当数据库的角色。
当在考虑使用XML和数据库时,第一个要问自己的问题应该是:为什么我需要使用数据库?你需要将原有的数据导出?你需要保存你的Web主页?你是要在一个电子商务应用中使用数据库,而且其中XML当做传输的数据格式?这些问题的答案都将直接影响到你对数据库和中间件(如果有的话)的选择。
例如,假设你在电子商务应用程序中使用XML来进行数据传输。这是很好的方案,因为你的数据具有高度规范的结构,而XML中的那些实体和编码对你而言并不重要了。毕竟样你关心的仅仅是数据而不在于这些数据如何在文档中进行物理的存储。如果你的应用程序相对比较简单的话,关系数据库和数据传输中间件将可以满足你的需求;如果应用程序庞大而且复杂,那么你就需要一个完全支持XML的开发环境了。
从另一方面来说,假设你有一个从零散的XML文件创建的网站。你不仅需要管理这个网站,你还要提供方法让用户可以查询其中的内容。这时你的文件将非常的不规范,而实体的使用对你来说将变得很重要,因为这些文件的结构是网站的根本。在这个例子中,你就需要某类"原生
XML"数据库可以执行版本化、跟踪实体的使用并且支持如XQL这样的查询语言。
笔者认为,在选择数据库时,最重要的判断因素可能是你是利用数据库来保存数据还是保存文档。如果你想保存数据,你需要的数据库主要是面向数据存储(例如关系型数据库或者面向对象型数据库)以及在数据库和XML文档之间相互转换。从另一个角度来将,如果你想存储文档,你需要一个专门设计用来存储文件的内容管理系统。
虽然你可以自己把文件保存在关系数据库或面向对象数据库中,可是你常会发现你的工作是在重复内容管理系统的功能。类似的,虽然一个内容管理系统通常是建立在面向对象数据库或关系数据库之上,但要是把一个内容管理系统当做数据库来使用就可能非常的令人困绕。
你需要存储数据还是文档,答案常常取决于你的XML文档。原因是XML文件分为两大类:以数据为中心和以文档为中心。.
以数据为中心的文件的特点是结构相当规范、数据颗粒度好(也就是说,数据中最小的独立单元是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的世界中,许多内容丰富的文档实际上都是数据为中心的。我们以显示图书信息的Amazon.com网站为例。虽然这个页面是相当巨大的文本,但是这个文本的结构是高度规范的,其中许多的部分对任何的书本描述页面都是相同的,并且特点页面中的各部分的大小都是有限的。也就是说,该页面可以通过一个简单的、数据为中心的XML文档来建立,其中包含了从数据库中检索得到的文本信息以及一个XSL样式表。通常,目前任何通过在模板中填充数据库数据而动态构造HTML页面的网站都可以被上面介绍的用以数据为中心的XML文档和一个或者多个的XSL样式表方式替代。
例如,我们来看下面的租房(Lease)文档:
ABC Industries agrees to lease the property at123 Main St., Chicago, IL from
XYZ Properties for a term of not less than
TimeUnit="Months">18 at a cost of
Currency="USD" TimeUnit="Months">1000.
可以从下面的XML文档和简单的样式表得到:
ABC Industries 123 Main St., Chicago, IL
XYZ Properties
18
1000
以文档为中心的文档的特点是:结构不规范、数据颗粒度更大(即,最小的独立数据单元是包含有混合内容的元素或者就是整个XML文档)以及含有大量的混合内容。其中相同层次的元素和PCDATA出现顺序是非常重要的。典型的例子是书、电子邮件、广告以及大多数XHTML文档。以文档为中心的文档是用于人的使用。
例如,下面的产品描述文档就是以文档为中心:
Turkey Wrench
Full Fabrication Labs, Inc.
Like a monkey wrench, but not as big.
The turkey wrench, which comes in both right- and left-handed versions (skyhook optional), is made of the finest
stainless steel. The Readi-grip rubberized handle quickly adapts
to your hands, even in the greasiest situations. Adjustment is
possible through a variety of custom dials.
You can:
- Order your own turkey wrench
- Read more about wrenches
- Download the catalog
The turkey wrench costs just $19.99 and, if you order now, comes with a hand-crafted shrimp hammer as a
bonus gift.
在现实情况中,以数据为中心的文件和文档为中心的文件之间的区别并不是很严格。例如,一个以数据为中心的文件(如一张发票),也有可能包含粗颗粒度、不规则的数据(如发票的描述部分)。而一个以文档为中心文件(如用户手册)也可能包含有良好颗粒度、规则的结构化数据(通常是元数据),例如作者和修订日期。除此之外,让你的文档具有以数据为中心或者以文档为中心的特点有助于你判断是关心数据还是文档,这也将决定你需要采用什么样的系统。
要存储或检索数据,你可以使用一个数据库(通常是关系型、面向对象型或者是层次型)和中间件(字带或者是采用第三方),你也可以使用XML服务器(即创建分布式应用的平台,例如利用XML进行数据传输的电子商务应用)。要保存文档,你将需要一个内容管理系统或者是一致性的DOM实现系统。有关各类系统的探讨在5.0
"存储和检索数据" 小节和6.0 "
href="#storingretrievingdocs">存储和检索文档 " 小节。你也能够在
href="http://www.rpbourret.com/xml/XMLDatabaseProds.htm">
XML数据库产品 中了解详细的相关产品列表。
在以数据为中心的文档中的数据内容可能来自数据库(此时你想把数据导出为XML格式),也可能是XML文档(此时你想把数据存储在数据库中)。前者的例子是在关系型数据库中存储的大量现有数据(或称遗产数据);后者的例子是将数据作为XML发布在Web中,而且你想要在你的数据库中进行存储以进行更多的处理。如此,根据你的需求,你可能需要将XML文档转移到数据库的软件,也可能需要从数据库转移到XML文档的软件,或者两者都支持。
将数据存储在数据库中时,经常需要丢弃大量与文档有关的信息,例如文档名称和DTD,同时还有其物理结构,例如实体的定义和使用、属性值和同层元素的顺序、二进制数据的存储方式(是Base64编码、是未析实体或他方式)、字符数据段和其他的编码信息。类似的,当从数据库中检索数据时,生成的XML文档结果除了非预定义实体lt(<"),gt(">"), amp("&"), apos("’"), quot(""")不包含任何CDATA或实体引用。而同层元素和属性的出现顺序也常常就是从数据库中返回的数据的次序。