如何在不创建数据库的情况下访问BaseX中的文件?

时间:2016-04-24 11:47:26

标签: xquery basex

我需要根据BaseX命令行工具的-i选项提供的上下文转换一些XML文件:

$ basex --help
BaseX 8.4.2 [Standalone]
Usage: basex [-bcdiIoqrRstuvVwxXz] [input]
  [input]     XQuery or command file, or query string
  -b<pars>    Bind external query variables
  -c<input>   Execute commands from file or string
  -d          Activate debugging mode
  -i<input>   Assign file or database to context
  -I<input>   Assign input string to context
  -o<output>  Write output to file
  -q<expr>    Execute XQuery expression
  -r<num>     Set number of query executions
  -R          Turn query execution on/off
  -s<pars>    Set serialization parameter(s)
  -t[path]    Run tests in file or directory
  -u          Write updates back to original files
  -v/V        Show (all) process info
  -w          Preserve whitespaces from input files
  -x          Show query plan
  -X          Show query plan before/after compilation
  -z          Skip output of results

我不想使用数据库,因为我需要显式创建数据库。我可以使用basex -i context.xml test.xqy将上下文与转换相结合吗?在test.xqy文件中,我是否可以使用context.xml之类的内容直接访问doc('context')? 是否有其他XQuery处理器提供此功能?

1 个答案:

答案 0 :(得分:0)

在不创建数据库的情况下访问文件

  

我不想使用数据库,因为我需要显式创建数据库。我可以使用basex -i context.xml test.xqy将上下文与转换组合在一起,在test.xqy文件中,我可以使用doc('context')之类的东西直接访问context.xml吗?

对于即席查询,最简单的方法是在doc(...)函数中传递文档。在BaseX中,doc(...)函数可用于访问数据库,本地文件甚至远程URI,如BaseX文档的Databases/XML Documents章节中所述。如果名称与数据库名称不匹配,BaseX将尝试使用此名称打开文件。您还可以提供doc(...)函数的相对或绝对路径。

实际上,这会创建一个文件的内存数据库表示(这对于合理的性能来说是必需的,文本XML实际上不适合快速评估查询),但这是透明的(但要求文档适合)在主存中)。

例如,要计算工作目录中存储的context.xml文件中的元素数,请运行

count(doc('context.xml')//*)

更新文件

  

我需要转换一些XML文件[...]

在以这种方式打开的XML文件上也可以这样做,但请务必set the WRITEBACK option,这也可以使用-u参数:

-u          Write updates back to original files