2012-04-19 78 views
1

我正在使用eXist-db。执行查询时,eXist-db后端的进程是什么?例如,在以下情况下,查询的运行方式如何?如何在eXist-db中实际运行查询(沙盒与存储的查询)

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

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

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

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

回答

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

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