查询如何在eXist-db中实际运行(沙箱与存储查询)

时间:2012-04-19 16:47:04

标签: xml xml-parsing xmlhttprequest backend exist-db

我正在使用eXist-db。执行查询时,eXist-db后端的进程是什么?例如,在以下情况下,查询如何以不同方式运行?

  1. 通过eXist Sandbox执行查询?

  2. 通过REST界面(即通过网络浏览器)执行查询时?

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

    • CSV文件
    • XQuery文件
    • 通过XQuery转换运行CSV文件而产生的XML文件

1 个答案:

答案 0 :(得分:0)

  1. eXist XQuery Sandbox是一个带有文本字段和提交按钮的网页。当您输入查询并提交查询时,文本字段的内容将通过Ajax发送到服务器上的sandbox.xql查询,并且服务器动态执行查询(使用util:eval())。然后将结果序列存储在会话中。然后,结果序列中的前十个项目显示在结果窗口中;您可以一次翻阅结果10。通过将结果存储在会话中,对结果进行分页不需要重新提交查询。下次提交查询时,将清除旧结果,并将新结果插入到会话中。

  2. 当您通过REST接口执行查询时(即,通过将您的Web浏览器直接指向查询存储在数据库中,例如.xq,.xqy,.xql或.xquery文件) 。数据库读取文件并执行查询,直接将所有结果直接返回给浏览器。

  3. 请注意,虽然如果您的查询返回多个结果,Sandbox不会抱怨,但浏览器确实希望XML文档格式正确 - 即具有单个根元素。将查询从沙箱移动到存储的.xq文件时发生的常见错误或误解是忘记将查询结果包装在单个根元素中。

    例如,在Sandbox中,您可以将其输入为查询:

    <x/>, <y/>, <z/>
    

    提交时,您将获得3个结果:

    1. <x/>
    2. <y/>
    3. <z/>
    4. 但是如果你将它保存为.xq文件(例如,myquery.xq)并通过http://localhost:8080/exist/rest/db/myquery.xq调用它,那么你将在浏览器中收到有关结果不正确的错误。解决方案是将结果包装在根元素中,例如:

      <results><x/><y/><z/></results>
      

      您的上一个问题有点模糊,但是您是否看到了your earlier question关于如何运行CSV转换的答案?我概述了如何编写查询以获取存储在数据库中的CSV文件,将CSV文件转换为XML,并将结果保存为数据库中的XML文件。