On 12/19/2022 10:43 PM, Leo Studer wrote:
Hello Cracks ;-)

In the code below I encounter the problem, that I have to define the
same xPath function variable $organizations twice and I do not
understand why.
Running the code with the newest versions of BaseX or with Saxon EE, I
get a runtime error when I leave the second definition of
$organizations out.

Any explanation? Thanks in advance.

Happy Holidays
Always, Leo



xquery version "3.1" encoding "UTF-8";
declare variable $doc := doc("factbook.xml");

*element**Memberships*{
*let**$membershipPotentcy*:=*function*(*$orgs*){*if*(/count/(*$orgs*)le0)
*then*'none'
*else**if*(/count/(*$orgs*) le5) *then*'few'
*else*'many'}
*let**$organizations*:=*function*(*$country*){*$doc*//*organization*[*members*/*/@country/*=*$country*/*/@id/*]/*/@abbrev/*//string/(.)}
*for**$countries**in**$doc*//*country*
*group by**$mp*:=*$membershipPotentcy*(*$organizations*(*$countries*))
*order by**$mp*
*return*
*element*{*$mp*} {
*for**$country**in**$countries*
*let**$organizations*:=*function*(*$country*){*$doc*//*organization*[*members*/*/@country/*=*$country*/*/@id/*]/*/@abbrev/*//string/(.)}
*order by**$country*/*/@name/*
*return*
<country>{*$country*/*/@name/*,*$organizations*(*$country*)}</country>
}}


Which runtime error do you get? I guess the group by binds your let
variable for each country in the group so perhaps

  head($organizations)($country)

would suffice without redefining the variable.

It would be an odd way to solve it, I would prefer to have a


declare function local:organizations($country)


declared before.

Reply via email to