跳转到内容

XQuery/操作 URI

来自维基教科书,开放的书籍,开放的世界

有时您需要能够操作自己的 XQuery 的 URI。当您需要使用不同的参数调用自己的 XQuery 时,这很有用。例如,如果您有一个 XQuery 返回查询中的前 20 行,但您想添加一个 **获取下一个 20 条记录** 按钮,您可能只想使用有关从哪里开始的附加参数来调用自己,在本例中从记录 21 开始。

该程序演示了一些 XQuery 函数,这些函数不是原始 XQuery 规范的一部分,但对于精确的 Web 服务器 XQuery 功能是必需的。

这些函数是

  • eXist request:get-uri() - 返回 Web 服务器中当前请求的 URI。例如

/exist/rest/db/test/my-query.xq

  • eXist request:get-url() - 返回包括服务器和端口的完整 URL。

http://www.example.com:8080/exist/rest/db/test/my-query.xq

  • eXist request:get-query-string() - 返回传递给 servlet 的完整查询字符串(没有初始问号)。
  • eXist system:get-module-load-path() - 返回模块加载位置的路径
  • eXist system:get-exist-home() - 返回 eXist Web 根目录的基地址

示例程序

[编辑 | 编辑源代码]
xquery version "1.0";
declare namespace system="http://exist-db.org/xquery/system";
declare namespace request="http://exist-db.org/xquery/request";
declare option exist:serialize "method=html media-type=text/html indent=yes";

let $get-uri := request:get-uri()
let $get-url := request:get-url()
let $module-load-path := system:get-module-load-path()
let $exist-home := system:get-exist-home()
let $path := substring-after($module-load-path, 'xmldb:exist://embedded-eXist-server')
let $replace := replace($module-load-path, 'xmldb:exist://embedded-eXist-server', '')

return
<html>
   <head>
   <title>URI Path Example</title>
   </head>
   <body>
   <h1>Sample URI manipulation with XPath</h1>
      <table border="1">
         <thead>
           <tr>             
             <th>In</th>
             <th>Out</th>
           </tr>
         </thead>
         <tr>
            <td>request:get-url()</td>
            <td>{$get-url}</td>
         </tr>
         <tr>
            <td>request:get-uri()</td>
            <td>{$get-uri}</td>
         </tr>
         <tr>
             <td>system:get-module-load-path()</td>
             <td>{$module-load-path}</td>
         </tr>
         <tr>
             <td>system:get-exist-home()</td>
             <td>{$exist-home}</td>
         </tr>
         <tr>
            <td>substring-after(system:get-module-load-path(), 'xmldb:exist://embedded-eXist-server')</td>
            <td>{$path}</td></tr>
         <tr>
            <td>replace(system:get-module-load-path(), 'xmldb:exist://embedded-eXist-server', '')</td>
            <td>{$replace}</td>
         </tr>        
    </table>
  </body>
</html>
华夏公益教科书