XQuery/操作 URI
外观
< XQuery
有时您需要能够操作自己的 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>