Насколько я понимаю, для изменения загруженных документов можно использовать как преобразование MLCP, так и триггер. Разница в том, что преобразование содержимого работает с объектом документа в памяти во время приема, тогда как триггер может запускаться после создания документа.
Мне кажется, что нет причин, по которым я не могу использовать их оба вместе. Мои варианты использования заключаются в том, что мне нужно обновить некоторые узлы документов после их загрузки в базу данных. Причина, по которой я использую триггер, заключается в том, что выполнение той же логики в преобразовании MLCP с использованием модуля in-mem-update
всегда вызывало сбой приема, предположительно из-за большого размера файла и большого количества узлов, которые я пытался обновить.
2018-08-22 23:02:24 ОШИБКА TransformWriter: 546 - Исключение: ошибка анализа заголовков HTTP: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через определенный период времени, или установленное соединение не удалось, потому что подключенный хост не смог реагировать
До сих пор мне не удавалось комбинировать преобразования содержимого и триггеры. Когда я включил преобразование во время приема MLCP, триггер не сработал. Когда я отключил трансформацию, триггер сработал без проблем.
Есть ли какая-то внутренняя причина, по которой я не могу использовать их оба вместе? Или это проблема, связанная с моей конфигурацией? Спасибо!
Изменить:
Я хотел бы предоставить некоторый контекст для разъяснения и сообщить о результатах на основе предложений @ ElijahBernstein-Cooper, @MadsHansen и @grtjn (спасибо!). Я использую MarkLogic Data Hub Framework для приема файлов PDF (некоторые довольно большие) в виде двоичных файлов и извлечения текста в формате XML. Я по сути следовал этому примеру, за исключением того, что использую xdmp:pdf-convert
вместо xdmp:document-filter
: https://github.com/marklogic/marklogic-data-hub/blob/master/examples/load-binaries/plugins/entities./Guides/input/LoadAsXml/content/content.xqy
Хотя xdmp:pdf-convert
, кажется, сохраняет структуру PDF лучше, чем xdmp:document-filter
, он также включает некоторые узлы стилизации (<link>
и <style>
) и атрибуты (class
и style
), которые мне не нужны. Пытаясь удалить их, я исследовал два разных подхода:
- Первый подход заключается в использовании модуля
in-mem-update
для удаления нежелательных узлов из представления документа в памяти в рамках вышеупомянутого сценарияcontent.xqy
как части потока преобразования содержимого. Проблема в том, что процесс может быть довольно медленным, и, как указал @grtjn, я должен ограничить распараллеливание, чтобы избежать тайм-аута. - Второй подход заключается в использовании функции триггера после фиксации для изменения документов с помощью
xdmp:node-delete
после того, как они были загружены в базу данных. Однако триггер не сработает, если установлено условие запускаdocument-content("create")
. Он срабатывает, если я изменяю условие наdocument-content("modify")
, но по какой-то причине я не могу получить доступ к документу, используяfn:document($trgr:uri)
, похожий на этот вопрос SO (MarkLogic 9 sjs триггер не может получить доступ к данным документа post-commit ()).
-transaction_size 1 -batch_size 1 -thread_count 1
- person grtjn   schedule 23.08.2018document-content("create")
наdocument-content("modify")
, триггер сработал во время приема. Однако я не понимаю, почему это так. Теперь моя проблема в том, что я не могу получить документ с помощьюfn:document($trgr:uri)
, что может быть связано с этим вопросом: stackoverflow.com / q / 47856917/3546482 - person Fan Li   schedule 24.08.2018