版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、北京工業(yè)大學畢業(yè)設計(論文)摘 要隨著internet的發(fā)展和人們對數(shù)據(jù)標準性、平臺無關性的要求越來越高,xml(extensible markup language)得到了廣泛的應用,同時人們對于xml的存儲方式提出了更高的要求。本課題意在設計一種將xml數(shù)據(jù)存入關系數(shù)據(jù)庫中的方法,并按照該方法開發(fā)一個xml數(shù)據(jù)裝入關系數(shù)據(jù)庫的軟件。本文首先對xml的基本知識進行介紹,隨后討論用關系數(shù)據(jù)庫存儲xml數(shù)據(jù)的原因,并對目前已經(jīng)提出的一些xml文檔在關系數(shù)據(jù)庫中的存儲方式進行研究討論,在此基礎上提出一個無模式的xml文檔對于關系數(shù)據(jù)庫的存儲方法。這個方法將xml數(shù)據(jù)分為文檔、元素、屬性、文本四種節(jié)
2、點,并將這四種節(jié)點映射為數(shù)據(jù)庫中四個關系表。另外將dom樹中的元素節(jié)點關系映射為一個數(shù)據(jù)庫關系表,這五個表是本課題中數(shù)據(jù)庫設計的核心。五個表中包含的屬性信息要求方便于dom接口和sax接口兩種方式訪問。提出存儲方法后,我們將利用這種存儲方法開發(fā)一個關系數(shù)據(jù)庫中xml數(shù)據(jù)裝入系統(tǒng)。文章后半部分將詳細說明該軟件的需求分析、設計、具體開發(fā)細節(jié)以及測試。該軟件的測試結果驗證了這種存儲方法能夠有效的將無模式的xml文檔存入關系數(shù)據(jù)庫。關鍵詞:關系數(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基于關系數(shù)據(jù)庫的xml存儲技術101.3.1現(xiàn)存的基于關系數(shù)據(jù)庫的xml存儲技術101.3.2一個模式驅動映射實例101.4 作者的工作111.5 本章小結112 無模式映射的設計122.1方案設計要求122.2設計思想122.3方案詳細設計122.3.1e-r圖(實體集中只畫主碼)132.3.2 實體集和聯(lián)系132.3.3 設計方法與策略142.3.4 數(shù)據(jù)庫基本表設計162.3.5數(shù)據(jù)庫優(yōu)化162.3.6數(shù)
9、據(jù)字典162.4本章總結183 關系數(shù)據(jù)庫中xml裝入系統(tǒng)193.1 任務概述193.2 設計思想概述193.3 需求規(guī)定203.3.1 系統(tǒng)用例圖203.3.2 用例事件流203.3.3 開發(fā)環(huán)境需求203.4 系統(tǒng)設計213.4.1 系統(tǒng)體系結構213.4.2 序列圖設計213.4.3 類設計233.4.4 類關系圖293.4.5 算法的實現(xiàn)策略303.4.6 異常處理313.5 系統(tǒng)測試323.5.1 系統(tǒng)功能測試323.5.2 測試總結373.5.3 與模式映射xml-rdb裝入系統(tǒng)的分析對比373.6 本章小節(jié)38結 論39致 謝40參考文獻411 緒 論1.1 課題背景及研究意義x
10、ml(extensible markup language)是w3c于1998年提出的數(shù)據(jù)文件格式標準,它是sgml(standard generalize markuplanguage)的受限子集,但更簡練易用。自被提出以來就由于其標準性、可擴展性和半結構化等特征得到了各方面的關注和使用。隨著internet的高速發(fā)展和人們對數(shù)據(jù)標準性、平臺無關性的要求的提高,其應用也更加廣泛。目前xml文檔的存儲方式主要有三種:1.作為普通文件存儲于文件系統(tǒng)中2.存儲于專門為xml設計的xmldb中3.存儲于關系數(shù)據(jù)庫中第一種方法由于文件系統(tǒng)在組織、管理、檢索等各種數(shù)據(jù)服務功能上的固有不足而基本不被使用。
11、后兩種方法各有優(yōu)缺點,但由于目前關系數(shù)據(jù)庫管理系統(tǒng)在各種應用中仍占主體地位,因此如何更加合理地將xml文檔進行轉換并存儲到關系數(shù)據(jù)庫中具有很大的研究價值。本課題主要研究如何有效的將xml數(shù)據(jù)存儲到關系數(shù)據(jù)庫中,并設計一種可以盡量避免或簡化上述問題的存儲方法,用此方法開發(fā)一個關系數(shù)據(jù)庫中xml數(shù)據(jù)裝入系統(tǒng)以驗證該方法的正確性和可行性。1.2 xml知識簡介這一節(jié)主要介紹xml的基本知識,包括xml概念、文檔類型定義(dtd)、xml模式(schema)、文檔對象模型(dom)、sax(simple api for xml)接口等等。1.2.1 xmlxml即為可擴展的標記語言(extensibl
12、e markup language)。xml是一套定義語義標記的規(guī)則,這些標記將文檔分成許多部件并對這些部件加以標識。xml是標記語言。理解xml,首先要理解標記。先說說html的標記(markup),通俗地講,它就是一種用來給文本添加標記的語言。在html里每個標志都是有確切含義的。例如,在html 中,標簽b的含義是要求html瀏覽器將一段文本加粗表示,而標簽center的含義是告訴瀏覽器將這段文本在一行的中間顯示。而xml并非象html那樣,提供了一組事先已經(jīng)定義好了的標簽,而是提供了一個標準,利用這個標準,你可以根據(jù)實際需要定義自己的新的置標語言,并為你的這個置標語言規(guī)定它特有的一套標
13、簽。準確的說,xml是一種源置標語言,它允許你根據(jù)它所提供的規(guī)則,制定各種各樣的置標語言。xml有兩個先驅sgml和html,這兩個語言都是非常成功的標記語言,sgml的全稱是標準通用化標記語言,它從80年代初開始使用。正如xml一樣,sgml也可用于創(chuàng)建成千上萬的標記語言,它為語法置標提供了異常強大的工具,同時具有極好的擴展性,因此在分類和索引數(shù)據(jù)中非常有用。目前,sgml多用于科技文獻和政府辦公文件中。sgml 非常之復雜,其復雜程度對于網(wǎng)絡上的日常應用簡直不可思議。不僅如此,sgml非常昂貴。html免費、簡單,而且它獲得了廣泛的支持。它是一個非常簡單的sgml語言,可以方便普通人的使用
14、。1996年人們開始致力于描述一個置標語言,它既具有sgml的強大功能和可擴展性,同時又具有html的簡單性。w3c于1998年2月批準了xml的1.0版本,一個嶄新而大有前途的語言誕生了。 xml具有以下優(yōu)點:1.xml具有自說明性。xml能夠應用于各種領域的原因,就是xml具有到目前為止其他方法所不具備的數(shù)據(jù)描述特點,控制信息不是采用應用軟件的獨有形式,而是采用誰都可以看得懂的標記形式來表現(xiàn),所以xml最適合作為數(shù)據(jù)交換的標準,這也是 xml受人關注的原因。允許各種不同的專業(yè)(如音樂、化學、數(shù)學等)開發(fā)與自己的特定領域有關的標記語言。這就使得該領域中的人們可以交換筆記、數(shù)據(jù)和信息,而不用擔
15、心接收端的人是否有特定的軟件來創(chuàng)建數(shù)據(jù)。2.xml具有通用性。由于xml是非專有的并易于閱讀和編寫,就使得它成為在不同的應用間交換數(shù)據(jù)的理想格式.xml使用的是非專有的格式,不受版權、專利、商業(yè)秘密或是其他種類的知識產(chǎn)權的限制。xml的功能是非常強大的,同時對于人類或是計算機程序來說,都容易閱讀和編寫。因而成為交換語言的首選。此外,相對于html,xml具有先天的優(yōu)越性。為了自己的瀏覽器增加一些特殊的顯示效果,html加入了一些特殊的標記。日益增多的標簽不但使html越來越龐大,瀏覽器的開發(fā)越來越復雜,還降低了不同瀏覽器之間的兼容性。盡管html的標簽越來越多,其顯示力卻還遠遠不夠。如果你希望
16、非常精確地表現(xiàn)一些你自己的數(shù)據(jù),可能你需要一些現(xiàn)在在html中尚不存在的標簽?,F(xiàn)在html內部結構的條理性越來越差。你寫的html文件,甚至是那些專門的所見即所得工具自動生成的html文件,可能在語法上會錯誤百出,不過沒關系,瀏覽器照樣能讀它。 現(xiàn)在有了xml,你終于可以自由地制定你自己的置標語言,而不必再念念不忘微軟、 netscape、w3c的首肯了。實際上,現(xiàn)在許多行業(yè)、機構都利用xml定義了自己的置標語言。1.2.2 dtd和schemadtd是一種保證xml文檔格式正確的有效方法,可以比較xml文檔和dtd文件來看文檔是否符合規(guī)范,元素和標簽使用是否正確。一個dtd文檔包含:元素的定
17、義規(guī)則,元素間關系的定義規(guī)則,元素可使用的屬性,可使用的實體或符號規(guī)則。dtd文件也是一個ascii的文本文件,后綴名為.dtd。例如:myfile.dtd。由于dtd存在不少缺陷,比方說:dtd是基于正則表達式的,描述能力有限;dtd沒有數(shù)據(jù)類型的支持,在大多數(shù)應用環(huán)境下能力不足;dtd的約束定義能力不足,無法對xml實例文檔作出更細致的語義限制;dtd的結構不夠結構化,重用的代價相對較高;dtd并非使用xml作為描述手段,而dtd的構建和訪問并沒有標準的編程接口,無法使用標準的編程方式進行dtd維護。因此針對這些缺點,設計了xml schma。xml schema如同dtd一樣是負責定義和
18、描述xml文檔的結構和內容模式。它可以定義xml文檔中存在哪些元素和元素之間的關系,并且可以定義元素和屬性的數(shù)據(jù)類型。xml schema基于xml,沒有專門的語法;xml可以象其他xml文件一樣解析和處理;xml schema支持一系列的數(shù)據(jù)類型(int、float、boolean、date等);xml schema提供可擴充的數(shù)據(jù)模型;xml schema支持綜合命名空間;xml schema支持屬性組。1.2.3 domdom document 是以層次結構組織起來的節(jié)點,或信息片段,的集合。這種層次結構允許開發(fā)者瀏覽樹來查找特定信息。通常,分析結構需要在完成任何工作之前裝入整個文檔并且
19、裝入層次結構。由于 dom 是基于信息的層次結構,因此它被稱為是基于樹的。另一方面,dom 還提供了一個 api,該 api 允許開發(fā)者為創(chuàng)建應用程序而在樹的任何地方添加、編輯、移動或除去節(jié)點。dom 基本的節(jié)點類型xml 中最常見的節(jié)點類型:1. node: dom 基本的數(shù)據(jù)類型。 2. element: 元素3. attr: 一個元素的屬性。 4. text: 文本 5. document: 代表整個 xml 文檔。一個 document 對象通常也被稱為一棵 dom 樹(根)。 較不常見的節(jié)點類型:cdata、注釋、處理指令和文檔片段:1. cdata:“字符數(shù)據(jù)”的縮寫 2. 注釋:
20、注釋包含有關數(shù)據(jù)的信息,通常應用程序會忽略它們。 3. 處理指令:pi 是專門針對應用程序的信息。 4. 文檔片段:為了形成良好的格式,文檔只能有一個根元素。有時,必須臨時創(chuàng)建幾組元素,這些元素不是滿足需求所必要的。 下面文檔片段:silver show saddle, 16 inch825.001premium cinch 49.00#documentgoodsitemnamepriceqtyitemnamepriceqty1對應dom樹(元素節(jié)點)如圖:文檔片段的dom樹示例圖1.2.4 sax讀取和操縱 xml 文件的標準方法是 dom(“文檔對象模型”)。遺憾的是,這種方法需要讀取整個
21、文件并將它存儲到樹結構中,因而效率不高、緩慢,并且會過度使用資源。對于極其大的文檔,裝入整個文檔并對該文檔進行解析會很慢且占用大量資源,所以要用其它方式來處理數(shù)據(jù)。一些基于事件的模型,如 simple api for xml(sax),是工作在數(shù)據(jù)流之上,在數(shù)據(jù)流經(jīng)過時對其進行處理。sax 允許正在讀取文檔時處理該文檔,這避免了在采取操作之前需要等待存儲文檔的所有內容,但它不允許開發(fā)者實際更改原始文檔中的數(shù)據(jù)sax 是由 xml-dev 郵件列表的成員開發(fā)的,java 版本由 david megginson 維護。他們的目的是提供一種更自然的方法來使用 xml,這種方法不會涉及到使用 dom
22、的那種開銷。結果是基于事件的 api。解析器將事件(譬如,元素的開始或結束)發(fā)送給處理信息的事件處理程序。然后,應用程序自己可以處理數(shù)據(jù)。雖然原始文檔保持不變,但 sax 提供了操縱數(shù)據(jù)的方法,然后會將該方法導向另一個過程或文檔。對于 sax,沒有官方的標準;萬維網(wǎng)(w3c)或其它官方組織不維護 sax,但在 xml 社區(qū)中,它是一個事實上的標準。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 基于關系數(shù)據(jù)庫的xml存儲技術本節(jié)將研究并討論現(xiàn)有的基于關系數(shù)據(jù)庫的xml存儲方法。1.3.1 現(xiàn)存的基于關系數(shù)據(jù)庫的xml存儲技術基于關系數(shù)據(jù)庫的xml存儲技術的核心是xml與關系數(shù)據(jù)庫之間的數(shù)據(jù)映射技術
24、,目前存在多種映射方法,根據(jù)是否使用xml模式可分為兩類:1. 模式驅動映射2. 無模式映射xml模式定義了xml文檔的詞匯表、邏輯結構和允許值,利用模式可以對xml實例文件的有效性進行驗證。模式驅動映射是以xml模式為基礎的映射,包括dtd(文檔類型定義)和xml schema兩種方式,其廣泛適用于電子商務、數(shù)據(jù)交換和系統(tǒng)集成等領域的面向數(shù)據(jù)處理的xml文檔,如產(chǎn)品訂單、發(fā)票、時刻表等。他的優(yōu)點是模式驅動映射的過程中不易丟失結構信息,能較好的保證數(shù)據(jù)的正確性和完整性?,F(xiàn)有的模式驅動映射方法很多,下一節(jié)將通過一個實例來介紹模式驅動映射是如何實現(xiàn)的。由于模式驅動映射要對模式進行解析,其轉換過程要
25、比無模式映射復雜的多。而且在實際應用中,尤其是廣闊的互聯(lián)網(wǎng)中,大多數(shù)的xml文檔都沒有dtd或schema,或者dtd和schema不易隨文檔保存,這是模式驅動映射面臨的一個無法解決的困難,因此模式驅動映射適用于那些已經(jīng)發(fā)展的比較規(guī)范的領域,而無模式映射技術的應用更為廣泛。因此作者最終選擇設計一種無模式映射來完成本課題的任務,這將在文章的第二章中詳細說明。1.3.2 一個模式驅動映射實例這個實例的映射方法叫做對象-關系映射。首先將xml模式轉化為對象模型,然后再將對象模型映射為關系模型。在討論之前我們先介紹兩個概念:簡單元素:只包含文本,不包含屬性和嵌套元素的元素復雜元素:有屬性或包含嵌套元素
26、的元素下面討論基于對象-關系模型的xml-rdb的基本映射原理,為了描述簡單,xml模式采用dtd進行定義。1)設有如下dtd:模式對象的轉化:復雜元素a類a簡單元素b、ca的成員變量對象關系的映射類a表ab、c表a中的列b、c綜上創(chuàng)建關系:ra(pk_a,b,c),pk_a是ra的主鍵(它是自動生成的),列b和c的值是他們的pcdata。2)設有如下dtd:這里采用外鍵捕獲元素a和c及a和b之間的父子關系,因此可創(chuàng)建關系ra(pk_a,d),rb(pk_b,fk_ab,b)及rc(pk_c,fk_ac,e),其中fk_ab和fk_ac分別是rb和rc關于ra的外鍵。rb的主鍵是(pk_b,f
27、k_ab), rc的主鍵是(pk_c,fk_ac)。根據(jù)關系理論:在這個dtd中,a只允許出現(xiàn)一次,所以a和c是1:1的關系,fk_ac可建立在ra和rc任一關系中(此處建立在rc中);b可出現(xiàn)多次,即a和b是1:n的關系,fk_ab應建立在rb中。假如a也可以出現(xiàn)多次,即a和b為m:n的關系,則可創(chuàng)建關系rab(fk_a,fk_b),其中fk_a和fk_b分別對應ra和rb的pk_a和pk_b。3)對于復雜元素的屬性和文本,處理方法與簡單元素相同,作為復雜元素的屬性列處理。1.4 作者的工作本文工作就是設計一個xml數(shù)據(jù)到關系數(shù)據(jù)庫的無模式映射方案,這將在文章的第二部分詳細講解。然后利用這個
28、方案開發(fā)一個關系數(shù)據(jù)庫中xml數(shù)據(jù)裝入系統(tǒng),并利用這個軟件測試該方案的有效性和性能,這是第三部分要敘述的內容。1.5 本章小結本章闡述了課題背景及其研究意義,講解了xml的基本概念和知識,研究討論了現(xiàn)今基于關系數(shù)據(jù)庫xml存儲的主要方法并制定了下面需要完成的任務及相應的研究思路。2 無模式映射的設計2.1方案設計要求設計必須滿足以下要求:1. 能夠將無模式的xml數(shù)據(jù)按一定的結構存入關系表中2. 數(shù)據(jù)庫設計要支持dom和sax兩種接口訪問3. 易于實現(xiàn)關系數(shù)據(jù)庫到xml的反向轉換4. 具有跨平臺性2.2設計思想將xml文檔中的數(shù)據(jù)信息全部存入關系表是最基本的要求,要滿足這個要求,就要分析文檔中
29、的基本數(shù)據(jù)類型(元素,屬性,文本等),將這些類型的節(jié)點映射為數(shù)據(jù)庫實體集。為了支持dom和sax兩種接口訪問,就需要分析這兩種接口在訪問xml文檔時需要什么樣的信息,這些信息一定要設計到數(shù)據(jù)庫中。比方說,dom接口需要節(jié)點的父子關系,需要兄弟元素節(jié)點的順序,需要節(jié)點的層數(shù)。sax接口需要元素的起始位置和結束位置,這些信息都需要存到數(shù)據(jù)庫中,才可以方便兩個接口對數(shù)據(jù)庫的訪問。綜上所述,數(shù)據(jù)庫設計思路就是將文檔中不同類型的節(jié)點作為數(shù)據(jù)庫實體集,節(jié)點之間的關系作為聯(lián)系進行初步設計,然后再進行數(shù)據(jù)庫優(yōu)化。詳細設計方案將在下一節(jié)介紹。2.3方案詳細設計根據(jù)xml數(shù)據(jù)節(jié)點類型,分別將文檔節(jié)點、元素節(jié)點、屬
30、性節(jié)點和文本節(jié)點映射為四個表:document,element,attribute,text。另外將元素節(jié)點之間的關系(父子,兄弟)映射為一張全局關系表fullrelation。對于cdata數(shù)據(jù),將其看作text數(shù)據(jù)處理,存入text表中。而注釋語句將被忽略。2.3.1 e-r圖(實體集中只畫主碼)attributebelongdocidattideleidtextdocumentelementbelongbelongbeparentdociddocidtextiddocid數(shù)據(jù)庫e-r圖2.3.2 實體集和聯(lián)系1. document實體集:文檔主體屬性:docid:document唯一標識
31、uri:文檔路徑version:文檔版本encoding:文檔的字符碼格式2. element實體集:元素主體屬性:eleid:元素的文檔序(深度遍歷dom樹的元素序號)docid:元素所在文檔的idname:元素名稱begin:元素在文檔中的起始位置end:元素在文檔中的結束位置sequence:同層同父親元素的順序layer:元素所在層3. attribute實體集:屬性主體attid:屬性唯一標識eleid:屬性所屬元素iddocid:屬性所屬文檔idname:屬性名稱value屬性值4. text實體集:文本主體textid:文本唯一標識eleid:文本所屬元素iddocid:文本所屬
32、文檔idcontent:文本內容5. 父子聯(lián)系:元素之間的父子關系多個元素對應一個父親屬性:eleid:元素iddocid:元素所在文檔idparentid:元素父親id2.3.3 設計方法與策略四個實體集中最重要且最復雜的就是元素(element)實體集,由于存儲要便于dom和sax兩種接口訪問,因此需要為元素添加除名稱之外的屬性,下面分別說明這些屬性的設計思路。begin和end:元素在文檔中的起始和結束位置,這是為了實現(xiàn)sax接口能過順序訪問文檔而提供的屬性,例如下面的文檔,我們將在元素的開始標志的左邊括號中標出begin數(shù),在元素的結束標志的右邊括號中標出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樹結構而設計的,eleid表示元素的文檔序,sequence表示同層同父親節(jié)點的元素的順序,layer表示元素所在層,它們與父子聯(lián)系中的parentid共同為dom接口的訪問服務。文檔序指在dom樹中從左至右深度遍歷元素節(jié)點時元素的序號,對于下面的dom數(shù),將元素的文檔序標記在節(jié)點旁邊:#documentgoodsitemnamepriceqtyitemnamepriceqty123456789文檔序示例圖為了更加清晰的區(qū)分dom接口和sax接口的訪問,作者在設計數(shù)據(jù)庫基本表時將begin和end屬性設置在element表中,而將sequence、layer和parentid屬性設置
35、在fullrelation關系表中,這樣sax接口訪問element表,而dom接口訪問fullrelation表。2.3.4 數(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. 全局關系表: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 本章總結本章詳細描述了作者為xml-rdb的無模式映射設計的方案以及如此設計的原因。下一章將介紹作者利用此方案開發(fā)的關系數(shù)據(jù)庫中xml數(shù)據(jù)裝入系統(tǒng)。3 關系數(shù)據(jù)庫中xml裝入系統(tǒng)3.1 任務概述本次開發(fā)任務是編
39、寫一個面向用戶的關系數(shù)據(jù)庫中xml數(shù)據(jù)裝入系統(tǒng),用戶在軟件的界面中使用xml數(shù)據(jù)裝入功能從而將本地硬盤中的xml文檔裝入oracle數(shù)據(jù)庫服務器中。其中的xml-rdb數(shù)據(jù)映射部分要用上一章設計的方法設計數(shù)據(jù)庫,并通過對軟件的測試驗證該方法的性能。3.2 設計思想概述從用戶的角度出發(fā)分析,用戶需要一個易于操作的界面,因此界面是聯(lián)系用戶與應用程序的橋梁,它是從用戶的角度出發(fā)系統(tǒng)結構的第一層。界面得到用戶請求后要通知后臺程序處理,這種程序處理模塊形成了系統(tǒng)結構的第二層,程序處理模塊處理了用戶的輸入后要將結果存入數(shù)據(jù)庫中,并將數(shù)據(jù)庫裝入情況發(fā)送給界面,由界面通知用戶數(shù)據(jù)庫的裝入結果。因此他是內存中的
40、數(shù)據(jù)與數(shù)據(jù)庫之間的橋梁。綜上所述,作者認為采用面向對象的程序設計方法比較適合此系統(tǒng)的設計??梢詫⑾到y(tǒng)的界面模塊設計為界面類,程序處理模塊設計為控制類,內存中的一些中間結果設計為存儲類。這樣就形成了界面類對象接收輸入信息,由存儲類對象暫存,這些信息被控制類對象取出、運算,最終得到的結果再存入存儲類對象,再由控制類對象將這些結果存入數(shù)據(jù)庫中。詳細設計情況將在下面幾節(jié)描述。3.3 需求規(guī)定3.3.1 系統(tǒng)用例圖設計系統(tǒng)用例圖3.3.2 用例事件流用戶裝入文件事件流:1 用戶按裝入文件按鈕,用例開始。2 系統(tǒng)提示用戶選擇文件。3 用戶選擇文件并提交。a 若文件讀取失敗系統(tǒng)提示用戶并返回14 系統(tǒng)讀取并
41、解析文件,將解析結果存入數(shù)據(jù)庫。a 若存入失敗系統(tǒng)提示用戶并返回15系統(tǒng)提示用戶存儲成功,用例結束。用戶查看幫助時間流:1 用戶按幫助按鈕,用例開始。2 系統(tǒng)顯示幫助提示3.3.3 開發(fā)環(huán)境需求編程語言:java編譯環(huán)境:eclipse數(shù)據(jù)庫環(huán)境:oracle設計作圖工具:ralation rose20033.4 系統(tǒng)設計3.4.1 系統(tǒng)體系結構xml裝入系統(tǒng)數(shù)據(jù)庫xml文件解析裝入系統(tǒng)體系結構圖3.4.2 序列圖設計用戶裝入文件事件流的序列圖設計:1角色:用戶,數(shù)據(jù)庫2對象:界面,文件對象,文檔對象,元素對象,屬性對象,文本對象,控制對象,元素鏈表,屬性鏈表,文本鏈表3交互消息:(1) 用戶
42、進入界面選擇裝入文件功能(2) 界面提示用戶選擇文件(3) 用戶選擇一個文件并提交(4) 界面創(chuàng)建一個文件對象(5) 控制對象解析文件(利用dom)(6) 控制對象創(chuàng)建文檔對象,元素對象表,屬性對象表,文本對象表(7) 控制對象將解析出來的元素對象存入元素鏈表(8) 控制對象將解析出來的屬性對象存入屬性鏈表(9) 控制對象將解析出來的文本對象存入文本鏈表(10) 控制對象將存儲在內存中的對象存入數(shù)據(jù)庫(11) 控制對象向界面發(fā)消息通知存儲是否成功(12) 界面向用戶顯示存儲是否成功數(shù)據(jù)裝入的序列圖3.4.3 類設計 1界面類:界面利用javax.swing包中的類設計2存儲單元類:存儲單元的各
43、類只實現(xiàn)基本的存儲功能,不含除set和get以外的放法。(1)文件類:調用java.io.file類存儲文件(2)文檔類(mydocument):對應數(shù)據(jù)庫中document表屬性說明:string uri:文檔路徑string version:文檔版本string encoding:字符碼格式方法說明:每個屬性有get和set方法void tostring():打印對象信息,供測試使用mydocument類(3)元素類(myelement):對應數(shù)據(jù)庫中element表和fullrelation表屬性說明:string name:元素名int begin:元素在文檔中的起始位置int end
44、:元素在文檔中的結束位置int layer:元素所在層int sequence:同層元素位置myelement parent:元素父節(jié)點mydocument doc:元素所在文檔int order:文檔序int hash:對應的dom樹中element類對象的hash值 方法說明:每個屬性有get和set方法void tostring():打印對象信息,供測試使用myelement類 (4)屬性類(myattr):對應數(shù)據(jù)庫中的attribute類屬性說明:string name:屬性名稱string value:屬性值myelement elem:所屬元素mydocument doc:所在文
45、檔方法說明:每個屬性有get和set方法void tostring():打印對象信息,供測試使用 myattr類(5)文本類(mytext):對應數(shù)據(jù)庫中的text表屬性說明:string content:文檔內容 myelement elem:所屬元素 mydocument doc:所屬文檔方法說明:每個屬性有get和set方法void tostring():打印對象信息,供測試使用mytext類(6)鏈表類:調用java.util.linkedlist類來存儲元素表,屬性表,文本表3控制單元:(1)domcontrol:此類為程序中最重要控制類,所有核心算法都在這個類中。它的功能是將解析x
46、ml文件,生成dom樹,通過對樹操作得到需要的節(jié)點信息并將它們存入鏈表中,以作為后面數(shù)據(jù)存儲的輸入。屬性:org.w3c.dom.node doc:樹根節(jié)點dbcontrol dbc:數(shù)據(jù)庫控制類對象mydocument:mydoc:文檔對象linkedlist myelemlist:元素鏈表linkedlist myattrlist:屬性鏈表linkedlist mytextlist:文本鏈表方法:boolean createdom(string uri)此方法以文檔路徑(uri)為參數(shù)解析xml文件,創(chuàng)建dom樹,將樹的根節(jié)點賦給屬性doc。解析成功返回true,失敗返回false。voi
47、d deepvisit()此方法通過對dom樹深度遍歷得到元素的文檔序、begin、end信息,并將這些信息存到相應的存儲單元中。void visit()此方法層遍歷dom樹,將得到的相應的節(jié)點信息存入創(chuàng)建的存儲單元對象中,在調用deepvisit()方法深度遍歷樹,再將相應的信息存入這些存儲單元對象中,最后把這些對象分別存入屬性mydoc,myelementlist,myattrlist,mytextlist。boolean hasword(string s)此方法判斷參數(shù)s是否含有非空格和換行符的其他字符,又返回true,沒有返回false。mydocument getmydocument
48、(org.w3c.dom.node doc)此方法將dom樹中的文檔節(jié)點轉換為mydocument對象myelement getmyelement(org.w3c.dom.node element)此方法將dom樹中的元素節(jié)點轉換為myelement對象myattr getmyattr(org.w3c.dom.node attr)此方法將dom樹中的屬性節(jié)點轉換為myattr對象mytext getmytext(org.w3c.dom.node text)此方法將dom樹中的文本節(jié)點轉換為myattr對象domcontrol類(2)dbcontrol(數(shù)據(jù)庫控制類)屬性:connect con
49、:數(shù)據(jù)庫連接對象statement stmt:執(zhí)行語句resultset rs:結果集方法:boolean opendb()打開數(shù)據(jù)庫boolean close()關閉數(shù)據(jù)庫boolean proofdocumenturi(string uri)驗證文檔是否存在,存在返回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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度商業(yè)綜合體店鋪裝修一體化服務合同
- 2025年度草莓種植與深加工一體化項目合同3篇
- 課題申報參考:南嶺走廊瑤族傳統(tǒng)建筑壁畫圖像敘事及活化研究
- 課題申報參考:面向患者情緒體驗的大型醫(yī)療設備系統(tǒng)設計策略研究
- 課題申報參考:貿易面向型人工智能規(guī)則的發(fā)展及其特征研究
- 《短視頻編?。哼x題構想+腳本制作+劇本策劃+鏡頭拍攝》課件全套 第1-11章 選題方向:從賬號定位出發(fā) - 綜合案例:短劇《錯過》
- 二零二五年度車輛抵押借款合同(含提前還款)4篇
- 二零二五版金融科技項目內部股東轉讓合同4篇
- 二零二五年度工業(yè)級模具開模設計與制造合同3篇
- 2025年度新型個人汽車抵押借款合同范本
- 2025年人民教育出版社有限公司招聘筆試參考題庫含答案解析
- 康復醫(yī)學治療技術(士)復習題及答案
- 完整版100以內加減法混合運算4000道100
- 2024年產(chǎn)權管理部年終工作總結例文(3篇)
- 《血管性血友病》課件
- 高三日語一輪復習日語助詞「に」和「を」的全部用法課件
- 機場地勤勞動合同三篇
- 2024年山東省高考政治試卷真題(含答案逐題解析)
- 《用銳角三角函數(shù)解決問題(3)》參考課件
- 訂婚協(xié)議書手寫模板攻略
- 風水學的基礎知識培訓
評論
0/150
提交評論