跳轉到內容

XRX/配置檔案編輯器

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

您有一個 XML 配置檔案,一次只有一個使用者可以編輯它。您希望簡化配置檔案編輯,以便非技術使用者(不瞭解 XML)或偶爾使用者不會在編輯檔案時出錯。

請注意,如果多個使用者可能同時編輯同一個檔案或記錄,則此方法可能不合適。有關此過程的更多詳細資訊,請參閱記錄鎖定部分。

我們將把整個檔案載入到單個 XForms 例項中,對其進行編輯,然後儲存整個檔案。這可以透過在 XForms 應用程式中進行一次提交和在 eXist(或類似資料庫)中進行一次 store() 操作來完成。即使配置檔案非常複雜且包含多個部分和多個重複元素,也可以完成此操作。無論檔案複雜程度如何,您只需要在伺服器上呼叫一個函式來儲存檔案。

程式大綱

[編輯 | 編輯原始碼]

假設該檔案儲存在單個 eXist 集合中,例如 my-config.xml。要將此檔案載入到 XForms 應用程式中,只需將文件放入 XForms 模型中的一個例項中

<html xmlns:xf="http://www.w3.org/2002/xforms">
   <head>
      <xf:model>
         <xf:instance src="my-config.xml" id="config"/>
      </xf:model>
   </head>
   <body>
   ...
   </body>
</html>

然後,您可以透過在模型中新增一個提交元素來儲存檔案,該元素將在客戶端資料發生更改後將檔案儲存回資料庫。

<xf:submission id="save" ref="config" method="post"/>
...
<xf:submit id="save">
   <xf:label>Save</xf:label>
</xf:submit>

請注意,在此示例中,您需要使用 "post" 而不是 "put"。提交元素在您的表單中建立一個帶有 "儲存" 標籤的按鈕。

為配置檔案構建表單應用程式

[編輯 | 編輯原始碼]

有很多方法可以 "自動生成" 用於在瀏覽器中編輯配置檔案的 XForms 應用程式,即使您的配置檔案很複雜,並且包含多個重複元素。

一種方法是使用一個轉換程式,該程式將 XML 模式轉換為 XForms 檔案。一個例子是 NIEM 轉換。儘管存在其他此類轉換的示例,但大多數示例要求您擁有配置檔案的 XML 模式。如果您沒有 XML 模式,則有一些工具可以根據一個或多個例項文件生成 XML 模式。

如果您沒有 XML 模式,則可以使用商業 XForms 工具(如 IBM Workplace Forms Designer) "繪製" 您的 XForms 客戶端。這個拖放環境使非程式設計師可以輕鬆構建和維護複雜的表單。

如果您正在構建一個預算有限的表單,則另一個選擇是使用 Orbeon XForms Builder,它是一個 XForms 應用程式,可以為您構建表單。

客戶端儲存

[編輯 | 編輯原始碼]

如果您有一個安全的 Intranet,則可以使用 HTTP PUT 運算子將配置檔案直接儲存到 Web 檔案系統。有時,您需要能夠在允許儲存之前對使用者進行身份驗證。這可以透過傳統的登入和會話管理系統來完成,或者您可以建立一個具有正確許可權的單個指令碼。


示例儲存 XQuery

[編輯 | 編輯原始碼]
xquery version "1.0";
declare namespace request="http://exist-db.org/xquery/request";
declare namespace xmldb="http://exist-db.org/xquery/xmldb";

(: put the collection we want to save our data to here :)
let $my-collection := '/db/config-files'
let $my-config-file-name := 'my-config.xml'

(: get the data we want to update from the HTTP POST :)
let $my-posted-data := request:get-data()

(: make sure we have write access to this collection :)
let $login := collection($my-collection, 'my-userid', 'my-password')

let $store-return-status := xmldb:store($my-collection, $my-config-file-name, $my-posted-data)

(: this is what we return.  You can also return an XHTML file. :)
return
<return>
   <message>File {$my-config-file-name} saved in collection {$my-collection}</message>
   <result-code>{$store-return-status}</result-code>
</return>

上一步: XSLTForms 和 eXist 下一步: 字典編輯器

華夏公益教科書