Concate uma lista de elementos e pontuações sem usar uma função recursiva no XQuery com extensões de Tijah

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

  •  21-09-2019
  •  | 
  •  

Pergunta

Para um projeto de mecanismo de busca universitário, estou usando o MonetDB com extensões de Tijah. Eu tenho uma lista de nós, devolvido de uma string de pesquisa:

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

$nodes Agora contém uma lista de elementos, por exemplo:

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

Eu posso calcular e retornar as pontuações desta lista com a seguinte expressão da FLWOR:

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

No entanto, quero usar a lista de nós em uma nova consulta de pesquisa. Para fazer isso, tenho que gerar uma string desta lista com a seguinte formatação:

Design Patterns {0.2937} Antipatterns {0.43984}

Nesta formatação, as pontuações (retornadas por tijah:score e os nomes são combinados. Eu queria gerar essa string com uma função recursiva, mas o mecanismo de álgebra monetdb que preciso usar não suporta funções recursivas.

Posso gerar o mesmo resultado com uma expressão não recursiva (possivelmente FLWOR)?

Foi útil?

Solução

Isso faz o que você quer?

string-join(
  for $book in $nodes
  let $score := tijah:score($qid, $book)
  order by $score descending
  return string-join((data($book/title), ' {', $score, '}'), ''),
  ' ')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top