跳轉到內容

XQuery/基礎搜尋

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

你想建立一個基本的 HTML 搜尋頁面和搜尋服務。

我們將建立兩個檔案。一個是 HTML 表單,另一個是 RESTful 搜尋服務,它從 URL 獲取一個引數,即搜尋查詢。搜尋服務將搜尋 XML 檔案集合。

以下是我們的測試搜尋集合的基路徑

/db/test/search

要搜尋的資料將在以下集合中

/db/test/search/data

在管理介面中的“瀏覽集合”中,建立集合“test”;在它下面建立集合“search”;最後,在“search”下面建立集合“data”。將“示例資料”下列出的兩個 XML 文件上傳到“data”;將“search-form.xq”和“search.xq”上傳到“search”(不用上傳,可以使用 oXygen 儲存到 URL,或使用 Webstart 客戶端)。

搜尋表單

[編輯 | 編輯原始碼]

/db/test/search/search-form.xq

[編輯 | 編輯原始碼]

我們將建立一個基本的 HTML 表單,它只有一個用於查詢的輸入欄位。

declare option exist:serialize "method=xhtml media-type=text/html indent=yes";

let $title := 'Basic Search Form'

return
<html>
    <head>
         <title>{$title}</title>
     </head>
     <body>
     <h1>{$title}</h1>
     <form method="GET" action="search.xq">
        <p>
            <strong>Keyword Search:</strong>
            <input name="q" type="text"/>
        </p>
        <p>
            <input type="submit" value="Search"/>
        </p>
    </form>
    </body>
</html>

請注意,操作將把表單中的值傳遞給 RESTful 服務。唯一的引數是“q”,即查詢字串。

搜尋服務

[編輯 | 編輯原始碼]

以下檔案應放置在 /db/test/search/search.xq

/db/caldeirao/search/search.xq

[編輯 | 編輯原始碼]
xquery version "1.0";
declare option exist:serialize "method=xhtml media-type=text/html indent=yes";

let $title := 'Simple Search RESTful Service'
let $data-collection := '/db/test/search/data'

(: get the search query string from the URL parameter :)
let $q := request:get-parameter('q', '')

return
<html>
    <head>
       <title>{$title}</title>
     </head>
     <body>
        <h1>Search Results</h1>
        <p><b>Searching for: </b>{$q} in collection: {$data-collection}</p>
        <ol>{
           for $fruit in collection($data-collection)/item[fruit/text() = $q]
             return
                <li>{data($fruit)}</li>
        }</ol>
   </body>
</html>


[編輯 | 編輯原始碼]

要從 URL 測試你的搜尋服務,請將以下內容複製到瀏覽器導航欄中

 https://:8080/exist/rest/db/test/search/search.xq?q=apple

你應該看到以下結果

要從表單驅動此服務,請單擊以下連結或將其複製到瀏覽器導航欄中

 https://:8080/exist/rest/db/test/search/search-form.xq

/db/test/search/data 的示例資料

[編輯 | 編輯原始碼]

/db/test/search/data/1.xml

[編輯 | 編輯原始碼]
<item>
   <fruit>apple</fruit>
</item>

/db/test/search/data/2.xml

[編輯 | 編輯原始碼]
<item>
   <fruit>banana</fruit>
</item>
華夏公益教科書