تسلسل قائمة بالعناصر والدرجات دون استخدام وظيفة عودية في Xquery مع امتدادات Tijah
سؤال
لمشروع محرك البحث بالجامعة ، أستخدم MonetDB مع امتدادات Tijah. لدي قائمة بالعقد ، تم إرجاعها من سلسلة بحث:
let $qid := tijah:queryall-id($nexi)
let $nodes := tijah:nodes($qid)
$nodes
يحتوي الآن على قائمة بالعناصر ، على سبيل المثال:
<book>Design Patterns</book>
<book>AntiPatterns</book>
يمكنني حساب وإعادة درجات هذه القائمة مع تعبير Flwor التالي:
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return <book score="{$score}">{$book/title}</book>
ومع ذلك ، أريد استخدام قائمة العقد في استعلام بحث جديد. للقيام بذلك ، لا بد لي من إنشاء سلسلة من هذه القائمة مع التنسيق التالي:
Design Patterns {0.2937} Antipatterns {0.43984}
في هذا التنسيق الدرجات (عادت بواسطة tijah:score
ويتم الجمع بين الأسماء. كنت أرغب في إنشاء هذه السلسلة بوظيفة متكررة ، لكن محرك الجبر MonetDB الذي أحتاج إلى استخدامه لا يدعم الوظائف العودية.
هل يمكنني إنشاء نفس النتيجة بتعبير غير مستقر (ربما flwor)؟
المحلول
هل هذا يفعل ما تريد؟
string-join(
for $book in $nodes
let $score := tijah:score($qid, $book)
order by $score descending
return string-join((data($book/title), ' {', $score, '}'), ''),
' ')
لا تنتمي إلى StackOverflow