北京工業(yè)大學(xué)的畢設(shè)論文.pdf_第1頁(yè)
北京工業(yè)大學(xué)的畢設(shè)論文.pdf_第2頁(yè)
北京工業(yè)大學(xué)的畢設(shè)論文.pdf_第3頁(yè)
北京工業(yè)大學(xué)的畢設(shè)論文.pdf_第4頁(yè)
北京工業(yè)大學(xué)的畢設(shè)論文.pdf_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 1 摘 要 隨著 Internet 的發(fā)展和人們對(duì)數(shù)據(jù)標(biāo)準(zhǔn)性、平臺(tái)無(wú)關(guān)性的要求越來(lái)越高, XML(Extensible Markup Language)得到了廣泛的應(yīng)用,同時(shí)人們對(duì)于 XML 的存儲(chǔ)方式提出 了更高的要求。 本課題意在設(shè)計(jì)一種將XML數(shù)據(jù)存入關(guān)系數(shù)據(jù)庫(kù)中的方法, 并按照該方法開(kāi)發(fā)一個(gè)XML 數(shù)據(jù)裝入關(guān)系數(shù)據(jù)庫(kù)的軟件。 本文首先對(duì) XML 的基本知識(shí)進(jìn)行介紹,隨后討論用關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ) XML 數(shù)據(jù)的原因, 并對(duì)目前已經(jīng)提出的一些 XML 文檔在關(guān)系數(shù)據(jù)庫(kù)中的存儲(chǔ)方式進(jìn)行研究討論,在此基礎(chǔ)上 提出一個(gè)無(wú)模式的 XML 文檔對(duì)于關(guān)系數(shù)據(jù)庫(kù)的存儲(chǔ)方法。這個(gè)方法將 XML 數(shù)據(jù)分為文檔、 元素、屬性、文本四種節(jié)點(diǎn),并將這四種節(jié)點(diǎn)映射為數(shù)據(jù)庫(kù)中四個(gè)關(guān)系表。另外將 DOM 樹(shù) 中的元素節(jié)點(diǎn)關(guān)系映射為一個(gè)數(shù)據(jù)庫(kù)關(guān)系表,這五個(gè)表是本課題中數(shù)據(jù)庫(kù)設(shè)計(jì)的核心。五 個(gè)表中包含的屬性信息要求方便于 DOM 接口和 SAX 接口兩種方式訪(fǎng)問(wèn)。 提出存儲(chǔ)方法后, 我們將利用這種存儲(chǔ)方法開(kāi)發(fā)一個(gè)關(guān)系數(shù)據(jù)庫(kù)中 XML 數(shù)據(jù)裝入系統(tǒng)。 文章后半部分將詳細(xì)說(shuō)明該軟件的需求分析、設(shè)計(jì)、具體開(kāi)發(fā)細(xì)節(jié)以及測(cè)試。該軟件的測(cè) 試結(jié)果驗(yàn)證了這種存儲(chǔ)方法能夠有效的將無(wú)模式的 XML 文檔存入關(guān)系數(shù)據(jù)庫(kù)。 關(guān)鍵詞:關(guān)鍵詞:關(guān)系數(shù)據(jù)庫(kù)、XML 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 2 Abstract With the development of Internet and the peoples higher and higher 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 technology 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 storing 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 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 RDB 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 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 3 目目錄錄 摘 要.1 Abstract.2 目錄.3 1 緒論.5 1.1課題背景及研究意義5 1.2XML 知識(shí)簡(jiǎn)介5 1.2.1 XML5 1.2.2 DTD 和 Schema7 1.2.3 DOM7 1.2.4 SAX.8 1.3基于關(guān)系數(shù)據(jù)庫(kù)的 XML 存儲(chǔ)技術(shù)9 1.3.1 現(xiàn)存的基于關(guān)系數(shù)據(jù)庫(kù)的 XML 存儲(chǔ)技術(shù)10 1.3.2 一個(gè)模式驅(qū)動(dòng)映射實(shí)例.10 1.4 作者的工作11 1.5 本章小結(jié)11 2 無(wú)模式映射的設(shè)計(jì).12 2.1 方案設(shè)計(jì)要求.12 2.2 設(shè)計(jì)思想.12 2.3 方案詳細(xì)設(shè)計(jì).12 2.3.1 E-R 圖(實(shí)體集中只畫(huà)主碼)13 2.3.2 實(shí)體集和聯(lián)系13 2.3.3 設(shè)計(jì)方法與策略14 2.3.4 數(shù)據(jù)庫(kù)基本表設(shè)計(jì)16 2.3.5 數(shù)據(jù)庫(kù)優(yōu)化.16 2.3.6 數(shù)據(jù)字典.16 2.4本章總結(jié).18 3 關(guān)系數(shù)據(jù)庫(kù)中 XML 裝入系統(tǒng).19 3.1 任務(wù)概述19 3.2 設(shè)計(jì)思想概述19 3.3 需求規(guī)定20 3.3.1 系統(tǒng)用例圖20 3.3.2 用例事件流20 3.3.3 開(kāi)發(fā)環(huán)境需求21 3.4 系統(tǒng)設(shè)計(jì)21 3.4.1 系統(tǒng)體系結(jié)構(gòu)21 3.4.2 序列圖設(shè)計(jì)21 3.4.3 類(lèi)設(shè)計(jì)23 3.4.4 類(lèi)關(guān)系圖29 3.4.5 算法的實(shí)現(xiàn)策略30 3.4.6 異常處理31 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 4 3.5 系統(tǒng)測(cè)試32 3.5.1 系統(tǒng)功能測(cè)試32 3.5.2 測(cè)試總結(jié)37 3.5.3 與模式映射 XML-RDB 裝入系統(tǒng)的分析對(duì)比.38 3.6 本章小節(jié)38 結(jié) 論.39 致 謝.40 參考文獻(xiàn).41 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 5 1 緒緒論論 1.1課題背景及研究意義課題背景及研究意義 XML(eXtensible Markup Language)是 W3C 于 1998 年提出的數(shù)據(jù)文件格式標(biāo)準(zhǔn),它是 SGML(Standard Generalize MarkupLanguage)的受限子集,但更簡(jiǎn)練易用。自被提出以來(lái) 就由于其標(biāo)準(zhǔn)性、可擴(kuò)展性和半結(jié)構(gòu)化等特征得到了各方面的關(guān)注和使用。隨著 Internet 的高速發(fā)展和人們對(duì)數(shù)據(jù)標(biāo)準(zhǔn)性、平臺(tái)無(wú)關(guān)性的要求的提高,其應(yīng)用也更加廣泛。 目前 XML 文檔的存儲(chǔ)方式主要有三種: 1.作為普通文件存儲(chǔ)于文件系統(tǒng)中 2.存儲(chǔ)于專(zhuān)門(mén)為 XML 設(shè)計(jì)的 XMLDB 中 3.存儲(chǔ)于關(guān)系數(shù)據(jù)庫(kù)中 第一種方法由于文件系統(tǒng)在組織、管理、檢索等各種數(shù)據(jù)服務(wù)功能上的固有不足而基 本不被使用。后兩種方法各有優(yōu)缺點(diǎn),但由于目前關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)在各種應(yīng)用中仍占 主體地位,因此如何更加合理地將 XML 文檔進(jìn)行轉(zhuǎn)換并存儲(chǔ)到關(guān)系數(shù)據(jù)庫(kù)中具有很大的研 究?jī)r(jià)值。 本課題主要研究如何有效的將 XML 數(shù)據(jù)存儲(chǔ)到關(guān)系數(shù)據(jù)庫(kù)中,并設(shè)計(jì)一種可以盡量避 免或簡(jiǎn)化上述問(wèn)題的存儲(chǔ)方法,用此方法開(kāi)發(fā)一個(gè)關(guān)系數(shù)據(jù)庫(kù)中 XML 數(shù)據(jù)裝入系統(tǒng)以驗(yàn)證 該方法的正確性和可行性。 1.2XML 知識(shí)簡(jiǎn)介知識(shí)簡(jiǎn)介 這一節(jié)主要介紹 XML 的基本知識(shí),包括 XML 概念、文檔類(lèi)型定義(DTD)、XML 模 式(Schema)、文檔對(duì)象模型(DOM)、SAX(Simple API for XML)接口等等。 1.2.1 XML XML 即為可擴(kuò)展的標(biāo)記語(yǔ)言(eXtensible Markup Language)。XML 是一套定義語(yǔ)義 標(biāo)記的規(guī)則,這些標(biāo)記將文檔分成許多部件并對(duì)這些部件加以標(biāo)識(shí)。 XML 是標(biāo)記語(yǔ)言。理解 XML,首先要理解標(biāo)記。先說(shuō)說(shuō) HTML 的標(biāo)記(Markup),通俗 地講,它就是一種用來(lái)給文本添加標(biāo)記的語(yǔ)言。在 HTML 里每個(gè)標(biāo)志都是有確切含義的。 例如, 在HTML 中, 標(biāo)簽 B 的含義是要求HTML瀏覽器將一段文本加粗表示, 而標(biāo)簽 CENTER 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 6 的含義是告訴瀏覽器將這段文本在一行的中間顯示。而 XML 并非象 HTML 那樣,提供了一 組事先已經(jīng)定義好了的標(biāo)簽,而是提供了一個(gè)標(biāo)準(zhǔn),利用這個(gè)標(biāo)準(zhǔn),你可以根據(jù)實(shí)際需要 定義自己的新的置標(biāo)語(yǔ)言,并為你的這個(gè)置標(biāo)語(yǔ)言規(guī)定它特有的一套標(biāo)簽。準(zhǔn)確的說(shuō),XML 是一種源置標(biāo)語(yǔ)言,它允許你根據(jù)它所提供的規(guī)則,制定各種各樣的置標(biāo)語(yǔ)言。 XML 有兩個(gè)先驅(qū)SGML 和 HTML,這兩個(gè)語(yǔ)言都是非常成功的標(biāo)記語(yǔ)言,SGML 的全 稱(chēng)是標(biāo)準(zhǔn)通用化標(biāo)記語(yǔ)言,它從 80 年代初開(kāi)始使用。正如 XML 一樣,SGML 也可用于創(chuàng)建 成千上萬(wàn)的標(biāo)記語(yǔ)言,它為語(yǔ)法置標(biāo)提供了異常強(qiáng)大的工具,同時(shí)具有極好的擴(kuò)展性,因 此在分類(lèi)和索引數(shù)據(jù)中非常有用。 目前, SGML 多用于科技文獻(xiàn)和政府辦公文件中。 SGML 非 常之復(fù)雜,其復(fù)雜程度對(duì)于網(wǎng)絡(luò)上的日常應(yīng)用簡(jiǎn)直不可思議。不僅如此,SGML 非常昂貴。 HTML 免費(fèi)、簡(jiǎn)單,而且它獲得了廣泛的支持。它是一個(gè)非常簡(jiǎn)單的 SGML 語(yǔ)言,可以方便 普通人的使用。1996 年人們開(kāi)始致力于描述一個(gè)置標(biāo)語(yǔ)言,它既具有 SGML 的強(qiáng)大功能和 可擴(kuò)展性,同時(shí)又具有 HTML 的簡(jiǎn)單性。W3C 于 1998 年 2 月批準(zhǔn)了 XML 的 1.0 版本,一個(gè) 嶄新而大有前途的語(yǔ)言誕生了。 XML 具有以下優(yōu)點(diǎn): 1.XML 具有自說(shuō)明性。XML 能夠應(yīng)用于各種領(lǐng)域的原因,就是 XML 具有到目前為止其 他方法所不具備的數(shù)據(jù)描述特點(diǎn),控制信息不是采用應(yīng)用軟件的獨(dú)有形式,而是采用誰(shuí)都 可以看得懂的標(biāo)記形式來(lái)表現(xiàn),所以 XML 最適合作為數(shù)據(jù)交換的標(biāo)準(zhǔn),這也是 XML 受人關(guān) 注的原因。允許各種不同的專(zhuān)業(yè)(如音樂(lè)、化學(xué)、數(shù)學(xué)等)開(kāi)發(fā)與自己的特定領(lǐng)域有關(guān)的 標(biāo)記語(yǔ)言。這就使得該領(lǐng)域中的人們可以交換筆記、數(shù)據(jù)和信息,而不用擔(dān)心接收端的人 是否有特定的軟件來(lái)創(chuàng)建數(shù)據(jù)。 2.XML 具有通用性。由于 XML 是非專(zhuān)有的并易于閱讀和編寫(xiě),就使得它成為在不同的 應(yīng)用間交換數(shù)據(jù)的理想格式.XML 使用的是非專(zhuān)有的格式,不受版權(quán)、專(zhuān)利、商業(yè)秘密或是 其他種類(lèi)的知識(shí)產(chǎn)權(quán)的限制。XML 的功能是非常強(qiáng)大的,同時(shí)對(duì)于人類(lèi)或是計(jì)算機(jī)程序來(lái) 說(shuō),都容易閱讀和編寫(xiě)。因而成為交換語(yǔ)言的首選。 此外,相對(duì)于 HTML,XML 具有先天的優(yōu)越性。為了自己的瀏覽器增加一些特殊的顯示 效果,HTML 加入了一些特殊的標(biāo)記。日益增多的標(biāo)簽不但使 HTML 越來(lái)越龐大,瀏覽器的 開(kāi)發(fā)越來(lái)越復(fù)雜,還降低了不同瀏覽器之間的兼容性。盡管 HTML 的標(biāo)簽越來(lái)越多,其顯 示力卻還遠(yuǎn)遠(yuǎn)不夠。如果你希望非常精確地表現(xiàn)一些你自己的數(shù)據(jù),可能你需要一些現(xiàn)在 在 HTML 中尚不存在的標(biāo)簽。現(xiàn)在 HTML 內(nèi)部結(jié)構(gòu)的條理性越來(lái)越差。你寫(xiě)的 HTML 文件, 甚至是那些專(zhuān)門(mén)的所見(jiàn)即所得工具自動(dòng)生成的 HTML 文件,可能在語(yǔ)法上會(huì)錯(cuò)誤百出,不 過(guò)沒(méi)關(guān)系, 瀏覽器照樣能讀它。 現(xiàn)在有了 XML, 你終于可以自由地制定你自己的置標(biāo)語(yǔ)言, 而不必再念念不忘微軟、 Netscape、W3C 的首肯了。實(shí)際上,現(xiàn)在許多行業(yè)、機(jī)構(gòu)都利用 XML 定義了自己的置標(biāo)語(yǔ)言。 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 7 1.2.2 DTD 和和 Schema DTD 是一種保證 XML 文檔格式正確的有效方法, 可以比較 XML 文檔和 DTD 文件來(lái) 看文檔是否符合規(guī)范,元素和標(biāo)簽使用是否正確。一個(gè) DTD 文檔包含:元素的定義規(guī)則, 元素間關(guān)系的定義規(guī)則,元素可使用的屬性,可使用的實(shí)體或符號(hào)規(guī)則。DTD 文件也是一 個(gè) ASCII 的文本文件,后綴名為.dtd。例如:myfile.dtd。 由于 DTD 存在不少缺陷,比方說(shuō):DTD 是基于正則表達(dá)式的,描述能力有限;DTD 沒(méi)有數(shù)據(jù)類(lèi)型的支持,在大多數(shù)應(yīng)用環(huán)境下能力不足;DTD 的約束定義能力不足,無(wú)法對(duì) XML 實(shí)例文檔作出更細(xì)致的語(yǔ)義限制;DTD 的結(jié)構(gòu)不夠結(jié)構(gòu)化,重用的代價(jià)相對(duì)較高; DTD 并非使用 XML 作為描述手段,而 DTD 的構(gòu)建和訪(fǎng)問(wèn)并沒(méi)有標(biāo)準(zhǔn)的編程接口,無(wú)法 使用標(biāo)準(zhǔn)的編程方式進(jìn)行 DTD 維護(hù)。因此針對(duì)這些缺點(diǎn),設(shè)計(jì)了 XML Schma。 XML Schema 如同 DTD 一樣是負(fù)責(zé)定義和描述 XML 文檔的結(jié)構(gòu)和內(nèi)容模式。 它可以定 義XML文檔中存在哪些元素和元素之間的關(guān)系, 并且可以定義元素和屬性的數(shù)據(jù)類(lèi)型。 XML Schema 基于 XML,沒(méi)有專(zhuān)門(mén)的語(yǔ)法;XML 可以象其他 XML 文件一樣解析和處理;XML Schema 支持一系列的數(shù)據(jù)類(lèi)型(int、float、Boolean、date 等);XML Schema 提供可擴(kuò)充的數(shù) 據(jù)模型;XML Schema 支持綜合命名空間;XML Schema 支持屬性組。 1.2.3 DOM DOM Document 是以層次結(jié)構(gòu)組織起來(lái)的節(jié)點(diǎn),或信息片段,的集合。這種層次結(jié)構(gòu) 允許開(kāi)發(fā)者瀏覽樹(shù)來(lái)查找特定信息。通常,分析結(jié)構(gòu)需要在完成任何工作之前裝入整個(gè)文 檔并且裝入層次結(jié)構(gòu)。 由于 DOM 是基于信息的層次結(jié)構(gòu),因此它被稱(chēng)為是基于樹(shù)的。 另一方面,DOM 還提供了一個(gè) API,該 API 允許開(kāi)發(fā)者為創(chuàng)建應(yīng)用程序而在樹(shù)的任 何地方添加、編輯、移動(dòng)或除去節(jié)點(diǎn)。 DOM 基本的節(jié)點(diǎn)類(lèi)型 XML 中最常見(jiàn)的節(jié)點(diǎn)類(lèi)型: 1. Node: DOM 基本的數(shù)據(jù)類(lèi)型。 2. Element: 元素 3. Attr: 一個(gè)元素的屬性。 4. Text: 文本 5. Document: 代表整個(gè) XML 文檔。 一個(gè) Document 對(duì)象通常也被稱(chēng)為一棵 DOM 樹(shù)(根)。 較不常見(jiàn)的節(jié)點(diǎn)類(lèi)型:CData、注釋、處理指令和文檔片段: 1. CData:“字符數(shù)據(jù)”的縮寫(xiě) 2. 注釋?zhuān)鹤⑨尠嘘P(guān)數(shù)據(jù)的信息,通常應(yīng)用程序會(huì)忽略它們。 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 8 3. 處理指令:PI 是專(zhuān)門(mén)針對(duì)應(yīng)用程序的信息。 4. 文檔片段:為了形成良好的格式,文檔只能有一個(gè)根元素。有時(shí),必須臨時(shí) 創(chuàng)建幾組元素,這些元素不是滿(mǎn)足需求所必要的。 下面文檔片段: Silver Show Saddle, 16 inch 825.00 1 Premium Cinch 49.00 1 對(duì)應(yīng) DOM 樹(shù)(元素節(jié)點(diǎn))如圖: 文檔片段的文檔片段的 DOMDOM 樹(shù)示例圖樹(shù)示例圖 1.2.4 SAX 讀取和操縱 XML 文件的標(biāo)準(zhǔn)方法是 DOM(“文檔對(duì)象模型”)。遺憾的是,這種方 法需要讀取整個(gè)文件并將它存儲(chǔ)到樹(shù)結(jié)構(gòu)中,因而效率不高、緩慢,并且會(huì)過(guò)度使用資源。 對(duì)于極其大的文檔,裝入整個(gè)文檔并對(duì)該文檔進(jìn)行解析會(huì)很慢且占用大量資源,所以要用 #DOCUME NT GOODS ITEM NAM E PRIC E QTY ITEM NAM E PRIC E QTY 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 9 其它方式來(lái)處理數(shù)據(jù)。一些基于事件的模型,如 Simple API for XML(SAX),是工作在 數(shù)據(jù)流之上,在數(shù)據(jù)流經(jīng)過(guò)時(shí)對(duì)其進(jìn)行處理。 SAX 允許正在讀取文檔時(shí)處理該文檔,這避免了在采取操作之前需要等待存儲(chǔ)文檔的 所有內(nèi)容,但它不允許開(kāi)發(fā)者實(shí)際更改原始文檔中的數(shù)據(jù) SAX 是由 XML-DEV 郵件列表的成員開(kāi)發(fā)的,Java 版本由 David Megginson 維護(hù)。 他們的目的是提供一種更自然的方法來(lái)使用 XML,這種方法不會(huì)涉及到使用 DOM 的那種 開(kāi)銷(xiāo)。 結(jié)果是基于事件的 API。解析器將事件(譬如,元素的開(kāi)始或結(jié)束)發(fā)送給處理信息 的事件處理程序。然后,應(yīng)用程序自己可以處理數(shù)據(jù)。雖然原始文檔保持不變,但 SAX 提 供了操縱數(shù)據(jù)的方法,然后會(huì)將該方法導(dǎo)向另一個(gè)過(guò)程或文檔。 對(duì)于 SAX, 沒(méi)有官方的標(biāo)準(zhǔn);萬(wàn)維網(wǎng) (W3C) 或其它官方組織不維護(hù) SAX, 但在 XML 社 區(qū)中,它是一個(gè)事實(shí)上的標(biāo)準(zhǔn)。 SAX 分析經(jīng)過(guò)其的 XML 流。考慮以下 XML 代碼片斷: UNIX color 一般情況下,SAX 處理器分析這段代碼將生成以下事件: Start document Start element (samples) Characters (white space) 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ù)庫(kù)的基于關(guān)系數(shù)據(jù)庫(kù)的 XML 存儲(chǔ)技術(shù)存儲(chǔ)技術(shù) 本節(jié)將研究并討論現(xiàn)有的基于關(guān)系數(shù)據(jù)庫(kù)的 XML 存儲(chǔ)方法。 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 10 1.3.1 現(xiàn)存的基于關(guān)系數(shù)據(jù)庫(kù)的現(xiàn)存的基于關(guān)系數(shù)據(jù)庫(kù)的 XML 存儲(chǔ)技術(shù)存儲(chǔ)技術(shù) 基于關(guān)系數(shù)據(jù)庫(kù)的 XML 存儲(chǔ)技術(shù)的核心是 XML 與關(guān)系數(shù)據(jù)庫(kù)之間的數(shù)據(jù)映射技術(shù), 目前存在多種映射方法,根據(jù)是否使用 XML 模式可分為兩類(lèi): : 1. 模式驅(qū)動(dòng)映射 2. 無(wú)模式映射 XML 模式定義了 XML 文檔的詞匯表、邏輯結(jié)構(gòu)和允許值,利用模式可以對(duì) XML 實(shí) 例文件的有效性進(jìn)行驗(yàn)證。模式驅(qū)動(dòng)映射是以 XML 模式為基礎(chǔ)的映射,包括 DTD(文檔類(lèi) 型定義)和 XML Schema 兩種方式, 其廣泛適用于電子商務(wù)、 數(shù)據(jù)交換和系統(tǒng)集成等領(lǐng)域的 面向數(shù)據(jù)處理的 XML 文檔,如產(chǎn)品訂單、發(fā)票、時(shí)刻表等。他的優(yōu)點(diǎn)是模式驅(qū)動(dòng)映射的 過(guò)程中不易丟失結(jié)構(gòu)信息,能較好的保證數(shù)據(jù)的正確性和完整性。現(xiàn)有的模式驅(qū)動(dòng)映射方 法很多,下一節(jié)將通過(guò)一個(gè)實(shí)例來(lái)介紹模式驅(qū)動(dòng)映射是如何實(shí)現(xiàn)的。 由于模式驅(qū)動(dòng)映射要對(duì)模式進(jìn)行解析,其轉(zhuǎn)換過(guò)程要比無(wú)模式映射復(fù)雜的多。而且在 實(shí)際應(yīng)用中,尤其是廣闊的互聯(lián)網(wǎng)中,大多數(shù)的 XML 文檔都沒(méi)有 DTD 或 Schema,或者 DTD 和 Schema 不易隨文檔保存,這是模式驅(qū)動(dòng)映射面臨的一個(gè)無(wú)法解決的困難,因此模 式驅(qū)動(dòng)映射適用于那些已經(jīng)發(fā)展的比較規(guī)范的領(lǐng)域,而無(wú)模式映射技術(shù)的應(yīng)用更為廣泛。 因此作者最終選擇設(shè)計(jì)一種無(wú)模式映射來(lái)完成本課題的任務(wù),這將在文章的第二章中詳細(xì) 說(shuō)明。 1.3.2 一個(gè)模式驅(qū)動(dòng)映射實(shí)例一個(gè)模式驅(qū)動(dòng)映射實(shí)例 這個(gè)實(shí)例的映射方法叫做對(duì)象-關(guān)系映射。首先將 XML 模式轉(zhuǎn)化為對(duì)象模型,然后再 將對(duì)象模型映射為關(guān)系模型。在討論之前我們先介紹兩個(gè)概念: 簡(jiǎn)單元素:只包含文本,不包含屬性和嵌套元素的元素 復(fù)雜元素:有屬性或包含嵌套元素的元素 下面討論基于對(duì)象-關(guān)系模型的 XML-RDB 的基本映射原理,為了描述簡(jiǎn)單,XML 模 式采用 DTD 進(jìn)行定義。 1)設(shè)有如下 DTD: 模式對(duì)象的轉(zhuǎn)化: 復(fù)雜元素 A類(lèi) A 簡(jiǎn)單元素 B、CA 的成員變量 對(duì)象關(guān)系的映射 類(lèi) A表 A B、C表 A 中的列 B、C 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 11 綜上創(chuàng)建關(guān)系:RA(PK_A,B,C),PK_A 是 RA 的主鍵(它是自動(dòng)生成的),列 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,FK_AB), RC的主鍵是(PK_C,FK_AC)。根據(jù)關(guān) 系理論:在這個(gè) DTD 中,A 只允許出現(xiàn)一次,所以 A 和 C 是 1:1 的關(guān)系,F(xiàn)K_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 分別對(duì)應(yīng) RA和 RB的 PK_A 和 PK_B。 3)對(duì)于復(fù)雜元素的屬性和文本,處理方法與簡(jiǎn)單元素相同,作為復(fù)雜元素的屬性列處 理。 1.4 作者的工作作者的工作 本文工作就是設(shè)計(jì)一個(gè) XML 數(shù)據(jù)到關(guān)系數(shù)據(jù)庫(kù)的無(wú)模式映射方案,這將在文章的第 二部分詳細(xì)講解。然后利用這個(gè)方案開(kāi)發(fā)一個(gè)關(guān)系數(shù)據(jù)庫(kù)中 XML 數(shù)據(jù)裝入系統(tǒng),并利用這 個(gè)軟件測(cè)試該方案的有效性和性能,這是第三部分要敘述的內(nèi)容。 1.5 本章小結(jié)本章小結(jié) 本章闡述了課題背景及其研究意義,講解了 XML 的基本概念和知識(shí),研究討論了 現(xiàn)今基于關(guān)系數(shù)據(jù)庫(kù) XML 存儲(chǔ)的主要方法并制定了下面需要完成的任務(wù)及相應(yīng)的研究思 路。 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 12 2 2 無(wú)模式映射的設(shè)計(jì)無(wú)模式映射的設(shè)計(jì) 2.1 方案設(shè)計(jì)要求方案設(shè)計(jì)要求 設(shè)計(jì)必須滿(mǎn)足以下要求: 1. 能夠?qū)o(wú)模式的 XML 數(shù)據(jù)按一定的結(jié)構(gòu)存入關(guān)系表中 2. 數(shù)據(jù)庫(kù)設(shè)計(jì)要支持 DOM 和 SAX 兩種接口訪(fǎng)問(wèn) 3. 易于實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)到 XML 的反向轉(zhuǎn)換 4.具有跨平臺(tái)性 2.2 設(shè)計(jì)思想設(shè)計(jì)思想 將 XML 文檔中的數(shù)據(jù)信息全部存入關(guān)系表是最基本的要求,要滿(mǎn)足這個(gè)要求,就要 分析文檔中的基本數(shù)據(jù)類(lèi)型(元素,屬性,文本等) ,將這些類(lèi)型的節(jié)點(diǎn)映射為數(shù)據(jù)庫(kù)實(shí) 體集。為了支持 DOM 和 SAX 兩種接口訪(fǎng)問(wèn),就需要分析這兩種接口在訪(fǎng)問(wèn) XML 文檔時(shí) 需要什么樣的信息,這些信息一定要設(shè)計(jì)到數(shù)據(jù)庫(kù)中。比方說(shuō),DOM 接口需要節(jié)點(diǎn)的父 子關(guān)系,需要兄弟元素節(jié)點(diǎn)的順序,需要節(jié)點(diǎn)的層數(shù)。SAX 接口需要元素的起始位置和結(jié) 束位置,這些信息都需要存到數(shù)據(jù)庫(kù)中,才可以方便兩個(gè)接口對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)。綜上所述, 數(shù)據(jù)庫(kù)設(shè)計(jì)思路就是將文檔中不同類(lèi)型的節(jié)點(diǎn)作為數(shù)據(jù)庫(kù)實(shí)體集,節(jié)點(diǎn)之間的關(guān)系作為聯(lián) 系進(jìn)行初步設(shè)計(jì),然后再進(jìn)行數(shù)據(jù)庫(kù)優(yōu)化。詳細(xì)設(shè)計(jì)方案將在下一節(jié)介紹。 2.3 方案詳細(xì)設(shè)計(jì)方案詳細(xì)設(shè)計(jì) 根據(jù) XML 數(shù)據(jù)節(jié)點(diǎn)類(lèi)型,分別將文檔節(jié)點(diǎn)、元素節(jié)點(diǎn)、屬性節(jié)點(diǎn)和文本節(jié)點(diǎn)映射為 四個(gè)表:DOCUMENT,ELEMENT,ATTRIBUTE,TEXT。另外將元素節(jié)點(diǎn)之間的關(guān)系(父 子,兄弟)映射為一張全局關(guān)系表FULLRELATION。對(duì)于 CDATA 數(shù)據(jù),將其看作 TEXT 數(shù)據(jù)處理,存入 TEXT 表中。而注釋語(yǔ)句將被忽略。 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 13 2.3.1 E-R 圖圖(實(shí)體集中只畫(huà)主碼實(shí)體集中只畫(huà)主碼) 數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù) E-R 圖圖 2.3.2 實(shí)體集和聯(lián)系實(shí)體集和聯(lián)系 1. DOCUMENT 實(shí)體集:文檔主體 屬性: DOCID:DOCUMENT 唯一標(biāo)識(shí) URI:文檔路徑 VERSION:文檔版本 ENCODING:文檔的字符碼格式 2. ELEMENT 實(shí)體集:元素主體 屬性: ELEID:元素的文檔序(深度遍歷 DOM 樹(shù)的元素序號(hào)) DOCID:元素所在文檔的 ID NAME:元素名稱(chēng) BEGIN:元素在文檔中的起始位置 END:元素在文檔中的結(jié)束位置 ATTRIBUTE belong DOCID ATTID ELEID TEXT DOCUMENT ELEMENT belong belong beparent DOCID DOCID TEXTID DOCID 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 14 SEQUENCE:同層同父親元素的順序 LAYER:元素所在層 3. ATTRIBUTE 實(shí)體集:屬性主體 ATTID:屬性唯一標(biāo)識(shí) ELEID:屬性所屬元素 ID DOCID:屬性所屬文檔 ID NAME:屬性名稱(chēng) VALUE 屬性值 4. TEXT 實(shí)體集:文本主體 TEXTID:文本唯一標(biāo)識(shí) ELEID:文本所屬元素 ID DOCID:文本所屬文檔 ID CONTENT:文本內(nèi)容 5. 父子聯(lián)系:元素之間的父子關(guān)系多個(gè)元素對(duì)應(yīng)一個(gè)父親 屬性: ELEID:元素 ID DOCID:元素所在文檔 ID PARENTID:元素父親 ID 2.3.3 設(shè)計(jì)方法與策略設(shè)計(jì)方法與策略 四個(gè)實(shí)體集中最重要且最復(fù)雜的就是元素(ELEMENT)實(shí)體集,由于存儲(chǔ)要便于 DOM 和 SAX 兩種接口訪(fǎng)問(wèn),因此需要為元素添加除名稱(chēng)之外的屬性,下面分別說(shuō)明這些屬性 的設(shè)計(jì)思路。 BEGIN 和 END:元素在文檔中的起始和結(jié)束位置,這是為了實(shí)現(xiàn) SAX 接口能過(guò)順序 訪(fǎng)問(wèn)文檔而提供的屬性,例如下面的文檔,我們將在元素的開(kāi)始標(biāo)志的左邊括號(hào)中標(biāo)出 Begin 數(shù),在元素的結(jié)束標(biāo)志的右邊括號(hào)中標(biāo)出 END 數(shù)。 (1) (2) (3)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) 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 15 (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: 這三個(gè)屬性是為了描述 DOM 樹(shù)結(jié)構(gòu)而設(shè)計(jì)的, ELEID 表示元素的文檔序,SEQUENCE 表示同層同父親節(jié)點(diǎn)的元素的順序,LAYER 表示元素所 在層,它們與父子聯(lián)系中的 PARENTID 共同為 DOM 接口的訪(fǎng)問(wèn)服務(wù)。 文檔序指在 DOM 樹(shù)中從左至右深度遍歷元素節(jié)點(diǎn)時(shí)元素的序號(hào),對(duì)于下面的 DOM 數(shù),將元素的文檔序標(biāo)記在節(jié)點(diǎn)旁邊: 文檔序示例圖文檔序示例圖 為了更加清晰的區(qū)分 DOM 接口和 SAX 接口的訪(fǎng)問(wèn),作者在設(shè)計(jì)數(shù)據(jù)庫(kù)基本表時(shí)將 BEGIN 和 END 屬性設(shè)置在 ELEMENT 表中,而將 SEQUENCE、LAYER 和 PARENTID 屬 性設(shè)置在 FULLRELATION 關(guān)系表中, 這樣 SAX 接口訪(fǎng)問(wèn) ELEMENT 表, 而 DOM 接口訪(fǎng) #DOCUME NT GOODS ITEM NAMEPRICEQTY ITEM NAMEPRICEQTY 1 2 345 6 789 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 16 問(wèn) FULLRELATION 表。 2.3.4 數(shù)據(jù)庫(kù)基本表設(shè)計(jì)數(shù)據(jù)庫(kù)基本表設(shè)計(jì) 1. 文檔表:DOCUMENT(DOCID,URI,VERSION,ENCODING) 數(shù)據(jù)約束: 唯一:URI 2. 元素表:ELEMENT(ELEID,DOCID,NAME,BEGIN,END) 數(shù)據(jù)約束: 外鍵:DOCID 3. 屬性表:ATTRIBUTE(ATTID,DOCID,ELEID,NAME,VALUE) 數(shù)據(jù)約束: 唯一:(DOCID,ELEID) 外鍵:ELEMENT 的主鍵(DOCID,ELEID) 4. 文本表:TEXT(TEXTID,DOCID,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ù)庫(kù)優(yōu)化數(shù)據(jù)庫(kù)優(yōu)化 根據(jù)查詢(xún)使用頻率為數(shù)據(jù)庫(kù)添加索引: Document:(URI) Element:(DocID EleID) Element (Begin DocID EleID) Element (End DocID EleID) Attribute:(DocID EleID) Text:(DocID EleID) FullRelation:(DocID EleID) 2.3.6 數(shù)據(jù)字典數(shù)據(jù)字典 DOCUMENT 表: 屬性數(shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度約束 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 17 DOCIDNUMBER10主鍵 URIVARCHAR50唯一 VERSIONVARCHAR50 ENCODINGVARCHAR50 ELEMENT 表: 屬性數(shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度約束 ELEIDNUMBER10主鍵 DOCIDNUMBER10外鍵 NAMEVARCHAR50 BEGINNUMBER10 ENDNUMBER10 ATTRIBUTE 表: 屬性數(shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度約束 ATTIDNUMBER10主鍵 DOCIDNUMBER10唯一 外鍵ELEIDNUMBER10 NAMEVARCHAR50 VALUEVARCHAR50 TEXT 表: 屬性數(shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度約束 TEXTIDNUMBER10主鍵 DOCIDNUMBER10唯一 外鍵ELEIDNUMBER10 CONTENTVARCHAR500 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 18 FULLRELATION 表: 屬性數(shù)據(jù)類(lèi)型數(shù)據(jù)長(zhǎng)度約束 ELEIDNUMBER10主鍵 DOCIDNUMBER10外鍵 LAYERNUMBER10 SEQUENCENUMBER10 PARENTIDNUMBER10 2.4本章總結(jié)本章總結(jié) 本章詳細(xì)描述了作者為 XML-RDB 的無(wú)模式映射設(shè)計(jì)的方案以及如此設(shè)計(jì)的原 因。下一章將介紹作者利用此方案開(kāi)發(fā)的關(guān)系數(shù)據(jù)庫(kù)中 XML 數(shù)據(jù)裝入系統(tǒng)。 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 19 3 3 關(guān)系數(shù)據(jù)庫(kù)中關(guān)系數(shù)據(jù)庫(kù)中 XMLXML 裝入系統(tǒng)裝入系統(tǒng) 3.1 任務(wù)概述任務(wù)概述 本次開(kāi)發(fā)任務(wù)是編寫(xiě)一個(gè)面向用戶(hù)的關(guān)系數(shù)據(jù)庫(kù)中 XML 數(shù)據(jù)裝入系統(tǒng),用戶(hù)在軟件的 界面中使用 XML 數(shù)據(jù)裝入功能從而將本地硬盤(pán)中的 XML 文檔裝入 ORACLE 數(shù)據(jù)庫(kù)服務(wù) 器中。其中的 XML-RDB 數(shù)據(jù)映射部分要用上一章設(shè)計(jì)的方法設(shè)計(jì)數(shù)據(jù)庫(kù),并通過(guò)對(duì)軟件 的測(cè)試驗(yàn)證該方法的性能。 3.2 設(shè)計(jì)思想概述設(shè)計(jì)思想概述 從用戶(hù)的角度出發(fā)分析,用戶(hù)需要一個(gè)易于操作的界面,因此界面是聯(lián)系用戶(hù)與應(yīng)用 程序的橋梁,它是從用戶(hù)的角度出發(fā)系統(tǒng)結(jié)構(gòu)的第一層。界面得到用戶(hù)請(qǐng)求后要通知后臺(tái) 程序處理,這種程序處理模塊形成了系統(tǒng)結(jié)構(gòu)的第二層,程序處理模塊處理了用戶(hù)的輸入 后要將結(jié)果存入數(shù)據(jù)庫(kù)中,并將數(shù)據(jù)庫(kù)裝入情況發(fā)送給界面,由界面通知用戶(hù)數(shù)據(jù)庫(kù)的裝 入結(jié)果。因此他是內(nèi)存中的數(shù)據(jù)與數(shù)據(jù)庫(kù)之間的橋梁。綜上所述,作者認(rèn)為采用面向?qū)ο?的程序設(shè)計(jì)方法比較適合此系統(tǒng)的設(shè)計(jì)??梢詫⑾到y(tǒng)的界面模塊設(shè)計(jì)為界面類(lèi),程序處理 模塊設(shè)計(jì)為控制類(lèi),內(nèi)存中的一些中間結(jié)果設(shè)計(jì)為存儲(chǔ)類(lèi)。這樣就形成了界面類(lèi)對(duì)象接收 輸入信息,由存儲(chǔ)類(lèi)對(duì)象暫存,這些信息被控制類(lèi)對(duì)象取出、運(yùn)算,最終得到的結(jié)果再存 入存儲(chǔ)類(lèi)對(duì)象,再由控制類(lèi)對(duì)象將這些結(jié)果存入數(shù)據(jù)庫(kù)中。詳細(xì)設(shè)計(jì)情況將在下面幾節(jié)描 述。 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 20 3.3 需求規(guī)定需求規(guī)定 3.3.1 系統(tǒng)用例圖設(shè)計(jì)系統(tǒng)用例圖設(shè)計(jì) 數(shù)據(jù)庫(kù) 裝入文件 查看幫助 用戶(hù) 退出系統(tǒng) 系統(tǒng)用例圖系統(tǒng)用例圖 3.3.2 用例事件流用例事件流 用戶(hù)裝入文件事件流: 1用戶(hù)按裝入文件按鈕,用例開(kāi)始。 2系統(tǒng)提示用戶(hù)選擇文件。 3用戶(hù)選擇文件并提交。 A若文件讀取失敗系統(tǒng)提示用戶(hù)并返回 1 4系統(tǒng)讀取并解析文件,將解析結(jié)果存入數(shù)據(jù)庫(kù)。 A若存入失敗系統(tǒng)提示用戶(hù)并返回 1 5系統(tǒng)提示用戶(hù)存儲(chǔ)成功,用例結(jié)束。 用戶(hù)查看幫助時(shí)間流: 1用戶(hù)按幫助按鈕,用例開(kāi)始。 2系統(tǒng)顯示幫助提示 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 21 3.3.3 開(kāi)發(fā)環(huán)境需求開(kāi)發(fā)環(huán)境需求 編程語(yǔ)言:JAVA 編譯環(huán)境:Eclipse 數(shù)據(jù)庫(kù)環(huán)境:Oracle 設(shè)計(jì)作圖工具:Ralation Rose2003 3.4 系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì) 3.4.1 系統(tǒng)體系結(jié)構(gòu)系統(tǒng)體系結(jié)構(gòu) 系統(tǒng)體系結(jié)構(gòu)圖系統(tǒng)體系結(jié)構(gòu)圖 3.4.2 序列圖設(shè)計(jì)序列圖設(shè)計(jì) 用戶(hù)裝入文件事件流的序列圖設(shè)計(jì): 1角色:用戶(hù),數(shù)據(jù)庫(kù) 2對(duì)象:界面,文件對(duì)象,文檔對(duì)象,元素對(duì)象,屬性對(duì)象,文本對(duì)象,控 制對(duì)象,元素鏈表,屬性鏈表,文本鏈表 3交互消息: (1) 用戶(hù)進(jìn)入界面選擇裝入文件功能 (2) 界面提示用戶(hù)選擇文件 (3) 用戶(hù)選擇一個(gè)文件并提交 (4) 界面創(chuàng)建一個(gè)文件對(duì)象 XML 裝入系統(tǒng) 數(shù)據(jù)庫(kù) XML 文件 解析裝入 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 22 (5) 控制對(duì)象解析文件(利用 DOM) (6) 控制對(duì)象創(chuàng)建文檔對(duì)象,元素對(duì)象表,屬性對(duì)象表,文本對(duì)象表 (7) 控制對(duì)象將解析出來(lái)的元素對(duì)象存入元素鏈表 (8) 控制對(duì)象將解析出來(lái)的屬性對(duì)象存入屬性鏈表 (9) 控制對(duì)象將解析出來(lái)的文本對(duì)象存入文本鏈表 (10)控制對(duì)象將存儲(chǔ)在內(nèi)存中的對(duì)象存入數(shù)據(jù)庫(kù) (11)控制對(duì)象向界面發(fā)消息通知存儲(chǔ)是否成功 (12)界面向用戶(hù)顯示存儲(chǔ)是否成功 元素對(duì)象 : 用戶(hù) 界面文件控制對(duì)象文檔對(duì)象屬性對(duì)象文本對(duì)象元素鏈表屬性鏈表 : 數(shù)據(jù)庫(kù) 文本鏈表 pressButton tellUserToChooseFile chooseAndSubmit createFile parseFile createDocument createElement createAttribute createText store tellResult putElemIntoElemList putAttrIntoAttrList putTextIntoTextList parseMassege 數(shù)據(jù)裝入的序列圖數(shù)據(jù)裝入的序列圖 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 23 3.4.3 類(lèi)設(shè)計(jì)類(lèi)設(shè)計(jì) 1界面類(lèi):界面利用 Javax.swing 包中的類(lèi)設(shè)計(jì) 2存儲(chǔ)單元類(lèi):存儲(chǔ)單元的各類(lèi)只實(shí)現(xiàn)基本的存儲(chǔ)功能,不含除 set 和 get 以外的放法。 (1)文件類(lèi):調(diào)用 java.io.file 類(lèi)存儲(chǔ)文件 (2)文檔類(lèi)(MyDocument) :對(duì)應(yīng)數(shù)據(jù)庫(kù)中 DOCUMENT 表 屬性說(shuō)明:String uri:文檔路徑 String version:文檔版本 String encoding:字符碼格式 方法說(shuō)明:每個(gè)屬性有 get 和 set 方法 void ToString(): 打印對(duì)象信息,供測(cè)試使用 MyDocument 類(lèi)類(lèi) (3)元素類(lèi)(MyElement) :對(duì)應(yīng)數(shù)據(jù)庫(kù)中 ELEMENT 表和 FULLRELATION 表 屬性說(shuō)明:String name:元素名 int begin:元素在文檔中的起始位置 int end:元素在文檔中的結(jié)束位置 int layer:元素所在層 int sequence:同層元素位置 MyElement parent:元素父節(jié)點(diǎn) MyDocument doc:元素所在文檔 int order:文檔序 int hash:對(duì)應(yīng)的 DOM 樹(shù)中 Element 類(lèi)對(duì)象的 hash 值 方法說(shuō)明:每個(gè)屬性有 get 和 set 方法 void ToString(): 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 24 打印對(duì)象信息,供測(cè)試使用 MyElement 類(lèi)類(lèi) (4)屬性類(lèi)(MyAttr) :對(duì)應(yīng)數(shù)據(jù)庫(kù)中的 ATTRIBUTE 類(lèi) 屬性說(shuō)明: String name:屬性名稱(chēng) String value:屬性值 MyElement elem:所屬元素 MyDocument doc:所在文檔 方法說(shuō)明:每個(gè)屬性有 get 和 set 方法 void ToString(): 打印對(duì)象信息,供測(cè)試使用 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 25 MyAttr 類(lèi)類(lèi) (5)文本類(lèi)(MyText) :對(duì)應(yīng)數(shù)據(jù)庫(kù)中的 TEXT 表 屬性說(shuō)明:String content:文檔內(nèi)容 MyElement elem:所屬元素 MyDocument doc:所屬文檔 方法說(shuō)明:每個(gè)屬性有 get 和 set 方法 void ToString(): 打印對(duì)象信息,供測(cè)試使用 MyText 類(lèi)類(lèi) (6)鏈表類(lèi):調(diào)用 java.util.LinkedList 類(lèi)來(lái)存儲(chǔ)元素表,屬性表,文本表 3控制單元: (1)DomControl:此類(lèi)為程序中最重要控制類(lèi),所有核心算法都在這個(gè)類(lèi)中。它 的功能是將解析 XML 文件,生成 DOM 樹(shù),通過(guò)對(duì)樹(shù)操作得到需要的節(jié)點(diǎn)信息并 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 26 將它們存入鏈表中,以作為后面數(shù)據(jù)存儲(chǔ)的輸入。 屬性: org.w3c.dom.Node doc:樹(shù)根節(jié)點(diǎn) DbControl dbc:數(shù)據(jù)庫(kù)控制類(lèi)對(duì)象 MyDocument:mydoc:文檔對(duì)象 LinkedList myElemList:元素鏈表 LinkedList myAttrList:屬性鏈表 LinkedList myTextList:文本鏈表 方法: boolean createDom(String uri) 此方法以文檔路徑(URI)為參數(shù)解析 XML 文件,創(chuàng)建 dom 樹(shù), 將樹(shù)的根節(jié)點(diǎn)賦給屬性 doc。解析成功返回 true,失敗返回 false。 void deepVisit() 此方法通過(guò)對(duì) DOM 樹(shù)深度遍歷得到元素的文檔序、begin、end 信 息,并將這些信息存到相應(yīng)的存儲(chǔ)單元中。 void visit() 此方法層遍歷 dom 樹(shù),將得到的相應(yīng)的節(jié)點(diǎn)信息存入創(chuàng)建的存儲(chǔ) 單元對(duì)象中,在調(diào)用 deepVisit()方法深度遍歷樹(shù),再將相應(yīng)的信息 存入這些存儲(chǔ)單元對(duì)象中,最后把這些對(duì)象分別存入屬性 mydoc, myElementList,myAttrList,myTextList。 boolean hasWord(String s) 此方法判斷參數(shù) s 是否含有非空格和換行符的其他字符,又返回 true,沒(méi)有返回 false。 MyDocument getMyDocument(org.w3c.dom.Node doc) 此方法將 Dom 樹(shù)中的文檔節(jié)點(diǎn)轉(zhuǎn)換為 Mydocument 對(duì)象 MyElement getMyElement(org.w3c.dom.Node element) 此方法將 Dom 樹(shù)中的元素節(jié)點(diǎn)轉(zhuǎn)換為 MyElement 對(duì)象 MyAttr getMyAttr(org.w3c.dom.Node attr) 此方法將 Dom 樹(shù)中的屬性節(jié)點(diǎn)轉(zhuǎn)換為 MyAttr 對(duì)象 MyText getMyText(org.w3c.dom.Node text) 此方法將 Dom 樹(shù)中的文本節(jié)點(diǎn)轉(zhuǎn)換為 MyAttr 對(duì)象 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 27 DomControl 類(lèi)類(lèi) (2)DBControl(數(shù)據(jù)庫(kù)控制類(lèi)) 屬性: Connect con:數(shù)據(jù)庫(kù)連接對(duì)象 Statement stmt:執(zhí)行語(yǔ)句 ResultSet rs:結(jié)果集 方法: boolean openDB() 打開(kāi)數(shù)據(jù)庫(kù) boolean close() 關(guān)閉數(shù)據(jù)庫(kù) boolean proofDocumentUri(String uri) 驗(yàn)證文檔是否存在,存在返回 true,不存在返回 false int queryMaxID(String column,String table) 查找表 table 中的列 column 的最大 ID int queryDocumentID(String uri) 查找文檔的 DOCID 值 boolean insertDoc(MyDocument doc) 在文檔表中插入文檔 boolean insertElem(MyElement elem) 在元素表中插入元素 boolean insertAttr(MyAttr attr) 在屬性表中插入屬性 boolean insertText(MyText text) 在文本表中插入文本 boolean insertFullRelation(MyElement met) 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 28 在全局關(guān)系表中插入行信息 DBControl 類(lèi)類(lèi) 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 29 3.4.4 類(lèi)關(guān)系圖類(lèi)關(guān)系圖 類(lèi)關(guān)系圖類(lèi)關(guān)系圖 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 30 3.4.5 算法的實(shí)現(xiàn)策略算法的實(shí)現(xiàn)策略 程序中的算法主要集中在 DomControl 類(lèi)中,下面就其中一些算法的實(shí)現(xiàn)進(jìn)行說(shuō)明。 1. 求文檔序 只需對(duì) DOM 樹(shù)進(jìn)行深度遍歷即可得到,如下面 DOM 樹(shù),文檔序標(biāo)在節(jié)點(diǎn)旁 邊: 文檔序示例圖文檔序示例圖 2. 根據(jù) DOM 樹(shù)求元素的 begin 和 end 值 begin 和 end 是為 SAX 服務(wù)的屬性,利用 SAX 處理 XML 文檔很容易得到,但 由于程序使用 DOM 接口解析 XML 文檔,所以必須利用 DOM 樹(shù)得到 begin 和 end 值。方法就是設(shè) int 型變量 begin 和 end 跟蹤 DOM 樹(shù)的深度遍歷。如下圖: Begin、End 示例圖示例圖 #DOCUME NT GOODS ITEM NAMEPRICEQTY ITEM NAME E PRICEQTY begin=1 end=18 Begin=2 End=9 begin=3 end=4 begin=5 end=6 begin=7 end=8 begin=10 end=17 begin=11 end=12 begin=13 end=14 begin=15 end=16 #DOCUME NT GOODS ITEM NAMEPRICEQTY ITEM NAMEPRICEQTY 1 2 345 6 789 北京工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文) 31 該樹(shù)對(duì)應(yīng)文檔即為: (1) (2) (3)(4) (5)(6) (7)(8) (9) (10) (11)(12) (13)(14) (15)(16) (17) (18) 3. 求元素的 sequence 屬性 squence 表示 DOM 中同層同父親的元素節(jié)點(diǎn)的順序, 維護(hù)一個(gè)隊(duì)列對(duì)樹(shù)進(jìn)行層 遍歷即可,如下圖: Sequence 示例圖示例圖 3.4.6 異常處理異常處理 程序在三個(gè)地方需要進(jìn)行異常的捕捉和處理, 第一個(gè)是 DomControl 類(lèi)中解析 XML 文 檔

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論