程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2 XML Extender、WORF 和 WebSphere Application Developer

DB2 XML Extender、WORF 和 WebSphere Application Developer

編輯:DB2教程

DB2 XML Extender 概述

DB2 XML Extender 提供了存儲和訪問 XML 文檔的功能,以及從關系數據組成 XML 文檔或者將 XML 文檔分解成關系數據的能力。為了實現這些功能,DB2 XML Extender 為 DB2 Universal Database 提供了一組新的數據類型、函數和存儲過程。有了 DB2 XML Extender,就可以將 SQL 用作訪問 XML 文檔的主要方法,從而使任務簡單不少。XML Extender 還為管理任務提供了方便,因為它提供了基於 GUI 的向導、一組用於管理的存儲過程,以及管理命令。

存儲和檢索

通過使用 DB2 XML Extender,您可以將整個 XML 文檔作為一種用戶定義的數據類型存儲到 DB2 中,或者將 XML 內容映射為 DB2 表中的列。DB2 XML Extender 還可以將 XML 文檔存儲為文件系統中的外部文件,並將一個指向該文件的指針存儲在 DB2 數據庫中,這樣就可以一邊繼續使用遺留的文本文件,一邊享受 DB2 帶來的好處。DB2 XML Extender 提供了搜索 XML 元素和屬性的強大功能,這些功能也可以與 DB2 Text Extender 的結構化文件和純文本搜索功能相結合。

在 DB2 中集成 XML 文檔

為了將 XML 文檔集成到 DB2 中,DB2 XML Extender 提供了兩種選項:

XML Columns:該方法使您可以將 XML 文檔存儲在 DB2 中。這些 XML 文檔被插入到支持 XML 的列中,並且可以被更新、檢索和搜索。元素和屬性可以映射為稱作副表(side table)的 DB2 表,然後為該表建立索引,以便快速搜索。

XML Collections:該方法使您可以將 XML 文檔結構映射為 DB2 表,這樣就可以將已有的 DB2 數據組成 XML 文檔,或者將 XML 文檔分解成 DB2 數據。

文檔類型定義(DTD)庫

DB2 XML Extender 提供了一個 XML DTD 庫。當為 XML 啟用一個數據庫時,便創建了一個名為 DTD_REF 的 DTD 引用表。這個表中的每一行包含一個 DTD,還有一些關於該 DTD 的元數據信息。您可以將自己的 DTD 插入到該表中。可以用這個表中的 DTD 驗證 XML 文檔的合法性。

文檔訪問定義

DB2 XML Extender 還為您提供了一種稱作文檔訪問定義(document Access definition,DAD)的映射模式,這是一種用於將 XML 文檔映射為關系數據的文件。DAD 是一種符合 XML 格式的文檔,它使您可以在使用 XML Column 或 XML Collection 時,將 XML 文檔結構與 DB2 數據庫相關聯。使用 XML Column 時和使用 XML Collection 時的 DAD 文件結構有所不同。DAD 文件是通過使用 XML_USAGE 表來管理的,該表是在啟用數據庫時創建的。

位置路徑

一個位置路徑就是一個 XML 標記序列,各標記之間以正斜槓(/)隔開,位置路徑可以標識一個 XML 元素或屬性。在以下情形中,位置路徑在 DB2 XML Extender 和 DB2 Text Extender 中使用:它們是作為輸入提供的,以便提取 UDF,標識將提取的元素和屬性。對於 XML Columns 方法,在定義 DAD 中的索引方案時,它們被用於指定一個 XML 元素或屬性與一個 DB2 列之間的映射文件。它們被 Text Extender 用於結構化文本搜索。 清單 1 展示了 DB2 XML Extender 所支持的位置路徑語法:

清單 1. 位置路徑語法

/
Represents the XML root element.
/tag1
Represents the element tag1 under root.
/tag1/tag2/..../tagn
Represents an element with the name tagn as the child of the descending chain
from root, tag1, tag2, through tagn-1.
//tagn
Represents any element with the name tagn, where double slashes(//) denote
zero or more arbitrary tags.
/tag1//tagn
Represents any element with the name tagn, a child of an element with the name
tag1 under root, where double slashes (//) denote zero or more arbitrary tags.
/tag1/tag2/@attr1
Represents the attribute attr1 of an element with the name tag2, which is a
child of element tag1 under root.
/tag1/tag2[@attr1="5"]
Represents an element with the name tag2 whose attribute attr1 has the
value 5. tag2 is a child of element with the name tag1 under root.
/tag1/tag2[@attr1="5"]/.../tagn
Represents an element with the name tagn, which is a child of the descending
chain from root, tag1, tag2, through tagn-1, where the attribute attr1 of tag2
has the value 5.

安裝 XML Extender

DB2 XML Extender Version V7.1 要求在 AIX、Sun Solaris、Linux、Windows NT 和 Windows 2000 上安裝了 DB2 Universal Database V6.1 或更高版本。DB2 XML Extender 包含以下組件:XML Extender Server、XML Extender 運行時客戶機、XML Extender 軟件開發人員工具包(SDK)、示例和在線文檔。要在 Windows NT 上安裝 DB2 XML Extender,可遵循以下步驟:

裝入 DB2 XML Extender CD。

閱讀 D:db2XMLyourPlatform 下的 readme 文件,其中 D: 是用於裝載 CD 的驅動器,yourPlatform 可以是 AIX、NT 或 Solaris,這取決於您自己的平台。

要在 Windows NT 上安裝 DB2 XML Extender,可以執行 D:db2XMLnt 目錄中的 setup.exe 文件。

選擇所需的安裝語言。

選擇您想要安裝的產品:DB2 XML Extender Server 或 DB2 XML Extender ClIEnt。如果您要在一個服務器平台上安裝 DB2 XML Extender,那麼請選擇 XML Extender Server。這個選項還將安裝 XML Extender ClIEnt 組件。如果您要在一個客戶機環境中安裝 DB2 XML Extender,那麼請選擇 XML Extender ClIEnt。

從以下三種安裝類型中選擇一種: Typical、 Compact 或 Custom (推薦 Typical)。

保留默認的目標位置 C:dxx,或選擇另一個文件夾來安裝 DB2 XML Extender。

保留默認的 Program Folder DB2 XML Extender,或另外選擇一個選項。

當安裝完所選的組件時,請關閉和重啟系統。

檢驗安裝

為了檢查安裝情況,您必須創建一個數據庫,將該數據庫綁定到 XML Extender 和 CLI,然後運行安裝檢查程序。

創建一個數據庫。您可以使用 DB2 Control Center,或者在 Command Center 或 Command Line Processor 窗口中使用 CREATE DATABASE MYDB 命令,其中,MYDB 是您想要用於 XML Extender 的數據庫的名稱。

創建了數據庫後,可以按照以下步驟將其綁定:

在一個 DB2 Command Window 中,通過輸入以下命令連接到數據庫: db2 connect to mydb。

轉到 XML Extender 安裝目錄的 BND 子目錄。例如,如果您將 XML Extender 安裝在 C:DXX 中,那麼可以通過以下命令轉到 C:DXXBND: cd /d C:DXXBND。

輸入以下命令,將數據庫綁定到 XML Extender: db2 bind @dxxbind.lst。

通過以下命令轉到 DB2 安裝目錄的 BND 子目錄: cd /d %DB2PATH%bnd。

輸入以下命令,將數據庫綁定到 CLI: db2 bind @db2cli.lst。

輸入以下命令,斷開與數據庫的連接: db2 terminate。

綁定了數據庫之後,輸入以下命令,回到 XML Extender 安裝目錄的主目錄(例如 C:DXX): cd /d C:DXX。

輸入以下命令,運行安裝檢查程序: <![CDATA[ dxxinstallchk mydb > out 2>&1 ]]>,其中 mydb 是數據庫名,out 是輸出文件名。這裡的輸出應該類似於驗證文件 dxxinstallchk.vfy 的內容。

例如,如果用戶是 XMLext,數據庫是 XMLtest,那麼我們將得到下面的輸出文件:

DXXA002I Connecting to database XMLtest.

DXXA005I Enabling database XMLtest. Please wait.

DXXA006I The database XMLtest was enabled successfully.

Database Connection Information

Database server = DB2/NT 7.1.0

SQL authorization ID = XMLEXT

Local database alias = XMLTEST

DB20000I The SQL command completed successfully.

DB20000I The SQL command completed successfully.

DXXA002I Connecting to database XMLtest.

DXXA000I Enabling column Order. Please Wait.

DXXA022I Column Order enabled.

DXXA002I Connecting to database XMLtest.

DXXA008I Disabling column Order. Please Wait.

DXXA034I XML Extender has successfully disabled column Order.

DB20000I The SQL command completed successfully.

DXXA002I Connecting to database XMLtest.

DXXA035I XML Extender is disabling database XMLtest. Please wait.

DXXA036I XML Extender has successfully disabled database XMLtest.

DB20000I The TERMINATE command completed successfully.

為 XML 啟用數據庫

使數據庫支持 XML 是將 XML 信息存儲到數據庫中所需的第一步。啟用一個數據庫時,將創建:

db2XML 模式(同時指定了所需的權限)。

用戶定義類型(UDT)XMLVARCHAR、XMLCLOB、XMLFILE 和很多用戶定義函數(UDF)。

DB2 XML Extender 所需的控制表,例如 DTD_REF 和 XML_USAGE。

您可以通過以下某一種方法啟用數據庫的 XML 支持:

Administration 命令 dxxadm,該命令有不同的命令選項,這取決於您想要執行的操作。啟用數據庫的命令是: dxxadm enable_db mydb,其中 mydb 是您想要啟用的數據庫的名稱。

Administration 向導。單擊 Start -> Programs -> DB2 XML Extender -> XML Extender Administration Wizard。

Administration 存儲過程調用 dxxEnableDB()。

XML columns 方法

若使用 XML Columns 方法,當存儲了文檔後,您可以對 XML 文檔執行各種類型的操作:您可以直接抽取和搜索 XML 文檔的 XML 元素和屬性,或者,為了提高性能,您可以在副表中存儲可能經常要訪問的元素和屬性。DB2 Text Extender 可用於將執行結構化文檔和純文本搜索的功能擴展到 XML 文檔中。您可以選擇更新 XML 元素的內容或 XML 屬性的值。

XML 文檔還可以被 XML 應用程序檢索和使用。若使用 XML Columns 方法,您可以將整個 XML 文檔原原本本地存儲在一列中。如果符合以下一個或多個標准,那麼選擇 XML Columns 方法是最好的:

XML 文檔已經存在,您想要將報紙文章、訂單之類的文檔存檔。

XML 文檔經常被讀,但很少更新。

更新的性能不是很關鍵。

您想要原原本本地存儲 XML 文檔。

您想要在本地文件系統上將 XML 文檔保存於 DB2 之外。

您知道哪些元素或屬性是經常要搜索的。為了對這些列執行有效的搜索,您可以決定在副表中對這些經常要訪問的元素或屬性創建索引。

XML columns 方法實例

讓我們看一個實例,該實例展示了如何操縱雇員數據。

清單 2. person.XML

<?XML version="1.0"?>
<!DOCTYPE person SYSTEM "c:person.dtd">
  <person id="1">
        <firstName>John</firstName>
        <lastName>Smith</lastName>
      <country>US</country>
      <phone>
       <type>Office</type>
       <number>12345678</number>
      </phone>
      <phone>
       <type>home</type>
       <number>34567890</number>
      </phone>
  </person>

清單 3. person.dtd

<?XML version="1.0"?>
<!ELEMENT person (firstName,lastName,country,phone*)>
<!ATTLIST person id CDATA #REQUIRED >
<!ELEMENT firstName (#PCDATA )>
<!ELEMENT lastName (#PCDATA )>
<!ELEMENT country (#PCDATA )>
<!ELEMENT phone (type,number)>
<!ELEMENT type (#PCDATA )>
<!ELEMENT number (#PCDATA )>

接下來,您需要一個 XML 列來存儲 XML 文件。DB2 XML Extender 提供了三種新的用戶定義類型,這些類型放在 db2xml 模式中,用於以列數據的形式存儲 XML 文檔:

XMLVarchar:您可以將一個 XML 文檔存儲在數據庫中,最大長度為 3 KB。

XMLCLOB:XML 文檔也是存儲在數據庫中,但最大長度為 2 GB。

XMLFILE:這個 UDT 允許您將文檔保留在本地文件中。

例如,下面的 SQL 語句將創建一個表 person,其中包含一個 XMLCLOB 類型的 XML 列:

清單 4. 創建表 person

create table person(id integer not null primary key,
person db2xml.XMLclob notlogged);

然後,如果您打算使所存儲的 XML 文件生效,那麼應該注冊 DTD 文件。您需要在 DB2 XML Extender 中注冊 DTD。為做到這一點,必須將 DTD 文件存儲在 DTD_REF 表中(這個表是在啟用數據庫期間在 DB2XML 模式中創建的),然後將該文件與惟一的標識符 DTD ID 相關聯。有兩種方法可以將一個 DTD 插入到 DTD_REF 表中:

使用 GUI XML Extender Administration 向導。

使用一條 INSERT SQL 語句,以及由 DB2 XML Extender 提供的用戶定義函數 XMLClobFromFile,將 DTD 文件作為 XMLCLOB 數據類型插入到 DTD_REF 中。例如,如果您想將它插入位於目錄 C:TEMP 的 DTD person.dtd,並將 DTD 與惟一的標識符 C:TEMPperson.dtd 相關聯,那麼所用的 SQL 語句如下所示:

清單 5. 向表 person 插入記錄

insert into db2XML.dtd_ref(dtdid, content, usage_count, author, creator, updator)
  values('C:TEMPperson.dtd',db2xml.XMLClobFromFile
   ('C:TEMPperson.dtd'),0, 'xmlext','xmlext','XMLext');

創建一個 Document Access Definition (DAD) 文件,該文件本身是一個 XML 文檔,它指定了如何處理存儲在數據庫中的 XML 文檔。對於 XML Columns 方法,只有在您想要在存儲之前檢驗 XML 文檔的合法性時,或者當您想建立副表中的元素或屬性的索引時,才需要 DAD 文件。

清單 6. person 的 DAD 文件

<?XML version="1.0"?>
<!DOCTYPE DAD SYSTEM "c:dxxdtddad.dtd">
<DAD> 3
<dtdid>C:TEMPperson.dtd</dtdid>
<validation>YES</validation>
<Xcolumn>
<table name="person_names">
  <column name="fname" type="varchar(50)" path="/person/firstName"
  multi_occurrence="NO"/>
  <column name="lname" type="varchar(50)" path="/person/lastName"
  multi_occurrence="NO"/>
</table>
<table name="person_phone_number">
  <column name="pnumber" type="varchar(20)" path="/person/phone/number"
  multi_occurrence="YES"/>
</table>
<table name="person_phone_number">
  <column name="pnumber" type="varchar(20)" path="/person/phone/number"
  multi_occurrence="YES"/>
</table>
<table name="person_phone_type">
  <column name="ptype" type="varchar(20)" path="/person/phone/type"
  multi_occurrence="YES"/>
</table>
</Xcolumn>
</DAD>

對於 XML Columns 方法,如果您想要驗證合法性或有副表,那麼需要啟用這個列。

清單 7. 為驗證和副表啟用的列

dxxadm enable_column XMLtest person person c:TEMPpersonColumn.dad -r id

對於 XML Columns 方法,下面是一個用來訪問數據的示例 SQL 語句:

清單 8. INSERT

insert into person values(1,db2xml.xmlclobfromfile('c:TEMPperson.XML'));

清單 9. 使用副表的 EXTRACT

select pnumber from person_names t1, person_phone_number t2,
 person_phone_type t3 where t1.id = t2.id and t1.id = t3.id
 and t2.dxx_seqno = t3.dxx_seqno and t1.lname='Smith' and t3.ptype='Office';

清單 10. 沒有副表的 EXTRACT

select lname, fname from person1 t1, person_names t2 where t1.id = t2.id
 and db2XML.extractVarchar(person, '/person/country') = 'US';

清單 11. UPDATE

update person set person = db2xml.XMLCLOBFromFile('c:TEMPpersonbis.XML');

清單 12. RETRIEVE

select db2xml.Content(person, 'c:tempretrIEvedperson.XML') from person where id = 1;

XML Collections 方法

對於 XML Collections 方法,存在以下可能性:

您可以從一個 XML 文檔開始填充一個或多個 DB2 表。XML 文檔中的標記和 XML 文檔本身沒有存儲在 DB2 中。只有您感興趣的元素和屬性的值需要存儲在 DB2 中。XML 文檔中的元素和屬性與 DB2 表之間的映射是由 DAD 文件提供的。

您可以使用一個或多個 DB2 表列中的數據創建一個 XML 文檔。DB2 XML Extender 使用存儲在 DB2 表列中的數據組合出一個 XML 文檔。同樣,DB2 表中數據與組成的 XML 文檔之間的映射是通過 DAD 文件來完成的。

您可以像使用 DB2 中的關系數據那樣使用從 XML 文檔拆分(分解)出來的數據。

若使用 XML Collections 方法,您可以將 XML 文檔結構映射為 DB2 表,這樣您就可以從已有的 DB2 數據組成 XML 文檔,或者將 XML 文檔分解成 DB2 表。在下面的情形中應該使用 XML Collections:

在已有的關系表中有一些數據,您將根據某個 DTD 組成 XML 文檔。

需要存儲的 XML 文檔的數據集合與關系表之間能形成很好的映射。

您想使用不同的映射模式為關系數據創建不同的視圖。

您有來自其他數據源的 XML 文檔。您只對數據感興趣,而不關心標記,並且想將純數據存儲在數據庫中。您想擁有決定是否將數據存儲在某些已有的表中還是存儲在新表中的靈活性。

XML 文檔中某個較小的子集經常需要更新,並且更新的性能很關鍵。

您需要存儲整個 XML 文檔的數據,但是常常只想檢索其中的一個子集。

XML 文檔大小超過了 2 GB,必須分解它們。

XML Collections 方法實例

首先我們從兩個表開始,並使用與前面 XML Columns 實例中相同的 DTD:

清單 13. 創建表的 SQL 語句

  CREATE TABLE Customer(
  ID INTEGER NOT NULL PRIMARY KEY,
  Country VARCHAR(30),
  LName VARCHAR(30),
  FName VARCHAR(30))
  
  CREATE TABLE Customer_Details(
  ID INTEGER,
  Phone_Number VARCHAR(20),
  Phone_Type VARCHAR(20),
  CONSTRAINT CUST_DETAIL_FK
  FOREIGN KEY (ID) REFERENCES Customer (ID))

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved