DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 使用 DB2 Visual Studio 2005 Add-in 進行帶注釋的 XML 模式分解
使用 DB2 Visual Studio 2005 Add-in 進行帶注釋的 XML 模式分解
編輯:XML詳解     

帶注釋的 XML 模式分解特性是在 DB2® 9 中引入的,該特性可以將整個 XML 文檔或 XML 文檔的片段分解到關系表中。DB2 9 XML 分解技術使用 XML 模式中的注釋作為將 XML 文檔中的信息映射到關系表中的映射語言。DB2 XML 分解使用帶注釋的 XML 模式來獲得映射信息。由於添加到 XML 模式中的注釋並不參與 XML 文檔的驗證。因此,同一個 XML 模式既可以用於 XML 文檔的映射,又可以用於 XML 文檔的驗證。

  DB2 中的 XML 分解支持

  新的 DB2 9 XML 分解特性要求將帶注釋的 XML 模式注冊到 XML 模式庫中。XML 模式庫是在 DB2 9 中引入的一項新特性,它是 XML 模式的庫,由一個或多個 XML 模式文檔組成。注冊到 XML 模式庫中的 XML 模式可用於:

  在將 XML 文檔插入到 XML 列或者將其分解到關系表中時,驗證該 XML 文檔

  存放以注釋的形式存在的映射信息,這些注釋將用於將 XML 文檔分解到關系表中

  本文使用 DB2 Visual Studio 2005 Add-in 作為例子。本文中的示例代碼使用了 SHIPTO 和 ITEM 表,這兩個表用於跟蹤客戶的訂單信息。清單 1 顯示了這兩個表的定義。

  環境設置

  注意:您需要正確地創建 SAMPLE 數據庫以便啟用 XML 支持(見下面的說明)。

  需要 Visual Studio .NET 2005 和 DB2 9。這兩個產品的安裝應該很簡單。建議首先安裝 Visual Studio .Net,然後再安裝 DB2 9。可以記住安裝 DB2 時輸入的用戶 ID 和密碼,以後連接到 DB2 9 的時候也許用得著。

  在 DB2 9 安裝期間,應確保啟用了 TCP/IP。如果在安裝 DB2 之後不確定是否啟用了 TCP/IP,可以執行以下命令進行檢查:

  在 Windows Start 菜單中,導航到 Programs > IBM DB2 > DB2 (默認) [或您的 DB2 實例名稱] > Command Line Tools > Command Window。

在 DB2 9 命令窗口中,應該可以看到命令提示符 C:\Program Files\IBM\SQLLIB\BIN> (如果采用默認安裝路徑的話)。輸入 db2set。在返回的結果中,應該可以看到 DB2COMM=tcpip 這一行。

  如果還沒有為 DB2 啟用 TCP/IP,那麼可以輸入以下命令啟用它:

db2set db2comm=tcpip

db2 update dbm cfg using svcename 50000

db2stop

db2start

  在安裝 DB2 之後,可以選擇創建 DB2 SAMPLE 數據庫。這時可以接受默認設置,但是務必選擇 XML and SQL objects and data 選項。為了檢查系統設置是否成功,啟動 Visual Studio .NET 2005。從 Visual Studio .Net 的 File 菜單中,選擇 New > Project。在 New Project 對話框中,在左側面板中應該可以看到 IBM Projects。關閉此對話框。在 Server Explorer 中,連接到 DB2 SAMPLE 數據庫。確認在 Server Explorer 中是否可以看到 XML Schema Repository 樹節點。如果看不到,那麼可能需要重新創建 SAMPLE 數據庫,以啟用 XML 特性。


清單 1. SHIPTO 和 ITEM 表的定義

CREATE TABLE SHIPTO ( 
 ORDERID VARCHAR ( 256 ) NOT NULL , 
 NAME VARCHAR ( 256 ) , 
 ADDRESS VARCHAR ( 256 ) , 
 CITY VARCHAR ( 256 ) , 
 COUNTRY VARCHAR ( 256 ) , 
 CONSTRAINT TABLE1_PK PRIMARY KEY (ORDERID)); 
 
CREATE TABLE ITEM ( 
 ITEMID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY 
 (START WITH 1, INCREMENT BY 1, CACHE 20), 
 TITLE VARCHAR ( 256 ) , 
 NOTE VARCHAR ( 256 ) , 
 PRICE DECIMAL , 
 QUANTITY INTEGER, 
 CONSTRAINT ITEM_PK PRIMARY KEY (ITEMID)) 

清單 2. 將被分解到 SHIPTO 和 ITEM 表中的示例 XML 文檔(sampleship.XML)

    <shiporder xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
    orderid='orderid1'> 
    <orderperson>orderperson1</orderperson> 
    <shipto> 
     <name>name1</name> 
     <address>address1</address> 
     <city>city1</city> 
     <country>country1</country> 
    </shipto> 
    <item> 
     <title>title1</title> 
     <note>note1</note> 
     <quantity>1</quantity> 
     <price>1</price> 
    </item> 
    <item> 
      <title>title2</title> 
      <note>note2</note> 
      <quantity>2</quantity> 
      <price>2</price> 
     </item> 
    </shiporder> 



清單 3. 用於包含注釋和將 XML 文檔映射到 SHIPTO 和 ITEM 表中的 XML 模式(shipOrder.xsd)

<?XML version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:sql="http://www.ibm.com/XMLns/prod/db2/xdb1" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
 <xs:element name="shiporder"> 
  <xs:complexType> 
   <xs:sequence> 
    <xs:element name="orderdesc" type="xs:string" /> 
    <xs:element name="shipto"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name" type="xs:string" /> 
       <xs:element name="address" type="xs:string" /> 
       <xs:element name="city" type="xs:string" /> 
       <xs:element name="country" type="xs:string" /> 
       <xs:element name="zip" type="xs:string" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element maxOccurs="unbounded" name="item"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="title" type="xs:string" /> 
       <xs:element minOccurs="0" name="note" 
         type="xs:string" /> 
       <xs:element name="quantity" 
          type="xs:positiveInteger" /> 
       <xs:element name="price" type="xs:decimal" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
   </xs:sequence> 
   <xs:attribute name="orderid" type="xs:string" 
    use="required" /> 
  </xs:complexType> 
 </xs:element> 
</xs:schema> 

創建帶注釋的 XML 模式

  在 Visual Studio 2005 中開始一個新實例,並從 Server Explorer 中建立到 DB2 sample 數據庫的連接。圖 1 顯示了到 DB2 sample 數據庫的 Server Explorer 連接。建立連接之後,在 XML Schema Repository 節點上單擊右鍵,從上下文菜單中選擇 Add Annotated XML Schema。



圖 1. 創建帶注釋的 XML 模式 
使用 DB2 Visual Studio 2005 Add-in 進行帶注釋的 XML 模式分解

  在顯示 DB2 Mapping Editor 之後,選擇 Use document from file 選項並找到 shiporder.xsd。



圖 2. 帶注釋的 XML 模式源對話框 
使用 DB2 Visual Studio 2005 Add-in 進行帶注釋的 XML 模式分解

  在選擇源 XML 模式之後,右鍵單擊 DB2 Mapping Editor,選擇 Add Table。添加 ShipTo 和 Item 表。將 XML 模式中的元素拖放到目標表上。例如,可以將 name 元素從 ShipTo 拖放到 ShipTo 表的 SHIPNAME 列。一旦元素與列之間建立鏈接,就可以看到一條藍色的線,表明兩者之間的鏈接。將剩下的元素拖放到相關的表列上。圖 3 顯示了 ShipTo 和 Item 表與 ShipOrder.xsd 元素之間的映射。



圖 3. 帶注釋的 XML 模式映射編輯器 
使用 DB2 Visual Studio 2005 Add-in 進行帶注釋的 XML 模式分解


 

  查看原圖(大圖)

  映射編輯完成後,單擊 Visual Studio IDE Save 按鈕啟動注冊 XML 模式對話框,以便將帶注釋的 XML 模式保存到 DB2 XML 模式庫中。圖 4 顯示了注冊帶注釋 XML 的模式對話框。設置好此對話框之後,單擊 IDE Save 按鈕。



圖 4. 注冊帶注釋的 XML 模式 
使用 DB2 Visual Studio 2005 Add-in 進行帶注釋的 XML 模式分解

  將帶注釋的 XML 模式保存到 DB2 XML 模式庫之後,通過 Mapping Editor 可以測試帶注釋的 XSD。右鍵單擊 DB2 Mapping Editor,然後選擇 Test。在 Test 對話框中,選擇測試中要分解的示例 XML 文檔,再從 validation 下拉菜單中選擇 DB2 是否驗證 XML 文檔,然後單擊 Test。如果注釋和映射無誤,那麼可以收到一條成功消息,再次查看 ShipTo 和 Item 表可以發現,示例 XML 文檔已經被分解,其中的數據被插入到這兩個表中。圖 5 顯示了 DB2 Mapping Editor Test 對話框。



圖 5. 測試帶注釋的 XML 模式 
使用 DB2 Visual Studio 2005 Add-in 進行帶注釋的 XML 模式分解

  至此,已經創建了一個帶注釋的 XML 模式,並將其注冊到 DB2 XML 模式庫中,現在可以調用 XML 分解過程,開始填充關系表。為了編譯和運行 .Net 應用程序,需要創建一個新的 Visual Studio .Net 項目。如果之前沒有使用過 Visual Studio .Net,那麼請閱讀下面關於如何完成這些任務的一個概述:

 啟動 Visual Studio 2005。

  選擇 File > New > Project 創建一個新項目。然後選擇 Visual C# > Windows Application。

  建立對 DB2 .Net data provider IBM.Data.DB2 的引用。在 Visual Studio .Net 項目浏覽器中右鍵單擊 References 節點,並選擇 Add Reference,接著選擇 Browse 選項卡,然後找到 IBM.Data.DB2.dll,該文件位於 DB2 安裝目錄 \SQLLIB\BIN\netf20\IBM.Data.DB2.dll 下。

  連接到數據庫

  首先需要建立到目標數據庫的連接。清單 4 顯示了一個用於建立 DB2 數據庫連接的方法的摘錄。


清單 4. 建立 DB2 數據庫連接:

    private DB2Connection m_conn = null; 
    m_conn = new DB2Connection("database=sample"); 
    m_conn.Open(); 

  執行 DB2 XML 分解過程

  DB2 9 允許用戶創建和注冊帶注釋的 XML 模式,用於分解 XML 文檔,以及在將文檔插入數據庫之前根據模式對輸入文檔進行驗證。通過 DB2 Visual Studio 2005 Add-in 工具,可以使用一個簡單的映射設計器很容易地創建和注冊帶注釋的 XML 模式,對此前面已做了描述。本文展示如何在 .Net 代碼中將帶注釋的 XML 模式與 XML 文檔分解結合起來使用。將帶注釋的 XML 模式注冊到 DB2 XML 模式庫之後,便可以使用它來分解和驗證 XML 文檔。清單 5 展示了使用 .Net 代碼調用 DB2 XML 分解過程的一種方法。


清單 5. 調用 DB2 XML 分解過程:

    private void executeShredding() 
    { 
      DB2Transaction  dbtrans = null; 
      ///sysproc.xdbDecompXML10MB(IN rschema VARCHAR(128), 
      //IN XMLschemaname VARCHAR(128), 
      //IN XMLdoc BLOB(10M), IN documentid VARCHAR(1024), 
      //IN validation INTEGER, IN reserved for future use BLOB(64K), 
      //IN reserved for future use BLOB(64K), IN reserved INTEGER, 
      //out struct sqlca *ca)) // implicit output parameter 
 
    try{ 
      if (m_conn == null) return; 
      DB2Command cmd = new DB2Command(); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "SYSPROC.XDBDECOMPXML"; 
      cmd.Connection = m_conn; 
 
      IBM.Data.DB2.DB2Parameter p1 = new IBM.Data.DB2.DB2Parameter(); 
      p1.DB2Type = DB2Type.VarChar; 
      p1.Direction = ParameterDirection.Input; 
   // Database owner or relational 
      // schema where XSD registered 
      p1.Value = “DB2Admin”; 
 
      IBM.Data.DB2.DB2Parameter p2 = new IBM.Data.DB2.DB2Parameter(); 
      p2.DB2Type = DB2Type.VarChar; 
      p2.Direction = ParameterDirection.Input; 
   // Name of the registered annotated XML schema 
      p2.Value = xsrname; 
 
      IBM.Data.DB2.DB2Parameter p3 = new IBM.Data.DB2.DB2Parameter(); 
      p3.DB2Type = DB2Type.Blob; 
      p3.Direction = ParameterDirection.Input; 
   // Convert the sample XML document to be shredded 
   //into byte array since this parameter is of type blob 
      byte[ ] b = getByteArrayFromFile(@”ShiporderSample.XML”); 
 
      if (b == null) return ; 
      p3.Value = b; 
 
      IBM.Data.DB2.DB2Parameter p4 = new IBM.Data.DB2.DB2Parameter(); 
      p4.DB2Type = DB2Type.VarChar; 
      p4.Direction = ParameterDirection.Input; 
 
      p4.Value = xsrdocId; 
 
   // Tell DB2 whether use the same XML 
      // schema for validation before shredding 
      IBM.Data.DB2.DB2Parameter p5 = new IBM.Data.DB2.DB2Parameter(); 
      p5.DB2Type = DB2Type.Integer; 
      p5.Direction = ParameterDirection.Input; 
      p5.Value = 0; //False 
      // p5.Value=1; //True 
 
      IBM.Data.DB2.DB2Parameter p6 = new IBM.Data.DB2.DB2Parameter(); 
      p6.DB2Type = DB2Type.Blob; 
      p6.Direction = ParameterDirection.Input; 
      p6.Value = null; 
      
 
      IBM.Data.DB2.DB2Parameter p7 = new IBM.Data.DB2.DB2Parameter(); 
      p7.DB2Type = DB2Type.Blob; 
      p7.Direction = ParameterDirection.Input; 
      p7.Value = null; 
 
      IBM.Data.DB2.DB2Parameter p8= new IBM.Data.DB2.DB2Parameter(); 
      p8.DB2Type = DB2Type.Integer; 
      p8.Direction = ParameterDirection.Input; 
      p8.Value = null; 
 
      cmd.Parameters.Add(p1); 
      cmd.Parameters.Add(p2); 
      cmd.Parameters.Add(p3); 
      cmd.Parameters.Add(p4); 
      cmd.Parameters.Add(p5); 
      cmd.Parameters.Add(p6); 
      cmd.Parameters.Add(p7); 
      cmd.Parameters.Add(p8); 
 
      //Begin a new transactionb 
      dbtrans = cmd.Connection.BeginTransaction(); 
      cmd.Transaction = dbtrans as DB2Transaction ; 
 
      int i = cmd.ExecuteNonQuery(); 
       
      if (dbtrans != null) dbtrans.Commit(); 
  
    } 
    catch (Exception exp) 
    { 
      
      if (dbtrans != null) dbtrans.Rollback(); 
      return; 
    } 
   } 


 

清單 6. 將文件轉換成字節數組:

    private Byte[ ] getByteArrayFromFile(string FileName) 
    { 
      byte[ ] b = null; 
 
      System.IO.FileStream fs = new System.IO.FileStream(FileName, Open,Read); 
      b = new byte[fs.Length]; 
      fs.Read(b, 0, b.Length); 
      fs.Close(); 
      return b; 
 
 
    } 

  現在來考查這段代碼。在建立一個數據庫連接之後,該方法創建一個 DB2Command,用於調用 “SYSPROC.XDBDECOMPXML” 存儲過程。DB2Command 包含 8 個參數標記符。第一個參數標記符用於存放注冊的帶注釋的 XML 模式的關系模式或 DB 所有者名稱。第二個參數標記符用於存放注冊的帶注釋的 XML 模式的名稱。第三個參數標記符用於存放將被分解為字節數組的 XML 文檔的源。第四個參數標記符是一個 0/1 標志,它告訴 DB2 在分解過程中使用的 XSD 是否也用於驗證源 XML 文檔。第六、七、八個參數標記符不使用。

  結束語

  任何注冊在 XML 模式庫中的 XML 模式,只要包含至少一個與分解相關的注釋,那麼它就可以用於 XML 分解。當將一個 XML 模式用於分解時,需要對其進行檢查,以確保注釋的正確性、XML 模式類型與 DB2 列類型的兼容性,並且注釋中指定的關系表和列是存在的。如果檢查後發現帶注釋的 XML 模式有效,那麼映射信息將被提取並以即用型(ready-to-use)二進制格式存儲在編目表中。憑借易用的 Mapping Editor 和帶注釋的 XML 模式測試實用程序,IBM DB2 Visual Studio 2005 .Net Add-in 為創建和維護帶注釋的 XML 模式提供了一種容易的方式。


 

 

 


 

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved