问题标签 [xquery-3.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3053 浏览

xml - 如何在 xquery 的“let”语句中使用“if 语句”

我希望执行以下操作:

但不幸的是,上述方法不起作用。

let 语句的 if 语句我该怎么做。

0 投票
2 回答
4346 浏览

xpath - 如何在 XQuery 中创建没有 else 的 if 语句?

我希望在 XQuery中创建一个if没有部分的语句。else

例如:

我该怎么做呢?

我也试过这个:

虽然可以编译,但在运行时不起作用!

0 投票
1 回答
943 浏览

xml - 如何在 XQuery 中进行高效的外连接或左连接?

我有以下数据:

这是要加入到:

我希望在第一个表上对第二个表进行左连接,以获得以下输出:

我有以下代码来执行此操作:

请注意,代码可以正常工作并且可以完成工作。但是,我发现在执行大型输入的代码时(750 个科目,每个科目有 120 门课程,以及 100 个没有任何课程的科目和 100 个没有任何科目的课程),脚本运行速度极慢!

我可以做些什么来让我的脚本更快?有没有更好的方法来做到这一点?时间复杂度是多少?

更新 2

事实证明我严重错误地识别了这个问题。问题实际上与代码的第 2 部分几乎没有关系,而与代码的第 1 部分有关。

我所做的是:

当我应该做的是:

这将代码的时间从 30,000 毫秒减少到了 4,000 毫秒左右。

欢迎进一步的性能改进。

0 投票
1 回答
35 浏览

xml - 在 XQuery 中查找存在于一个文档中但不存在于另一个文档中的元素的有效方法

我有以下数据:

和:

我希望能够使用and获取subject元素,因为它们不会出现在第二个 XML 文档中。5001000

我如何以最有效的方式做到这一点(记住我有大约 750 个科目,每个科目有 120 门课程)?

0 投票
1 回答
40 浏览

xpath - 在 Xquery 中有效地对两个文档(内部联接)中存在的元素进行分组

我有以下数据:

和:

我希望有效地从共享相同 ID 的两个文档中获取元素。

我想得到这样的结果:

到目前为止,我有 2 个解决方案:

反之亦然:

有没有更有效的方法来做到这一点?也许利用多个群体?

更新 目前我的代码的一个主要问题是它的性能高度依赖于哪个表更大。例如,第一个解决方案在第二个表更大的情况下更好,反之亦然。

0 投票
2 回答
3030 浏览

xpath - 如何在 XQuery 中迭代地图?

假设我在 XQuery 中定义了这样的地图:

如何在$x不知道密钥的情况下进行迭代?

例如:

0 投票
1 回答
102 浏览

xpath - 如何使用“!” 用于 XQuery 中复杂的“for”语句?

我知道如何使用新的“!” 在简单的 for 循环中,如下所示:

但是你如何使用这个新的“!” 对于包含“lets”和“groups”的语句更复杂,如下所示:

谢谢!

0 投票
1 回答
1041 浏览

java - 如何将 XQuery 结果存储为 BaseX 中的新文档

我对 XML 文档数据库技术、Xquery/Xpath 等非常陌生。所以这可能是一个非常新手的问题。

场景:一些 XML 文档作为输入,想要运行一些转换,可以在这些 XML 文档上运行(使用 XQuery)。我想存储这些结果。进入与输入相同的 XML 数据存储。

到目前为止,我正在尝试使用 BaseX 文档数据库来存储和处理这些 XML 文档,并且到目前为止它非常易于使用,我印象深刻。

理想情况下,我想使用 XQJ API ( http://xqj.net/basex/ ) 与 BaseX 交互,因为我的理由是 XQJ 将尽可能独立于 BaseX 的应用程序代码的实现。次要选项会将我的 java 代码直接写入 BaseX API。

问题:我很难弄清楚如何将来自 XQuery 的结果作为新的“文档”存储在数据库中。也许这更多的是对 XQuery(或 XQuery 更新)本身的概念缺乏理解,而不是对 BaseX/XQJ API 的任何困难。

在这个简单的示例中,如果我有这样的查询,它会以我想要的新文档格式返回一些 XML 输出

我想将此新<result>文档存储回数据库中,以供以后查询/转换/等使用。在 SQL 中,这对我来说很有意义。我会做CREATE TABLE <name> SELECT <query>orINSERT INTO等​​。但我不清楚 XQuery 中的等价物是什么。我认为 XQuery 更新功能是我在这里需要的,但我很难找到具体的例子。

这在处理 XQJ 时更加复杂

有没有办法使用 BaseX 将此 XQResultSequence 持久化回数据库?或者更好的是,我可以直接在 XQResultSequence 上运行其他 XQueries 吗?

谢谢您的帮助!

0 投票
1 回答
570 浏览

xml - Saxon-EE 中地图的命名空间

我正在尝试在撒克逊语中运行以下代码

map:merge(for $mov in doc("movies.xml")/movies/movie return map:entry($mov/@id, avg($mov/ratings/child::node())))

但是,我收到如下错误:

XPST0081: Namespace prefix 'map' has not been declared

我相信我需要在查询的开头设置命名空间。

所以我搜索了一下,在这里找到了答案,并修改了我的代码如下:

我得到另一个错误:XQST0059: Cannot locate module for namespace http://www.w3.org/2005/xpath-functions/map

我必须使用什么命名空间?

更新

我尝试了一个新代码

并使用以下命令

java -cp saxon9ee.jar net.sf.saxon.Query -qversion:3.1 -o:out mapq.xq

我收到一个新错误如下

0 投票
2 回答
184 浏览

xquery - XQuery 翻滚窗口:如何匹配第一次出现的分组键?

我有一个 SQL 转储的 CSV 文件,我正在 BaseX 8.4 中使用它。CSV 标头包含 SQL 表结构的扁平表示。

带有标题和第一行的 CSV:

BaseX CSV 解析器生成以下 XML 表示:

关于原始数据,我知道一个表的开头是它的唯一ID,但是那些ID名称也会作为外键在其他表中重复出现。

我想创建窗口/组,通过匹配表的唯一 ID 的第一次出现(同时忽略每个后续出现)来重建原始表结构。到目前为止我所拥有的不起作用,因为它匹配 ID 的每一次出现,而不仅仅是第一个:

输出:

期望的输出: