تسلسل قائمة بالعناصر والدرجات دون استخدام وظيفة عودية في Xquery مع امتدادات Tijah

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

  •  21-09-2019
  •  | 
  •  

سؤال

لمشروع محرك البحث بالجامعة ، أستخدم 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, '}'), ''),
  ' ')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top