Что такое элементы памяти в marklogic?

У меня есть пара документов, на которых xdmp:node-replace() над определенными элементами не работает. Есть еще несколько наборов документов, которые почти аналогичны тем, у которых есть проблема, но xdmp:node-replace работает с ними отлично. Перепробовал все варианты, которые могли пойти не так, но тщетно. Где-то читал, что эта функция xdmp:node-replace не работает с «элементами в памяти».

Итак, чтобы проверить, связана ли проблема с «в элементах памяти», я хочу знать, что именно.

Любой свет на нем был бы большим подспорьем


person NitZRobotKoder    schedule 27.11.2012    source источник


Ответы (3)


Все, что создается в рамках запроса, является элементом в памяти. Например, этот XQuery дает элемент в памяти:

<test/>

Некоторые вызовы функций также возвращают элементы в памяти: xdmp:unquote — очевидный пример. Любой узел, не полученный из текущей базы данных, будет рассматриваться как узел в памяти.

Этот запрос возвращает элемент базы данных (если он существует), который можно изменить с помощью xdmp:node-replace:

doc('fubar')/test

Это типичная ошибка обновления в памяти:

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

В MarkLogic 6.0-1.1 код ошибки XDMP-UPCONSTNODES.

person mblakele    schedule 27.11.2012

Если вы хотите обновить узлы в памяти, как если бы они находились в базе данных, используя аналогичные вызовы функций, для этого есть служебная библиотека:

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

Основная библиотека также поставляется с сервером MarkLogic в службах приложений:

appservices/utils/in-mem-update.xqy

person hunterhacker    schedule 27.11.2012
comment
Несколько более оптимизированную версию этой библиотеки см. по адресу: github.com/ryanjdew/XQuery- XML-операции с памятью - person grtjn; 22.05.2017

Если вы работаете с 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/>)

person Nikunj Vekariya    schedule 04.03.2015