麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > XML > 正文

使用DB2 9 pureXML管理ODF和Microsoft Office 2007 文檔(1)

2024-07-21 02:41:47
字體:
供稿:網(wǎng)友
  本文示例源代碼或素材下載   簡介  桌面文檔有什么新變化?假如您一直在關(guān)注 Microsoft Windows® 社區(qū),那么您會發(fā)現(xiàn)變化實(shí)在太大了。 Microsoft 為 MS Office 2007 產(chǎn)品引入了一種新格式,這種格式可以在內(nèi)部利用 xml。 之前,可以在 MS Office 應(yīng)用程序之間交換數(shù)據(jù);但是,MS Office 2007 和 Windows Vista® 答應(yīng)企業(yè)踏入數(shù)據(jù)孤島,而在以前,這些數(shù)據(jù)難以使用和再利用(re-purpose,即將用于某一目的的數(shù)據(jù)用于另一個目的)。雖然 Microsoft 正在推動這個概念,但 OpenOffice 應(yīng)用程序已經(jīng)實(shí)現(xiàn)了 ODF,并從市場早已認(rèn)可的 XML 優(yōu)點(diǎn)中受益。  讓我們來看一個典型的桌面應(yīng)用程序問題。假設(shè)有這樣一家公司,它的市場部門正在計劃召開一個會議。 他們要求預(yù)期的演講者在一份 MS Word 模板文檔中提交提議,然后,文檔內(nèi)容被用于以下任務(wù):  審核提議   向成功提交提議的可能的演講者發(fā)送電子郵件   將相關(guān)信息發(fā)布到會議網(wǎng)站上   通過會議或公司的一個新提要(ATOM/rss)發(fā)布內(nèi)容   按照傳統(tǒng)做法,市場人員從 Word 文檔中剪切文本,并將信息粘貼到不同的系統(tǒng)中,這種做法很費(fèi)時。 假如保留文檔原有格式,而為特定任務(wù)提取相關(guān)信息,則可以節(jié)省不少時間和精力。通過 XQuery 就可以做到這一點(diǎn),而且只需很少的代碼。   在本文中,我們將簡要地回顧 MS Office 應(yīng)用程序使用的一些舊的文檔數(shù)據(jù)交換方法。然后,我們將查看新的格式,并討論如何交換和再利用這種新格式。我們將使用 Zend Core for IBM、php、PDO 和 XQuery 等跨平臺技術(shù) —— 這些工具都可以與 DB2 結(jié)合使用。  這種技巧可以成為內(nèi)容治理和文檔治理解決方案中很有價值的一部分。希望您閱讀本文之后發(fā)現(xiàn),通過使用 IBM DB2 pureXML™ 特性,使用和再利用 ODF 和 MS Office 2007 文檔不再是難事。這并不需要很多的代碼,所以這個解決方案很輕易實(shí)現(xiàn)。然后,您可能希望索引這些 Office 2007 文檔,以進(jìn)一步利用 pureXML 混合存儲特性。 12345678下一頁   桌面應(yīng)用程序和 XML 概述  本文主要關(guān)注 OpenOffice 默認(rèn)格式 ODF 和 MS Office 2007 格式。您應(yīng)該清楚,這里談到的概念并不局限于這些格式和供給商。實(shí)際上,您會發(fā)現(xiàn),很多供給商都提供了 ODF,包括 Google applications、KOffice 和 StarOffice。值得注重的是,Microsoft 有一個用于使用和導(dǎo)入 ODF 格式的轉(zhuǎn)換器 “插件”,并且有一個兼容包,可以用舊版本的 Office 打開和保存 MS Office 2007 文件格式。而且,Lotus Notes 和 Corel 也有 ODF 格式方面的計劃。  Wikipedia 提供了有關(guān) ODF 格式及其在桌面應(yīng)用程序中的使用的討論,并提供了關(guān)于 ODF 的支持者的信息。  所需資源  雖然可以下載 Apache 2.0、PHP Version 5.21 或更高版本、DB2 ExPRess-C 和 DB2 extensions for PHP,但是下載和安裝 Zend Core for IBM 是更好的選擇。安裝程序會徹底配置適合 PHP 和 DB2 的環(huán)境。安裝程序應(yīng)該包括 DB2 Express-C 9.1.2 的下載鏈接。可能需要調(diào)整配置,以添加 ZIP 支持,這一點(diǎn)我們在后面會討論到。  老式的文檔數(shù)據(jù)交換  Windows 操作系統(tǒng)上的數(shù)據(jù)應(yīng)用程序編程接口(API)從 Data access Objects (DAO) 開始。它們經(jīng)歷了從 DAO(不是 Dead On Arrival)到 Remote Data Objects (RDO),再到 Open Database Connectivity (ODBC) 的過程。向 ODBC 的轉(zhuǎn)變意義重大,被認(rèn)為數(shù)據(jù)訪問的一個里程碑。它實(shí)現(xiàn)了一種通用的方式,使開發(fā)人員對一種 API 編碼,而不必考慮數(shù)據(jù)庫的類型。通過使用 ODBC,可以借助 Mail Merge 之類的程序?qū)㈥P(guān)系數(shù)據(jù)導(dǎo)入到 MS Office 應(yīng)用程序中。  Object Linking and Embedding Data Base (OLE/DB) 支持不同數(shù)據(jù)源的數(shù)據(jù)交換,然而它的引入只是使市場感到困惑。對于 MS Office 生產(chǎn)率工具,這意味著文檔之間可以相互嵌套。實(shí)際上,當(dāng)將一個電子表格粘貼到一個演示文稿中時,就是如此。然而,OLE/DB 是只用于 Windows 的解決方案。使用這些技術(shù)分解文檔并不輕易,并且這個過程難以自動化。 上一頁12345678下一頁   OpenOffice 和新的 MS Office 2007 格式概述  這些格式實(shí)際上是一個包含資源和用于 XML 文檔的文件夾的 ZIP 文件。Word 文檔的實(shí)際文本內(nèi)容以 XML 文件的形式存儲。在我們的示例文檔中,它在歸檔文件中的 “word/document.xml” 中。這種文件格式使開發(fā)人員可以捕捉這些文檔中的實(shí)際數(shù)據(jù)。  雖然 OpenOffice 使用這種格式已經(jīng)有一段時間了,但 MS Office 2007 只是最近才引入新的文檔格式。Microsoft 聲稱,這種格式易于訪問和易于共享。很多年來,MS Office 文檔一直都是專用的。令人振奮的是,Microsoft 的 Office 小組正在打開這扇門。請看下面提供的用于 ODF 的 ZIP 文件內(nèi)容(可在 下載 小節(jié)中找到):  圖 1. WinZip 中 opendoc.odt 的內(nèi)容  使用DB2 9 pureXML治理ODF和Microsoft Office 2007 文檔  請看下面的 Microsoft 格式,注重其中有些不同,但概念和格式是類似的:  圖 1.1 WinZip 中 submit.docx 的內(nèi)容  使用DB2 9 pureXML治理ODF和Microsoft Office 2007 文檔  設(shè)置數(shù)據(jù)庫  當(dāng)然,您需要創(chuàng)建一個表。您將把新的 Word 格式中的 XML 存儲在 XML 列中,而不是一個 Character Large Object (CLOB) 中。為此,需要創(chuàng)建一個支持 XML 或 UTF-8 的數(shù)據(jù)庫。  清單 1. 創(chuàng)建一個支持 XML 的數(shù)據(jù)庫CREATE DATABASE ODF AUTOMATIC STORAGE YES USING CODESET UTF-8 TERRITORY US  現(xiàn)在,需要連接到數(shù)據(jù)庫,并用下面的定義創(chuàng)建一個表。下面的代碼假設(shè)您有一個具有 CREATETAB 權(quán)限的用戶名 “db2admin”。假如不具備這種用戶設(shè)置,可以修改這些腳本,使具有適當(dāng)?shù)臄?shù)據(jù)庫用戶。 上一頁12345678下一頁   清單 2. 創(chuàng)建用于包含 ODF 和 MS Office 2007 文檔的支持 XML 的表CREATE TABLE DB2ADMIN.DOCUMENT (
     ID INT NOT NULL PRIMARY KEY,
     OWNER VARCHAR(128),
     DOC XML
    )
  設(shè)置 PHP 和 Zend Core for IBM  代碼將使用 PHP 的 ZIP 實(shí)用程序和 PDO。PDO 已經(jīng)針對 Zend Core for IBM 設(shè)置完畢,但是需要將 “zip” 添加到配置中:  打開 Zend Core Administration Console。   切換到 Configuration 選項卡和 Extensions 子選項卡。   向下滾動到 ZIP 擴(kuò)展。   單擊 switch 圖標(biāo)將其打開。   單擊 Save Settings。   重新啟動 Apache2。   假如它不在運(yùn)行,即在系統(tǒng)托盤中顯示為紅色羽毛,那么啟動 C:Program FilesendApache2inApacheMonitor.exe。   單擊它,從菜單中重新啟動 Apache2 HTTP Server。   假如這樣不行,那么試著編輯文件,確保 “C:Program FilesendCore for IBMetc” 文件夾下的 php.ini 文件中包含下面幾行。將下面用粗體表示的一行添加到 php.ini 中:  清單 3. 對 php.ini 的修改extension=php_zip.dll
extension=php_pdo.dll
extension=php_pdo_ibm.dll
extension_dir="c:program filesendCore for IBMlibphpext"
  使用 ODF 和 MS Office 2007 文檔  現(xiàn)在,可以開始使用 opendoc.odt 了,它是下載小節(jié)中提供的一個 ODF 文件。雖然 圖 2 顯示了該文檔的 MS Word 外觀,但這個 ODF 文件看起來類似于 清單 4。該文檔使用像 “Heading 1” 和 “Heading 2” 這樣的樣式作為格式。然后,我們將查詢 Heading 2 樣式,因?yàn)?OpenOffice 格式中使用了它。注重,在生產(chǎn)代碼中,還需要包括適當(dāng)?shù)腻e誤處理代碼。 上一頁12345678下一頁   我還在下載小節(jié)中包括了一個 submit.docx 文檔,該文檔使用 MS Office 2007 格式。圖 2 顯示這個文檔在 Word 中的樣子。和 ODF 一樣,該文檔利用 “Heading 1” 和 “Heading 2” 之類的 Word 樣式作為格式。然后,我們將查詢 Heading 2 樣式。  圖 2. OpenOffice 或 MS Word 中顯示的示例文檔  使用DB2 9 pureXML治理ODF和Microsoft Office 2007 文檔  下面的 PHP 代碼使用了這個文檔,它對 ZIP 清單中的項進(jìn)行遍歷,并提取具有相關(guān)數(shù)據(jù)的 XML 文檔。清單 4 提供了該代碼。將該代碼保存為 “odfconsume.php”,以便后面引用。  清單 4. 使用 OpenOffice (ODF) 格式 (odfconsume.php) 的 PHP 代碼<?php
$user = "db2admin";
$password = "secret";
$zip = zip_open("c:opendoc.odt");
$db = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=ODF;" .
 "HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;", $user, $password);
echo $user." Connected
";
if ($zip) {
  while ($zip_entry = zip_read($zip)) {
    if (zip_entry_open($zip, $zip_entry, "r")
    && zip_entry_name($zip_entry) == 'content.xml' ) {
      $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
      $insstr ="INSERT INTO DB2ADMIN.DOCUMENT (ID,OWNER,DOC)
      VALUES (2,'linux Office',:buf)";
      $stmt = $db->prepare( $insstr );
      $stmt->bindParam( ':buf' , $buf , PDO::PARAM_LOB , strlen($buf) );
      $stmt->execute();
      echo "
Result: ".$db->errorCode()."
";
      zip_entry_close($zip_entry);
    }
    echo "
";
  }
  zip_close($zip);
}
?>
上一頁12345678下一頁   使用下面的命令行運(yùn)行該代碼:php odfconsume.php  這會將一個 XML 文檔插入到數(shù)據(jù)庫中,并打印出一個錯誤碼。這里錯誤碼很可能是 0。  清單 4.1 是使用 MS Word 的代碼。將該代碼保存為 “msconsume.php”,以便后面引用。  清單 4.1 使用 MS Office 2007 格式 (msconsume.php) 的 PHP 代碼<?php
 $user = "db2admin";
 $password = "secret";  
 $zip = zip_open("c:submit.docx");
 $db = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=ODF;" .
  "HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;", $user, $password);
 echo $user." Connected
";
 if ($zip) {
   while ($zip_entry = zip_read($zip)) {
    if (zip_entry_open($zip, $zip_entry, "r") &
         zip_entry_name($zip_entry) == 'word/document.xml' ) {
      $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
    $insstr ="INSERT INTO DB2ADMIN.DOCUMENT VALUES (1,'BILLY ONAIRE',:buf)";
    $stmt = $db->prepare( $insstr );
    $stmt->bindParam( ':buf' , $buf , PDO::PARAM_LOB , strlen($buf) );
     $stmt->execute();
    echo "Result: ".$db->errorCode();
      zip_entry_close($zip_entry);
    }
    echo "
";
  }
  zip_close($zip);
 }
?>
上一頁12345678下一頁   和前面一樣,用下面的命令行運(yùn)行該代碼:php msconsume.php  這會將一個 XML 文檔插入到數(shù)據(jù)庫中,并打印出一個錯誤碼。同樣,這里錯誤碼很可能是 0。   再利用 ODF 和 Word 2007 內(nèi)容  現(xiàn)在,在數(shù)據(jù)庫中有了 OpenOffice 和 Word 2007 文檔的內(nèi)容,您需要再利用該文檔,將它用于網(wǎng)站。這就是我們例子中市場部門必須要做的事情。清單 5 顯示了用于 ODF 的代碼,可以將該代碼保存為 “odfrepurpose.php”,以便后面引用。從 輸出(一個 HTML 片段)中,很輕易看到如何將這個文檔重新格式化為一個新聞提要,或者將它并入到一個 Ajax 應(yīng)用程序中!  清單 5. 將 ODF 格式(opendoc.odt)再利用到一個簡單的 HTML 片段中<?php
$user = "db2admin";
$password = "secret";  
$db = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=ODF;" .
 "HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;", $user, $password);
echo $user." Connected
";
$xqry =
<<<TXT
values(
 XMLSERIALIZE( XMLQUERY('
   declare boundary-space strip;
   declare namespace text0="urn:oasis:names:tc:opendocument:xmlns:text:1.0";
   declare namespace office0="urn:oasis:names:tc:opendocument:xmlns:office:1.0";
  for $t0 in db2-fn:xmlcolumn("DB2ADMIN.DOCUMENT.DOC")
  /office0:document-content/office0:body
    let $p0 := $body0/office0:text/text0:p
    let $h0 := $body0/office0:text/text0:h
    where fn:exists($p0) or $h0:h/@text:style-name ="Heading_20_2"
    return 
     if ( fn:exists( $style ) ) then
      if ($h0:h/@text:style-name ="Heading_20_2" ) then <h1>{$txt}</h1>
      else ()
     else <p>{$txt}</p>')
 as VARCHAR(2000)))
TXT;
$result=$db->query( $xqry );
$arr = $result->fetch();
echo $arr[1];
?>
上一頁12345678下一頁   清單 5.1 顯示了再利用 Word 2007 的代碼,可以將該代碼保存為 “msrepurpose.php”,以便后面引用。從 輸出(一個 HTML 片段)中,很輕易看到如何將這個文檔重新格式化為一個新聞提要,或者將它并入到一個 Ajax 應(yīng)用程序中!  清單 5.1 將 Word 2007 格式(submit.docx)再利用到一個簡單的 HTML 片段中        <?php
          $user = "db2admin";
          $password = "secret";
          $db = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=ODF;" .
          "HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;", $user, $password);
          echo $user." Connected
";
          $xqry =
        <<<TXT
          values(
          XMLSERIALIZE( XMLQUERY('
          declare boundary-space strip;
          declare namespace text0=
          "urn:oasis:names:tc:opendocument:xmlns:text:1.0";
          declare namespace office0=
          "urn:oasis:names:tc:opendocument:xmlns:office:1.0";
          
          for $t0 in db2-fn:xmlcolumn("DB2ADMIN.DOCUMENT.DOC")
          /office0:document-content/office0:body/office0:text
          let $p := (for $pp in $t0/text0:p return <p>{$pp/text()}</p>)
          let $h := (for $hh in $t0/text0:h[@text0:style-name=
          "Heading_20_2"]
          return <hl>{$hh/text()}</hl>)
          return
          
          ($h,$p)')
          as varchar(3000)))
          TXT;
          
          echo "
";
          $result=$db->query( $xqry );
          
          $arr = $result->fetch();
          echo $arr[1];
        ?>
        
  要運(yùn)行該代碼,輸入:php.exe msrepurpose.php  現(xiàn)在您也許會問,為什么不直接將它保存為 HTML 呢?XML 的生成會危害原始文檔的完整性,并且會丟失 MS Office 特性。然而,文檔的確小了很多,而且仍然可以用 XQuery 對它進(jìn)行再利用,就像對待 Word 2007 文件格式一樣。隨著文檔變得越來越大、越來越多(例如在大型會議中),您希望將這個邏輯應(yīng)用到儲存庫中每個文檔的每個部分。于是 XQuery 的威力就表現(xiàn)出來了!和 SQL 一樣,XQuery 使您通過一個查詢處理一組文檔。實(shí)際上,假如您愿意,也可以使用 SQL 查詢得到同樣的結(jié)果,因?yàn)樵?DB2 中這兩種語言可以互換。  下面的清單顯示了 odfrepurpose.php 或 msrepurpose.php 的結(jié)果:  清單 6. 輸出db2admin Connected
<h1>Introduction to Web 2.0</h1><p>This is a document
that will impress upon ...</p><h1>Abstract</h1><p>The nature of the industry is a
gain turning to the browser ...</p>
  結(jié)束語  本文討論的技巧在內(nèi)容治理和文檔治理解決方案中很有用。希望您已經(jīng)發(fā)現(xiàn),通過 IBM DB2 pureXML 特性使用和再利用 OpenOffice 和 MS Office 2007 文檔十分輕易。實(shí)際上這個過程不需要很多代碼,這一點(diǎn)有助于取得好的性能。之后,考慮索引這些 XML 文檔,以進(jìn)一步利用 pureXML 混合存儲特性的優(yōu)點(diǎn)。 上一頁12345678
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 中文字幕涩涩久久乱小说 | 欧美成人免费在线视频 | 国产免费最爽的乱淫视频a 毛片国产 | 7777在线观看 | 国产在线看一区 | 蜜桃视频在线观看视频 | 3344永久免费 | 久久蜜臀一区二区三区av | 色999久久久精品人人澡69 | 免费毛片在线视频 | 欧美中文字幕一区二区三区亚洲 | 久草视频手机在线观看 | 日韩精品中文字幕在线播放 | 精品亚洲va在线va天堂资源站 | 欧美成人国产va精品日本一级 | 日韩视频一区二区在线观看 | 国产精品久久久久久久久久三级 | 姑娘第5集高清在线观看 | 欧美成人一区二区三区 | 久久精品伊人网 | 久久国产成人精品国产成人亚洲 | 欧美日韩一区,二区,三区,久久精品 | 毛片免费看的 | 免费黄色在线电影 | 宅男视频在线观看免费 | 久久精品欧美视频 | 国产1区2区3区中文字幕 | 成人黄视频在线观看 | 国产精品免费一区二区 | 999精品国产 | 久久免费激情视频 | 依依成人精品视频 | 日本高清黄色片 | 国产亚洲黑人性受xxxx精品 | 国产精品视频一区二区三区四区国 | 红杏亚洲影院一区二区三区 | 亚洲国产精品久久久 | 成人在线视频免费看 | 亚洲综合91 | 国产美女自拍av | 国产不卡av在线 |