2009-12-23 3 views
0

Pour un projet de moteur de recherche universitaire, j'utilise MonetDB avec les extensions Tijah. J'ai une liste de nœuds, retour d'une chaîne de recherche:Afficher une liste d'éléments et de scores sans utiliser de fonction récursive dans XQuery avec les extensions Tijah

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> 

Toutefois, je souhaite utiliser la liste des nœuds 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 des 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?

Répondre

0

non récursif (peut-être FLWOR) 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, '}'), ''), 
    ' ') 
Questions connexes