Xml 通过XQuery update insert添加的新记录不会被eXist db索引(';查看';),直到我在oXygen上手动编辑该文件

Xml 通过XQuery update insert添加的新记录不会被eXist db索引(';查看';),直到我在oXygen上手动编辑该文件,xml,xpath,xquery,exist-db,Xml,Xpath,Xquery,Exist Db,我正在CentOS 7.4.1708(核心)、Java(TM)SE运行时环境(build 1.8.0_152-b16)上运行eXist db 3.6.1。我希望能够在persons.xml中的最后一条记录之后添加一条新记录,其结构如下: <person xml:id="pe0472"> [...] </person> <person xml:id="pe0473"> [...] </person> 表单的submit发送到add.html,add

我正在CentOS 7.4.1708(核心)、Java(TM)SE运行时环境(build 1.8.0_152-b16)上运行eXist db 3.6.1。我希望能够在persons.xml中的最后一条记录之后添加一条新记录,其结构如下:

<person xml:id="pe0472"> [...] </person>
<person xml:id="pe0473"> [...] </person>
表单的submit发送到add.html,add.html通过
数据模板
引用app:addpers函数:

declare function app:addpers($node as node(), $model as map(*)) {

let $peid := request:get-parameter('peid', '')
let $surname := request:get-parameter('surname', '')
[...]
let $on-disk := doc(concat($config:app-root, '/input/persons.xml'))

let $insert := update insert

<person xml:id="{$peid}" >
<persName xmlns="http://www.tei-c.org/ns/1.0">
<surname>{$surname}</surname>
[...]
</persName>
</person> 

following $on-disk//tei:person[@xml:id][last()]

return

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Added</title>
    </head>
    <body>
         <div>
            <h3>Success!</h3>
        </div>
    </body>
</html>

};
(在我清除缓存之前,编辑的记录不会显示)这次没有帮助

为了在我的前端(应用程序:listPers)上显示新记录,我对oXygen中的主文件做了一些愚蠢的事情(比如,在任何地方添加和删除一个空间,然后保存),新记录将神奇地出现在我的浏览器页面上。这是预期的行为吗?我觉得这很令人费解,我想不出还有什么别的办法可以解决这个问题


我已经在Firefox 58.0.1和Safari 11.0.3上对其进行了测试。

目前我的解决方法是添加一个

    <script type="text/javascript">
        window.addEventListener('load', function (e) {
            window.applicationCache.addEventListener('updateready', function (e) {
                window.location.reload(true);
                }, false);
            console.log("loaded");
        }, false);
    </script>

window.addEventListener('load',函数(e){
window.applicationCache.addEventListener('updateready',函数(e){
window.location.reload(true);
},假);
控制台日志(“已加载”);
},假);

到受影响页面的页眉,这将强制无缓存重新加载页面,而无需手动执行。

更新:可能不仅仅是xml:id。我注意到,在oXygen(甚至以前的记录!)中,只要删除和重写.xml文件中任何一行的任何字段的一个字母就足够了,最新的记录就会出现。在文件被编辑/保存到oXygen中之前,eXist db几乎会忽略对文件的更新。对我来说,这听起来像是一种奇怪的行为,绝对不是人们所期望的。是否有任何方法可以让eXist正确地“查看”添加的记录,而无需打开氧气并在其中编辑/保存文件?此外,我需要刷新浏览器的缓存,以便查看使用
更新值更新的记录。你认为这与我的问题有关吗?每次我通过浏览器通过html表单编辑内容后,为了查看我记录的更新版本,都必须点击shift-cmd-r,这很不方便。不幸的是,您的问题中没有足够的细节来回答。请提供一个最小的、独立的、可重复的测试,并指定您现有的版本号。还请注意exist.log中与操作相对应的任何错误。@joewiz,我还删除了我创建并以管理员身份验证的自定义用户(最后,我希望为每个编辑合作者提供他们的用户/密码)。所以,即使作为管理员做任何事情,我也会遇到同样的问题,因此,我想,这不是一个与身份验证相关的问题。我不知道还能怎么想!我还为doc(myfile)//tei:listPerson/tei:person
中的$person重新绘制了
,为xmldb:document(myfile)//tei:listPerson/tei:person
中的$person重新绘制了
——同样的问题。
declare function app:listPers($node as node(), $model as map(*)) {

for $person in doc(concat($config:app-root, '/input/persons.xml'))//tei:listPerson/tei:person
    return

    <tr>
        <td>{$person/tei:persName/tei:forename}</a></td>
    </tr>    
};
let $update := update value $on-disk//tei:person[@xml:id eq $peid]/tei:persName/tei:surname with $surname
    <script type="text/javascript">
        window.addEventListener('load', function (e) {
            window.applicationCache.addEventListener('updateready', function (e) {
                window.location.reload(true);
                }, false);
            console.log("loaded");
        }, false);
    </script>