2012-04-19 96 views
1

我正在使用eXist-db。執行查詢時,eXist-db後端的進程是什麼?例如,在以下情況下,查詢的運行方式如何?如何在eXist-db中實際運行查詢(沙盒與存儲的查詢)

  1. 在通過eXist Sandbox執行查詢時?

  2. 在通過REST界面(即通過Web瀏覽器)執行查詢時?

  3. 另外,將CSV文件轉換爲位於同一個集合中的XML文件時,後端會發生什麼? (即使用概述here的步驟就我而言,我存儲在我的CSV文件在數據庫中發生了以下文件什麼:

    • CSV文件
    • XQuery的文件
    • XML文件從運行所產生的CSV通過XQuery轉換

回答

0
  1. eXist XQuery Sandbox文件與網頁一個文本字段和一個提交按鈕。當您輸入查詢並提交查詢時,文本字段的內容將通過Ajax發送到服務器上的sandbox.xql查詢,並且服務器動態執行查詢(使用util:eval())。然後將結果序列存儲在會話中。結果序列中的前10個項目然後顯示在結果窗口中;您可以一次翻閱結果10。通過將結果存儲在會話中,通過結果進行分頁不需要重新提交查詢。下次您提交查詢時,您的舊結果將被清除,並將新結果插入到會話中。

  2. 當您通過REST接口執行查詢時(即通過將Web瀏覽器直接指向查詢存儲在數據庫中,如.xq,.xqy,.xql或.xquery文件)。數據庫讀取文件並執行查詢,直接將所有結果直接返回給瀏覽器。

注意,而如果您的查詢返回多個結果沙盒不抱怨,一個瀏覽器期待的XML文檔得到很好的形成 - 即有一個根元素。將查詢從沙盒移動到存儲的.xq文件時發生的常見錯誤或誤解是忘記將查詢結果包裝在單個根元素中。

例如,在沙箱中,您可以輸入這個作爲查詢:

<x/>, <y/>, <z/> 

當您提交它,你會得到3個結果:

  1. <x/>
  2. <y/>
  3. <z/>

但是,如果將此文件保存爲.xq文件(例如,myquery.xq)並通過http://localhost:8080/exist/rest/db/myquery.xq調用此文件,那麼瀏覽器中會出現錯誤信息,說明結果不完整。解決的辦法是包裝在一個根元素,例如:

<results><x/><y/><z/></results> 

你的最後一個問題是一個有點含糊的結果,但你有沒有看到我的回答your earlier question有關如何運行CSV轉換?我概述瞭如何編寫查詢以獲取存儲在數據庫中的CSV文件,將CSV文件轉換爲XML,並將結果作爲XML文件保存在數據庫中。