![畢業(yè)設(shè)計(jì)(論文)將XML數(shù)據(jù)存入關(guān)系數(shù)據(jù)庫中的方法設(shè)計(jì)_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/7/f000c022-16f8-4ca1-bba9-bfba54323153/f000c022-16f8-4ca1-bba9-bfba543231531.gif)
![畢業(yè)設(shè)計(jì)(論文)將XML數(shù)據(jù)存入關(guān)系數(shù)據(jù)庫中的方法設(shè)計(jì)_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/7/f000c022-16f8-4ca1-bba9-bfba54323153/f000c022-16f8-4ca1-bba9-bfba543231532.gif)
![畢業(yè)設(shè)計(jì)(論文)將XML數(shù)據(jù)存入關(guān)系數(shù)據(jù)庫中的方法設(shè)計(jì)_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/7/f000c022-16f8-4ca1-bba9-bfba54323153/f000c022-16f8-4ca1-bba9-bfba543231533.gif)
![畢業(yè)設(shè)計(jì)(論文)將XML數(shù)據(jù)存入關(guān)系數(shù)據(jù)庫中的方法設(shè)計(jì)_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/7/f000c022-16f8-4ca1-bba9-bfba54323153/f000c022-16f8-4ca1-bba9-bfba543231534.gif)
![畢業(yè)設(shè)計(jì)(論文)將XML數(shù)據(jù)存入關(guān)系數(shù)據(jù)庫中的方法設(shè)計(jì)_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/7/f000c022-16f8-4ca1-bba9-bfba54323153/f000c022-16f8-4ca1-bba9-bfba543231535.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文)摘 要隨著internet的發(fā)展和人們對數(shù)據(jù)標(biāo)準(zhǔn)性、平臺無關(guān)性的要求越來越高,xml(extensible markup language)得到了廣泛的應(yīng)用,同時人們對于xml的存儲方式提出了更高的要求。本課題意在設(shè)計(jì)一種將xml數(shù)據(jù)存入關(guān)系數(shù)據(jù)庫中的方法,并按照該方法開發(fā)一個xml數(shù)據(jù)裝入關(guān)系數(shù)據(jù)庫的軟件。本文首先對xml的基本知識進(jìn)行介紹,隨后討論用關(guān)系數(shù)據(jù)庫存儲xml數(shù)據(jù)的原因,并對目前已經(jīng)提出的一些xml文檔在關(guān)系數(shù)據(jù)庫中的存儲方式進(jìn)行研究討論,在此基礎(chǔ)上提出一個無模式的xml文檔對于關(guān)系數(shù)據(jù)庫的存儲方法。這個方法將xml數(shù)據(jù)分為文檔、元素、屬性、文本四種節(jié)
2、點(diǎn),并將這四種節(jié)點(diǎn)映射為數(shù)據(jù)庫中四個關(guān)系表。另外將dom樹中的元素節(jié)點(diǎn)關(guān)系映射為一個數(shù)據(jù)庫關(guān)系表,這五個表是本課題中數(shù)據(jù)庫設(shè)計(jì)的核心。五個表中包含的屬性信息要求方便于dom接口和sax接口兩種方式訪問。提出存儲方法后,我們將利用這種存儲方法開發(fā)一個關(guān)系數(shù)據(jù)庫中xml數(shù)據(jù)裝入系統(tǒng)。文章后半部分將詳細(xì)說明該軟件的需求分析、設(shè)計(jì)、具體開發(fā)細(xì)節(jié)以及測試。該軟件的測試結(jié)果驗(yàn)證了這種存儲方法能夠有效的將無模式的xml文檔存入關(guān)系數(shù)據(jù)庫。關(guān)鍵詞:關(guān)系數(shù)據(jù)庫、xmlabstractwith the development of internet and the peoples higher and highe
3、r requirement for datas standardization and its independent of platform,xml(extensible markup language) is widely used,in the mean time the higher requirement for the storage of xml data is asked.this research group designed a method to store xml data into rdb(relational data base) of which the tech
4、nology have been very mature and widely used.then we developed an application that can store the xml data into rdb using this method.at first this article will introduce basical knowledge of xml,and then discuss why store xml data using rdb.after that well research and discuss the some methods for s
5、toring xml data into rdb that have been put forward.based on them well design a storage method from non-schema xml data to rdb.we classified xml data as four kind of nodes such as document,element,atribute and text.these four nodes are mapped to four tables in the rdb and we mapped the dom tree into
6、 a table too.the five tables is the core of the rdb design.the attribute information involved in the tables is required that both dom and sax interface can be easy to get information from the tables.after giving the method we designed well develop an application that can storing the xml data into rd
7、b using that method.its requirement analyse,design details and test result well be described in the second half part of the article.the test result will show that using the storage method we can storing the non-schema xml data into the rdb effectively.key words:rdb(relational data base),xml目 錄摘 要1ab
8、stract2目 錄31 緒 論51.1 課題背景及研究意義51.2 xml知識簡介51.2.1 xml51.2.2 dtd和schema71.2.3 dom71.2.4 sax91.3基于關(guān)系數(shù)據(jù)庫的xml存儲技術(shù)101.3.1現(xiàn)存的基于關(guān)系數(shù)據(jù)庫的xml存儲技術(shù)101.3.2一個模式驅(qū)動映射實(shí)例101.4 作者的工作111.5 本章小結(jié)112 無模式映射的設(shè)計(jì)122.1方案設(shè)計(jì)要求122.2設(shè)計(jì)思想122.3方案詳細(xì)設(shè)計(jì)122.3.1e-r圖(實(shí)體集中只畫主碼)132.3.2 實(shí)體集和聯(lián)系132.3.3 設(shè)計(jì)方法與策略142.3.4 數(shù)據(jù)庫基本表設(shè)計(jì)162.3.5數(shù)據(jù)庫優(yōu)化162.3.6數(shù)
9、據(jù)字典162.4本章總結(jié)183 關(guān)系數(shù)據(jù)庫中xml裝入系統(tǒng)193.1 任務(wù)概述193.2 設(shè)計(jì)思想概述193.3 需求規(guī)定203.3.1 系統(tǒng)用例圖203.3.2 用例事件流203.3.3 開發(fā)環(huán)境需求203.4 系統(tǒng)設(shè)計(jì)213.4.1 系統(tǒng)體系結(jié)構(gòu)213.4.2 序列圖設(shè)計(jì)213.4.3 類設(shè)計(jì)233.4.4 類關(guān)系圖293.4.5 算法的實(shí)現(xiàn)策略303.4.6 異常處理313.5 系統(tǒng)測試323.5.1 系統(tǒng)功能測試323.5.2 測試總結(jié)373.5.3 與模式映射xml-rdb裝入系統(tǒng)的分析對比373.6 本章小節(jié)38結(jié) 論39致 謝40參考文獻(xiàn)411 緒 論1.1 課題背景及研究意義x
10、ml(extensible markup language)是w3c于1998年提出的數(shù)據(jù)文件格式標(biāo)準(zhǔn),它是sgml(standard generalize markuplanguage)的受限子集,但更簡練易用。自被提出以來就由于其標(biāo)準(zhǔn)性、可擴(kuò)展性和半結(jié)構(gòu)化等特征得到了各方面的關(guān)注和使用。隨著internet的高速發(fā)展和人們對數(shù)據(jù)標(biāo)準(zhǔn)性、平臺無關(guān)性的要求的提高,其應(yīng)用也更加廣泛。目前xml文檔的存儲方式主要有三種:1.作為普通文件存儲于文件系統(tǒng)中2.存儲于專門為xml設(shè)計(jì)的xmldb中3.存儲于關(guān)系數(shù)據(jù)庫中第一種方法由于文件系統(tǒng)在組織、管理、檢索等各種數(shù)據(jù)服務(wù)功能上的固有不足而基本不被使用。
11、后兩種方法各有優(yōu)缺點(diǎn),但由于目前關(guān)系數(shù)據(jù)庫管理系統(tǒng)在各種應(yīng)用中仍占主體地位,因此如何更加合理地將xml文檔進(jìn)行轉(zhuǎn)換并存儲到關(guān)系數(shù)據(jù)庫中具有很大的研究價(jià)值。本課題主要研究如何有效的將xml數(shù)據(jù)存儲到關(guān)系數(shù)據(jù)庫中,并設(shè)計(jì)一種可以盡量避免或簡化上述問題的存儲方法,用此方法開發(fā)一個關(guān)系數(shù)據(jù)庫中xml數(shù)據(jù)裝入系統(tǒng)以驗(yàn)證該方法的正確性和可行性。1.2 xml知識簡介這一節(jié)主要介紹xml的基本知識,包括xml概念、文檔類型定義(dtd)、xml模式(schema)、文檔對象模型(dom)、sax(simple api for xml)接口等等。1.2.1 xmlxml即為可擴(kuò)展的標(biāo)記語言(extensibl
12、e markup language)。xml是一套定義語義標(biāo)記的規(guī)則,這些標(biāo)記將文檔分成許多部件并對這些部件加以標(biāo)識。xml是標(biāo)記語言。理解xml,首先要理解標(biāo)記。先說說html的標(biāo)記(markup),通俗地講,它就是一種用來給文本添加標(biāo)記的語言。在html里每個標(biāo)志都是有確切含義的。例如,在html 中,標(biāo)簽b的含義是要求html瀏覽器將一段文本加粗表示,而標(biāo)簽center的含義是告訴瀏覽器將這段文本在一行的中間顯示。而xml并非象html那樣,提供了一組事先已經(jīng)定義好了的標(biāo)簽,而是提供了一個標(biāo)準(zhǔn),利用這個標(biāo)準(zhǔn),你可以根據(jù)實(shí)際需要定義自己的新的置標(biāo)語言,并為你的這個置標(biāo)語言規(guī)定它特有的一套標(biāo)
13、簽。準(zhǔn)確的說,xml是一種源置標(biāo)語言,它允許你根據(jù)它所提供的規(guī)則,制定各種各樣的置標(biāo)語言。xml有兩個先驅(qū)sgml和html,這兩個語言都是非常成功的標(biāo)記語言,sgml的全稱是標(biāo)準(zhǔn)通用化標(biāo)記語言,它從80年代初開始使用。正如xml一樣,sgml也可用于創(chuàng)建成千上萬的標(biāo)記語言,它為語法置標(biāo)提供了異常強(qiáng)大的工具,同時具有極好的擴(kuò)展性,因此在分類和索引數(shù)據(jù)中非常有用。目前,sgml多用于科技文獻(xiàn)和政府辦公文件中。sgml 非常之復(fù)雜,其復(fù)雜程度對于網(wǎng)絡(luò)上的日常應(yīng)用簡直不可思議。不僅如此,sgml非常昂貴。html免費(fèi)、簡單,而且它獲得了廣泛的支持。它是一個非常簡單的sgml語言,可以方便普通人的使用
14、。1996年人們開始致力于描述一個置標(biāo)語言,它既具有sgml的強(qiáng)大功能和可擴(kuò)展性,同時又具有html的簡單性。w3c于1998年2月批準(zhǔn)了xml的1.0版本,一個嶄新而大有前途的語言誕生了。 xml具有以下優(yōu)點(diǎn):1.xml具有自說明性。xml能夠應(yīng)用于各種領(lǐng)域的原因,就是xml具有到目前為止其他方法所不具備的數(shù)據(jù)描述特點(diǎn),控制信息不是采用應(yīng)用軟件的獨(dú)有形式,而是采用誰都可以看得懂的標(biāo)記形式來表現(xiàn),所以xml最適合作為數(shù)據(jù)交換的標(biāo)準(zhǔn),這也是 xml受人關(guān)注的原因。允許各種不同的專業(yè)(如音樂、化學(xué)、數(shù)學(xué)等)開發(fā)與自己的特定領(lǐng)域有關(guān)的標(biāo)記語言。這就使得該領(lǐng)域中的人們可以交換筆記、數(shù)據(jù)和信息,而不用擔(dān)
15、心接收端的人是否有特定的軟件來創(chuàng)建數(shù)據(jù)。2.xml具有通用性。由于xml是非專有的并易于閱讀和編寫,就使得它成為在不同的應(yīng)用間交換數(shù)據(jù)的理想格式.xml使用的是非專有的格式,不受版權(quán)、專利、商業(yè)秘密或是其他種類的知識產(chǎn)權(quán)的限制。xml的功能是非常強(qiáng)大的,同時對于人類或是計(jì)算機(jī)程序來說,都容易閱讀和編寫。因而成為交換語言的首選。此外,相對于html,xml具有先天的優(yōu)越性。為了自己的瀏覽器增加一些特殊的顯示效果,html加入了一些特殊的標(biāo)記。日益增多的標(biāo)簽不但使html越來越龐大,瀏覽器的開發(fā)越來越復(fù)雜,還降低了不同瀏覽器之間的兼容性。盡管html的標(biāo)簽越來越多,其顯示力卻還遠(yuǎn)遠(yuǎn)不夠。如果你希望
16、非常精確地表現(xiàn)一些你自己的數(shù)據(jù),可能你需要一些現(xiàn)在在html中尚不存在的標(biāo)簽?,F(xiàn)在html內(nèi)部結(jié)構(gòu)的條理性越來越差。你寫的html文件,甚至是那些專門的所見即所得工具自動生成的html文件,可能在語法上會錯誤百出,不過沒關(guān)系,瀏覽器照樣能讀它。 現(xiàn)在有了xml,你終于可以自由地制定你自己的置標(biāo)語言,而不必再念念不忘微軟、 netscape、w3c的首肯了。實(shí)際上,現(xiàn)在許多行業(yè)、機(jī)構(gòu)都利用xml定義了自己的置標(biāo)語言。1.2.2 dtd和schemadtd是一種保證xml文檔格式正確的有效方法,可以比較xml文檔和dtd文件來看文檔是否符合規(guī)范,元素和標(biāo)簽使用是否正確。一個dtd文檔包含:元素的定
17、義規(guī)則,元素間關(guān)系的定義規(guī)則,元素可使用的屬性,可使用的實(shí)體或符號規(guī)則。dtd文件也是一個ascii的文本文件,后綴名為.dtd。例如:myfile.dtd。由于dtd存在不少缺陷,比方說:dtd是基于正則表達(dá)式的,描述能力有限;dtd沒有數(shù)據(jù)類型的支持,在大多數(shù)應(yīng)用環(huán)境下能力不足;dtd的約束定義能力不足,無法對xml實(shí)例文檔作出更細(xì)致的語義限制;dtd的結(jié)構(gòu)不夠結(jié)構(gòu)化,重用的代價(jià)相對較高;dtd并非使用xml作為描述手段,而dtd的構(gòu)建和訪問并沒有標(biāo)準(zhǔn)的編程接口,無法使用標(biāo)準(zhǔn)的編程方式進(jìn)行dtd維護(hù)。因此針對這些缺點(diǎn),設(shè)計(jì)了xml schma。xml schema如同dtd一樣是負(fù)責(zé)定義和
18、描述xml文檔的結(jié)構(gòu)和內(nèi)容模式。它可以定義xml文檔中存在哪些元素和元素之間的關(guān)系,并且可以定義元素和屬性的數(shù)據(jù)類型。xml schema基于xml,沒有專門的語法;xml可以象其他xml文件一樣解析和處理;xml schema支持一系列的數(shù)據(jù)類型(int、float、boolean、date等);xml schema提供可擴(kuò)充的數(shù)據(jù)模型;xml schema支持綜合命名空間;xml schema支持屬性組。1.2.3 domdom document 是以層次結(jié)構(gòu)組織起來的節(jié)點(diǎn),或信息片段,的集合。這種層次結(jié)構(gòu)允許開發(fā)者瀏覽樹來查找特定信息。通常,分析結(jié)構(gòu)需要在完成任何工作之前裝入整個文檔并且
19、裝入層次結(jié)構(gòu)。由于 dom 是基于信息的層次結(jié)構(gòu),因此它被稱為是基于樹的。另一方面,dom 還提供了一個 api,該 api 允許開發(fā)者為創(chuàng)建應(yīng)用程序而在樹的任何地方添加、編輯、移動或除去節(jié)點(diǎn)。dom 基本的節(jié)點(diǎn)類型xml 中最常見的節(jié)點(diǎn)類型:1. node: dom 基本的數(shù)據(jù)類型。 2. element: 元素3. attr: 一個元素的屬性。 4. text: 文本 5. document: 代表整個 xml 文檔。一個 document 對象通常也被稱為一棵 dom 樹(根)。 較不常見的節(jié)點(diǎn)類型:cdata、注釋、處理指令和文檔片段:1. cdata:“字符數(shù)據(jù)”的縮寫 2. 注釋:
20、注釋包含有關(guān)數(shù)據(jù)的信息,通常應(yīng)用程序會忽略它們。 3. 處理指令:pi 是專門針對應(yīng)用程序的信息。 4. 文檔片段:為了形成良好的格式,文檔只能有一個根元素。有時,必須臨時創(chuàng)建幾組元素,這些元素不是滿足需求所必要的。 下面文檔片段:silver show saddle, 16 inch825.001premium cinch 49.00#documentgoodsitemnamepriceqtyitemnamepriceqty1對應(yīng)dom樹(元素節(jié)點(diǎn))如圖:文檔片段的dom樹示例圖1.2.4 sax讀取和操縱 xml 文件的標(biāo)準(zhǔn)方法是 dom(“文檔對象模型”)。遺憾的是,這種方法需要讀取整個
21、文件并將它存儲到樹結(jié)構(gòu)中,因而效率不高、緩慢,并且會過度使用資源。對于極其大的文檔,裝入整個文檔并對該文檔進(jìn)行解析會很慢且占用大量資源,所以要用其它方式來處理數(shù)據(jù)。一些基于事件的模型,如 simple api for xml(sax),是工作在數(shù)據(jù)流之上,在數(shù)據(jù)流經(jīng)過時對其進(jìn)行處理。sax 允許正在讀取文檔時處理該文檔,這避免了在采取操作之前需要等待存儲文檔的所有內(nèi)容,但它不允許開發(fā)者實(shí)際更改原始文檔中的數(shù)據(jù)sax 是由 xml-dev 郵件列表的成員開發(fā)的,java 版本由 david megginson 維護(hù)。他們的目的是提供一種更自然的方法來使用 xml,這種方法不會涉及到使用 dom
22、的那種開銷。結(jié)果是基于事件的 api。解析器將事件(譬如,元素的開始或結(jié)束)發(fā)送給處理信息的事件處理程序。然后,應(yīng)用程序自己可以處理數(shù)據(jù)。雖然原始文檔保持不變,但 sax 提供了操縱數(shù)據(jù)的方法,然后會將該方法導(dǎo)向另一個過程或文檔。對于 sax,沒有官方的標(biāo)準(zhǔn);萬維網(wǎng)(w3c)或其它官方組織不維護(hù) sax,但在 xml 社區(qū)中,它是一個事實(shí)上的標(biāo)準(zhǔn)。sax 分析經(jīng)過其的 xml 流??紤]以下 xml 代碼片斷:unixcolor一般情況下,sax 處理器分析這段代碼將生成以下事件:start documentstart element (samples)characters (white spa
23、ce)start element (server)characters (unix)end element (server)characters (white space)start element (monitor)characters (color)end element (monitor)characters (white space)end element (samples)1.3 基于關(guān)系數(shù)據(jù)庫的xml存儲技術(shù)本節(jié)將研究并討論現(xiàn)有的基于關(guān)系數(shù)據(jù)庫的xml存儲方法。1.3.1 現(xiàn)存的基于關(guān)系數(shù)據(jù)庫的xml存儲技術(shù)基于關(guān)系數(shù)據(jù)庫的xml存儲技術(shù)的核心是xml與關(guān)系數(shù)據(jù)庫之間的數(shù)據(jù)映射技術(shù)
24、,目前存在多種映射方法,根據(jù)是否使用xml模式可分為兩類:1. 模式驅(qū)動映射2. 無模式映射xml模式定義了xml文檔的詞匯表、邏輯結(jié)構(gòu)和允許值,利用模式可以對xml實(shí)例文件的有效性進(jìn)行驗(yàn)證。模式驅(qū)動映射是以xml模式為基礎(chǔ)的映射,包括dtd(文檔類型定義)和xml schema兩種方式,其廣泛適用于電子商務(wù)、數(shù)據(jù)交換和系統(tǒng)集成等領(lǐng)域的面向數(shù)據(jù)處理的xml文檔,如產(chǎn)品訂單、發(fā)票、時刻表等。他的優(yōu)點(diǎn)是模式驅(qū)動映射的過程中不易丟失結(jié)構(gòu)信息,能較好的保證數(shù)據(jù)的正確性和完整性。現(xiàn)有的模式驅(qū)動映射方法很多,下一節(jié)將通過一個實(shí)例來介紹模式驅(qū)動映射是如何實(shí)現(xiàn)的。由于模式驅(qū)動映射要對模式進(jìn)行解析,其轉(zhuǎn)換過程要
25、比無模式映射復(fù)雜的多。而且在實(shí)際應(yīng)用中,尤其是廣闊的互聯(lián)網(wǎng)中,大多數(shù)的xml文檔都沒有dtd或schema,或者dtd和schema不易隨文檔保存,這是模式驅(qū)動映射面臨的一個無法解決的困難,因此模式驅(qū)動映射適用于那些已經(jīng)發(fā)展的比較規(guī)范的領(lǐng)域,而無模式映射技術(shù)的應(yīng)用更為廣泛。因此作者最終選擇設(shè)計(jì)一種無模式映射來完成本課題的任務(wù),這將在文章的第二章中詳細(xì)說明。1.3.2 一個模式驅(qū)動映射實(shí)例這個實(shí)例的映射方法叫做對象-關(guān)系映射。首先將xml模式轉(zhuǎn)化為對象模型,然后再將對象模型映射為關(guān)系模型。在討論之前我們先介紹兩個概念:簡單元素:只包含文本,不包含屬性和嵌套元素的元素復(fù)雜元素:有屬性或包含嵌套元素
26、的元素下面討論基于對象-關(guān)系模型的xml-rdb的基本映射原理,為了描述簡單,xml模式采用dtd進(jìn)行定義。1)設(shè)有如下dtd:模式對象的轉(zhuǎn)化:復(fù)雜元素a類a簡單元素b、ca的成員變量對象關(guān)系的映射類a表ab、c表a中的列b、c綜上創(chuàng)建關(guān)系:ra(pk_a,b,c),pk_a是ra的主鍵(它是自動生成的),列b和c的值是他們的pcdata。2)設(shè)有如下dtd:這里采用外鍵捕獲元素a和c及a和b之間的父子關(guān)系,因此可創(chuàng)建關(guān)系ra(pk_a,d),rb(pk_b,fk_ab,b)及rc(pk_c,fk_ac,e),其中fk_ab和fk_ac分別是rb和rc關(guān)于ra的外鍵。rb的主鍵是(pk_b,f
27、k_ab), rc的主鍵是(pk_c,fk_ac)。根據(jù)關(guān)系理論:在這個dtd中,a只允許出現(xiàn)一次,所以a和c是1:1的關(guān)系,fk_ac可建立在ra和rc任一關(guān)系中(此處建立在rc中);b可出現(xiàn)多次,即a和b是1:n的關(guān)系,fk_ab應(yīng)建立在rb中。假如a也可以出現(xiàn)多次,即a和b為m:n的關(guān)系,則可創(chuàng)建關(guān)系rab(fk_a,fk_b),其中fk_a和fk_b分別對應(yīng)ra和rb的pk_a和pk_b。3)對于復(fù)雜元素的屬性和文本,處理方法與簡單元素相同,作為復(fù)雜元素的屬性列處理。1.4 作者的工作本文工作就是設(shè)計(jì)一個xml數(shù)據(jù)到關(guān)系數(shù)據(jù)庫的無模式映射方案,這將在文章的第二部分詳細(xì)講解。然后利用這個
28、方案開發(fā)一個關(guān)系數(shù)據(jù)庫中xml數(shù)據(jù)裝入系統(tǒng),并利用這個軟件測試該方案的有效性和性能,這是第三部分要敘述的內(nèi)容。1.5 本章小結(jié)本章闡述了課題背景及其研究意義,講解了xml的基本概念和知識,研究討論了現(xiàn)今基于關(guān)系數(shù)據(jù)庫xml存儲的主要方法并制定了下面需要完成的任務(wù)及相應(yīng)的研究思路。2 無模式映射的設(shè)計(jì)2.1方案設(shè)計(jì)要求設(shè)計(jì)必須滿足以下要求:1. 能夠?qū)o模式的xml數(shù)據(jù)按一定的結(jié)構(gòu)存入關(guān)系表中2. 數(shù)據(jù)庫設(shè)計(jì)要支持dom和sax兩種接口訪問3. 易于實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫到xml的反向轉(zhuǎn)換4. 具有跨平臺性2.2設(shè)計(jì)思想將xml文檔中的數(shù)據(jù)信息全部存入關(guān)系表是最基本的要求,要滿足這個要求,就要分析文檔中
29、的基本數(shù)據(jù)類型(元素,屬性,文本等),將這些類型的節(jié)點(diǎn)映射為數(shù)據(jù)庫實(shí)體集。為了支持dom和sax兩種接口訪問,就需要分析這兩種接口在訪問xml文檔時需要什么樣的信息,這些信息一定要設(shè)計(jì)到數(shù)據(jù)庫中。比方說,dom接口需要節(jié)點(diǎn)的父子關(guān)系,需要兄弟元素節(jié)點(diǎn)的順序,需要節(jié)點(diǎn)的層數(shù)。sax接口需要元素的起始位置和結(jié)束位置,這些信息都需要存到數(shù)據(jù)庫中,才可以方便兩個接口對數(shù)據(jù)庫的訪問。綜上所述,數(shù)據(jù)庫設(shè)計(jì)思路就是將文檔中不同類型的節(jié)點(diǎn)作為數(shù)據(jù)庫實(shí)體集,節(jié)點(diǎn)之間的關(guān)系作為聯(lián)系進(jìn)行初步設(shè)計(jì),然后再進(jìn)行數(shù)據(jù)庫優(yōu)化。詳細(xì)設(shè)計(jì)方案將在下一節(jié)介紹。2.3方案詳細(xì)設(shè)計(jì)根據(jù)xml數(shù)據(jù)節(jié)點(diǎn)類型,分別將文檔節(jié)點(diǎn)、元素節(jié)點(diǎn)、屬
30、性節(jié)點(diǎn)和文本節(jié)點(diǎn)映射為四個表:document,element,attribute,text。另外將元素節(jié)點(diǎn)之間的關(guān)系(父子,兄弟)映射為一張全局關(guān)系表fullrelation。對于cdata數(shù)據(jù),將其看作text數(shù)據(jù)處理,存入text表中。而注釋語句將被忽略。2.3.1 e-r圖(實(shí)體集中只畫主碼)attributebelongdocidattideleidtextdocumentelementbelongbelongbeparentdociddocidtextiddocid數(shù)據(jù)庫e-r圖2.3.2 實(shí)體集和聯(lián)系1. document實(shí)體集:文檔主體屬性:docid:document唯一標(biāo)識
31、uri:文檔路徑version:文檔版本encoding:文檔的字符碼格式2. element實(shí)體集:元素主體屬性:eleid:元素的文檔序(深度遍歷dom樹的元素序號)docid:元素所在文檔的idname:元素名稱begin:元素在文檔中的起始位置end:元素在文檔中的結(jié)束位置sequence:同層同父親元素的順序layer:元素所在層3. attribute實(shí)體集:屬性主體attid:屬性唯一標(biāo)識eleid:屬性所屬元素iddocid:屬性所屬文檔idname:屬性名稱value屬性值4. text實(shí)體集:文本主體textid:文本唯一標(biāo)識eleid:文本所屬元素iddocid:文本所屬
32、文檔idcontent:文本內(nèi)容5. 父子聯(lián)系:元素之間的父子關(guān)系多個元素對應(yīng)一個父親屬性:eleid:元素iddocid:元素所在文檔idparentid:元素父親id2.3.3 設(shè)計(jì)方法與策略四個實(shí)體集中最重要且最復(fù)雜的就是元素(element)實(shí)體集,由于存儲要便于dom和sax兩種接口訪問,因此需要為元素添加除名稱之外的屬性,下面分別說明這些屬性的設(shè)計(jì)思路。begin和end:元素在文檔中的起始和結(jié)束位置,這是為了實(shí)現(xiàn)sax接口能過順序訪問文檔而提供的屬性,例如下面的文檔,我們將在元素的開始標(biāo)志的左邊括號中標(biāo)出begin數(shù),在元素的結(jié)束標(biāo)志的右邊括號中標(biāo)出end數(shù)。(1) (2) (3
33、)tcp/ip illustrated(4) (5)bill(6) (7)addison-wesley(8) (9)65.95(10) (11) (12) (13)advanced programming in the unix environment(14) (15)tom(16) (17)addison-wesley(18) (19)65.95(20) (21)(22) (23) data on the web(24) (25)tony(26) (27) addison-wesley (28) (29)50(30) (31)(32)eleid、sequence、layer:這三個屬性是為了
34、描述dom樹結(jié)構(gòu)而設(shè)計(jì)的,eleid表示元素的文檔序,sequence表示同層同父親節(jié)點(diǎn)的元素的順序,layer表示元素所在層,它們與父子聯(lián)系中的parentid共同為dom接口的訪問服務(wù)。文檔序指在dom樹中從左至右深度遍歷元素節(jié)點(diǎn)時元素的序號,對于下面的dom數(shù),將元素的文檔序標(biāo)記在節(jié)點(diǎn)旁邊:#documentgoodsitemnamepriceqtyitemnamepriceqty123456789文檔序示例圖為了更加清晰的區(qū)分dom接口和sax接口的訪問,作者在設(shè)計(jì)數(shù)據(jù)庫基本表時將begin和end屬性設(shè)置在element表中,而將sequence、layer和parentid屬性設(shè)置
35、在fullrelation關(guān)系表中,這樣sax接口訪問element表,而dom接口訪問fullrelation表。2.3.4 數(shù)據(jù)庫基本表設(shè)計(jì)1. 文檔表:document(docid,uri,version,encoding)數(shù)據(jù)約束:唯一:uri2. 元素表:element(eleid,docid,name,begin,end)數(shù)據(jù)約束:外鍵:docid3. 屬性表:attribute(attid,docid,eleid,name,value)數(shù)據(jù)約束:唯一:(docid,eleid)外鍵:element 的主鍵(docid,eleid)4. 文本表:text(textid,docid,
36、eleid,content)數(shù)據(jù)約束:唯一:(docid,eleid)外鍵:element 的主鍵(docid,eleid)5. 全局關(guān)系表:fullrelation(eleid,docid,layer,sequence,parentid)數(shù)據(jù)約束:外鍵:element 的主鍵(docid,eleid)2.3.5數(shù)據(jù)庫優(yōu)化根據(jù)查詢使用頻率為數(shù)據(jù)庫添加索引:document:(uri)element:(docid eleid)element (begin docid eleid)element (end docid eleid)attribute:(docid eleid)text:(docid
37、 eleid)fullrelation:(docid eleid)2.3.6數(shù)據(jù)字典document表:屬性數(shù)據(jù)類型數(shù)據(jù)長度約束docidnumber10主鍵urivarchar50唯一versionvarchar50encodingvarchar50element表:屬性數(shù)據(jù)類型數(shù)據(jù)長度約束eleidnumber10主鍵docidnumber10外鍵namevarchar50beginnumber10endnumber10attribute表:屬性數(shù)據(jù)類型數(shù)據(jù)長度約束attidnumber10主鍵docidnumber10唯一外鍵eleidnumber10namevarchar50value
38、varchar50text表:屬性數(shù)據(jù)類型數(shù)據(jù)長度約束textidnumber10主鍵docidnumber10唯一外鍵eleidnumber10contentvarchar500fullrelation表:屬性數(shù)據(jù)類型數(shù)據(jù)長度約束eleidnumber10主鍵docidnumber10外鍵layernumber10sequencenumber10parentidnumber102.4 本章總結(jié)本章詳細(xì)描述了作者為xml-rdb的無模式映射設(shè)計(jì)的方案以及如此設(shè)計(jì)的原因。下一章將介紹作者利用此方案開發(fā)的關(guān)系數(shù)據(jù)庫中xml數(shù)據(jù)裝入系統(tǒng)。3 關(guān)系數(shù)據(jù)庫中xml裝入系統(tǒng)3.1 任務(wù)概述本次開發(fā)任務(wù)是編
39、寫一個面向用戶的關(guān)系數(shù)據(jù)庫中xml數(shù)據(jù)裝入系統(tǒng),用戶在軟件的界面中使用xml數(shù)據(jù)裝入功能從而將本地硬盤中的xml文檔裝入oracle數(shù)據(jù)庫服務(wù)器中。其中的xml-rdb數(shù)據(jù)映射部分要用上一章設(shè)計(jì)的方法設(shè)計(jì)數(shù)據(jù)庫,并通過對軟件的測試驗(yàn)證該方法的性能。3.2 設(shè)計(jì)思想概述從用戶的角度出發(fā)分析,用戶需要一個易于操作的界面,因此界面是聯(lián)系用戶與應(yīng)用程序的橋梁,它是從用戶的角度出發(fā)系統(tǒng)結(jié)構(gòu)的第一層。界面得到用戶請求后要通知后臺程序處理,這種程序處理模塊形成了系統(tǒng)結(jié)構(gòu)的第二層,程序處理模塊處理了用戶的輸入后要將結(jié)果存入數(shù)據(jù)庫中,并將數(shù)據(jù)庫裝入情況發(fā)送給界面,由界面通知用戶數(shù)據(jù)庫的裝入結(jié)果。因此他是內(nèi)存中的
40、數(shù)據(jù)與數(shù)據(jù)庫之間的橋梁。綜上所述,作者認(rèn)為采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法比較適合此系統(tǒng)的設(shè)計(jì)。可以將系統(tǒng)的界面模塊設(shè)計(jì)為界面類,程序處理模塊設(shè)計(jì)為控制類,內(nèi)存中的一些中間結(jié)果設(shè)計(jì)為存儲類。這樣就形成了界面類對象接收輸入信息,由存儲類對象暫存,這些信息被控制類對象取出、運(yùn)算,最終得到的結(jié)果再存入存儲類對象,再由控制類對象將這些結(jié)果存入數(shù)據(jù)庫中。詳細(xì)設(shè)計(jì)情況將在下面幾節(jié)描述。3.3 需求規(guī)定3.3.1 系統(tǒng)用例圖設(shè)計(jì)系統(tǒng)用例圖3.3.2 用例事件流用戶裝入文件事件流:1 用戶按裝入文件按鈕,用例開始。2 系統(tǒng)提示用戶選擇文件。3 用戶選擇文件并提交。a 若文件讀取失敗系統(tǒng)提示用戶并返回14 系統(tǒng)讀取并
41、解析文件,將解析結(jié)果存入數(shù)據(jù)庫。a 若存入失敗系統(tǒng)提示用戶并返回15系統(tǒng)提示用戶存儲成功,用例結(jié)束。用戶查看幫助時間流:1 用戶按幫助按鈕,用例開始。2 系統(tǒng)顯示幫助提示3.3.3 開發(fā)環(huán)境需求編程語言:java編譯環(huán)境:eclipse數(shù)據(jù)庫環(huán)境:oracle設(shè)計(jì)作圖工具:ralation rose20033.4 系統(tǒng)設(shè)計(jì)3.4.1 系統(tǒng)體系結(jié)構(gòu)xml裝入系統(tǒng)數(shù)據(jù)庫xml文件解析裝入系統(tǒng)體系結(jié)構(gòu)圖3.4.2 序列圖設(shè)計(jì)用戶裝入文件事件流的序列圖設(shè)計(jì):1角色:用戶,數(shù)據(jù)庫2對象:界面,文件對象,文檔對象,元素對象,屬性對象,文本對象,控制對象,元素鏈表,屬性鏈表,文本鏈表3交互消息:(1) 用戶
42、進(jìn)入界面選擇裝入文件功能(2) 界面提示用戶選擇文件(3) 用戶選擇一個文件并提交(4) 界面創(chuàng)建一個文件對象(5) 控制對象解析文件(利用dom)(6) 控制對象創(chuàng)建文檔對象,元素對象表,屬性對象表,文本對象表(7) 控制對象將解析出來的元素對象存入元素鏈表(8) 控制對象將解析出來的屬性對象存入屬性鏈表(9) 控制對象將解析出來的文本對象存入文本鏈表(10) 控制對象將存儲在內(nèi)存中的對象存入數(shù)據(jù)庫(11) 控制對象向界面發(fā)消息通知存儲是否成功(12) 界面向用戶顯示存儲是否成功數(shù)據(jù)裝入的序列圖3.4.3 類設(shè)計(jì) 1界面類:界面利用javax.swing包中的類設(shè)計(jì)2存儲單元類:存儲單元的各
43、類只實(shí)現(xiàn)基本的存儲功能,不含除set和get以外的放法。(1)文件類:調(diào)用java.io.file類存儲文件(2)文檔類(mydocument):對應(yīng)數(shù)據(jù)庫中document表屬性說明:string uri:文檔路徑string version:文檔版本string encoding:字符碼格式方法說明:每個屬性有g(shù)et和set方法void tostring():打印對象信息,供測試使用mydocument類(3)元素類(myelement):對應(yīng)數(shù)據(jù)庫中element表和fullrelation表屬性說明:string name:元素名int begin:元素在文檔中的起始位置int end
44、:元素在文檔中的結(jié)束位置int layer:元素所在層int sequence:同層元素位置myelement parent:元素父節(jié)點(diǎn)mydocument doc:元素所在文檔int order:文檔序int hash:對應(yīng)的dom樹中element類對象的hash值 方法說明:每個屬性有g(shù)et和set方法void tostring():打印對象信息,供測試使用myelement類 (4)屬性類(myattr):對應(yīng)數(shù)據(jù)庫中的attribute類屬性說明:string name:屬性名稱string value:屬性值myelement elem:所屬元素mydocument doc:所在文
45、檔方法說明:每個屬性有g(shù)et和set方法void tostring():打印對象信息,供測試使用 myattr類(5)文本類(mytext):對應(yīng)數(shù)據(jù)庫中的text表屬性說明:string content:文檔內(nèi)容 myelement elem:所屬元素 mydocument doc:所屬文檔方法說明:每個屬性有g(shù)et和set方法void tostring():打印對象信息,供測試使用mytext類(6)鏈表類:調(diào)用java.util.linkedlist類來存儲元素表,屬性表,文本表3控制單元:(1)domcontrol:此類為程序中最重要控制類,所有核心算法都在這個類中。它的功能是將解析x
46、ml文件,生成dom樹,通過對樹操作得到需要的節(jié)點(diǎn)信息并將它們存入鏈表中,以作為后面數(shù)據(jù)存儲的輸入。屬性:org.w3c.dom.node doc:樹根節(jié)點(diǎn)dbcontrol dbc:數(shù)據(jù)庫控制類對象mydocument:mydoc:文檔對象linkedlist myelemlist:元素鏈表linkedlist myattrlist:屬性鏈表linkedlist mytextlist:文本鏈表方法:boolean createdom(string uri)此方法以文檔路徑(uri)為參數(shù)解析xml文件,創(chuàng)建dom樹,將樹的根節(jié)點(diǎn)賦給屬性doc。解析成功返回true,失敗返回false。voi
47、d deepvisit()此方法通過對dom樹深度遍歷得到元素的文檔序、begin、end信息,并將這些信息存到相應(yīng)的存儲單元中。void visit()此方法層遍歷dom樹,將得到的相應(yīng)的節(jié)點(diǎn)信息存入創(chuàng)建的存儲單元對象中,在調(diào)用deepvisit()方法深度遍歷樹,再將相應(yīng)的信息存入這些存儲單元對象中,最后把這些對象分別存入屬性mydoc,myelementlist,myattrlist,mytextlist。boolean hasword(string s)此方法判斷參數(shù)s是否含有非空格和換行符的其他字符,又返回true,沒有返回false。mydocument getmydocument
48、(org.w3c.dom.node doc)此方法將dom樹中的文檔節(jié)點(diǎn)轉(zhuǎn)換為mydocument對象myelement getmyelement(org.w3c.dom.node element)此方法將dom樹中的元素節(jié)點(diǎn)轉(zhuǎn)換為myelement對象myattr getmyattr(org.w3c.dom.node attr)此方法將dom樹中的屬性節(jié)點(diǎn)轉(zhuǎn)換為myattr對象mytext getmytext(org.w3c.dom.node text)此方法將dom樹中的文本節(jié)點(diǎn)轉(zhuǎn)換為myattr對象domcontrol類(2)dbcontrol(數(shù)據(jù)庫控制類)屬性:connect con
49、:數(shù)據(jù)庫連接對象statement stmt:執(zhí)行語句resultset rs:結(jié)果集方法:boolean opendb()打開數(shù)據(jù)庫boolean close()關(guān)閉數(shù)據(jù)庫boolean proofdocumenturi(string uri)驗(yàn)證文檔是否存在,存在返回true,不存在返回falseint querymaxid(string column,string table)查找表table中的列column的最大idint querydocumentid(string uri)查找文檔的docid值boolean insertdoc(mydocument doc)在文檔表中插入文檔boolean insertelem(myelement elem)在元素表中插
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人二手商鋪買賣合同協(xié)議書
- 個人間借款合同樣本:版
- 個人股權(quán)抵押合同范例
- 三方合同:學(xué)生就業(yè)定向合作
- 專屬應(yīng)屆畢業(yè)生:個人租賃合同范本
- 中學(xué)教務(wù)主任聘任合同樣本
- 單項(xiàng)木工承包合同
- 中外采購與供應(yīng)合同范本
- 專業(yè)水處理設(shè)備維護(hù)合同細(xì)則
- 三人合伙經(jīng)營合同范本
- 煙葉復(fù)烤能源管理
- 食品安全管理員考試題庫298題(含標(biāo)準(zhǔn)答案)
- 執(zhí)業(yè)醫(yī)師資格考試《臨床執(zhí)業(yè)醫(yī)師》 考前 押題試卷絕密1 答案
- 2024年山東濟(jì)寧初中學(xué)業(yè)水平考試地理試卷真題(含答案詳解)
- 社會保險(xiǎn)課件教學(xué)課件
- 訂婚協(xié)議書手寫模板攻略
- 準(zhǔn)備單元 雪地上的“足跡”(教學(xué)設(shè)計(jì))-2023-2024學(xué)年五年級下冊科學(xué)大象版
- 宇航用商業(yè)現(xiàn)貨(COTS)器件保證指南-編制說明
- 音樂學(xué)科閱讀方案
- 《立體倉庫鋼結(jié)構(gòu)貨架技術(shù)規(guī)范(征求意見稿)》
- 2024年貴州蔬菜集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
評論
0/150
提交評論