marklogic 中的内存元素是啥?
Posted
技术标签:
【中文标题】marklogic 中的内存元素是啥?【英文标题】:What are in memory elements in marklogic?marklogic 中的内存元素是什么? 【发布时间】:2012-11-15 00:12:51 【问题描述】:我有几个文件,xdmp:node-replace()
在某些元素上不起作用。还有一些其他文档集几乎与有问题的文档相似,但xdmp:node-replace
在它们上工作得非常好。尝试了所有可能出错但徒劳的可能性。阅读一些 xdmp:node-replace
函数在“in memory elements”上不起作用的地方。
所以为了验证问题是否出在“in memory elements”上,我想知道究竟是什么。
任何关于它的光线都会有很大帮助
【问题讨论】:
【参考方案1】:在查询中构造的任何内容都是内存中的元素。例如,这个 XQuery 产生一个内存元素:
<test/>
一些函数调用也会返回内存中的元素:xdmp:unquote
就是一个明显的例子。任何不是来自当前数据库的节点都将被视为内存中的节点。
此查询产生一个数据库元素(如果存在),可以使用xdmp:node-replace
进行修改:
doc('fubar')/test
这是一个典型的内存更新错误:
xdmp:node-replace(<x/>, <y/>)
对于 MarkLogic 6.0-1.1,错误代码为XDMP-UPCONSTNODES
。
【讨论】:
【参考方案2】:如果您想通过使用类似的函数调用来更新内存中的节点,就像它们在数据库中一样,有一个实用程序库可以做到这一点:
https://github.com/marklogic/commons/tree/master/memupdate
主库还随应用服务下的 MarkLogic Server 一起提供:
appservices/utils/in-mem-update.xqy
【讨论】:
有关该库的稍微优化的版本,请参阅:github.com/ryanjdew/XQuery-XML-Memory-Operations【参考方案3】:如果您使用in memory elements
导入以下模块
import module namespace mem = "http://xqdev.com/in-mem-update" at "/MarkLogic/appservices/utils/in-mem-update.xqy";
您可以使用mem:node-replace(<x/>, <y/>)
,而不是使用xdmp:node-replace
【讨论】:
以上是关于marklogic 中的内存元素是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Marklogic 数据库中存储名称/值对的最有效方法是啥
在单页应用程序中取消绑定事件侦听器和删除子元素的正确方法是啥?