Concat une liste des éléments et des scores sans utiliser une fonction récursive en XQuery avec des extensions Tijah

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

  •  21-09-2019
  •  | 
  •  

Question

Pour un projet de recherche universitaire du moteur, je me sers MonetDB avec des extensions Tijah. J'ai une liste de nœuds, retour d'une chaîne de recherche:

let $qid := tijah:queryall-id($nexi)
let $nodes := tijah:nodes($qid)

$nodes contient maintenant une liste d'éléments, par exemple .:

<book>Design Patterns</book>
<book>AntiPatterns</book>

Je peux calculer et retourner les scores de cette liste avec l'expression FLWOR suivante:

for $book in $nodes
  let $score := tijah:score($qid, $book)
  order by $score descending
  return <book score="{$score}">{$book/title}</book>

Cependant, je veux utiliser la liste des noeuds dans une nouvelle requête de recherche. Pour ce faire, je dois générer une chaîne de cette liste avec la mise en forme suivante:

Design Patterns {0.2937} Antipatterns {0.43984}

Dans cette mise en forme (les scores retournés par tijah:score et les noms sont combinés. Je voulais générer cette chaîne avec une fonction récursive, mais le moteur Algèbre MonetDB je dois utiliser ne prend pas en charge les fonctions récursives.

Puis-je générer le même résultat avec une expression non récurrente (peut-être FLWOR)?

Était-ce utile?

La solution

Est-ce que faire ce que vous voulez?

string-join(
  for $book in $nodes
  let $score := tijah:score($qid, $book)
  order by $score descending
  return string-join((data($book/title), ' {', $score, '}'), ''),
  ' ')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top