XML和数据库之间的相关
发布时间:2018-08-23 06:39:48 所属栏目:电商 来源:站长网
导读:1.0简介本论文扼要的切磋了XML和数据库之间的相关,同时列出一些可以行使数据库处理赏罚XML文档的软件。固然这里不规划细致地先容这些软件,可是笔者但愿它可以或许描写行使数据库处理赏罚XML文档中的首要部门。这里有点方向与相关数据库,由于我的履历云云。2.0XML是数
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的天下中,很多内容富厚的文档现实上都是数据为中心的。我们以表现图书信息的Amazon.com网站为例。固然这个页面是相等庞大的文本,可是这个文本的布局是高度类型的,个中很多的部门对任何的册本描写页面都是沟通的,而且特点页面中的各部门的巨细都是有限的。也就是说,该页面可以通过一个简朴的、数据为中心的XML文档来成立,个中包括了从数据库中检索获得的文本信息以及一个XSL样式表。凡是,今朝任何通过在模板中填凑数据库数据而动态结构HTML页面的网站都可以被上面先容的用以数据为中心的XML文档和一个可能多个的XSL样式表方法更换。 ABC Industries agrees to lease the property at 123 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 4.2 以文档为中心的文件 以文档为中心的文档的特点是:布局不类型、数据颗粒度更大(即,最小的独立数据单位是包括有殽杂内容的元素可能就是整个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. 4.3 数据、文档和数据库 在实际环境中,以数据为中心的文件和文档为中心的文件之间的区别并不是很严酷。譬喻,一个以数据为中心的文件(如一张发票),也有也许包括粗颗粒度、犯科则的数据(如发票的描写部门)。而一个以文档为中心文件(如用户手册)也也许包括有精采颗粒度、法则的布局化数据(凡是是元数据),譬喻作者和修订日期。除此之外,让你的文档具有以数据为中心可能以文档为中心的特点有助于你判定是体谅数据照旧文档,这也将抉择你必要回收什么样的体系。 要存储或检索数据,你可以行使一个数据库(凡是是相关型、面向工具型可能是条理型)和中间件(字带可能是回收第三方),你也可以行使XML处事器(即建设漫衍式应用的平台,譬喻操作XML举办数据传输的电子商务应用)。要生涯文档,你将必要一个内容打点体系可能是同等性的DOM实现体系。有关种种体系的切磋在5.0 "存储和检索数据" 末节和6.0 " href="#storingretrievingdocs">存储和检索文档 " 末节。你也可以或许在 href="http://www.rpbourret.com/xml/XMLDatabaseProds.htm"> XML数据库产物 中相识具体的相干产物列表。 5.0 存储和检索数据 在以数据为中心的文档中的数据内容也许来自数据库(此时你想把数据导出为XML名目),也也许是XML文档(此时你想把数据存储在数据库中)。前者的例子是在相关型数据库中存储的大量现稀有据(或称遗产数据);后者的例子是将数据作为XML宣布在Web中,并且你想要在你的数据库中举办存储以举办更多的处理赏罚。云云,按照你的需求,你也许必要将XML文档转移到数据库的软件,也也许必要从数据库转移到XML文档的软件,可能两者都支持。 5.1 转移数据 将数据存储在数据库中时,常常必要扬弃大量与文档有关的信息,譬喻文档名称和DTD,同时尚有其物理布局,譬喻实体的界说和行使、属性值和同层元素的次序、二进制数据的存储方法(是Base64编码、是未析实体或他方法)、字符数据段和其他的编码信息。相同的,当从数据库中检索数据时,天生的XML文档功效除了非预界说实体lt(<"),gt(">"), amp("&"), apos("’"), quot(""")不包括任何CDATA或实体引用。而同层元素和属性的呈现次序也经常就是从数据库中返回的数据的序次。 尽量一开始有些让你受惊,可是这经常是公道的。譬喻,假设你必要用XML作为数据名目把一张贩卖从一个数据库中转移到另一个数据库中。在这种环境下,在XML文档中并不体谅贩卖单的编号是生涯在贩卖单的日期的前面照旧后头,也不消体谅是否将顾主的名称生涯在字符数据(CDATA)段照旧作为一个外部实体,可能直接当成一个PCDATA。最重要的在于相干的数据是从第一个数据库转移到第二个数据库中。这样,这个数据传输软件就必要思量数据的条理布局(该布局将贩卖单的有关举办举办了分组),而其他则不必过多思量。 忽略文档信息以及其物理布局的效果之一是文档的"逆反回归"的纷歧致效应,即将一个文档的数据存储在数据库中,然后按照这些数据从头组织成新的文档。而即即是按照尺度名目处理赏罚,获得的也经常是和前面差异的文档。这是否可以接管要取决于你的需求,并且也将影响到你对数据库和数据传输中间件的选择。 5.2 从文档布局到数据库布局的映射 为了在XML和数据库之间传输数据,必要在文档布局和数据库布局之间举办彼此的映射。这样的映射凡是分为两大类: 模板驱动和模式驱动。 5.2.1 模板驱动的映射 在以模板驱动的映射中,没有预先界说文档布局和数据库布局之间的映射相关 ,而是行使将呼吁语句内嵌入模板的要领,让数据传输中间件来处理赏罚该模板。譬喻,思量下面的模板(留意该模板并不合用任何现实的产物),在<SelectStmt>元素中内嵌了SELECT语句: <?xml version="1.0"?> <FlightInfo> <Intro>The following flights have available seats:</Intro> <SelectStmt>SELECT Airline, FltNumber, Depart, Arrive FROM Flights</SelectStmt> <Conclude>We hope one of these meets your needs</Conclude> </FlightInfo> 当数据传输中间件处理赏罚到该文档时,每个SELECT语句都将被各自的执行功效所替代,获得下面的XML名目: <?xml version="1.0"?> <FlightInfo> <Intro>The following flights have available seats:</Intro> <Flights> <Row> <Airline>ACME</Airline> <FltNumber>123</FltNumber> <Depart>Dec 12, 1998 13:43</Depart> <Arrive>Dec 13, 1998 01:21</Arrive> </Row> ... </Flights> <Conclude>We hope one of these meets your needs</Conclude> </FlightInfo> 这种以模板驱动的映射可以相等的机动。譬喻,有些产物可以应承你在任何功效荟萃中替代你想要的内容(包罗在SELECT中行使参数),而不是象上面的例子中简朴地名目化功效。其它它还支持行使编程来举办结构,譬喻轮回和前提判定布局。尚有一些还支持SELECT语句的参数化,譬喻通过HTTP来转达参数。 今朝,以模板驱动的映射只支持从一个相关型数据库转换成XML文档的环境。 5.2.2 模子驱动的映射 在以模子驱动的映射中,操作XML文档布局对应的数据模子显式或隐式地将映射成数据库的布局,并且反之亦然。它的弱点是机动性不足,可是却简朴易用,这是由于它是基于详细的数据模子来举办映射的,凡是可以或许为用户实现许多地转换事变。因为将数据从数据库转换成XML的功效依照了单个模子, 因此凡是在这种方法下凡是团结XSL来提供模板驱动的体系中所具有的机动性。 在XML文档中的数据视图凡是有两种模子:表格模子和特定命据工具模子。偶然辰也也许会呈现其他的模子。譬喻,通过回收ID和IDREF属性,一个XML文档可以用来一个指定的图形。不外,许多现有的中间件并不支持这些模子。 5.2.2.1 表格模子 很多中间件软件包都回收表格模子在XML和相关型数据库之间举办转换。它把XML的模子当作是一个单独的表格可能是一系列的表格。也就是说,XML的文档的布局和下面的例子相相同,个中在单个表格的环境下,<database>并不呈现: <database> <table> <row> <column1>...</column1> <column2>...</column2> ... </row> ... </table> ... </database> 个中的术语"table"可领略为单个的功效集(当从数据库向XML中转换数据时),可能是一个单独的表格或可更新的视图(当从XML向数据库转换数据时)。假如数据必要来自多个功效集(当数据来自数据库中时)可能与仅仅表告竣一系列表格的荟萃(当转换数据到数据库时)对比,XML的文档包括有更深条理的嵌套元素,那么相同的转换险些是不行能的。 5.2.2.2 特定命据工具模子 XML文档中第二种广泛的数据模子是特定命据工具的树型布局。在该模子中,元素范例凡是对应工具,而XML中的内容模子、属性和PCDATA则对应工具的属性。这种模子直接映射成面向工具的数据库和条理型数据库,虽然借助于传统的工具-相关映射技能和SQL 3工具视图也可以映射成相关数据库。要留意的是,这种模子并不是文档工具模子(DOM)。DOM是对文档自己举办建模,而不是对文档中的数据。如 href="#writeyourown">6.1.2末节所述,DOM用来在相关型数据库的基本上成立内容打点体系。 譬喻,上面的贩卖定单文档就可以看作是由五个类所构成的树型布局。如下面的视图所示,包罗Orders, SalesOrder, Customer, Line和Part类: Orders | SalesOrder / | Customer Line Line | | Part Part 当把一个XML文档建模为一棵特定命据工具树时,就没有须要要求元素必然要对应于工具。譬喻,假如一个元素只包括PCDATA,如贩卖定单文档中的CustName元素,它可以看成一个属性举办处理赏罚,因此属性只包括单一的、标量型数值。相同的,偶然将殽杂元素或元素内容模子化成属性也长短常有效的。一个现成的例子就是在贩卖定单文档中对Description元素的处理赏罚:尽量它在XHTML的名目中有殽杂内容,可是将Description元素看作单个的属性会更有效些,由于它的构成部门自己并没有什么意义。 5.3 数据范例、空值、字符荟萃和其余 本节将切磋一些有关来自数据库的XML文档的存储题目。凡是,你抉择不了你选择的中间件是怎样办理这些题目的,可是你最好应该意识到这些题目的存在,由于这有助于你正确选择你的中间件。 5.3.1 数据范例 XML不支持任何有现实意义的数据范例。除了未析实体,全部XML文档中的数据都被当成文原来看待,即便它可以或许用其他的数据范例(如日期可能整数)来暗示。凡是,数据转换中间件将把XML文档中的文本转换成其余数据库中的数据范例,反之亦然。然而,特定的数据范例所识此外文本名目是有限定的,譬喻受到提供的JDBC Driver所支持的数据范例的限定。在这些浩瀚的数据范例中,日期范例凡是会导致贫困。差异国际地域的数字名目标差别也也许发生题目。 5.3.2 二进制数据 凡是有两种要领将二进制数据生涯到XML文档中的:未析实体和Base64编码处理赏罚(一种MIME编码要领,可以将二进制数据映射成US-ASCII的子集)。 对付相关型数据库,这两种要领都也许存在题目,由于从数据库中生涯和检索二进制数据的法则很是的严酷,这样对会导致中间件呈现题目。 其它,并没有一种尺度的标记用来声名一个XML文档中的元素包括有Base64编码数据,从而使得中间件也许基础就不可以或许辨认这种编码。最后,在存储数据到数据库时,也许会忽略与未析实体或Base64编码元素相干的标记。以是,假如对你而言二进制数据很是重要的话,请务须要确认你的中间件是否支持二进制数据。 5.3.3 空值 在数据库天下中,空值(null)数据意味着数据不存在值。可是这与一个值为0的数字或长度为0的字符串有很大的区别。譬喻,假设你的数据来自一个情景站, 假如情景站的温度计出了短处读不出温度值,那么你的数据库中将存储一个null值而不是一个0。显然,值为0完满是其它一回事了 XML中空值观念的支持可以通过配置可选的元素范例或属性来实现。假如元素范例或属性值为null,XML只要在文档不包括该元素可能属性就可以了。可是对数据库而言,空的元素或包括0长度字符串的属性并不是空值null:它们的值为长度为0的字符串。 当在XML文档和数据库布局之间彼此映射进程中,你必需出格留意那些可选的元素范例或属性是否对应于数据库中的空值项。假如不这么做的话,很也许呈现插入错误(当将数据转换到数据库中时)可能无效文档错误(当将数据从数据库读出时)。 由于同样要用标记空值,XML中相对与数据库而言更为机动。详细来讲,很多XML用户很也许包括空字符串的空元素或属性是空值。这个时辰你必需思量怎样选择吻合的中间件来办理这个题目。一些中间件可以让用户选择在XML文档中界说用什么来构成空值。 5.3.4 字符集 按照界说,除了一些节制字符,XML文档可以或许包括任何的Unicode字符。可是不幸的是,许大都据库都限定或则不支持Unicode,并且必要一些非凡的设置才气够处理赏罚非ASCII编码的字符数据。假如你的数据包括了非ASCII字符,那么务须要核实你的数据库和中间件是否可以或许处理赏罚这些字符。 5.3.5 处理赏罚指令 处理赏罚指令并不属于XML文档中的“数据”部门,因此今朝很多中间件也许不能正常的处理赏罚。题目是,尤其是在将XML文档布局严酷映射成数据库布局时,处理赏罚指令凡是是很难处理赏罚的,由于它们可以假造地呈此刻文档的任何位置。因此,中间件就很难判定将它们生涯到什么位置以及在什么时辰检索读取出来。假如处理赏罚指令和文档的轮回回覆("round-tripping")对你而言长短常重要的话,就务必搜查你的中间件是如办理这个题目的。 5.3.6 存储标志 在 href="#markup">4 href="#markup">.2.2 末节中提到,偶然辰将包括元素可能殽杂内容的元素不作进一步的理会而直接生涯到数据库中长短常有效的。最常见的要领是简朴的把这个标志自己直接生涯到数据库中。不幸的是,当从数据库中检索数据时将发生题目:不行能判定数据库中的标志到底是真的标志照旧代表了标志字符的实体,如由lt和gt转义的字符。 譬喻,下面的description元素: <description> <b>Confusing example:</b> <foo/> </description> 在数据库中存储为: <b>Confusing example:</b> <foo/> 这时数据库就不能判定<b>和<foo>是标志照旧文本。有几种也许的办理要领,如以必然的方法来符号标志可能对非标志的标志字符行使实体。可是这时你要分外留意这样的方法是否和行使这些的数据的其余应用兼容。譬喻,假如你想查询数据库中的小于号("<")和 lt实体("<")时就要出格把稳。 5.4 从数据库的布局天生DTD及其互逆进程 在XML文档和数据库之间转换数据时,一个广泛题目是:怎样从数据库的布局(Schema)天生XML的DTD,假如从XML的DTD发生数据库的布局。简而言之,这长短常直接的操纵,可是发生的功效凡是离很多用户的祈望值尚有一些间隔。 (还要留意这凡是是一次性操纵,而大大都应用,尤其是全部的垂直性应用都团结了已知的DTD和相关型Schema的荟萃。显而易见的特例是在相关数据库中存储随机XML文档可能将相关型数据宣布为XML文档的器材;而在后头的环境中,DTD的浸染并不明明。) 对付元素范例中每个有单一数值的属性和只包括有PCDATA内容的子元素范例在该ta ble中新成立一列(字段)。假如子元素范例或则属性是可选的,让该字段应承为空。 对付每个有多值的属性或则多仅含有PCDATA内容的子元素范例,再成立一个分隔的 table来生涯他们的值,通过它们的父表的首要害字毗连到父表。 对付每个子元素,这些子元素自己尚有元素或则殽杂内容,行使父表中的要害字将 父元素表毗连到子元素表中。 而下面则是一个从相关数据库的布局天生XML文档的进程(简化过的): 对每个table,新建一个元素。 对表中的每列,成立一个属性或则只含PCDATA的子元素 对每个包括有在主键/外键要害字相关中主键值的列,新建一个子元素。 譬喻,下面的进程(经简化)声名白怎样从一个DTD天生一个相关型布局: 对付每种包括元素可能殽杂内容的元素范例,新建一个表格和一个主键字段。 对付每个包括殽杂内容的元素范例,建设一个单独的表格,个中存放未析数据,通过父元素主键链接到父表格。 对付此元素范例的每个单值属性和只包括未析数据内容、只呈现一次的子元素,在该表格中建设一个字段。假如元素范例可能属性是可选的,可以让配置该字段为空值。 对付每个多值属性和多次呈现的子元素,建设一个单独的表格来存储数值,而且通过父元素主键链接到父表格。 对每个有元素可能殽杂内容的子元素,通过父元素主键将父元素表格和子元素表格相毗连。 下面的进程(经简化)声名白怎样从一个相关型的布局天生一个DTD: 对付每个表格,新建一个元素; 对付表格中的每个字段,新建一个属性可能是只包括未析数据的子元素; 对付每个表格字段中提供主键的主键/外键的相关都新建一个子元素。 不幸的是,这些进程还存在着一些缺陷。譬喻,DTD中没有要领预先精确地划定命据范例可能字段长度。 由于任何的预先界说(譬喻通过读取一个示例文档)在读取其余“范例”的文档可能其他文档中包括有高出字长内容的文档时就会发生错误。(持久之策是行使XML schema文档的数据范例。)简朴来说,当从一相关型布局天生DTD时,是没有步伐预先判定子元素“应该”呈现的次序可能字段(如数据库内部的行标识)是否该举办完全转换。 在以上两种环境中都也许发生定名的斗嘴。 尽量有这样那样的缺陷,可是这些要领如故可以或许很好地奠基在相关型布局和DTD之间相互转换的出发点。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |