我需要根据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处理器提供此功能?
答案 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