Создайте список элементов и результатов без использования рекурсивной функции в XQuery с расширениями Tijah - PullRequest
0 голосов
/ 23 декабря 2009

Для проекта поисковой системы университета я использую 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) выражением?

1 Ответ

0 голосов
/ 23 декабря 2009

Делает ли это то, что вы хотите?

string-join(
  for $book in $nodes
  let $score := tijah:score($qid, $book)
  order by $score descending
  return string-join((data($book/title), ' {', $score, '}'), ''),
  ' ')
...