跳轉到內容

XML - 資料交換管理/Cocoon

來自華夏公益教科書



上一章 下一章
XSLT 和樣式表 解析 XML 檔案




學習目標

  • 瞭解 Cocoon 的功能
  • 建立一個工作站點地圖
  • 提供一個樣式表格式的 XML 文件
  • 建立一個簡單的 Cocoon 表單
  • 建立一個簡單的 XSP

贊助商

佐治亞大學

特里商學院

管理資訊系統系



Cocoon 是 Apache 軟體基金會的產品。它是一個強大的伺服器,大量依賴於 Java 和 XML 技術。雖然它確實有一個命令列介面,但大多數使用者只需仔細編輯幾個配置檔案(格式為 XML 文件),就可以完成所有需要做的操作。如果你想看看 Cocoon 可以做什麼,請訪問 http://MIST5730.terry.uga.edu:8080/cocoon/.

本教程是在使用者有權訪問 Terry 的 Blaze 伺服器上的 Cocoon 安裝的情況下設定的。如果你沒有此許可權,只需將檔案位置和訪問方法替換為伺服器管理員提供的那些方法即可。描述的一些程式可能僅限於 Windows;如果你使用的是 Macintosh 或 Linux,則需要找到合適的替代程式,儘管這些實用程式通常包含在作業系統中。JEdit 是一個免費的文字編輯器,可以像在硬碟上一樣輕鬆地在 FTP 或 SFTP 伺服器上讀取和儲存檔案,並使用合適的外掛正確地操作多種型別的檔案。它可以在 Windows、Macintosh、某些 Linux 發行版以及作為平臺無關的 Java 應用程式在 http://www.jedit.org/ 上獲得。

站點地圖

[編輯 | 編輯原始碼]

需要關注的主要 Cocoon 檔案是 sitemap.xmap,它位於根 Cocoon 目錄中。它使用 XML 標籤來定義各種事物,例如呈現資料的不同方式、重要檔案的位置、瀏覽器的識別,以及最重要的方面,即管道。預設的 xmap 適用於我們的目的,我們只需要檢視它的最後幾行,其中定義了管道匹配。本節從標籤 <map:pipeline> 開始。管道匹配如下所示

<map:match pattern=”test”>
	<map:generate type=”file” src=”content/test.xml”/>
	<map:transform type=”xslt” src=”stylesheets/test.xslt”/>
	<map:serialize type=”html”/>
</map:match>

讓我們看看每一行都做了什麼。第一行告訴 Cocoon 監視有人瀏覽到 http://blaze.terry.uga.edu:8080/cocoon/otc/test。當這種情況發生時,接下來的三行的操作將執行。Cocoon 將從內容目錄中的檔案 test.xml 中獲取資訊,並應用來自樣式表目錄的樣式表 test.xslt。它將此結果格式化為 html 頁面,如第四行指定的那樣。Cocoon 可以使用不同的序列化器將資料格式化為 html 或 xhtml 頁面、flash 物件、pdf,甚至 OpenOffice 文件。與為其他目的使用 XML 時不同,不需要 XSD 模式 - 只需根據需要建立和填充 XML 檔案中的欄位即可。

Cocoon 表單

[編輯 | 編輯原始碼]

Cocoon 表單,或 CForms,是一種使用 XML 結構建立驗證表單欄位物件,然後將它們排列在模板中以供使用的方式。CForms 與使用 HTML 表單相比的主要優勢是,欄位可以使用內建功能或簡單的 XML 屬性進行驗證。這需要幾個元素。一個定義 XML 檔案,其中包含稱為“小部件”的欄位

<fd:field id="email" required="true">
<fd:label>Email address:</fd:label>
<fd:datatype base="string"/>
<fd:validation>
<fd:email/>
</fd:validation>
</fd:field>


一個模板 XML 檔案呼叫這些小部件,新增 HTML 程式碼以幫助實現外觀和感覺

<br/>
<ft:widget-label id="email"/>
<ft:widget id="email"/>

一個控制資料從一個檔案流向另一個檔案的 Javascript 檔案

function registration() {
var form = new Form("registration_definition.xml");
form.showForm("registration-display-pipeline");
var viewData = { "username" : form.getChild("name").getValue() }
cocoon.sendPage("registration-success-pipeline", viewData);
}

站點地圖中的管道,也控制流

<map:match pattern="registration">
<map:call function="registration"/>
</map:match>
...
<map:match pattern="registration-display-pipeline">
<map:generate type="jx" src="registration_template.xml"/>
<map:transform type="i18n">
<map:parameter name="locale" value="en-US"/>
</map:transform>
<map:transform src="forms-samples-styling.xsl"/>
<map:serialize/>
</map:match>
...
<map:match pattern="registration-success-pipeline">
<map:generate type="jx" src="registration_success.jx"/>
<map:serialize/>
</map:match>

XSP 可以用於此流中,以便將提交傳遞到資料庫。

XSP 的功能類似於 JSP 和 servlet - 它們是伺服器端應用程式,可以同時支援許多使用者。與 JSP 和 servlet 不同,XSP 可以使用 XML 標籤來完成其大部分功能,儘管它們也可以在 <xsp:logic></xsp:logic> 標籤之間使用 Java 程式碼。XSP 的一個很好的用途是將資訊傳遞到資料庫或呼叫和顯示儲存的資料。雖然 JSP 和 servlet 必須要麼呼叫特定資料庫聯結器,要麼在其內部包含連線的所有程式碼,但 Cocoon 具有一個配置檔案,其中包含此資訊,而 XSP 只調用 WEB-INF/cocoon.xconf 中指定的資料庫名稱

<esql:pool>dbname</esql:pool>

從表單輸入資料的 XSP 程式碼可能如下所示

  <esql:execute-query>
  <esql:query>
  INSERT into otc_users (name,email,password,age,spam) values  ('<xsp:expr>esc_name</xsp:expr>','<xsp-request:get-parameter name="email"/>','<xsp-request:get-parameter name="password"/>','<xsp-request:get-parameter name="age"/>','<xsp-request:get-parameter name="spam"/>')
  </esql:query>
  </esql:execute-query>
  1. 建立一個基本的 XML 檔案和相應的 html 樣式表。將它們上傳到 Blaze 伺服器上的相應資料夾(分別為內容和樣式表),並編寫一個管道匹配,使你能夠在瀏覽器中檢視應用了樣式表的 XML 內容。檔案和匹配模式應以你自己的姓名命名,例如,Bob Jones 將使用“bjones”。不必上傳管道程式碼 - 只需瀏覽到 http://blaze.terry.uga.edu:8080/cocoon/otc/yourname,它應該可見。
  2. 按照位於 http://cocoon.apache.org/2.1/userdocs/basics/sample.html 的 CForms 示例進行操作。至少建立一個你自己的小部件。你可以透過瀏覽到 http://blaze.terry.uga.edu:8080/cocoon/cforms/registration 來檢視它的工作原理。
  3. 瀏覽到 Blaze 上的 opt/tomcat5/webapps/cocoon/cforms。檢查 sitemap-modified.xmap,以瞭解如何修改管道以將 CForm 資料傳遞到 XSP。Test.xsp 顯示如何將該資料插入資料庫或從資料庫中呼叫該資料。

附錄 - 訪問 Blaze 伺服器

[編輯 | 編輯原始碼]

當你設定了 Blaze 伺服器上的帳戶後,你需要採取幾個步驟才能使用 Cocoon 目錄中的檔案。通常,新使用者帳戶使用使用者的 UGA MyId 作為使用者名稱,並使用社會安全號碼作為密碼。此密碼必須在使用者首次登入時更改,這需要使用 SSH 客戶端才能完成。UGA 學生可以在 http://sitesoft.uga.edu/ 上下載 Secure Shell Utilities 3.1。此下載將安裝兩個程式:Secure Shell Client 和 Secure File Transfer Client。

開啟安全殼客戶端,點選視窗頂部附近的“快速連線”按鈕。在彈出的視窗中,輸入“blaze.terry.uga.edu”作為主機名,輸入您指定的使用者名稱作為使用者名稱。埠號應設定為“22”,身份驗證方法應設定為“密碼”。點選“連線”。在彈出的視窗中,輸入您的密碼並點選“確定”。您可能會看到一個詢問是否儲存新主機金鑰的視窗,點選“是”。您現在將看到一個文字框,它會通知您您的密碼已過期,必須更改。您需要輸入您的舊密碼一次,按回車鍵,輸入您想要的新密碼,按回車鍵,再次輸入您想要的新密碼並按回車鍵。請注意,出於安全原因,您輸入的任何內容都不會顯示,並且您無法刪除任何錯誤輸入 - 如果您出錯,您必須重新登入並重新開始。這就是我們使用安全殼客戶端應用程式的全部內容;您可以點選螢幕頂部的一排小按鈕中的“斷開連線”按鈕,然後退出程式。

為了真正訪問Blaze伺服器上的檔案,需要使用安全檔案傳輸客戶端。開啟它並點選視窗頂部附近的“快速連線”按鈕,輸入與安全殼客戶端相同的主機名,您的新密碼,並確保其他設定相同。點選“連線”。您將看到一個類似於Windows資源管理器的螢幕,您可以在其中瀏覽Blaze伺服器上的檔案。要訪問我們的Cocoon安裝,請轉到“opt”資料夾,然後是“tomcat5”資料夾,然後是“webapps”資料夾,然後是cocoon資料夾。我們大部分工作將在其中的“otc”資料夾中完成。要下載檔案以進行編輯,只需突出顯示它並點選螢幕頂部的一排小按鈕中的“下載”按鈕。選擇下載位置並點選“下載”後,您可以在您選擇的編輯器中開啟它。要將檔案上傳到伺服器,只需反過來 - 點選螢幕頂部的一排小按鈕中的“上傳”按鈕,選擇要上傳的檔案,然後點選“上傳”,這會將檔案放到您當前在Blaze伺服器上檢視的資料夾中。

華夏公益教科書