跳轉到內容

XForms/使用 WebDAV 和 Subversion 版本化表單資料

來自華夏公益教科書,開放的書籍,為開放的世界

使用者經常希望使用多版本表單。這意味著他們不僅希望保留表單例項資料的先前版本,而且還希望能夠

  • 檢視以前的版本
  • 比較當前版本和以前的版本
  • 檢視誰在何時更改了表單上的哪些欄位
  • 恢復到以前的版本

這個問題經常出現在具有配置檔案的複雜計算機系統中。某些東西停止工作,但人們直到以後才注意到它。沒有關於配置檔案的先前版本是什麼樣子的資訊,因此整個系統必須從備份中恢復。許多此類問題可以透過自動恢復到配置檔案的先前版本來避免。

使用 XForms 標準,我們獲得了 <submission> 元素以及少量 HTTP 運算子(GET、PUT、POST)可供使用,以及可以是任何 URL 的操作。如果我們希望允許使用者將表單資料儲存到版本控制系統或查看錶單的先前版本,我們必須將這些操作轉換為 Web 伺服器將識別為版本控制資料庫上的操作。

Subversion 是一個開源版本控制系統,具有客戶端/伺服器架構(與其他版本控制系統的基於檔案的架構相反)。

與較早的基於檔案的版本控制系統不同,Subversion 使用類似於可靠銀行交易所使用的交易伺服器模型。這使得 Subversion 非常可靠,並允許您簽入(或提交)應一起簽入的檔案組。它們要麼全部成功,要麼全部失敗,但版本控制系統保證始終處於一致狀態。

Subversion 還符合(在可能的情況下)WebDAV WebDAV 代表 Web 分散式創作和版本控制規範。標準 Web HTTP 協議僅支援少數操作,例如獲取、放置和釋出。WebDAV 將這些簡單操作擴充套件到包括我們可能期望在檔案系統上進行的操作,例如刪除、移動和複製。由於 WebDAV 更關注檔案操作,而 Subversion 更關注事務,因此有時兩者之間並不完全匹配。

Subversion 有兩個主要概念

  • 更新 - 從伺服器獲取程式碼的最新版本。
  • 提交 - 將您從本地檔案系統中更改的所有檔案儲存到伺服器上的事務中。

為了允許表單資料儲存到 Subversion,我們需要使提交元素執行提交。這不是一件難事,但我們要清楚地說明系統之間的差異。

Subversion,WebDAV

[編輯 | 編輯原始碼]

Subversion 是一個版本控制資料庫。在其核心,它不包含獨立的訪問控制系統。因為它通常作為 Web 伺服器的一部分安裝,所以它通常使用執行它的 Web 伺服器的訪問控制系統。Apache 還支援 WebDAV HTTP 擴充套件,這些擴充套件允許進行超出基本 HTTP 獲取、放置和釋出的複雜操作。將 XForms 保持永續性的最佳方法之一是將 Apache 配置為使用 WebDAV 和

自動版本控制和 Apache

[編輯 | 編輯原始碼]

要使用 Apache2 伺服器配置自動版本控制,您必須修改配置檔案。此檔案應配置為支援您的 XForms 工作。

警告!:每當您允許公開訪問寫入您的伺服器時,您都在處理安全問題。在對 Web 伺服器的配置檔案進行任何更改之前,您應始終考慮所有安全隱患。確保您組織中的安全專業人員審查所有具有公共 Web 訪問許可權的系統。

您將希望擁有類似於以下半 XML 格式的 Apache 配置

 <Location /repos>
    DAV svn
    SVNPath /var/svnrepos
    SVNAutoversioning on
    <LimitExcept GET PUT POST PROPFIND OPTIONS REPORT>
        Require valid-user
    </LimitExcept>
 </Location>

另請參閱 Subversion 紅皮書 的寫得很好的章節,或者相應的 Gentoo 的 Apache-SVN-WebDAV-HOWTO 部分,以獲取包含示例的詳細配置幫助。

將 HTTP PUT 轉換為 Subversion 提交

[編輯 | 編輯原始碼]

最後一步是將 HTTP PUT 轉換為 Subversion COMMIT。這可以透過使用 Jetty 等程式來完成。

(我們很快就會發佈一個示例程式)。

ViewCV 和 ReST

[編輯 | 編輯原始碼]

您還可以開始向 Apache 和 Subversion 新增工具,以獲取顯示先前檔案之間差異的彩色輸出。一種選擇是在 Apache 伺服器中新增 ViewVC(檢視版本控制)系統。ViewVC 允許您檢視版本歷史記錄,只需向 URL 新增引數即可比較以前的版本。這種使用 URL 向伺服器程式傳遞引數的方法通常稱為 REST 介面。幾乎所有 REST 介面都易於與 XForms <submission> 介面,因為 XForms 可以直接在 URL 上對提交例項進行編碼。

Subversion REST URL 介面

[編輯 | 編輯原始碼]

Subversion 允許您透過向 URL 新增額外的路徑來訪問資源的版本歷史記錄。請參閱 [1]

例如,如果您的檔名是

http://www.example.com/my-repository/myfile.xml

如果要獲取檔案的第 47 個版本,則可能是

http://www.example.com/my-repository/!svn/ver/47/myfile.xml

除錯技巧

[編輯 | 編輯原始碼]

Subversion 常見問題解答 建議您執行 Wireshark 資料包嗅探器並檢視 HTTP 訊息中的資料。您還可以使用 Charles Web 除錯代理,該代理還具有一個不錯的 Firefox 外掛。請確保您知道如何透過轉到 Firefox 工具/選項/常規/連線設定並單擊指向 Internet 的直接連線來停用代理。如果您沒有這樣做,您的 Web 瀏覽器在 Charles 關閉時將不再起作用。

參考資料

[編輯 | 編輯原始碼]

使用 WebDAV 和 Subversion 的草案

Subversion 原始碼儲存在 Subversion 中

下一頁: IIS | 上一頁: Apache
首頁: XForms
華夏公益教科書