В XQuery 3.1 (в eXistDB 4.4) у меня есть две функции, которые возвращают два набора узлов, которые описывают семейные отношения человека.Результаты двух функций могут перекрываться.
Первая функция person:person-relationship-as-object("#Guilhem_Faure_SML-AU")
возвращает:
<person relation="Peire_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Arnald_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Esteve_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Martin_de_Verazilh_SML-AU">
<span class="en">Aunt(s)/Uncle(s)</span>
<span class="fr">Tante(s)/Oncle(s)</span>
</person>
<person relation="Raimund_de_Verazilh_SML-AU">
<span class="en">Aunt(s)/Uncle(s)</span>
<span class="fr">Tante(s)/Oncle(s)</span>
</person>
Вторая функция person:person-relationship-as-subject("#Guilhem_Faure_SML-AU")
возвращает
<person relation="Arnald_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Peire_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Esteve_Faure_SML-AU">
<span class="en">Sibling(s)</span>
<span class="fr">Frère(s)/sœur(s)</span>
</person>
<person relation="Bernarda_Guilhem_Faure_SML-AU">
<span class="en">Spouse(s)</span>
<span class="fr">Époux/épouse(s)</span>
</person>
Теперь яхотите объединить два набора узлов в один и вернуть каждый отдельный узел только один раз.
Я попытался создать грубую SQL-подобную структуру, но потерпел неудачу:
let $x := person:person-relationship-as-object("#Guilhem_Faure_SML-AU")
| person:person-relationship-as-subject("#Guilhem_Faure_SML-AU")
for $y in $x
order by $y/@relation ascending
group by $y/@relation, $y/span[@class="en"], $y/span[@class="fr"]
return $y
Не думаю, что я действительно понимаю, почему group by
здесь не работает.Более того, если group by
не выполняет работу, как еще я могу подойти к тому, что (я думаю?) Должно быть простым упражнением в группировке / отличных результатах?