Объединение списка элементов и оценок без использования рекурсивной функции в XQuery с расширениями Tijah
Вопрос
Для проекта университетской поисковой системы я использую MonetDB с расширениями Tijah.У меня есть список узлов, возвращенный из строки поиска:
let $qid := tijah:queryall-id($nexi)
let $nodes := tijah:nodes($qid)
$nodes
теперь содержит список элементов, например:
<book>Design Patterns</book>
<book>AntiPatterns</book>
Я могу вычислить и вернуть баллы для этого списка с помощью следующего выражения FLWOR:
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return <book score="{$score}">{$book/title}</book>
Однако я хочу использовать список узлов в новом поисковом запросе.Для этого мне нужно сгенерировать из этого списка строку со следующим форматированием:
Design Patterns {0.2937} Antipatterns {0.43984}
В этом формате оценки (возвращаемые tijah:score
и имена сочетаются.Я хотел сгенерировать эту строку с помощью рекурсивной функции, но механизм алгебры MonetDB, который мне нужно использовать, не поддерживает рекурсивные функции.
Могу ли я получить тот же результат с помощью нерекурсивного выражения (возможно, FLWOR)?
Решение
Это делает то, что вы хотите?
string-join(
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return string-join((data($book/title), ' {', $score, '}'), ''),
' ')