Concat un elenco di elementi e punteggi senza l'utilizzo di una funzione ricorsiva in XQuery con estensioni Tijah

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

  •  21-09-2019
  •  | 
  •  

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)?

È stato utile?

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, '}'), ''),
  ' ')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top