在marklogic中使用xquery返回搜索结果

在marklogic中使用xquery返回搜索结果,xquery,marklogic,Xquery,Marklogic,我试图在MarkLogic中使用XQuery搜索一个术语。当我运行下面的代码时,我什么也得不到。有人知道问题出在哪里吗?我不使用名称空间,但我认为这不是问题所在 注意:当我在MarkLogic的查询控制台中运行此查询时,我收到以下消息: your query returned an empty sequence 代码: { 对于/article/front/article-meta/title-group/article-title[cts:contains(,xdmp:get-request

我试图在MarkLogic中使用XQuery搜索一个术语。当我运行下面的代码时,我什么也得不到。有人知道问题出在哪里吗?我不使用名称空间,但我认为这不是问题所在

注意:当我在MarkLogic的查询控制台中运行此查询时,我收到以下消息:

your query returned an empty sequence
代码:

{
对于/article/front/article-meta/title-group/article-title[cts:contains(,xdmp:get-request-field(“term”)]中的$article-title
让$article title:=fn:tokenize(fn:string($article title/article/front/article meta/title group/article title),“”)[1到100]
let$journal title:=$article title/article/front/journal meta/journal title group/journal title/text()
let$contrib:=$article title/article/front/article meta/contrib group/contrib/text()
let$year:=$article title/article/front/article meta/pub date/text()
让$sec title:=$article title/article/body/section/sec title/text()
返回(

, {$article title} {$journal title} {$contrib} {$year} {$sec title} , {$article title}。。。 ) }
XML示例:

<?xml version="1.0" encoding="UTF-8"?>
<article article-type="article" xml:lang="en" structure-type="article" dtd-   version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink"  xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title xml:lang="en">Psychology of Addictive Behaviors</journal-title>
      </journal-title-group>
      <issn pub-type="print">0893-164X</issn>
      <issn pub-type="online">1939-1501</issn>
      <publisher>
        <publisher-name>American Psychological Association</publisher-name>
      </publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="apaID">adb_21_4_462</article-id>
      <article-id pub-id-type="doi">10.1037/0893-164X.21.4.462</article-id>
      <article-id pub-id-type="pi-uid">2007-18113-004</article-id>
      <article-categories>
        <subj-group subj-group-type="toc-heading">
          <subject>Articles</subject>
        </subj-group>
      </article-categories>
      <title-group>
        <article-title>Social Dominance Mediates the Association of  Testosterone and Neurobehavioral Disinhibition With Risk for Substance Use Disorder</article-title>
      </title-group>
      <contrib-group content-type="journal-editors">
        <contrib contrib-type="editor" corresp="no" xlink:type="simple">
          <string-name>
            <given-names>Howard J.</given-names> <surname>Shaffer</surname>
          </string-name> 
          <role>Editor</role>
        </contrib>
      </contrib-group>
      <contrib-group content-type="primary-authors">
        <contrib contrib-type="author" corresp="yes" rid="aff1 corr1" xlink:type="simple">
          <string-name>
            <given-names>Ralph E.</given-names> <surname>Tarter</surname>
          </string-name>
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1" xlink:type="simple">
          <string-name>
            <given-names>Levent</given-names> <surname>Kirisci</surname>
          </string-name>
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1" xlink:type="simple">
          <string-name>
            <given-names>Galina P.</given-names> <surname>Kirillova</surname>
          </string-name>
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1" xlink:type="simple">
          <string-name>
            <given-names>Judy</given-names> <surname>Gavaler</surname>
          </string-name>
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff2" xlink:type="simple">
          <string-name>
            <given-names>Peter</given-names> <surname>Giancola</surname>
          </string-name>
        </contrib>
      </contrib-group>
    </article-meta>
  </front>
</article>

成瘾行为心理学
0893-164X
1939-1501
美国心理协会
亚洲开发银行21号4号462
10.1037/0893-164X.21.4.462
2007-18113-004
文章
社会支配调节睾酮和神经行为去抑制与物质使用障碍风险的关联
霍华德·J·沙弗
编辑
拉尔夫·E·塔特
左基里希
加利纳P.基里洛娃
朱迪·加瓦勒
彼得·吉安科拉

首先,XPath中有一些错误。您选择了一个
文章标题
元素,但在下面的XPath中将其视为
文章
元素。接下来,您将
$article title
变量(这在大多数XQuery处理器中实际上是不可能的-MarkLogic是一个例外)重新分配给一个字符串,然后在该字符串上执行XPath,就好像它是一个节点一样。然后,对于剩余的变量分配,您都在字符串上操作,就像它是一个节点一样,并将该变量视为
文章
,而它本应是
文章标题

我通过将
for
变量赋值更改为
article
并将XPath的其余部分移动到谓词中来更新查询。然后更新其他变量以从
$article
变量查询,而不是从
$article title
变量查询,后者是一个字符串

for $article in /article[front/article-meta/title-group/article-title/cts:contains(., xdmp:get-request-field("term"))]
let $article-title := fn:tokenize(fn:string($article/front/article-meta/title-group/article-title), " ")[1 to 100]
let $journal-title := $article/front/journal-meta/journal-title-group/journal-title/text()
let $contrib := $article/front/article-meta/contrib-group/contrib/text()
let $year:= $article/front/article-meta/pub-date/text()
let $sec-title:= $article/body/section/sec-title/text()

如果您继续遇到问题,我会检查其他几种可能性:1)确保对
xdmp:get-request-field()
的调用实际返回了您期望的值;2) 数据库索引设置会影响
cts:contains
的行为,因此如果要选择的路径中的任何元素被排除在索引之外,则
cts:contains
将视其为不存在。

首先,XPath中存在一些错误。您选择了一个
文章标题
元素,但在下面的XPath中将其视为
文章
元素。接下来,您将
$article title
变量(这在大多数XQuery处理器中实际上是不可能的-MarkLogic是一个例外)重新分配给一个字符串,然后在该字符串上执行XPath,就好像它是一个节点一样。然后,对于剩余的变量分配,您都在字符串上操作,就像它是一个节点一样,并将该变量视为
文章
,而它本应是
文章标题

我通过将
for
变量赋值更改为
article
并将XPath的其余部分移动到谓词中来更新查询。然后更新其他变量以从
$article
变量查询,而不是从
$article title
变量查询,后者是一个字符串

for $article in /article[front/article-meta/title-group/article-title/cts:contains(., xdmp:get-request-field("term"))]
let $article-title := fn:tokenize(fn:string($article/front/article-meta/title-group/article-title), " ")[1 to 100]
let $journal-title := $article/front/journal-meta/journal-title-group/journal-title/text()
let $contrib := $article/front/article-meta/contrib-group/contrib/text()
let $year:= $article/front/article-meta/pub-date/text()
let $sec-title:= $article/body/section/sec-title/text()

如果您继续遇到问题,我会检查其他几种可能性:1)确保对
xdmp:get-request-field()
的调用实际返回了您期望的值;2) 数据库索引设置会影响
cts:contains
的行为,因此,如果您选择的路径中的任何元素被排除在索引之外,那么
cts:contains
会将其视为不存在。

我认为这里的元问题是:在运行查询时如何调试复杂的查询(一个空序列)?对我们来说,为您调试查询不是很有用,更有用的是您应该知道如何自己调试它

如果源具有架构,则将其作为架构感知查询运行可能非常有用,即使您只是为了调试目的临时执行此操作。架构感知查询处理器将根据架构检查路径表达式,并告诉您是否尝试选择根据架构永远无法执行的元素或路径是的

在这之后,它是一个逻辑推导和/或实验的过程,以提取查询的本质。因为您只有一个“for”子句,并且return子句总是产生一些东西,得到空序列作为结果的唯一方法是如果for子句不选择任何内容,那么这就导致了表达式的问题

/article/front/article-meta/title-group/article-title
  [cts:contains(., xdmp:get-request-field("term"))]
在这个阶段,使用像oXygen这样的IDE确实有帮助:将源文档放入编辑器,打开XPath计算器,然后输入此路径。您需要修改它,因为它使用MarkLogic扩展函数。但是您可以从elimina开始