Объединение списка элементов и оценок без использования рекурсивной функции в XQuery с расширениями Tijah

StackOverflow https://stackoverflow.com/questions/1951894

  •  21-09-2019
  •  | 
  •  

Вопрос

Для проекта университетской поисковой системы я использую 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, '}'), ''),
  ' ')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top