0

我在 MarkLogic XQuery 文件中有以下查询,我看到返回以下错误消息

XDMP-ENTITYREF: (err:XPST0003) Invalid entity reference " " . See the MarkLogic server error log for further detail.

以下是我在 XQuery 文件中使用的代码。

xquery version "1.0-ml";

declare variable $query := 

  cts:or-query
  ((
    cts:element-word-query(xs:QName("lines"),"l&l"),
    cts:element-word-query(xs:QName("lines"),"pool & cue"),
    cts:element-word-query(xs:QName("lines"),"look")
  ));

declare function local:do-query(){
  element xml {
    for $i in cts:uris( (), (), $query)
    let $item := doc($i)

    return
      element item {
        element title { $item/title/string() }
    }
  }
};

local:do-query()

显然,我正在寻找的 2x 标签是l&land pool & cue。我还在发布的另一个问题中查看了修复完整建议,但无法弄清楚它如何适合此查询。如果我删除了带有特殊字符的那些,它会按预期工作。

有任何想法吗?

4

1 回答 1

2

根据问题评论中的附加信息,这不是代码执行的问题,而是代码部署的问题。

如果您使用 QConsole 或其他一些评估 XQuery 代码的方式插入代码,则经常会发生这种情况。get被&解释,并翻译成&它所代表的字符。如果您随后将它写入到某个 Modules 数据库的 .xqy 文件中,它不会&再次转义回,因为 XQuery 文件在 MarkLogic 中以纯文本形式存储,并且&不会以纯文本形式转义。

部署代码的更好方法是从磁盘上传或插入。这样&, XML 中的>、 和等字符{就不会被解释,而是按原样保留和插入。有诸如ml-gradleRoxy之类的工具使部署 MarkLogic 代码变得非常容易。考虑使用这些。或者,您也可以考虑针对Management REST api使用 Curl 。

如果您毕竟想使用 QConsole,请将字符转义&两次。例如&变成&amp;amp;<变成&amp;lt;

于 2017-04-10T17:38:04.757 回答