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 中顯示的示例文檔 <?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 新聞熱點(diǎn)
疑難解答
圖片精選