六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

使XML本地化與關系化

[摘要]Oracle XML DB提供本地化格式和關系數據庫訪問。   XML正快速地成為企業間數據交換的首選語言。然而,大多數企業把它們的數據存儲在如Oracle9i數據庫那樣的關系數據庫中。那么你怎樣將分層次的、以文檔為中心的XML和表格式的面向集合的關系數據庫連接起來?你是把XML文檔作為文件存儲在...
Oracle XML DB提供本地化格式和關系數據庫訪問。

  XML正快速地成為企業間數據交換的首選語言。然而,大多數企業把它們的數據存儲在如Oracle9i數據庫那樣的關系數據庫中。那么你怎樣將分層次的、以文檔為中心的XML和表格式的面向集合的關系數據庫連接起來?你是把XML文檔作為文件存儲在文件系統中?還是把XML文檔分開,把數據存儲在關系數據庫中?在兩種方法間進行選擇時需要根據你使用數據的方式進行權衡。但如果你不必進行選擇呢?如果你可以同時使用兩種方法,你會如何做呢?你可以使用Oracle9i數據庫第2版中叫做XML DB知識庫(XML DB Repository)的新特性。

  XML DB知識庫說明   
Oracle XML DB既不是一個單獨的產品也不是一個你必須安裝的單獨選項。Oracle XML DB指的是在直接內置于Oracle9i數據庫的XML特性和技術的集合。其中一個關鍵特性就是XML DB知識庫。這個知識庫使你能夠在Oracle9i數據庫第2版中直接存儲XML文檔。一旦你的XML文檔存儲在該知識庫中,你就能夠以XML為中心的方式或以關系為中心的方式訪問XML數據。

  要把XML數據存儲在你的數據庫中,你只需簡單地使用FTP、HTTP或WebDAV等所有行業標準的協議寫一個XML文檔文件即可。而從數據庫中獲取XML數據就像執行一個SQL查詢或使用上述協議之一讀文件一樣簡單。

  場景設置
     
假設你正在銷售獨立藝術家制作的CD。你需要和主要的音樂商店、在線站點和藝術家自身交換信息。你已經開發了用來描述CD內容的如清單1所示的XML文檔格式,現在想利用XML DB 知識庫把信息存儲在數據庫中。你想通過SQL輕松地訪問數據并輕松地訪問本地XML文檔。簡而言之,你希望數據既具有關系特性又具有層次特性。在這篇文章中,我是你的DBA,實現它是我的工作。

  注冊XML模式
       我的第一步是使用XML DB知識庫注冊你的XML模式。當我注冊一個XML模式時,該知識庫創建能夠保存那個模式實例的對象類型和對象表。下面對通過SQL*Plus執行的dbms_xmlschema.registerURI的調用從http://gennick.com/cd.xsd獲取如清單2中所示的XML模式,然后注冊它:

BEGIN
dbms_xmlschema.registerURI(
'cd.xsd',
'http://gennick.com/cd.xsd');
END;
/

注意:我除了需要對各種模式對象類型的CREATE權限外,為了注冊模式和創建這篇文章中的例子我還需要ALTER SESSION和QUERY REWRITE權限。

  清單3顯示了由于注冊CD模式而創建的一些結構和對象。一個名字是CD331_TAB的XML表被創建來保存模式的實例:在知識庫中的每個CD文檔將由這個表中的一行來表示。我可以通過查詢USER_XML_TABLES數據字典視圖得到XML表的一個列表。在這個例子中,我簡單地在模式注冊前后查詢視圖然后查找新的表名。CD331_TAB中的每一行將包含一個CD327_T類型的實例,這個類型對應于我們的XML模式來創建的。XML文檔的第一層元素被表示為CD327_T類型的屬性,屬性名和XML字段名相匹配。例如,該對象類型中的Title字段直接對應于XML模式中的Title元素。Songs字段對應于Songs元素。Songs是XML模式中的一個復雜元素,同樣地它被映射到另一個對象類型"Songs328_T"。如果我使用SQL*Plus命令DESCRIBE "Songs328_T",并繼續研究Songs字段的定義,我會看到歌曲集合最終被作為一個VARRAY實現,在VARRAY中,每個元素都表示一首歌曲。

  當我注冊一個模式時,我可以控制Oracle9i數據庫生成的對象和類型名;我也可以控制被用來存儲我的XML數據的特定數據類型。可以通過使用XML DB知識庫定義的屬性和oraxdb名字空間的部分注釋XML模式來進行這些控制。當我不提供那些屬性時,Oracle9i數據庫為我生成它們,我可以通過查看存儲在該知識庫中的模式版本來簡單地瀏覽Oracle9i數據庫所生成的內容。圖1說明了你如何能夠方便地訪問知識庫數據,這次是通過HTTP,使用一個標準的Web瀏覽器來訪問的。圖1顯示了我的知識庫中的CD模式的一部分,你可以看到模式注釋,它們全都以"oraxdb"開始。注意,URL使用8080端口,它是知識庫使用的默認HTTP端口。

  默認情況下,注冊模式時創建的全部對象將屬于注冊模式的用戶所有。在這個例子中,我擁有清單3中的表和類型以及其他與該CD模式相關的所有對象。因為是我注冊了那個模式,所以任何我保存到知識庫中的XML文件(是該CD模式的實例)將被拆開然后存儲在CD331_TAB表中。該模式和注冊是特定于我的。其他用戶保存的CD文件將不會被存儲在我的表中。你可以對dbms_xmlschema.register模式使用一個可選參數,來創建一個影響所有用戶的全局模式,以便所有用戶都可以把CD文檔保存到該表中。

  創建XML文件夾

  如果要把CD XML文檔存儲在XML DB知識庫中,我就需要一個存放它們的文件夾。要創建一個文件夾,我作為SYSTEM用戶登錄到Oracle并執行清單4中的PL/SQL塊。調用dbms_xdb.createfolder創建名為/CD的第一層文件夾。PL/SQL塊然后使用dbms_xdb.setAcl過程創建把所有文件夾權限賦予擁有者(也就是SYSTEM用戶)、把讀權限賦予其他所有用戶的訪問控制列表(ACL)。下一步為了把文件夾的擁有者由SYSTEM改變為GENNICK,需要對資料庫的RESOURCE_VIEW調用UPDATE語句。在文件夾創建后,提交是重要的;直到你提交后,該文件夾才對其他會話可見。現在我可以作為GENNICK使用FTP或WebDAV連接并把XML文件保存到/CD文件夾中。

  保存XML文檔

  一旦我注冊了模式然后創建一個文件夾來保存我的XML文檔,把文檔保存到知識庫就像拷貝文件那樣簡單。清單5顯示了一個拷貝(清單1中所示的)LegendsOfTheGreatLakes.xml文件到知識庫的FTP會話。FTP open命令使用的端口2100是知識庫為FTP會話使用的默認端口。注意,我可以不使用FTP,而是像以前那樣在WebDAV和Windows Web文件夾簡單地使用Windows拷貝和粘貼操作。


[page_break]

使用RESOURCE_VIEW

  你應該知道的一個重要視圖是名為RESOURCE_VIEW的視圖。RESOURCE_VIEW視圖為你所訪問的知識庫中的每個文檔和文件夾返回一行。例如,通過執行下面的查詢你可以得到/CD文件夾下所有XML文檔的一個列表。

SELECT any_path
FROM resource_view
WHERE under_path(res,'/CD')=1
AND extractValue(res,
'/Resource/ContentType')='text/xml';

ANY_PATH
-------------------------------
/CD/Gospel/NothingLess.xml
/CD/LegendsOfTheGreatLakes.xml
 

  上面顯示的新的UNDER_PATH函數使你能夠測試一個給定的知識庫資源是否在你指定的文件夾(或路徑)中。在這個例子中,我使用該函數把查詢結果限定在/CD文件夾及其子文件夾的資源中。通過使用對基本表所創建的一個層次式域索引可以使對RESOURCE_VIEW視圖進行的基于路徑的查詢更高效。這個索引是該知識庫的一部分;你不用創建它。

使XML本地化和關系化
圖1:XML DB知識庫中示例CD模式的一部分

   資源視圖中的RES字段并不代表資源自身,而只是代表資源的元數據。對RES字段運用新的extractValue函數檢查每個資源的內容類型。因此查詢的結果被進一步地限制到指向XML文檔的路徑。'/Resource/ContentType'語法代表XPath表示法。XPath是指定XML文檔各部分的標準表示法;你將在許多對XML數據的查詢中使用它。

  給定一個資料庫路徑,你可以使用新的XDBUriType對象類型檢索全部或部分基本XML文檔。清單6顯示兩個查詢。第一個查詢是對以上代碼的擴展,使用XDBUriType來檢索/CD文件夾下的所有XML文檔。為了只提取CD標題,清單6中的第二個查詢進行了進一步的改進,把標準的XPath語法附加到URL的末端。

對知識庫數據的關系訪問
       也可以通過直接訪問基本表來訪問知識庫中的XML數據。我注冊CD模式時創建的基本表是CD331_TAB。你可以直接對這個表編寫查詢語句,但這些查詢必須是支持XML的。要簡化通過設計用于關系數據的報表工具訪問XML數據,你可以創建一個如清單7中所示的視圖。除了視圖,清單7還對藝術家名字創建了一個索引。視圖和索引使我能夠有效地執行諸如下面的標準關系查詢:

  SELECT title
  FROM cd_master
  WHERE artist='Carl Behrend';

  更新XML數據

  不幸的是,因為在cd_master視圖中的所有字段都是基于SQL函數的,所以該視圖不能被更新。然而,可以更新知識庫中的XML數據;我只需要如下所示更新注冊模式時所創建的基本表:

UPDATE CD331_TAB cd
SET VALUE(cd) = updateXML(
value(cd),
'/CD/Website/text()',
'http://greatlakeslegends.com/
legends.htm');

  注意這個新的updateXML函數中的XPath語法的使用。路徑'/CD/Website/text()'說明我要更新CD文檔的Website元素的文本。updateXML的第三個參數為那個文本指定新值。這是一個恰當的更新,并非常高效。XML DB知識庫并不需要重建被改變的整個XML文檔。因為模式被注冊了,所以XML DB知識庫能夠以在底層對象結構只有Website屬性被觸及的方式重寫這個查詢。

  結論

  通過使用XML DB知識庫,你可以把XML文檔存儲在數據庫中,并使用標準的互聯網協議訪問那些文檔。同時,你還可以使用標準的關系查詢訪問相同的XML文檔或是那些文檔的部分。你沒有XML數據和關系數據,只有數據。"XML"和"關系"只是查看數據的不同范例。通過把數據從范例中分離出來,Oracle9i保護你最重要的資產之一--數據--免受范例改變的影響。





主站蜘蛛池模板: 日韩黄色一级毛片 | 手机看片自拍自拍自拍自视频 | 怡春院日本一区二区久久 | 在线欧美不卡 | 欧美在线视频播放 | 五月激情综合丁香色婷婷 | 青青草原在线视频 | 日本国产一区在线观看 | 日本不卡一区二区三区视频 | 午夜视频免费观看 | 日产国语一区二区三区在线看 | 伊人tv| 亚洲日本激情 | 日本免费观看日本高清视频 | 天天逼逼| 色综合久久综合中文小说 | 日韩国产综合 | 性夜黄a爽影免费看 | 亚洲第99页| 午夜啪啪福利视频 | 五月婷婷俺也去开心 | 欧美一级黄色带 | 青青爽国产手机在线观看免费 | 四虎影永久在线观看网址 | 天天色天天| 四虎在线影视在线影库 | 日韩欧美一区二区不卡 | 五月激情六月丁香 | 日本一区中文字幕 | 日韩伦理网在线视频 | 日本免费高清视频 | 亚洲综合色丁香婷婷六月图片 | 人人揉揉香蕉大免费不卡 | 青青青爽视频在线观看 | 日本一本二本免费播放视频 | 欧美在线观看网站 | 一级一级一级毛片免费毛片 | 香蕉在线视频网站 | 在线亚洲综合 | 欧美一级黄色大片 | 日本护士后进式猛烈动态图片 |