Как в XQuery получить список функций в импортированном модуле?

#xquery #marklogic

#xquery #marklogic

Вопрос:

У меня есть список функций в модуле, которые я хочу вызывать последовательно. В это время я должен также вести список имен функций, затем использовать fn:function-lookup , чтобы убедиться, что он существует, а затем xdmp:apply и xdmp:function для вызова функции.

Есть ли какой-либо способ получить последовательность функций, перечисленных в импортированном модуле?

Ответ №1:

Вы могли бы использовать xdmp:functions() для возврата списка всех функций в области видимости, а затем фильтровать, чтобы выбрать методы, привязанные к пространству имен для импортированного модуля:

 import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy";
xdmp:functions() ! fn:function-name(.)[fn:namespace-uri-from-QName(.) = 'http://marklogic.com/xdmp/admin'] 
  

Комментарии:

1. Оказывается, это сработало хорошо, затем я узнал, что функция, использующая это, вызывается внутри spawn-функции. есть ли способ добавить «модуль импорта» в xdmp: spawn-function? Без этого xdmp: функции могут находить только встроенные функции.

2. Разработано решение — оберните функцию внутри spawn-функции в xdmp: eval. Это позволяет нам повторно импортировать библиотеку и переопределить область для xdmp: функции.

Ответ №2:

Никогда не пробовал сам, но я думаю, вы могли бы разобраться с этим xdmp:functions() и отфильтровать полный список xdmp:function-module() . Разум подумал, что вполне может быть, что порядок функций не поддерживается, если это важно.

Мне также интересно, почему вы проходите через такие трудности, чтобы сделать это. Больше похоже на то, что вы пытаетесь запустить какие-то тесты или что-то в этом роде.

HTH!

Комментарии:

1. Я использую функции как упорядоченный список узлов в записи. Вероятно, это можно было бы сделать несколькими другими способами (например, xslt), но именно здесь я нахожусь в этой итерации кода.

2. В этом случае убедитесь, что xdmp:functions() возвращает их в правильном порядке, или найдите способ обеспечить это. Порядок, в котором они возвращаются, не определен и может быть нестабильным.