XQuery:“ for”循环的重复次数超出预期

问题描述

我必须认识到我无法获得XQuery查询的逻辑... 所以这是我的问题。

我有这个XML文件

<doc id="book_1">
    <title>Title</title>
    <div type="chapter" id="ch_1">
        <head>Chapter 1</head>
        <p><pb n="1"/> text text text text</p>
        <p>text text text text</p>
        <p>text text KEYWORD text text</p>
        <p><pb n="2"/> text text text text</p>
        <p>text KEYWORD text text text</p>
        <p>text text text text</p>
        <p><pb n="3"/> text text text text</p>
        <p>text text text text</p>
    </div>
    <div type="chapter" id="ch_2">
        <head>Chapter 2</head>
        <p><pb n="4"/> text text text text</p>
        <p>text text text KEYWORD text</p>
        <p>text KEYWORD text text text</p>
        <p><pb n="5"/> text text text text</p>
        <p>text text text text</p>
        <p>text text text text</p>
        <p><pb n="6"/> text text text text</p>
        <p>text KEYWORD text text text</p>
    </div>
    etc. etc. etc.
</doc>

我正在通过此文件寻找“ KEYWORD”,我希望能够在夹心页面pb)上找到每个关键词。

我当前的XQuery:

xquery version "3.1";
import module namespace kwic="http://exist-db.org/xquery/kwic";
 
let $query := <query><bool><term>KEYWORD</term></bool></query>

for $hit in collection("my_collection/my_files")//doc[ft:query(.,$query)] 
let $hit_expanded := kwic:expand($hit)
let $book_id := data($hit_expanded//exist:match/ancestor::doc/@id)
let $page := data($hit_expanded//exist:match/preceding::pb[1]/@n)

return
    kwic:summarize($hit,<config width="40" link="book_id={$book_id}__page={$page}"/>)

按照我的逻辑:

i)每次找到“ 查询”时,“ for ”循环将调用返回”;

ii),对于每个找到的查询,我将查找书籍ID( $ book_id ),并查找紧随其后的唯一页数 $ page )。

这就是我得到的:(请注意@href中的页码

1
<p>
    <span class="prevIoUs">...text text text </span>
    <a class="hi" href="book_id=book_1__page=1 2 4 6">KEYWORD</a>
    <span class="following">text text text...</span>
</p>

2
<p>
    <span class="prevIoUs">...text text text</span>
    <a class="hi" href="book_id=book_1__page=1 2 4 6">KEYWORD</a>
    <span class="following"> text text text...</span>
</p>

3
<p>
    <span class="prevIoUs">... text text text </span>
    <a class="hi" href="book_id=book_1__page=1 2 4 6">KEYWORD</a>
    <span class="following"> text text text...</span>
</p>
    etc. etc. etc.

好的,我知道它会重复不同页面次数 n ”次(其中 n =在不同页面中找到的关键字数)。 但是为什么呢?我的意思是,i)我们必须处于“ for ”循环中,并且只能按时间获得一个 query ”结果; ii)我明确地表示仅接受一个 [1] ,紧接其前,用于 query ”的页面编号...

这是我想要的结果(请注意@href中的页码

1
<p>
    <span class="prevIoUs">...text text text </span>
    <a class="hi" href="book_id=book_1__page=1">KEYWORD</a>
    <span class="following">text text text...</span>
</p>

2
<p>
    <span class="prevIoUs">...text text text</span>
    <a class="hi" href="book_id=book_1__page=2">KEYWORD</a>
    <span class="following"> text text text...</span>
</p>

3
<p>
    <span class="prevIoUs">... text text text </span>
    <a class="hi" href="book_id=book_1__page=4">KEYWORD</a>
    <span class="following"> text text text...</span>
</p>
    etc. etc. etc.

所以,我错过了XQuery查询的逻辑?

编辑:如果我将页码查询直接放在返回上,它什么都不会改变,就像这样:

kwic:summarize($hit,<config width="40" link="book_id={$book_id}__page={data($hit_expanded//exist:match/preceding::pb[1]/@n)}"/>)

编辑2 :有我的collection.xconf文件

<collection xmlns="http://exist-db.org/collection-config/1.0">
    <index xmlns:kwic="http://exist-db.org/xquery/kwic"  xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <lucene>
            <text qname="doc"/>
            <text qname="div"/>
            <text qname="p"/>
          </lucene>
    </index>
</collection>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...