此 xquery 脚本中的语法错误是什么?

问题描述:

我是 XQuery 的初学者,正在尝试做一些简单的练习来学习它.但是我试图组合的这个最新查询拒绝运行,给我一个语法错误.

I'm a beginner to XQuery, trying to do some simple exercises to learn it. But this latest query I'm trying to put together refuses to run, giving me a syntax error.

这是我的 XQuery:

This is my XQuery:

<HTML>
<HEAD><TITLE>Alphabetical Cities Lists</TITLE></HEAD>
<BODY>
{
  for $indcode in (65 to 70)
  let $indlet := codepoints-to-string($indcode)
  return 
     <H1> {$indlet} LIST </H1>
     {
       for $cit in doc("mydoc.xml")/CITIES/ENTITY
       where starts-with($cit/NAME,$indlet)
       order by $cit/NAME
       return <LI>{$cit/NAME}</LI>
     }
     </OL>
} 
</BODY>
</HTML>

这是我的 XML 文件 mydoc.xml 的一个子集:

And this is a subset of my XML file mydoc.xml:

<CITIES>
  <ENTITY>
    <NAME>Hastings</NAME>
    <CITYCOD>230</CITYCOD>
    <CNTYCOD>01</CNTYCOD>
  </ENTITY>
  <ENTITY>
    <NAME>Tilden</NAME>
    <CITYCOD>487</CITYCOD>
    <CNTYCOD>02</CNTYCOD>
  </ENTITY>
  <ENTITY>
    <NAME>Alliance</NAME>
    <CITYCOD>008</CITYCOD>
    <CNTYCOD>07</CNTYCOD>
  </ENTITY>
  <ENTITY>
    <NAME>Hemingford</NAME>
    <CITYCOD>236</CITYCOD>
    <CNTYCOD>07</CNTYCOD>
  </ENTITY>
  <ENTITY>
    <NAME>Ainsworth</NAME>
    <CITYCOD>003</CITYCOD>
    <CNTYCOD>09</CNTYCOD>
  </ENTITY>
  <ENTITY>
    <NAME>Kearney</NAME>
    <CITYCOD>269</CITYCOD>
    <CNTYCOD>10</CNTYCOD>
  </ENTITY>
  <ENTITY>
    <NAME>Oakland</NAME>
    <CITYCOD>358</CITYCOD>
    <CNTYCOD>11</CNTYCOD>
  </ENTITY>
  <ENTITY>
    <NAME>Eagle</NAME>
    <CITYCOD>159</CITYCOD>
    <CNTYCOD>13</CNTYCOD>
  </ENTITY>
</CITIES>

我想要它做的是打印出一个简单的 HTML 文档,其中包含这些城市名称的几个列表,由它们开头的字母(A 到 F)分隔.

What I want it to do is print out a simple HTML document with several lists of these city names, broken out by the letter they start with (A to F).

但是当我尝试在 这个网站 上运行这个时,它给了我这个错误:

But when I try running this out on this site, it gives me this error:

查询:<>,第 9 行,第 6 列:[XPST0003] 语法错误,意外的'{'",需要'}'"

我不知道为什么这么说.我已经检查并检查过,但我的花括号似乎都正确匹配.任何人都可以看到问题是什么?谢谢.

I have no idea why it says that. I've checked and checked, but my curly braces all seem properly matched. Can anyone see what the problem is? Thanks.

这是一个常见的错误.

您需要在

    节点之间放置 , .

    You need to place a , between the <H1> and <OL> nodes.

    单个节点是一个 XQuery 表达式(就像直接元素构造函数中的多个节点一样).返回表达式必须是表达式.在这种情况下,您要返回两个节点.每个节点都是一个项目,因此为了返回它们,您需要按顺序连接两个节点.

    A single node is an XQuery expression (as are multiple nodes inside a direct element constructor). The return expression must be an expression. In this case you want to return two nodes. Each node is a single item and so in order to return them both you need to concatenate the two nodes in a sequence.

    查询将如下所示:

    <HTML>
    <HEAD><TITLE>Alphabetical Cities Lists</TITLE></HEAD>
    <BODY>
    {
      for $indcode in (65 to 70)
      let $indlet := codepoints-to-string($indcode)
      return 
         (<H1> {$indlet} LIST </H1>,
         <OL>
         {
           for $cit in doc("mydoc.xml")/CITIES/ENTITY
           where starts-with($cit/NAME,$indlet)
           order by $cit/NAME
           return <LI>{$cit/NAME}</LI>
         }
         </OL>)
    } 
    </BODY>
    </HTML>