Mira he estado mirándote esto, es muy interesante y sé que respondo un poco tarde, pero quiero responder a ésta pregunta porque hay personas que le servirán este ejercicio tanto como me ha servido a mi, la solución es la siguiente:
for $d in( doc('foro.xml') /restaurant/reserves/reserva)
return
concat($d/@codi, " tiene ", max(sum(count($d[@codi]/comensal[@cafe='si']))), " cafes ")
Obviamente da algo así:
001 tiene 1 cafes
002 tiene 3 cafes
003 tiene 0 cafes
004 tiene 3 cafes
Porque tiene el máximo 2 valores repetidos (3 cafés)