xQuery: Always the same error: Brackets are not closed

xQuery: Always the same error: Brackets are not closed

我想使用 xQuery 将此 XML-文档 (factbook.xml) 转换为 HTML。
但是代码(可以在下面的 XML 下找到)不起作用。

我总是得到同样的错误:(我使用 BaseX 9.4.2)

错误:
停在 C:/Program Files (x86)/BaseX/etc/file2,9/6:
[XPST0003] 期待“}”,找到“{”

我不明白为什么我总是得到同样的错误,所有括号都关闭了。

这是我的 XML-文件:(部分)

<mondial>
 <continent id="f0_119" name="Europe"/>
 <continent id="f0_123" name="Asia"/>
 ...
<country id="f0_136" name="Albania"
 capital="f0_1461" population="3249136" total_area="28750">
 <city id="f0_1461" country="f0_136">
 <name>Tirane</name>
 <population>192000</population>
 </city>
 ...
 <encompassed continent="f0_119" percentage="100"/>
 </country>
<country id="f0_149" name="Austria"
 capital="f0_1467" population="8023244" total_area="83850">
 <province id="f0_17448" name="Upper Austria"
 capital="f0_2267" population="1373000">
 <city id="f0_2267">
 <name>Linz</name>
 <population>203000</population>
 </city>
 </province>
 <province id="f0_17447" name="Vienna"
 capital="f0_1467" population="1583000">
 <city id="f0_1467">
 <name>Vienna</name>
 <population>1583000</population>
 </city>
 </province>
 ...
 <encompassed continent="f0_119" percentage="100"/>
 </country>
 ...
<country id="f0_670" name="Turkey"
 capital="f0_1797" population="62484480" total_area="780580">
 <province id="f0_19040" name="Ankara"
 capital="f0_1797" population="3236626">
 <city id="f0_1797">
 <name>Ankara</name>
 <population>2782200</population>
 </city>
 </province>
 ...
 <encompassed continent="f0_119" percentage="32"/>
 <encompassed continent="f0_123" percentage="68"/>
 </country>
</mondial>

这是我的 xQuery 代码:

let $db := /mondial
let $html := 
<html>
<body>
{
  for $cont in $db/continent
  order by $cont/@name
  return <h1>""{$cont/@name}</h1> 
     {
      for $coun in $db/country
      order by $coun/@name
      where $cont/@id = $count//encompassed/@continent
      return <p>
         <h2>{coun/@name}</h2>
         <b>Capital:</b>
         {
           for $cap in $coun//city 
           where $coun/@capital = $cap/@id
           return $cap/name
         }
         <b>Total Area "in" {$cont/@name}:</b>
         {
           for $area in $coun//encompassed[@continent = $cont/@id]/percentage
           return data($coun/@total_area) * ($area div 100)
         }    
      </p>
    }
} </body> </html>
return $html

在此先感谢您的帮助

Saxon 报告相同的错误:

Analyzing query from test.xq
Static error near {.../@name}</h1> { for} on line 8 at column 6 of file:/***/test.xq 
  XPST0003  expected "}", found "{"
Static error(s) in query

而且我不得不承认这不是很明显。但问题是紧跟在return <h1>""{$cont/@name}</h1> 后面的“{”。我认为(从缩进来看)你可能希望这个块成为 return 子句的一部分,在这种情况下它需要是

let $db := /mondial
let $html := 
<html>
<body>
{
  for $cont in $db/continent
  order by $cont/@name
  return (<h1>""{$cont/@name}</h1>, 
      for $coun in $db/country
      order by $coun/@name
      where $cont/@id = $count//encompassed/@continent
      return <p>
         <h2>{coun/@name}</h2>
         <b>Capital:</b>
         {
           for $cap in $coun//city 
           where $coun/@capital = $cap/@id
           return $cap/name
         }
         <b>Total Area "in" {$cont/@name}:</b>
         {
           for $area in $coun//encompassed[@continent = $cont/@id]/percentage
           return data($coun/@total_area) * ($area div 100)
         }    
      </p>
    )
} </body> </html>
return $html

然后我收到一个未解决的变量引用错误 $count,但我认为这是一个错字。

这里有两个常见错误:

  • 元素构造函数(如 <x/>)是有效的 XQuery 表达式,但元素构造函数序列(如 <x/><y/>)不是:它需要一个逗号 (<x/>,<y/> ).
  • 如果您在 return 之后放置一个包含逗号运算符的表达式,它需要用括号括起来。

另一个错误不太常见:构造 "{" expr "}" 不是有效表达式。大括号只能用在非常特定的地方,没有通用的 curly-brace-delimited-block 表达式可以用在任何地方。