1

我正在使用 eXist-db。执行查询时,eXist-db 的后端有哪些流程?例如,查询在以下场景中的运行方式有何不同?

  1. 通过 eXist Sandbox 执行查询时?

  2. 通过 REST 接口(即通过 Web 浏览器)执行查询时?

  3. 此外,将 CSV 文件转换为位于同一集合中的 XML 文件时,后端会发生什么情况?(即使用此处概述的步骤。就我而言,我将 CSV 文件存储在数据库中。以下文件会发生什么情况:

    • CSV 文件
    • XQuery 文件
    • 通过 XQuery 转换运行 CSV 文件生成的 XML 文件
4

1 回答 1

0
  1. eXist XQuery Sandbox是一个带有文本字段和提交按钮的网页。当您输入查询并提交查询时,文本字段的内容通过 Ajax 发送到服务器上的 sandbox.xql 查询,服务器动态执行查询(使用util:eval())。然后将结果序列存储在会话中。结果序列中的前十个项目随后显示在结果窗口中;您可以一次翻阅 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>

您的最后一个问题有点含糊,但是您看到我对您之前关于如何运行 CSV 转换的问题的回答了吗?我概述了如何编写查询以获取存储在数据库中的 CSV 文件,将 CSV 文件转换为 XML,并将结果作为 XML 文件保存在数据库中。

于 2012-04-19T21:08:39.297 回答