Concat eine Liste von Elementen und Partituren ohne eine rekursive Funktion in XQuery mit Tijah Erweiterungen
Frage
Für eine Universität Suchmaschine Projekt, ich bin mit MonetDB mit Tijah Erweiterungen. Ich habe eine Liste von Knoten erhalten, von einer Suchzeichenfolge zurückgegeben:
let $qid := tijah:queryall-id($nexi)
let $nodes := tijah:nodes($qid)
$nodes
enthält nun eine Liste von Elementen, z.B .:
<book>Design Patterns</book>
<book>AntiPatterns</book>
Ich kann die Noten für diese Liste mit dem folgenden FLWOR Ausdruck berechnen und zurückgeben:
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return <book score="{$score}">{$book/title}</book>
Allerdings mag ich die Liste der Knoten in einer neuen Suchabfrage verwenden. Um dies zu tun, muß ich mit der folgenden Formatierung eine Zeichenkette aus dieser Liste erzeugen:
Design Patterns {0.2937} Antipatterns {0.43984}
In dieser die Partituren Formatierung (zurückgegeben durch tijah:score
und die Namen kombiniert werden. Ich wollte diese Zeichenfolge mit einer rekursiven Funktion erzeugen, aber der MonetDB Algebra Motor I verwenden muß keine Unterstützung für rekursive Funktionen.
Kann ich erzeugen das gleiche Ergebnis mit einem nicht-rekursive (möglicherweise FLWOR) Ausdruck?
Lösung
Ist das tun, was Sie wollen?
string-join(
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return string-join((data($book/title), ' {', $score, '}'), ''),
' ')