Concate uma lista de elementos e pontuações sem usar uma função recursiva no XQuery com extensões de Tijah
Pergunta
Para um projeto de mecanismo de busca universitário, estou usando o MonetDB com extensões de Tijah. Eu tenho uma lista de nós, devolvido de uma string de pesquisa:
let $qid := tijah:queryall-id($nexi)
let $nodes := tijah:nodes($qid)
$nodes
Agora contém uma lista de elementos, por exemplo:
<book>Design Patterns</book>
<book>AntiPatterns</book>
Eu posso calcular e retornar as pontuações desta lista com a seguinte expressão da FLWOR:
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return <book score="{$score}">{$book/title}</book>
No entanto, quero usar a lista de nós em uma nova consulta de pesquisa. Para fazer isso, tenho que gerar uma string desta lista com a seguinte formatação:
Design Patterns {0.2937} Antipatterns {0.43984}
Nesta formatação, as pontuações (retornadas por tijah:score
e os nomes são combinados. Eu queria gerar essa string com uma função recursiva, mas o mecanismo de álgebra monetdb que preciso usar não suporta funções recursivas.
Posso gerar o mesmo resultado com uma expressão não recursiva (possivelmente FLWOR)?
Solução
Isso faz o que você quer?
string-join(
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return string-join((data($book/title), ' {', $score, '}'), ''),
' ')