Java-клиент marklogic API расширяет - PullRequest
0 голосов
/ 18 февраля 2019

Я искал способ расширения узлов XML с помощью API Java marklogic, но не смог найти какую-либо информацию по этой теме из документации API.

Пример xquery, который расширяет узлы xinclude:

import module namespace xinc = "http://marklogic.com/xinclude" at "/MarkLogic/xinclude/xinclude.xqy";
xinc:node-expand(fn:doc("http://my.app.org/contact/234"))

возможно ли выполнить "раскрытие узла" при чтении документа из базы данных marklogic с использованием Java-клиента API XMLDocumentManager.read("http://my.app.org/contact/234")?

образец документа:

<contact>
    <photo>
        <xi:include href="http://my.app.org/files/123" xpointer="xpath(//file/content/text())" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
    </photo>
</contact>

Спасибо!

1 Ответ

0 голосов
/ 18 февраля 2019

Одним из способов может быть создание преобразования с именем expandXInclude.xqy и его использование во время чтения.

XMLDocumentManager.read("http://my.app.org/contact/234", new DOMHandle(), new ServerTransform("expandXInclude.xqy"));

Преобразования можно создавать и развертывать с помощью ml-gradle.Смотрите базовый пример здесь .Преобразование может быть таким простым:

xquery version "1.0-ml";

module namespace transform = "http://marklogic.com/rest-api/transform/sample";
import module namespace xinc = "http://marklogic.com/xinclude" at "/MarkLogic/xinclude/xinclude.xqy";

declare function transform(
        $context as map:map,
        $params as map:map,
        $content as document-node()
) as document-node()
{
    xinc:node-expand($content)
};
...