marklogic中的内存元素是什么?

时间:2012-11-27 11:23:27

标签: marklogic

我有几个文件,xdmp:node-replace()某些元素不起作用。还有一些其他的文档几乎与有问题的文档类似,但xdmp:node-replace对它们完全正常。尝试了所有可能出错但却徒劳的可能性。阅读xdmp:node-replace函数在“内存元素 中无效的地方。”

因此,为了验证问题是否与“ in memory elements ”有关,我想知道究竟是什么。

对它有任何启发都会有很大的帮助

3 个答案:

答案 0 :(得分:6)

查询中构造的任何内容都是内存中的元素。例如,这个XQuery产生一个内存元素:

<test/>

某些函数调用也会返回内存中的元素:xdmp:unquote是一个明显的例子。任何不是来自当前数据库的节点都将被视为内存节点。

此查询产生一个数据库元素(如果存在),可以使用xdmp:node-replace进行修改:

doc('fubar')/test

这是典型的内存更新错误:

xdmp:node-replace(<x/>, <y/>)

使用MarkLogic 6.0-1.1时,错误代码为XDMP-UPCONSTNODES

答案 1 :(得分:6)

如果你想通过使用类似的函数调用来更新内存节点,就好像它们在数据库中一样,那么有一个实用程序库可以做到这一点:

https://github.com/marklogic/commons/tree/master/memupdate

主库还附带了App Services下的MarkLogic Server:

appservices / utils的/在-MEM-update.xqy

答案 2 :(得分:2)

如果您使用in memory elements导入以下模块

import module namespace mem = "http://xqdev.com/in-mem-update" at "/MarkLogic/appservices/utils/in-mem-update.xqy";

您可以使用xdmp:node-replace

而不是mem:node-replace(<x/>, <y/>)