跳转到内容

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://127.0.0.1:8080/exist/rest/db/test/search/search.xq?q=apple

你应该看到以下结果

要从表单驱动此服务,请单击以下链接或将其复制到浏览器导航栏中

 https://127.0.0.1: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>
华夏公益教科书