Concat un elenco di elementi e punteggi senza l'utilizzo di una funzione ricorsiva in XQuery con estensioni Tijah
Domanda
Per un progetto di motore di ricerca universitaria, sto usando MonetDB con le estensioni Tijah. Ho una lista di nodi, tornato da una stringa di ricerca:
let $qid := tijah:queryall-id($nexi)
let $nodes := tijah:nodes($qid)
$nodes
ora contiene un elenco di elementi, ad es .:
<book>Design Patterns</book>
<book>AntiPatterns</book>
posso calcolare e restituire le colonne sonore di questa lista con la seguente espressione FLWOR:
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return <book score="{$score}">{$book/title}</book>
Tuttavia, voglio utilizzare l'elenco di nodi in una nuova query di ricerca. Per fare questo, devo generare una stringa da questa lista con la seguente formattazione:
Design Patterns {0.2937} Antipatterns {0.43984}
In questo formattazione dei punteggi (restituiti dal tijah:score
ei nomi sono combinati. Volevo a generare questa stringa con una funzione ricorsiva, ma il motore MonetDB Algebra ho bisogno di usare non supporta funzioni ricorsive.
Posso generare lo stesso risultato con un'espressione non ricorsiva (possibilmente FLWOR)?
Soluzione
Questo fare ciò che si vuole?
string-join(
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return string-join((data($book/title), ' {', $score, '}'), ''),
' ')