在 MarkLogic 中创建远程事务和附加语句

Creating remote transactions and attaching statements in MarkLogic

我正在尝试在自定义 API 中实现类似于 MarkLogic REST API 的 /transactions 端点的功能。但是,看起来 XQuery 中只有实现此功能所需的一些功能可用。

提供了

xdmp:transaction-commit()xdmp:transaction-rollback()来远程管理现有的打开的事务,但是没有相应的XQuery函数来打开一个新的事务或者给它附加新的语句。

我在 REST API 实现中四处窥探,看看它是如何在那里完成的,他们使用未记录的函数 xdmp:transaction-create() 和不推荐使用的选项 <transaction-mode>update</transaction-mode> (我用 <update><commit> 选项,这会使服务器发生段错误!)。

语句然后通过 <set-transaction> 附加到 XML 重写器中的事务,这不对应于 XQuery 函数,但我认为它与使用 evalinvoke<transaction-id> 选项(也已弃用)。

使用这些方法的简单概念证明似乎工作正常,但我不确定我是否缺少一种不使用未记录和弃用的功能来执行此操作的方法。也许没关系,因为 REST API 就是这样做的?提供功能来提交和回滚没有批准的创建或更新方式的远程事务似乎很奇怪。

是的,不幸的是,您自己实现并创建自己的 API 的唯一方法是使用未记录的函数。

看看 Multi-statement Transactions in XQRS with transaction.xq,这可能会给您一个更好的主意。

关于设置单个语句是只读还是更新,可以使用%xdmp:update注解。