eXist-db XML 文档中的命名空间 returns 空 API 调用

Namespaces in XML documents in eXist-db returns empty API calls

我有一个包含 XML 文档集合的 eXist-db。所有文档在顶部节点中都有一个名称空间,如下所示

<TEI xmlns="http://www.tei-c.org/ns/1.0" version="5.0" xml:id="No-MM_N0001-01">

当我尝试从 REST API 中查询文档以获取 //div/p 中的信息时,我得到一个空响应:

Request:
/data?_query=%2F%2Fdiv%2Fp

Response:
<exist:result xmlns:exist="http://exist.sourceforge.net/NS/exist" exist:hits="0" exist:start="1" exist:count="0" exist:compilation-time="3" exist:execution-time="3"/>

但是当我编辑其中一个文档并删除 xmlns 时,我从我编辑过的文档中获取数据。

Request:
/data?_query=%2F%2Fdiv%2Fp

Response:
<exist:result xmlns:exist="http://exist.sourceforge.net/NS/exist" exist:hits="2" exist:start="1" exist:count="2" exist:compilation-time="1" exist:execution-time="1">
<p>
Jeg fik ikke sove –
<del rend="overstrike">j</del>
så den
<lb/>
lille striben mellem ridauerne lysne
<lb/>
mere og mere –
<del rend="overwritten">v</del>
jeg vendte mig hed
<lb/>
i sengen – Det var
<del rend="overstrike">jo</del>
så tydeli –

所以,问题是,如何查询我集合中的 XML 个文档而不编辑所有文档中的名称空间?

你有很多选择。我脑子里只有几个:

  1. 您可以发送 XPath //*:div/*:p 这基本上使用通配符前缀,这意味着 "any namespace".

  2. 您可以将 XQuery HTTP Post HTTP Post 到 REST API,而不是将 HTTP GET 与 _query 一起使用,这将允许您声明命名空间绑定在您的 XQuery 中并使用适当的 XPath,例如

    declare namespace tei = "http://www.tei-c.org/ns/1.0";
    
    //tei:div/tei:p
    
  3. 类似于 (2),但您可以 pre-store 数据库中的 XQuery 作为文件,然后通过 REST API 上的 HTTP GET 调用该文件,这将导致执行 XQuery。

其他选项也是可能的...