一種元標(biāo)記語言xml的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
一種元標(biāo)記語言xml的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
一種元標(biāo)記語言xml的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
一種元標(biāo)記語言xml的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
一種元標(biāo)記語言xml的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

一種元標(biāo)記語言xml的設(shè)計(jì)與實(shí)現(xiàn)

1標(biāo)記語言ssqp網(wǎng)絡(luò)的發(fā)展讓人們進(jìn)入了信息爆炸時(shí)代。但網(wǎng)上信息的海量和無組織性使得它只是一個(gè)雜亂無章的信息倉庫,在進(jìn)行信息檢索時(shí)常常發(fā)生“信息迷向”,因而人們希望能夠得到更加“智能化”的信息服務(wù)。HTML文檔著重描述Web頁面的顯示格式,它不容易被解析、檢索以及“智能化”的處理,與之相關(guān)的基于關(guān)鍵詞的檢索技術(shù)雖然已經(jīng)相對(duì)成熟,但卻很難滿足“智能化”信息服務(wù)的需要。在新需求的推動(dòng)下,人們提出了一種著重描述Web內(nèi)容的可擴(kuò)展標(biāo)記語言XML。XML是一套定義語義標(biāo)記的規(guī)則,這些標(biāo)記將文檔分成許多部件并對(duì)該部件加以標(biāo)識(shí)。它也是元標(biāo)記語言,能夠用來定義與特定領(lǐng)域有關(guān)的、具有語義信息的、結(jié)構(gòu)化的標(biāo)記語言的句法,從而有利于信息的表達(dá)和結(jié)構(gòu)化組織,使數(shù)據(jù)檢索和處理更加有效。它的主要優(yōu)點(diǎn)是:(1)支持異質(zhì)系統(tǒng)間的相互通信。XML使用的是公開、非專有格式,允許不同專業(yè)開發(fā)與自己特定領(lǐng)域有關(guān)的標(biāo)記語言,不受版權(quán)、專利、商業(yè)秘密等知識(shí)產(chǎn)權(quán)的限制。XML的開放性決定了它可成為異質(zhì)系統(tǒng)之間進(jìn)行交流的媒介,各系統(tǒng)只要裝有XML解析工具,便可理解以XML為中介由其它系統(tǒng)傳送的信息并加以利用,而不用考慮對(duì)方的信息格式和使用特殊的軟件而完成跨平臺(tái)的交流,這有力地促進(jìn)了電子商務(wù)和WAP的發(fā)展。(2)保值性。XML是SGML的精簡(jiǎn)網(wǎng)絡(luò)版。SGML是一種有著十幾年歷史的國(guó)際標(biāo)準(zhǔn),是一種用標(biāo)記來描述文檔資料的通用語言。它當(dāng)初設(shè)計(jì)的目標(biāo)之一就是為文件提供較長(zhǎng)的壽命,以保證新版的文書編輯軟件能夠?qū)εf版的文件忠實(shí)地再現(xiàn)。XML保留了這個(gè)特性,它是自描述的、使用非常簡(jiǎn)單的數(shù)據(jù)格式,可以用純ASCII文本來書寫。同時(shí),與壓縮文件和串行的Java對(duì)象不同,即使丟失一部分?jǐn)?shù)據(jù)仍是可以讀取的。(3)結(jié)構(gòu)化和集成的數(shù)據(jù)。由于XML是數(shù)據(jù)驅(qū)動(dòng)的標(biāo)識(shí)語言,文檔中所有的內(nèi)容幾乎都是數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu),只有關(guān)于XML解析器或包裝程序用的指令不以數(shù)據(jù)為主。因而,XML很容易進(jìn)行精確檢索,并可以根據(jù)多種來源集成數(shù)據(jù)并將其作為一個(gè)文檔來顯示。數(shù)據(jù)可以進(jìn)行重新排列,數(shù)據(jù)的各部分可以根據(jù)用戶的操作隱藏或顯示,這有利于信息倉庫的集成處理??傊?XML是元標(biāo)記語言,用戶可以定義自己需要的標(biāo)記。它描述的是文檔的結(jié)構(gòu)和語義而不是頁面元素的格式化。很多商業(yè)性組織和研究機(jī)構(gòu)都致力于相關(guān)技術(shù)的研究:XML,XSL,XPath,XML模式,DTD,PI,XSLT,XSP,JAXPTM,SAX,DOM等術(shù)語的相繼出現(xiàn),XML已經(jīng)顯示出了強(qiáng)大的生命力,它的發(fā)展必將促進(jìn)網(wǎng)絡(luò)質(zhì)的飛躍。2數(shù)據(jù)庫設(shè)計(jì)及協(xié)調(diào)模塊由于XML是一種元標(biāo)記語言,在制定了XML規(guī)范后,面臨的一個(gè)問題是怎樣處理XML的標(biāo)記數(shù)據(jù)。目前IBM,Oracle等許多組織都致力于這方面的研究工作。它們的基本思想是將XML標(biāo)記數(shù)據(jù)放入一定的結(jié)構(gòu)中,這樣對(duì)數(shù)據(jù)的檢索、分析、更新和輸出就能夠在更加容易管理的系統(tǒng)和較為熟悉的環(huán)境下進(jìn)行。一種比較自然的想法是采用數(shù)據(jù)庫對(duì)XML數(shù)據(jù)進(jìn)行存取和操作,將半結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)化為結(jié)構(gòu)化數(shù)據(jù),通過查詢數(shù)據(jù)庫來提取,綜合和分析XML文檔的數(shù)據(jù)。這樣不僅可利用相對(duì)成熟的數(shù)據(jù)庫技術(shù),而且也代表了未來網(wǎng)絡(luò)發(fā)展的趨勢(shì)。目前對(duì)于XML與數(shù)據(jù)庫相結(jié)合的方法存在著不同的觀點(diǎn):一部分人認(rèn)為XML只有按XML本身結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)庫才是XML數(shù)據(jù)庫(NativeXMLDatabase);另一部分人主張如果能實(shí)現(xiàn)對(duì)XML的存取則它就是XML數(shù)據(jù)庫(XML-enabledDatabase);也有一部分人主張兩者的結(jié)合(HybridXMLDatabase),在此分別進(jìn)行討論:(1)NativeXMLDatabase(NXD)。數(shù)據(jù)庫的根本設(shè)計(jì)目的是為存儲(chǔ)和處理XML文檔。它的基本存儲(chǔ)單元是XML文檔,通過XML相關(guān)的標(biāo)準(zhǔn)進(jìn)行數(shù)據(jù)庫的存儲(chǔ)。這種數(shù)據(jù)庫維持原有XML文檔的數(shù)據(jù)結(jié)構(gòu)和相關(guān)的元數(shù)據(jù),而不關(guān)心數(shù)據(jù)的底層存儲(chǔ)格式(關(guān)系數(shù)據(jù)庫或是面向?qū)ο髷?shù)據(jù)庫),只能通過XML特有的相關(guān)技術(shù)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)。Tamino,dbXML和X-Hive都采用這種方法。(2)XML-EnabledDatabase(XEDB)。它的基本數(shù)據(jù)存儲(chǔ)單位是XML數(shù)據(jù)(XML文檔所提供的數(shù)據(jù)),主要是通過增加一個(gè)映射層來管理XML數(shù)據(jù)的存儲(chǔ)。數(shù)據(jù)首先要與一個(gè)明確的格式相匹配,符合要求的才能根據(jù)預(yù)先定義好的規(guī)則映射到數(shù)據(jù)庫中(關(guān)系數(shù)據(jù)庫或是面向?qū)ο髷?shù)據(jù)庫),但可能會(huì)損失一部分元數(shù)據(jù)和最初的結(jié)構(gòu)。同時(shí)可從現(xiàn)有的數(shù)據(jù)庫中生成XML頁面,但不能保證與當(dāng)初存入的原始頁面完全符合。Oracle,Microsoft和許多XML工具軟件都不同程度上支持這種功能。比如,R.Burret的XML-DBMS(見圖1)就是一種XML文檔與關(guān)系數(shù)據(jù)庫之間進(jìn)行轉(zhuǎn)換的中間件。它將XML文檔看作一個(gè)有詳細(xì)數(shù)據(jù)的對(duì)象樹,應(yīng)用對(duì)象—關(guān)系映射理論將對(duì)象映射到關(guān)系數(shù)據(jù)庫中。它提出了一個(gè)映射工廠(MapFactories)的概念,使得要存入數(shù)據(jù)庫中的XML文檔與一個(gè)映射模型進(jìn)行匹配,當(dāng)需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換時(shí),協(xié)調(diào)模塊首先根據(jù)DTD文檔通過映射工廠的一個(gè)映射實(shí)體來描述DTD與關(guān)系視圖的映射關(guān)系,并對(duì)于需要特殊映射處理的數(shù)據(jù)產(chǎn)生元數(shù)據(jù)(如列的數(shù)據(jù)類型)和一些Insert,Select等命令的一個(gè)實(shí)體對(duì)象,最后應(yīng)用組件(DBMSToDOM或DOMToDBMS)進(jìn)行有詳細(xì)數(shù)據(jù)的文檔對(duì)象樹與數(shù)據(jù)庫的轉(zhuǎn)換。在將XML數(shù)據(jù)轉(zhuǎn)換到數(shù)據(jù)庫中時(shí),協(xié)調(diào)者應(yīng)根據(jù)XML文檔建立一個(gè)對(duì)象模型樹(DOM),并與映射實(shí)體一起提交給數(shù)據(jù)對(duì)象模型到數(shù)據(jù)庫管理系統(tǒng)(DOMToDBMS)組件,該組件返回給協(xié)調(diào)者關(guān)于怎樣重新獲取數(shù)據(jù)的信息。在從數(shù)據(jù)庫中獲取數(shù)據(jù)時(shí),協(xié)調(diào)者將映射實(shí)體和文檔獲取信息提交給數(shù)據(jù)庫管理系統(tǒng)到數(shù)據(jù)對(duì)象模型(DBMSToDOM)組件,并獲取文檔對(duì)象模型樹。(3)HybridXMLDatabase(HXD)。根據(jù)具體的要求和應(yīng)用,既可做NativeXMLDatabase,又可做XMLEnabledDatabase。Excelon和Ozone就采用了這種思想。以XML文檔為基本存儲(chǔ)單位,保留了文檔的原始結(jié)構(gòu)和XML原有的優(yōu)點(diǎn),存儲(chǔ)簡(jiǎn)單,同時(shí)可以將XML文檔看作對(duì)象樹,有利于對(duì)單個(gè)XML文檔進(jìn)一步的數(shù)據(jù)挖掘。但信息的格式、內(nèi)容相對(duì)繁雜,檢索策略的復(fù)雜度高,處理起來比較困難。以數(shù)據(jù)為中心的方法將XML文檔的數(shù)據(jù)進(jìn)行重新組織,使數(shù)據(jù)的組織相對(duì)規(guī)范,有利于在此基礎(chǔ)上對(duì)信息的進(jìn)一步應(yīng)用,比如智能檢索、電子商務(wù)等,但破壞了原文檔的結(jié)構(gòu),也很難保證文檔恢復(fù)到原來的結(jié)構(gòu),在存入關(guān)系數(shù)據(jù)庫中的預(yù)先處理工作量比較大,尤其是當(dāng)XML文檔不規(guī)范化時(shí)就需要對(duì)它進(jìn)行復(fù)雜的分解、映射等處理。3基于表面轉(zhuǎn)換的系統(tǒng)設(shè)計(jì)Oracle8i在一定程度上支持XML的解析與存儲(chǔ)。我們利用它的支持機(jī)制在此基礎(chǔ)上設(shè)計(jì)實(shí)現(xiàn)了XML文檔的數(shù)據(jù)庫存取系統(tǒng)。該系統(tǒng)借鑒了XMLDBMS關(guān)于中間轉(zhuǎn)換層的設(shè)計(jì)思想實(shí)現(xiàn)對(duì)XML的數(shù)據(jù)庫存取。設(shè)計(jì)結(jié)構(gòu)如圖2所示。(1)s等解析器在XML預(yù)處理模塊中,我們利用了Oracle提供的基于Java的XML解析器(XMLParser)(也可以用IBM,Sun,Xerces等解析器),它是一系列Java包,提供在處理XML文檔時(shí)兩個(gè)最通用的API:DOM(DocumentObjectModel)和SAX(SimpleAPIforXML)接口,并支持XML名空間,確認(rèn)和非確認(rèn)模式,XSL轉(zhuǎn)換等。利用XML解析器對(duì)XML文檔進(jìn)行XML存儲(chǔ)預(yù)處理,過濾掉數(shù)據(jù)庫中不存在的、與領(lǐng)域無關(guān)的元素,然后利用XSLT轉(zhuǎn)換機(jī)制進(jìn)行適當(dāng)?shù)母袷睫D(zhuǎn)換,使XML文檔滿足一定的格式要求,見圖3。(2)在數(shù)據(jù)庫中保留了文本原理這里我們利用Oracle的XMLSQLUtility來完成轉(zhuǎn)換后的XML文檔與數(shù)據(jù)庫的轉(zhuǎn)換工作。XMLSQLUtility將XML文檔看成一個(gè)對(duì)象模型樹,它包括一個(gè)Java類的集合??梢岳盟鼘ML文檔存入數(shù)據(jù)庫或進(jìn)行數(shù)據(jù)庫的查詢并產(chǎn)生XML文檔。要存入數(shù)據(jù)庫的XML文檔emp.xml如下:<xmlversion=″1.0″?><!DOCTYPEEMPSYSTEM″e(cuò)mployee.dtd″><EMP><EMPROWROWNO=″1″><EMPNO>7876</EMPNO><ENAME>ADAMS</ENAME><JOB>SALESMAN</JOB><MGR>7698</MGR><HIREDATE>1981-09-2800:00:00.0</HIREDATE><SAL>1250</SAL><COMM>1400</COMM><DEPTNO>30</DEPTNO></EMPROW><EMPROWROWNO=″2″><EMPNO>7499</EMPNO><ENAME>ALLEN</ENAME><JOB>ANALYST</JOB><MGR>7566</MGR><HIREDATE>1987-04-1900:00:00.0</HIREDATE><SAL>3000</SAL><COMM></COMM><DEPTNO>20</DEPTNO></EMPROW></EMP>●將XML文檔寫入數(shù)據(jù)庫的表中用這種方法將XML文檔存入數(shù)據(jù)庫中時(shí)保留了文檔的結(jié)構(gòu)。元素標(biāo)記名與關(guān)系數(shù)據(jù)庫表中的列名相匹配,有子元素的元素與對(duì)象類型相匹配,非結(jié)構(gòu)化的數(shù)據(jù)如文本注釋、描述等不能與數(shù)據(jù)庫的表相匹配,存入數(shù)據(jù)庫的BLOB中。下面的一段Java代碼實(shí)現(xiàn)了將emp.xml中的數(shù)據(jù)存入數(shù)據(jù)庫的EMP表中。這個(gè)實(shí)例假設(shè)XML文檔結(jié)構(gòu)與數(shù)據(jù)庫的表相一致:importoracle.xml.sql.dml.*;importjava.sql.*;importoracle.jdbc.driver.*;importoracle.jdbc.*;import.*;publicclassxmlwritedb{publicstaticvoidmain(Stringargs)throwsSQLException{StringtabName=″EMP″;//要插入XML數(shù)據(jù)的表StringfileName=″e(cuò)mp.xml″;//XML文檔名稱DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());//初始化JDBC連接Connectionconn=DriverManager.getConnection(″jdbc:oracle:oci8:scott/tiger@″);//將XML數(shù)據(jù)存入數(shù)據(jù)庫表中OracleXMLSavesave=newOracleXMLSave(conn,tabName);URLurl=save.createURL(fileName);introwCount=save.insertXML(url);System.out.println(″successfullyinserted″+rowCount+″rowsinto″+tabName);conn.close();}}當(dāng)然,這要求數(shù)據(jù)庫的表結(jié)構(gòu)與XML文檔結(jié)構(gòu)一致;反之,則需要在存儲(chǔ)之前對(duì)XML文檔進(jìn)行一系列的預(yù)處理,如通過文檔分析器將文檔分解為文檔片斷等,將XML文檔轉(zhuǎn)化成為滿足要求的文檔?!裢ㄟ^查詢產(chǎn)生XML文檔結(jié)果XML文檔的結(jié)構(gòu)是基于數(shù)據(jù)庫內(nèi)部視圖的。Utility產(chǎn)生的查詢結(jié)果可以用字符串來表示,這對(duì)于要求返回XML文檔的請(qǐng)求是比較合適的。也可以XML的文檔對(duì)象模型樹(DOM)來表示,這適用于需要程序化的處理XML文檔(如用XSLT進(jìn)行數(shù)據(jù)轉(zhuǎn)換等)。下面的Java代碼對(duì)數(shù)據(jù)庫進(jìn)行了查詢(selectEMPNO,ENAMEfromEMP),并產(chǎn)生XML的結(jié)果文檔:importjava.sql.*;importjava.math.*;importoracle.xml.sql.query.*;importoracle.jdbc.*;importoracle.jdbc.driver.*;publicclassxmlquerydb{publicstaticvoidmain(Stringargs)throwsSQLException{StringtabName=″e(cuò)mp″;Stringuser=″scott/tiger″;DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());//初始化JDBC連接Connectionconn=DriverManager.getConnection(″jdbc:oracle:oci8:″+user+″@″);//初始化OracleXMLQueryinitializetheOracleXMLQueryOracleXMLQueryqry=newOracleXMLQuery(conn,″selectEMPNO,ENAMEfrom″+tabName);//結(jié)構(gòu)化產(chǎn)生的XML文檔qry.setMaxRows(2);//設(shè)置返回最大的行數(shù)值qry.setRowsetTag(″ROOTDOC″);//設(shè)置文檔跟節(jié)點(diǎn)標(biāo)記qry.setRowTag(″DBROW″);//設(shè)支行分離標(biāo)志qry.setStyleSheet(″e(cuò)mp.xsl″);//設(shè)置風(fēng)格表//以字符串的形式得到XML文檔StringxmlString=qry.getXMLString();//輸出XML文檔System.out.println(″OUTPUTIS:

″+xmlString);}}得到XML結(jié)果文檔:<xmlversion=″1.0″?><ROOTDOC><DBROWid=″1″><EMPNO>7876</EMPNO><ENAME>ADAMS</ENAME></DBROW><DBROWid=″2″><EMPNO>7499</EMPNO><ENAME>ALLEN</ENAME></DBROW></ROOTDOC>利用Oracle的XMLSQLUtility提供的現(xiàn)有技術(shù),可以實(shí)現(xiàn)一定的XML與數(shù)據(jù)庫的存儲(chǔ),它不需要額外的中間轉(zhuǎn)換件,只要在Oracle的基礎(chǔ)上編程實(shí)現(xiàn)即可,但是它對(duì)XML文檔的結(jié)構(gòu)要求比較高,一定要與數(shù)據(jù)庫的結(jié)構(gòu)相一致,甚至元素名稱要與數(shù)據(jù)庫的表名、列名相一致。這使得它的應(yīng)用有了一定的限制,使用起來比較僵化。但通過增加XML文檔的前期預(yù)處理工作,將冗余的、與數(shù)據(jù)庫基本結(jié)構(gòu)不一致的XML文檔經(jīng)過過濾、轉(zhuǎn)化,從而擴(kuò)大了XML該應(yīng)用的使用范圍。此外,還可利用OracleInternet文件系統(tǒng)(InternetFileSystem)實(shí)現(xiàn)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論