乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      技巧:XML 和數(shù)據(jù)庫(kù)之間的映射

       todaytomo 2007-01-18

      技巧:XML 和數(shù)據(jù)庫(kù)之間的映射

      掌握將數(shù)據(jù)映射到 XML 模式的簡(jiǎn)單方法

      級(jí)別: 中級(jí)

      Hany Saleeb, 技術(shù)顧問(wèn), Freelance

      2005 年 12 月 08 日

      XML 用戶一個(gè)常見的問(wèn)題是如何將 XML 映射到數(shù)據(jù)庫(kù)。本文討論基于表的映射和對(duì)象-關(guān)系映射。這兩種映射常常作為在 XML 文檔和數(shù)據(jù)庫(kù)特別是關(guān)系數(shù)據(jù)庫(kù)之間轉(zhuǎn)換數(shù)據(jù)的軟件的基礎(chǔ)。在這個(gè)領(lǐng)域,一個(gè)重要的特點(diǎn)是映射是雙向的,就是說(shuō)可以把數(shù)據(jù)從 XML 文檔轉(zhuǎn)化到數(shù)據(jù)庫(kù),也可以從數(shù)據(jù)庫(kù)轉(zhuǎn)化到 XML 文檔。

      即使數(shù)據(jù)庫(kù)沒(méi)有自稱支持 XML 特性,也可以在關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)和檢索 XML 文檔。這樣做需要小心地使用 Java™ 編程語(yǔ)言(數(shù)據(jù)庫(kù)不一定兼容 Java Database Connectivity 或 JDBC),還需要一個(gè)框架來(lái)連接關(guān)系數(shù)據(jù)庫(kù)和 XML 文檔流。

      將 XML 映射到數(shù)據(jù)庫(kù)有兩種常見的方法:基于表的映射和對(duì)象-關(guān)系(或基于對(duì)象的)映射。這兩種方法都是雙向的,因此可用于存儲(chǔ)和檢索 XML 文檔。

      基于表的映射

      基于表的映射 將文檔看作一個(gè)表或者一組表。清單 12 顯示了這兩種情況下的文檔結(jié)構(gòu)。


      清單 1. 表映射的選項(xiàng)(單表)
      
                              
                              <Table ABC>
                              <Row1>
                              <Column_a>123-45-7890</Column_a>
                              <Column_b>Johnson, Eric</Column_b>
                              <Column_c> Pharmaceutical </Column_c>
                              </Row1>
                              <Row2>
                              <Column_a>999-00-1010</Column_a>
                              <Column_b>Mitchell, Bruce</Column_b>
                              <Column_c> Industrial </Column_c>
                              </Row2>
                              </Table ABC>
                              


      清單 2. 表映射的選項(xiàng)(多表)
      
                              
                              <Tables>
                              <Table_1>
                              <Row1>
                              <Column_a>123-45-7890</Column_a>
                              <Column_b> Johnson, Eric </Column_b>
                              <Column_c>Company A</Column_c>
                              </Row1>
                              <Row2>
                              <Column_a>999-00-1010</Column_a>
                              <Column_b> Mitchell, Bruce </Column_b>
                              <Column_c> Company  B</Column_c>
                              </Row2>
                              </Table_1>
                              <Table_2>
                              <Row1>
                              <Column_a>Company A</Column_a>
                              <Column_b>Pharmaceutical</Column_b>
                              </Row1>
                              <Row2>
                              <Column_a>Company B</Column_a>
                              <Column_b>Industrial</Column_b>
                              </Row2>
                              </Table_2>
                              </Tables>
                              

      這種映射最明顯的優(yōu)點(diǎn)是簡(jiǎn)單。因?yàn)榻Y(jié)構(gòu)與關(guān)系數(shù)據(jù)庫(kù)的表及結(jié)果集匹配,根據(jù)這種映射編寫代碼很容易。代碼執(zhí)行快、伸縮性好,對(duì)某些應(yīng)用很合適,比如每次一個(gè)表在數(shù)據(jù)庫(kù)之間傳遞數(shù)據(jù)。

      但是,基于表的映射也有一些不足之處。它只能用于非常小的 XML 文檔子集。此外,它沒(méi)有保留物理結(jié)構(gòu)(即字符和實(shí)體引用、字符編碼或獨(dú)立的聲明)、文檔信息(即文檔類型聲明或 DTD)、注釋和處理指令。





      回頁(yè)首


      對(duì)象-關(guān)系映射

      基于表的映射只能用于有限的 XML 文檔,因此多數(shù)支持 XML 的關(guān)系數(shù)據(jù)庫(kù)、大部分支持 XML 的對(duì)象服務(wù)器以及一些中間件工具使用更加復(fù)雜的映射,稱為對(duì)象-關(guān)系映射。這種映射方法將 XML 文檔建模為針對(duì)文檔數(shù)據(jù)的一棵對(duì)象樹,然后將這些對(duì)象映射到數(shù)據(jù)庫(kù)。

      比如 清單 3 所示的 XML 文檔。


      清單 3. XML 格式的單個(gè)銷售訂單
      
                              
                              <SalesOrder>
                              <Number>1234</Number>
                              <Customer>Gallagher Industries</Customer>
                              <Date>29.10.00</Date>
                              <Item Number="1">
                              <Part>A-10</Part>
                              <Quantity>12</Quantity>
                              <Price>10.95</Price>
                              </Item>
                              <Item Number="2">
                              <Part>B-43</Part>
                              <Quantity>600</Quantity>
                              <Price>3.99</Price>
                              </Item>
                              </SalesOrder>
                              

      該文檔映射為 清單 4 所示的對(duì)象。


      清單 4. 層次化 XML 表示的單個(gè)銷售訂單
      
                              
                              object SalesOrder {
                              number = 1234;
                              customer = "Gallagher Industries";
                              date = 29.10.00;
                              items = {ptrs to Item objects};
                              }         /                                     /                                       /                                         object Item {       object Item {
                              number = 1;         number = 2;
                              part = "A-10";      part = "B-43";
                              quantity = 12;      quantity = 600;
                              price = 10.95;      price = 3.99;
                              }                   }
                              

      該方法是層次化的,對(duì)數(shù)據(jù)映射來(lái)說(shuō)很直觀。數(shù)據(jù)庫(kù)對(duì)象帶來(lái)了一些優(yōu)點(diǎn),其中包括:

      • 數(shù)據(jù)庫(kù)獨(dú)立性:數(shù)據(jù)庫(kù)對(duì)象從根本上是獨(dú)立于數(shù)據(jù)庫(kù)創(chuàng)建的,不依賴于特定底層數(shù)據(jù)特性來(lái)提供其功能。這種獨(dú)立性使您可以使用數(shù)據(jù)庫(kù)對(duì)象迅速將應(yīng)用程序構(gòu)建從一種數(shù)據(jù)庫(kù)平臺(tái)轉(zhuǎn)移到另一種數(shù)據(jù)庫(kù)平臺(tái),提供了很大的可伸縮性。
      • 自動(dòng)化的連接處理:自動(dòng)化連接處理能夠連接、斷開和管理系統(tǒng)資源。對(duì)客戶機(jī)對(duì)象的抽象可以提供更好的控制和性能。
      • 聲明性的引用完整性:通過(guò)直接在數(shù)據(jù)庫(kù)對(duì)象中嵌入訪問(wèn)邏輯,可以獲得和使用存儲(chǔ)過(guò)程訪問(wèn)數(shù)據(jù)庫(kù)同樣的好處,而且不依賴于特定平臺(tái)。引用完整性成了數(shù)據(jù)庫(kù)獨(dú)立性,數(shù)據(jù)庫(kù)對(duì)象之間的復(fù)雜關(guān)系成了可移植性。比如,可以在數(shù)據(jù)庫(kù)對(duì)象中集成業(yè)務(wù)規(guī)則,讓訪問(wèn)該對(duì)象的所有應(yīng)用程序都保證遵守這些規(guī)則。
      • 多層驗(yàn)證:可以在對(duì)象或者其父對(duì)象上執(zhí)行檢查。這樣就可以規(guī)范和驗(yàn)證訪問(wèn)、權(quán)限以及數(shù)據(jù)完整性。
      • 避免內(nèi)嵌 SQL:使用數(shù)據(jù)庫(kù)對(duì)象可以使應(yīng)用程序避免內(nèi)嵌 SQL 及其維護(hù)的困難和系統(tǒng)依賴性。如果應(yīng)用程序只與其他 Java 對(duì)象交互,系統(tǒng)的設(shè)計(jì)就可以是完全面向?qū)ο蟮摹?
      • 安全:可以確保與數(shù)據(jù)庫(kù)對(duì)象的任何交互的安全,并容易地保證數(shù)據(jù)安全。




      回頁(yè)首


      映射方法論

      實(shí)現(xiàn)對(duì)象-關(guān)系映射需要兩步。首先將 XML 模式(這里使用 DTD)映射到對(duì)象模式,然后將對(duì)象模式映射到數(shù)據(jù)庫(kù)模式。也可以將這兩種映射合并成一個(gè) DTD 到數(shù)據(jù)庫(kù)的映射,現(xiàn)在多數(shù)軟件都是這樣做的。

      表 1 中的例子顯示的簡(jiǎn)單元素類型 B、DE 被映射到字符串,而復(fù)雜元素類型 AC 被映射到類。在對(duì)象-關(guān)系映射的第一部分,AC 的模型和屬性被映射到類 AC 的屬性。AC 的內(nèi)容模型中對(duì) BDE 的引用被映射為字符串。

      表 1. 對(duì)象關(guān)系映射,第 1 部分
      DTD
      <!ELEMENT A (B, C)> <!ELEMENT B (#PCDATA)> <!ELEMENT C (D, E)> class A { String b; C c; }
      <!ELEMENT D (#PCDATA)> <!ELEMENT E (#PCDATA)> class C {String d; String e; }

      對(duì)象-關(guān)系映射的第二部分(參見表 2)中,類映射到表,標(biāo)量屬性映射到列,指針/引用屬性映射到主鍵/外鍵關(guān)系。A 的內(nèi)容模型中對(duì) C 的引用被映射到 pointer/reference 類型的屬性,指向類 C 的對(duì)象,因?yàn)樵仡愋?C 被映射到類 C

      表 2. 對(duì)象關(guān)系映射,第 2 部分
      class A {String b; C c; } Table A: Column b Column c_fk
      class C {String d; String e; } Table C: Column d Column e Column c_pk




      回頁(yè)首


      結(jié)束語(yǔ)

      兩種映射都是對(duì) XML 文檔中的數(shù)據(jù) 而不是對(duì)文檔本身建模。因此映射更適合于以數(shù)據(jù)為中心的文檔而不是以文檔為中心的文檔。雖然對(duì)象-關(guān)系映射是采用面向?qū)ο蟮募夹g(shù),但是也不夠理想?;诒淼挠成涓静荒芴幚砘旌蟽?nèi)容,而從性能的角度看對(duì)象-關(guān)系映射可能效率很低。使用哪種方法都行,但是必須記住這些警告。





      回頁(yè)首


      參考資料

      學(xué)習(xí)

      討論




      回頁(yè)首


      關(guān)于作者

      Hany Saleeb 博士的照片

      Hany Saleeb 曾經(jīng)在多家技術(shù)、金融和衛(wèi)生保健企業(yè)中工作過(guò)。 他的專長(zhǎng)是和 J2EE、XML 以及數(shù)據(jù)庫(kù)有關(guān)的應(yīng)用軟件和 n 層系統(tǒng)設(shè)計(jì)。他擁有計(jì)算機(jī)科學(xué)博士學(xué)位,主攻數(shù)據(jù)挖掘和信息檢索。




        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多