• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于模型映射方法實(shí)現(xiàn)XML與關(guān)系數(shù)據(jù)的相互轉(zhuǎn)換

    2014-09-24 12:09:51張屹
    軟件工程 2014年6期
    關(guān)鍵詞:關(guān)系數(shù)據(jù)庫(kù)

    張屹

    摘 要:基于模型映射方法可以獨(dú)立于XML文檔的DTD或Schema,在關(guān)系型數(shù)據(jù)庫(kù)中設(shè)計(jì)固定的關(guān)系模式用于存儲(chǔ)XML文檔。采用Dietz編碼方法對(duì)XML文檔中的元素進(jìn)行編碼,通過(guò)編碼值對(duì)反應(yīng)元素之間的祖先/后裔關(guān)系,并在關(guān)系表中存儲(chǔ)元素的Dietz編碼值,并依此作為依據(jù)設(shè)計(jì)算法將存儲(chǔ)于關(guān)系數(shù)據(jù)庫(kù)中的XML文檔進(jìn)行還原。

    關(guān)鍵詞:模型映射;關(guān)系數(shù)據(jù)庫(kù);XML;Dietz編碼

    中圖分類(lèi)號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A

    Implementation of Mutual Conversion Between XML and RDBMS

    Based on Model Mapping Method

    ZHANG Yi

    (Library of Tianjin Medical University,Tianjin 30070,China)

    Abstract:Model-based mapping method can be independent of the XML document DTD or Schema.This paper design a fixed relational pattern in order to store XML documents based on model mapping method.Firstly elements in XML are encoded by Dietz coding method.The pair of encoded value expressed ancestor/descendant relationships of elements.RDBMS stores these values.Algorithm can restore XML documents which store in RDBMS based on Dietz coding values.

    Keywords:model mapping;RDBMS;XML;dietz encoding method

    1 引言(Introduction)

    可擴(kuò)展的標(biāo)識(shí)語(yǔ)言XML(Extensible Markup Language)與傳統(tǒng)的關(guān)系數(shù)據(jù)明顯不同,SQL Server、Oracle等數(shù)據(jù)庫(kù)管理系統(tǒng)為關(guān)系數(shù)據(jù)提供了數(shù)據(jù)存儲(chǔ)、查詢(xún)以及分析這些功能支持,而XML僅用于存儲(chǔ)數(shù)據(jù)。XML是一種半結(jié)構(gòu)化數(shù)據(jù),由于其自身結(jié)構(gòu)特點(diǎn)導(dǎo)致對(duì)于XML數(shù)據(jù)不能方便的進(jìn)行數(shù)據(jù)查詢(xún)和更新操作,如何有效的對(duì)XML進(jìn)行查詢(xún)和存儲(chǔ)成為XML研究領(lǐng)域的重要研究方向。

    關(guān)系數(shù)據(jù)庫(kù)技術(shù)是目前應(yīng)用最為廣泛且技術(shù)成熟的數(shù)據(jù)存儲(chǔ)和處理技術(shù),它為數(shù)據(jù)提供了數(shù)據(jù)定義、數(shù)據(jù)操縱以及完整性約束的支持,因此使用關(guān)系表存儲(chǔ)XML文檔是一種較為理想的解決方案。關(guān)系表是一種二維表結(jié)構(gòu),而XML文檔是樹(shù)形結(jié)構(gòu),兩者在數(shù)據(jù)結(jié)構(gòu)上存在差異,如何實(shí)現(xiàn)這兩種數(shù)據(jù)結(jié)構(gòu)的相互轉(zhuǎn)化是目前相關(guān)研究工作的熱點(diǎn),本文提出了獨(dú)立于XML文檔DTD或Schema的模型映射存儲(chǔ)方法,采用固定的關(guān)系模式存儲(chǔ)XML文檔并且保存文檔中元素結(jié)點(diǎn)的編碼值。

    2 相關(guān)研究(Related works)

    相關(guān)研究成果將XML映射為關(guān)系模式進(jìn)行存儲(chǔ)分為兩類(lèi)方法:模型映射(Model-Mapping)和結(jié)構(gòu)映射(Structure-Mapping)[1]。結(jié)構(gòu)映射方法中,需要將XML Schema(或DTD)映射為關(guān)系模式,再將XML文檔存儲(chǔ)在相應(yīng)的關(guān)系模式中,文獻(xiàn)[2-4]介紹了如何根據(jù)XML文檔DTD或模式映射為關(guān)系模式存儲(chǔ)XML。使用結(jié)構(gòu)映射方法,關(guān)系表之間的參照完整性關(guān)系可以反映元素之間的祖先/后裔關(guān)系,通過(guò)關(guān)系表之間的連接操作可以將關(guān)系數(shù)據(jù)還原為原先的XML文檔。由于關(guān)系模式依賴(lài)于XML文檔的結(jié)構(gòu),映射的關(guān)系模式依照XML文檔結(jié)構(gòu)的變化而發(fā)生變化。模型映射方法獨(dú)立于XML文檔的結(jié)構(gòu),Xpev[5]系統(tǒng)是一種典型的模型映射方法。采用固定的關(guān)系模式存儲(chǔ)XML,但是缺點(diǎn)在于由于使用不同的關(guān)系表存儲(chǔ)XML文檔樹(shù)不同類(lèi)型的結(jié)點(diǎn)就無(wú)法反應(yīng)文檔中元素之間的祖先/后裔關(guān)系,進(jìn)而無(wú)法將存儲(chǔ)好的文檔進(jìn)行還原。

    3 關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)和還原XML文檔(Store/restore

    XML in RDBMS)

    3.1 Dietz編碼標(biāo)記XML文檔元素

    本文所提出的方法是一種模型映射方法,與以往的研究成果相比有點(diǎn)在于:(1)采用固定的關(guān)系模式存儲(chǔ)XML文檔,不依賴(lài)于文檔結(jié)構(gòu),能夠存儲(chǔ)不同結(jié)構(gòu)的XML;(2)使用Dietz編碼[6]這種區(qū)間編碼方式對(duì)XML文檔中元素進(jìn)行編碼并存儲(chǔ),在關(guān)系表中也能反應(yīng)所存儲(chǔ)元素的祖先/后裔關(guān)系;(3)通過(guò)關(guān)系表保存的區(qū)間編碼所反映元素之間的祖先/后裔關(guān)系可以將關(guān)系數(shù)據(jù)還原為XML文檔,克服了以往模型映射方法所存儲(chǔ)XML文檔無(wú)法進(jìn)行還原的問(wèn)題。

    定義1 XML文檔表示為樹(shù)型結(jié)構(gòu),文檔樹(shù)中的每個(gè)元素結(jié)點(diǎn)被賦予一個(gè)二元組編碼值對(duì),分別代表元素先序遍歷和后序遍歷值。由于文檔樹(shù)的每個(gè)元素結(jié)點(diǎn)u在先序遍歷(后序遍歷)序號(hào)中必然出現(xiàn)在它的后裔元素結(jié)點(diǎn)v之前(之后),因此,元素u和v之間是祖先/后裔關(guān)系,當(dāng)且僅當(dāng)pre(u)

    圖1 XML文檔示例

    Fig.1 XML document demo.

    圖2 XML文檔元素Dietz編碼

    Fig.2 Encoding elements in XML by Dietz method

    3.2 關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)XML文檔

    設(shè)計(jì)固定結(jié)構(gòu)關(guān)系模式即采用模型映射方法來(lái)存儲(chǔ) XML 文檔。本文根據(jù)XPath數(shù)據(jù)模型和XML文檔的編碼方法設(shè)計(jì)出一種全新的模型映射方法。

    表Document存儲(chǔ)的是數(shù)據(jù)庫(kù)中需要保存的XML文檔的文件名。表Element、Attribute和Text分別保存的是數(shù)據(jù)庫(kù)當(dāng)前存儲(chǔ)XML文檔元素、屬性、文本這三種類(lèi)型的結(jié)點(diǎn)。屬性ElementPre和ElementPost用于表示元素的Dietz編碼值對(duì),由于XML文檔中元素至多有一個(gè)父元素,因此屬性ParentPre表示當(dāng)前元素父元素的先序編碼。表Element中屬性TagName表示元素標(biāo)記名。表Attribute和表Text同樣還要要保存當(dāng)前元素的屬性名、屬性值以及元素文本內(nèi)容。

    圖3 存儲(chǔ)XML文檔的關(guān)系模式

    Fig.3 Relational pattern of storing XML

    算法1:關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)XML文檔

    輸入:XML文檔

    StoreXMLDoc(XMLDoc)//該函數(shù)用來(lái)描述存儲(chǔ)XML文檔的算法

    ① 獲取XML文檔或文檔片段根元素getRootElement(XMLDoc);

    ② 對(duì)當(dāng)前元素進(jìn)行Dietz編碼DietzEncode(RootElement);

    ③ 判斷當(dāng)前結(jié)點(diǎn)是否包含子結(jié)點(diǎn)

    if(RootElement.haschild){

    if(child instance of Text)// 如果為T(mén)ext,在表Text保存該結(jié)點(diǎn)以及當(dāng)前元素Dietz編碼值

    else if(child instance of Attribute)// 子節(jié)點(diǎn)類(lèi)型如果為Attribute,在表Attribute保存該結(jié)點(diǎn)以及當(dāng)前元素Dietz編碼值

    else StoreXMLDoc(Element)//子結(jié)點(diǎn)類(lèi)型如果為Element,以當(dāng)前元素的子元素為參數(shù)遞歸調(diào)用函數(shù)StoreXMLDoc()

    }

    else

    InsertElement(EncodePair, Element); //如當(dāng)前元素?zé)o子結(jié)點(diǎn),在表Element中保存該元素以及該元素的Dietz編碼值對(duì)

    3.3 關(guān)系數(shù)據(jù)還原為XML文檔

    關(guān)系模式中存儲(chǔ)了當(dāng)前元素及其父元素的Dietz編碼值,兩組編碼值之間通過(guò)參照完整性關(guān)系來(lái)反映元素結(jié)點(diǎn)之間的父子關(guān)系。首先構(gòu)造XML文檔根元素結(jié)點(diǎn),再根據(jù)當(dāng)前元素結(jié)點(diǎn)的先序編碼在Element表中查找屬性ParentPre取值與之相對(duì)應(yīng)的元組,將這些元組構(gòu)造為已構(gòu)造好元素的子元素,遞歸的執(zhí)行以上過(guò)程直到無(wú)法繼續(xù)構(gòu)造出子元素為止。這種方法能夠使還原出來(lái)的XML文檔與原文檔一致。

    算法2:關(guān)系數(shù)據(jù)庫(kù)還原XML文檔

    輸入:關(guān)系數(shù)據(jù)

    輸出:XML文檔

    ConstructXMLDoc()//還原XML文檔{

    RootElement = new Element(TagName);//當(dāng)前元組屬性TagName的取值,構(gòu)造XML文檔根元素

    XMLDocument = new Document(RootElement);//根據(jù)該根元素構(gòu)造XML文檔

    ConstructAttribute(ElementPre);//根據(jù)當(dāng)前元組屬性ElementPre的取值,構(gòu)造當(dāng)前根元素的屬性

    ConstructText(ElementPre);//根據(jù)當(dāng)前元組屬性ElementPre的取值,構(gòu)造當(dāng)前根元素的文本

    ChildElementList=RootElement.getElementPre();//查找以根元素為父元素的元組集合

    for(i=0;i

    ChildElement=new Element(ChildElementList.get(i).getTagName());

    ConstructAttribute(ChildElementList.get(i).getElementPre());

    ConstructText(ChildElementList.get(i).getElementPre());

    ChildElementSet=RecursiveConstruct(ChildElement);//當(dāng)前元組為參數(shù)調(diào)用遞歸函數(shù)RecursiveConstruct(),構(gòu)造當(dāng)前元素的子元素集

    XMLDocument.getRootElement().addContent(ChildElement);//將構(gòu)造的元素集添加為當(dāng)前元素的子元素,形成XML文檔

    }

    Output(XMLDocument);//輸出XML文檔;

    }

    Element RecursiveConstruct(CurrentElement){ //遞歸函數(shù)是用來(lái)構(gòu)造當(dāng)前元素的子元素

    ChildElementList(CurrentElement.getElementPre());

    for(i=0;i< ChildElementList.size();i++){

    ConstructAttribute(ChildElementList.get(i).getElementPre());

    ConstructText(ChildElementList.get(i).getElementPre());

    CurrentElement.addContent(RecursiveConstruct(ChildElementList.get(i)));//遞歸調(diào)用RecursiveConstruct()將構(gòu)造的元素集添加為當(dāng)前元素的子元素

    }

    4 結(jié)論(Conclusion)

    文章所提出的方法獨(dú)立于文檔結(jié)構(gòu)采用固定關(guān)系模式存儲(chǔ)XML文檔,同時(shí)克服以往模型映射方法中無(wú)法還原出所存儲(chǔ)的XML文檔的缺點(diǎn)。通過(guò)在關(guān)系模式中存儲(chǔ)元素的Dietz編碼值對(duì)形成的參照完整性關(guān)系來(lái)反映元素之間的父子關(guān)系。通過(guò)關(guān)系表之間的連接操作能夠?qū)⒋鎯?chǔ)在關(guān)系數(shù)據(jù)庫(kù)中的XML文檔還原出來(lái)。

    參考文獻(xiàn)(References)

    [1] 萬(wàn)常選,劉云生.基于關(guān)系數(shù)據(jù)庫(kù)的XML數(shù)據(jù)管理[J].計(jì)算機(jī)

    科學(xué),2003,30(8):64-68.

    [2] 周傲英,等.基于關(guān)系的XML數(shù)據(jù)存儲(chǔ)[J].計(jì)算機(jī)應(yīng)用,2000,

    20(9):9-12.

    [3] 楊健,雄前心.XML文檔架構(gòu)與關(guān)系數(shù)據(jù)模型間的映射研究

    [J].計(jì)算機(jī)工程與應(yīng)用,2004,40(27):169-172.

    [4] 劉偉.基于schema的XML模式與關(guān)系模式映射算法的研究[J].

    計(jì)算機(jī)應(yīng)用與軟件,2006,23:113-115.

    [5] 秦杰,楊樹(shù)強(qiáng),竇文華.一種基于模型映射的XML文檔存儲(chǔ)模

    型[J].計(jì)算機(jī)工程與科學(xué),2005,27(11):12-14.

    [6] Dietz P F. Maintaining Order in a Linked List [C].In: Lewis H

    Retal Eds. Proceedings of the 14th Annual ACM Symposium on

    Theory of Computing (STOC'82).San Francisco,California,

    USA. May 5-7,1982.New York: ACM Press,1982:122-127.

    作者簡(jiǎn)介:

    張 屹(1983-),男,碩士,助理工程師.研究領(lǐng)域:軟件

    工程.

    表Document存儲(chǔ)的是數(shù)據(jù)庫(kù)中需要保存的XML文檔的文件名。表Element、Attribute和Text分別保存的是數(shù)據(jù)庫(kù)當(dāng)前存儲(chǔ)XML文檔元素、屬性、文本這三種類(lèi)型的結(jié)點(diǎn)。屬性ElementPre和ElementPost用于表示元素的Dietz編碼值對(duì),由于XML文檔中元素至多有一個(gè)父元素,因此屬性ParentPre表示當(dāng)前元素父元素的先序編碼。表Element中屬性TagName表示元素標(biāo)記名。表Attribute和表Text同樣還要要保存當(dāng)前元素的屬性名、屬性值以及元素文本內(nèi)容。

    圖3 存儲(chǔ)XML文檔的關(guān)系模式

    Fig.3 Relational pattern of storing XML

    算法1:關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)XML文檔

    輸入:XML文檔

    StoreXMLDoc(XMLDoc)//該函數(shù)用來(lái)描述存儲(chǔ)XML文檔的算法

    ① 獲取XML文檔或文檔片段根元素getRootElement(XMLDoc);

    ② 對(duì)當(dāng)前元素進(jìn)行Dietz編碼DietzEncode(RootElement);

    ③ 判斷當(dāng)前結(jié)點(diǎn)是否包含子結(jié)點(diǎn)

    if(RootElement.haschild){

    if(child instance of Text)// 如果為T(mén)ext,在表Text保存該結(jié)點(diǎn)以及當(dāng)前元素Dietz編碼值

    else if(child instance of Attribute)// 子節(jié)點(diǎn)類(lèi)型如果為Attribute,在表Attribute保存該結(jié)點(diǎn)以及當(dāng)前元素Dietz編碼值

    else StoreXMLDoc(Element)//子結(jié)點(diǎn)類(lèi)型如果為Element,以當(dāng)前元素的子元素為參數(shù)遞歸調(diào)用函數(shù)StoreXMLDoc()

    }

    else

    InsertElement(EncodePair, Element); //如當(dāng)前元素?zé)o子結(jié)點(diǎn),在表Element中保存該元素以及該元素的Dietz編碼值對(duì)

    3.3 關(guān)系數(shù)據(jù)還原為XML文檔

    關(guān)系模式中存儲(chǔ)了當(dāng)前元素及其父元素的Dietz編碼值,兩組編碼值之間通過(guò)參照完整性關(guān)系來(lái)反映元素結(jié)點(diǎn)之間的父子關(guān)系。首先構(gòu)造XML文檔根元素結(jié)點(diǎn),再根據(jù)當(dāng)前元素結(jié)點(diǎn)的先序編碼在Element表中查找屬性ParentPre取值與之相對(duì)應(yīng)的元組,將這些元組構(gòu)造為已構(gòu)造好元素的子元素,遞歸的執(zhí)行以上過(guò)程直到無(wú)法繼續(xù)構(gòu)造出子元素為止。這種方法能夠使還原出來(lái)的XML文檔與原文檔一致。

    算法2:關(guān)系數(shù)據(jù)庫(kù)還原XML文檔

    輸入:關(guān)系數(shù)據(jù)

    輸出:XML文檔

    ConstructXMLDoc()//還原XML文檔{

    RootElement = new Element(TagName);//當(dāng)前元組屬性TagName的取值,構(gòu)造XML文檔根元素

    XMLDocument = new Document(RootElement);//根據(jù)該根元素構(gòu)造XML文檔

    ConstructAttribute(ElementPre);//根據(jù)當(dāng)前元組屬性ElementPre的取值,構(gòu)造當(dāng)前根元素的屬性

    ConstructText(ElementPre);//根據(jù)當(dāng)前元組屬性ElementPre的取值,構(gòu)造當(dāng)前根元素的文本

    ChildElementList=RootElement.getElementPre();//查找以根元素為父元素的元組集合

    for(i=0;i

    ChildElement=new Element(ChildElementList.get(i).getTagName());

    ConstructAttribute(ChildElementList.get(i).getElementPre());

    ConstructText(ChildElementList.get(i).getElementPre());

    ChildElementSet=RecursiveConstruct(ChildElement);//當(dāng)前元組為參數(shù)調(diào)用遞歸函數(shù)RecursiveConstruct(),構(gòu)造當(dāng)前元素的子元素集

    XMLDocument.getRootElement().addContent(ChildElement);//將構(gòu)造的元素集添加為當(dāng)前元素的子元素,形成XML文檔

    }

    Output(XMLDocument);//輸出XML文檔;

    }

    Element RecursiveConstruct(CurrentElement){ //遞歸函數(shù)是用來(lái)構(gòu)造當(dāng)前元素的子元素

    ChildElementList(CurrentElement.getElementPre());

    for(i=0;i< ChildElementList.size();i++){

    ConstructAttribute(ChildElementList.get(i).getElementPre());

    ConstructText(ChildElementList.get(i).getElementPre());

    CurrentElement.addContent(RecursiveConstruct(ChildElementList.get(i)));//遞歸調(diào)用RecursiveConstruct()將構(gòu)造的元素集添加為當(dāng)前元素的子元素

    }

    4 結(jié)論(Conclusion)

    文章所提出的方法獨(dú)立于文檔結(jié)構(gòu)采用固定關(guān)系模式存儲(chǔ)XML文檔,同時(shí)克服以往模型映射方法中無(wú)法還原出所存儲(chǔ)的XML文檔的缺點(diǎn)。通過(guò)在關(guān)系模式中存儲(chǔ)元素的Dietz編碼值對(duì)形成的參照完整性關(guān)系來(lái)反映元素之間的父子關(guān)系。通過(guò)關(guān)系表之間的連接操作能夠?qū)⒋鎯?chǔ)在關(guān)系數(shù)據(jù)庫(kù)中的XML文檔還原出來(lái)。

    參考文獻(xiàn)(References)

    [1] 萬(wàn)常選,劉云生.基于關(guān)系數(shù)據(jù)庫(kù)的XML數(shù)據(jù)管理[J].計(jì)算機(jī)

    科學(xué),2003,30(8):64-68.

    [2] 周傲英,等.基于關(guān)系的XML數(shù)據(jù)存儲(chǔ)[J].計(jì)算機(jī)應(yīng)用,2000,

    20(9):9-12.

    [3] 楊健,雄前心.XML文檔架構(gòu)與關(guān)系數(shù)據(jù)模型間的映射研究

    [J].計(jì)算機(jī)工程與應(yīng)用,2004,40(27):169-172.

    [4] 劉偉.基于schema的XML模式與關(guān)系模式映射算法的研究[J].

    計(jì)算機(jī)應(yīng)用與軟件,2006,23:113-115.

    [5] 秦杰,楊樹(shù)強(qiáng),竇文華.一種基于模型映射的XML文檔存儲(chǔ)模

    型[J].計(jì)算機(jī)工程與科學(xué),2005,27(11):12-14.

    [6] Dietz P F. Maintaining Order in a Linked List [C].In: Lewis H

    Retal Eds. Proceedings of the 14th Annual ACM Symposium on

    Theory of Computing (STOC'82).San Francisco,California,

    USA. May 5-7,1982.New York: ACM Press,1982:122-127.

    作者簡(jiǎn)介:

    張 屹(1983-),男,碩士,助理工程師.研究領(lǐng)域:軟件

    工程.

    表Document存儲(chǔ)的是數(shù)據(jù)庫(kù)中需要保存的XML文檔的文件名。表Element、Attribute和Text分別保存的是數(shù)據(jù)庫(kù)當(dāng)前存儲(chǔ)XML文檔元素、屬性、文本這三種類(lèi)型的結(jié)點(diǎn)。屬性ElementPre和ElementPost用于表示元素的Dietz編碼值對(duì),由于XML文檔中元素至多有一個(gè)父元素,因此屬性ParentPre表示當(dāng)前元素父元素的先序編碼。表Element中屬性TagName表示元素標(biāo)記名。表Attribute和表Text同樣還要要保存當(dāng)前元素的屬性名、屬性值以及元素文本內(nèi)容。

    圖3 存儲(chǔ)XML文檔的關(guān)系模式

    Fig.3 Relational pattern of storing XML

    算法1:關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)XML文檔

    輸入:XML文檔

    StoreXMLDoc(XMLDoc)//該函數(shù)用來(lái)描述存儲(chǔ)XML文檔的算法

    ① 獲取XML文檔或文檔片段根元素getRootElement(XMLDoc);

    ② 對(duì)當(dāng)前元素進(jìn)行Dietz編碼DietzEncode(RootElement);

    ③ 判斷當(dāng)前結(jié)點(diǎn)是否包含子結(jié)點(diǎn)

    if(RootElement.haschild){

    if(child instance of Text)// 如果為T(mén)ext,在表Text保存該結(jié)點(diǎn)以及當(dāng)前元素Dietz編碼值

    else if(child instance of Attribute)// 子節(jié)點(diǎn)類(lèi)型如果為Attribute,在表Attribute保存該結(jié)點(diǎn)以及當(dāng)前元素Dietz編碼值

    else StoreXMLDoc(Element)//子結(jié)點(diǎn)類(lèi)型如果為Element,以當(dāng)前元素的子元素為參數(shù)遞歸調(diào)用函數(shù)StoreXMLDoc()

    }

    else

    InsertElement(EncodePair, Element); //如當(dāng)前元素?zé)o子結(jié)點(diǎn),在表Element中保存該元素以及該元素的Dietz編碼值對(duì)

    3.3 關(guān)系數(shù)據(jù)還原為XML文檔

    關(guān)系模式中存儲(chǔ)了當(dāng)前元素及其父元素的Dietz編碼值,兩組編碼值之間通過(guò)參照完整性關(guān)系來(lái)反映元素結(jié)點(diǎn)之間的父子關(guān)系。首先構(gòu)造XML文檔根元素結(jié)點(diǎn),再根據(jù)當(dāng)前元素結(jié)點(diǎn)的先序編碼在Element表中查找屬性ParentPre取值與之相對(duì)應(yīng)的元組,將這些元組構(gòu)造為已構(gòu)造好元素的子元素,遞歸的執(zhí)行以上過(guò)程直到無(wú)法繼續(xù)構(gòu)造出子元素為止。這種方法能夠使還原出來(lái)的XML文檔與原文檔一致。

    算法2:關(guān)系數(shù)據(jù)庫(kù)還原XML文檔

    輸入:關(guān)系數(shù)據(jù)

    輸出:XML文檔

    ConstructXMLDoc()//還原XML文檔{

    RootElement = new Element(TagName);//當(dāng)前元組屬性TagName的取值,構(gòu)造XML文檔根元素

    XMLDocument = new Document(RootElement);//根據(jù)該根元素構(gòu)造XML文檔

    ConstructAttribute(ElementPre);//根據(jù)當(dāng)前元組屬性ElementPre的取值,構(gòu)造當(dāng)前根元素的屬性

    ConstructText(ElementPre);//根據(jù)當(dāng)前元組屬性ElementPre的取值,構(gòu)造當(dāng)前根元素的文本

    ChildElementList=RootElement.getElementPre();//查找以根元素為父元素的元組集合

    for(i=0;i

    ChildElement=new Element(ChildElementList.get(i).getTagName());

    ConstructAttribute(ChildElementList.get(i).getElementPre());

    ConstructText(ChildElementList.get(i).getElementPre());

    ChildElementSet=RecursiveConstruct(ChildElement);//當(dāng)前元組為參數(shù)調(diào)用遞歸函數(shù)RecursiveConstruct(),構(gòu)造當(dāng)前元素的子元素集

    XMLDocument.getRootElement().addContent(ChildElement);//將構(gòu)造的元素集添加為當(dāng)前元素的子元素,形成XML文檔

    }

    Output(XMLDocument);//輸出XML文檔;

    }

    Element RecursiveConstruct(CurrentElement){ //遞歸函數(shù)是用來(lái)構(gòu)造當(dāng)前元素的子元素

    ChildElementList(CurrentElement.getElementPre());

    for(i=0;i< ChildElementList.size();i++){

    ConstructAttribute(ChildElementList.get(i).getElementPre());

    ConstructText(ChildElementList.get(i).getElementPre());

    CurrentElement.addContent(RecursiveConstruct(ChildElementList.get(i)));//遞歸調(diào)用RecursiveConstruct()將構(gòu)造的元素集添加為當(dāng)前元素的子元素

    }

    4 結(jié)論(Conclusion)

    文章所提出的方法獨(dú)立于文檔結(jié)構(gòu)采用固定關(guān)系模式存儲(chǔ)XML文檔,同時(shí)克服以往模型映射方法中無(wú)法還原出所存儲(chǔ)的XML文檔的缺點(diǎn)。通過(guò)在關(guān)系模式中存儲(chǔ)元素的Dietz編碼值對(duì)形成的參照完整性關(guān)系來(lái)反映元素之間的父子關(guān)系。通過(guò)關(guān)系表之間的連接操作能夠?qū)⒋鎯?chǔ)在關(guān)系數(shù)據(jù)庫(kù)中的XML文檔還原出來(lái)。

    參考文獻(xiàn)(References)

    [1] 萬(wàn)常選,劉云生.基于關(guān)系數(shù)據(jù)庫(kù)的XML數(shù)據(jù)管理[J].計(jì)算機(jī)

    科學(xué),2003,30(8):64-68.

    [2] 周傲英,等.基于關(guān)系的XML數(shù)據(jù)存儲(chǔ)[J].計(jì)算機(jī)應(yīng)用,2000,

    20(9):9-12.

    [3] 楊健,雄前心.XML文檔架構(gòu)與關(guān)系數(shù)據(jù)模型間的映射研究

    [J].計(jì)算機(jī)工程與應(yīng)用,2004,40(27):169-172.

    [4] 劉偉.基于schema的XML模式與關(guān)系模式映射算法的研究[J].

    計(jì)算機(jī)應(yīng)用與軟件,2006,23:113-115.

    [5] 秦杰,楊樹(shù)強(qiáng),竇文華.一種基于模型映射的XML文檔存儲(chǔ)模

    型[J].計(jì)算機(jī)工程與科學(xué),2005,27(11):12-14.

    [6] Dietz P F. Maintaining Order in a Linked List [C].In: Lewis H

    Retal Eds. Proceedings of the 14th Annual ACM Symposium on

    Theory of Computing (STOC'82).San Francisco,California,

    USA. May 5-7,1982.New York: ACM Press,1982:122-127.

    作者簡(jiǎn)介:

    張 屹(1983-),男,碩士,助理工程師.研究領(lǐng)域:軟件

    工程.

    猜你喜歡
    關(guān)系數(shù)據(jù)庫(kù)
    關(guān)系數(shù)據(jù)庫(kù)在高爐數(shù)據(jù)采集系統(tǒng)中的應(yīng)用
    山東冶金(2022年2期)2022-08-08 01:51:30
    關(guān)系數(shù)據(jù)庫(kù)技術(shù)在計(jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)中的應(yīng)用
    計(jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)中關(guān)系數(shù)據(jù)庫(kù)技術(shù)的應(yīng)用
    基于索引結(jié)構(gòu)的關(guān)系數(shù)據(jù)庫(kù)關(guān)鍵詞檢索
    一種基于數(shù)據(jù)圖劃分的關(guān)系數(shù)據(jù)庫(kù)關(guān)鍵詞檢索方法
    基于用戶(hù)反饋的關(guān)系數(shù)據(jù)庫(kù)關(guān)鍵字查詢(xún)系統(tǒng)
    威远县| 潮安县| 沛县| 隆尧县| 大荔县| 景德镇市| 辛集市| 内丘县| 华池县| 永修县| 霞浦县| 赤城县| 延庆县| 南川市| 兴和县| 大方县| 新疆| 类乌齐县| 永泰县| 正安县| 惠安县| 湘乡市| 浦县| 泽州县| 兴城市| 阜城县| 巢湖市| 徐州市| 庆云县| 蒙城县| 益阳市| 四平市| 中阳县| 庆安县| 剑阁县| 旺苍县| 刚察县| 武隆县| 柳河县| 保亭| 前郭尔|