为什么我的查询报告 "Steps within a path expression must yield nodes"?

Why does my query report "Steps within a path expression must yield nodes"?

我对 XQuery 比较陌生,我使用的 XML 格式如下 (MODSXML):

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<modsCollection xmlns="http://www.loc.gov/mods/v3" 
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xsi:schemaLocation="http://www.loc.gov/mods/v3 
                 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd">

<mods ID="ISI:000330282600027" version="3.0">
<titleInfo>
<title>{Minimum Relative Entropy for Quantum Estimation: Feasibility and General
 Solution}</title>
</titleInfo>

我正在尝试检索 XML 文件中包含的所有文章标题。我使用的表达式如下:

for $x in collection("ExemploBibtex")/"quantuminformation.xml"/modsCollection/mods/titleInfo/title
return <title>$x/text()</title>

当我尝试在 Base 上 运行 这个表达式时,出现以下错误:

"[XPTY0019] Steps within a path expression must yield nodes; xs:string found."

谁能告诉我怎么了?我期待的结果是一个包含文档中所有标题的列表。

问题出在这里:

collection("ExemploBibtex")/"quantuminformation.xml"/modsCollection

这个 returns 一个字符串,其内容为 ExemploBibtex 集合中每个 file/root 节点的 quantuminformation.xml,然后尝试对这些字符串中的每一个执行轴步骤-- 这是不允许的。

您似乎想访问集合 ExemploBibtex 中的文档 quantuminformation.xml。要打开集合的特定文件,请改用以下语法:

collection("ExemploBibtex/quantuminformation.xml")/modsCollection

为了便于阅读并保持代码行简短,我删除了最后的轴步骤;只需再次添加它们,它们就可以了。

好的,问题已在 BaseX 邮件列表中解决:D

我需要声明命名空间。所以现在我正在使用:

declare namespace v3 ="http://www.loc.gov/mods/v3";
for $doc in collection('ExemploBibtex')
    where matches(document-uri($doc), 'quantuminformation.xml')
return $doc/v3:modsCollection/v3:mods/v3:titleInfo/v3:title/text()

而且有效。