XQuery是一种用于查询和操作XML数据的函数式语言。它是XPath的超集,它添加了诸如创建新节点和更强大的FLWOR表达式等功能。虽然它与XSLT共享其数据模型,但XQuery针对查询而非转换数据进行了优化,因此它具有受SQL启发的不同设计。
使用 XQuery/XPath 计算多个 XML 文件中的不同值
我有几个 XML 文件,它们都具有相同的结构。我需要找到每个元素中出现的所有不同值并对每个不同的出现次数进行计数。 这样做的最佳方法是什么...
在 Informatica 中,我在应用程序集成过程中构建了 Xquery 代码行: fn:sum(对于 $j 从 0 到 fn:days-from-duration(xs:date($temp.t_laatsteLeverDatum) - fn:current-date()) 返回...
如何在 xml 中查找具有特定值的属性而不将特定元素放入 MarkLogic Xquery?
价值 萨德夫 价值 萨德夫 <book> <abc x="1">value</abc> <xyz>sadf</xyz> </book> <book> <ijk x="1">value</ijk> <xyz>sadf</xyz> </book> <book> <plm x="1">value</plm> <xyz>sadf</xyz> </book> 我有像上面这样的xml,我想要属性x=1(元素名称不固定)的所有xml。我可以使用 XPath 轻松完成此操作,但我需要在巨大的数据集上运行此查询,那么我们是否有任何 cts 查询来使其更快?或者更好的方式来查询这个? 不幸的是,查询属性的内置 cts:* 函数必须指定元素 QName。如果您不知道哪些元素可能具有该属性,那么创建字段索引或TDE可能会更容易。 一种选择是使用通用 XPath 创建一个 path 字段,例如 //*/@x 或 /book/*/@x 如果您启用字段值搜索的选项,那么您可以使用如下查询: cts:field-value-query("x", "1")
这是我的计算表达式函数和calculateMinus函数 将函数 local:calculateExpression($expression) 声明为 xs:decimal { 让$结果:= if ($表达式/uli:times) th...
下面是我的 Xquery 代码。关注计算表达式 导入模式命名空间 uli = "http://www.cs.man.ac.uk/~sattler/" at "examSchema.xsd"; 将变量 $examFile 声明为 xs:str...
在 Docker 容器中安装期间,eXist-DB 索引设置失败
我创建了一个基于 eXist-DB 的应用程序。该应用程序应部署在 Docker 容器内。我的应用程序依赖于一些繁重的预计算,这应该将结果存储在数据库中-
我使用以下命令使用 xidel -e 提取两个值。 '//输入[@name="qid"]/@value[1]' “//跨度[@id='trueFinalResultCount']” 但我想将这两个结果放入 TSV 格式。 结果1<...
Marklogic 应用程序服务器 8001-连接被拒绝错误
我已经在Windows操作系统上安装了MarkLogic服务器。我能够访问查询控制台和仪表板应用程序。但是,我无法通过端口 8001 访问管理服务器。我收到...
如何更新 MarkLogic 中非常大的文档的 XML 集合?
我正在 MarkLogic 中处理一个大型 XML 文件——大约 50MB,长 700,000 行。该任务涉及使用 XQuery 模块添加和删除特定集合。以前,我使用 xdmp:invoke-
如何使用 ml-gradle 在 MarkLogic 中安装/扩展自定义剩余扩展?
我想要 ml-gradle 通过 ml-gradle 安装/扩展自定义休息端点。 您能否提供一些示例或详细信息,以及如何为此配置 ml-gradle? 我能够...
当我运行当前的 XHTML 页面时,出现以下错误: 检索数据/db/apps/HTML_Student/SVG_Bezier_Curve.xq 当我运行当前的 XHTML 页面时,出现以下错误: Retrieved_Data <?xml version="1.0" ?><exception><path>/db/apps/HTML_Student/SVG_Bezier_Curve.xq</path><message>exerr:ERROR org.exist.xquery.XPathException: err:XPST0003 expecting "return", found ';' [at line 4, column 79]</message></exception> 这是我的 XHTML 代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>SVG_Bezier_Curve</title> <link rel="stylesheet" type="text/css" href="http://localhost:8080/exist/rest/db/apps/HTML_Student/SVG_Bezier_Curve.css"/> <script language="javascript" src="http://localhost:8080/exist/rest/db/apps/HTML_Student/SVG_Bezier_Curve_2.js"> </script> </head> <body> <input type="text" id="My_Text" value="I was here."/> <input type="button" onclick="Setup2()"/> <input type="button" onclick="Setup()"/> <p id="My_Paragraph"/> <svg xmlns="http://www.w3.org/2000/svg" id="My_SVG" height="500" width="500"> <path id="Bezier_Curve_1"/> <path id="Bezier_Curve_2" d="M 300, 200 A 50, 50 0,0,1 400,200" stroke="red" stroke-width="3" fill="none"> </path> </svg> </body> </html> 这是我的Javascript代码: function Setup() { var Bezier_Curve_Identification; var Attribute_Name; var Attribute_Name_2; var Coordinate; var My_Properties; document.getElementById("My_Text").value = "My Setup."; Attribute_Name = "d"; Attribute_Name_2 = "style"; My_Properties = "stroke: blue; stroke-width: 3; fill: none;"; Coordinate = "M 300 200 A 20 20 0 0 0 400 200"; Bezier_Curve_Identification = document.getElementById('Bezier_Curve_1'); Bezier_Curve_Identification.setAttribute(Attribute_Name, Coordinate); Bezier_Curve_Identification.setAttribute(Attribute_Name_2, My_Properties); } function Setup2() { var SVG_Data; var Retrieved_Data; SVG_Data = new XMLHttpRequest(); SVG_Data.open("GET","http://localhost:8080/exist/rest/db/apps/HTML_Student/SVG_Bezier_Curve.xq", true); SVG_Data.onreadystatechange = function () { if (SVG_Data.readyState == 4) { Retrieved_Data = SVG_Data.responseText; document.getElementById("My_Text").value = "Retrieved_Data " + Retrieved_Data;} }; SVG_Data.send();} 这是我的 XML: <SVG_Data_Collection xmlns="http://www.TedTheSpeedlearner.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.TedTheSpeedlearner.com SVG_Bezier_Curve_Data_Schema.xsd"> <Bezier_Curve_1> <Main_Attribute>d</Main_Attribute> <Initial_Attribute>M</Initial_Attribute> <Coordinate_Start>300 200</Coordinate_Start> <Arc_Attribute>A</Arc_Attribute> <Bezier_Arc>20 20 0 0 0</Bezier_Arc> <Terminal_Coordinate>400 200</Terminal_Coordinate> <Style_Attribute>style</Style_Attribute> <Style_Color>stroke: red;</Style_Color> <Style_Width>stroke-width: 3;</Style_Width> <Style_Fill>fill: none;</Style_Fill> </Bezier_Curve_1> <Bezier_Curve_2> <Main_Attribute>d</Main_Attribute> <Initial_Attribute>M</Initial_Attribute> <Coordinate_Start>300 200</Coordinate_Start> <Arc_Attribute>A</Arc_Attribute> <Bezier_Arc>20 20 0 0 0</Bezier_Arc> <Terminal_Coordinate>400 200</Terminal_Coordinate> <Style_Attribute>style</Style_Attribute> <Style_Color>stroke: blue;</Style_Color> <Style_Width>stroke-width: 3;</Style_Width> <Style_Fill>fill: none;</Style_Fill> </Bezier_Curve_2> </SVG_Data_Collection> xquery version "3.0"; declare default element namespace "http://www.TedTheSpeedlearner.com" declare option exist:serialize "method=text media-type=text/plain" let $header-addition := response:set-header("Access-Control-Allow-Origin","*") let $doc := doc("SVG_Bezier_Curve_Data.xml")/SVG_Data_Collection/Bezier_Curve_1 let $First_Data_Name := $doc/Main_Attribute let $Data := concat($First_Data_Name, "*") let $Second_Data_Name := $doc/Initial_Attribute let $Data := concat($Data, $Second_Data_Name, "-") let $Third_Data_Name := $doc/Coordinate_Start; let $Data := concat($Data, $Third_Data_Name, "-") let $Fourth_Data_Name := $doc/Arc_Attribute let $Data := concat($Data, $Fourth_Data_Name, "-") let $Fifth_Data_Name := $doc/Bezier_Arc let $Data := concat($Data, $Fifth_Data_Name, "-") let $Sixth_Data_Name := $doc/Terminal_Coordinate let $Data := concat($Data, $Sixth_Data_Name) return $Data 我很想添加我的 XQuery 代码,但这个框不允许我添加。 我有我的代码的照片,但您不让我在不复制和粘贴代码的情况下发布照片。 当此框不允许我向您提供代码时,我如何向您提供代码? 您需要用分号终止声明,即 try declare default element namespace "http://www.TedTheSpeedlearner.com"; declare option exist:serialize "method=text media-type=text/plain";
从MarkLogic上的XQuery,是否可以使用缩进序列化JSON节点? 可以使用 xdmp:quote() 通过 XML 来完成此操作,但对 JSON 节点使用相同的代码会返回一个长而扁平的
https://qt4cg.org/specifications/xquery-40/xquery-40.html#id-deep-lookup 介绍映射和数组的深度查找运算符。虽然 BaseX 和 Saxon XQJ 处理器实现了这个 Xquery 4.0 (...
我不知道为什么很难找到一个非商业包,它基本上可以在 XML 输入上运行 XQuery,并带有字符串或文件。在那里找不到太多非商业的东西。 我试过了
我知道 XML 不允许其中包含 NUL 字节,但我认为它可以以某种方式与 JSON 一起使用: parse-json("""\u0000""") => 序列化(map{"method": &quo...
我有一个 HTML 表格,其中的 元素可以跨越多行: ... 我有一个 HTML 表格,其中包含可以跨越多行的 <td> 元素: <table border="1"> <tbody> <tr> <th>A</th> <th>B</th> <th>C</th> <th>D</th> </tr> <tr> <th>1</th> <td rowspan="2">B12</td> <td>C1</td> <td rowspan="3">D123</td> </tr> <tr> <th>2</th> <td rowspan="2">C23</td> </tr> <tr> <th>3</th> <td>B3</td> </tr> </tbody> </table> 我想从中生成表格格式: A B C D A1 B12 C1 D123 A2 B12 C23 D123 A3 B3 C23 D123 我正在尝试使用 XPath 3.1 来做到这一点(我并不反对 XQuery 或 XSLT 解决方案,但我认为他们在这里不能做得更好): //table/tbody/( let $matx := map:merge((1 to count(tr)) ! map:entry(.,map{})) return tr/( let $x := position() return *[name() = "td" or name() = "th"]/( let $str := string(), $pos := position(), $row := $matx($x), $y := ($pos to 1 + max(($pos, map:keys($row)))) => filter(function($i){ not(map:contains($row,$i)) }) => head() return ($x to $x + (if (@rowspan) then xs:integer(@rowspan) - 1 else 0)) => fold-left($matx, function($m,$i) { $m => map:put($i, $m($i) => map:put($y, $str)) }) ) ) ) 主要问题是我无法在循环 $matx 时更新全局 <tr>。我目前正在尝试用 fold-left 重构代码,但它已经变得一团糟。我希望有一个更简单的解决方案。 我在纯 XPath 中得到了第一个可行的解决方案。主要困难是使用 position() 时无法访问 fold-left()。 正如 @MartinHonnen 评论的那样,https://github.com/transpect/htmltables 中有一个 XSL 函数用于“扁平化”HTML 表格。如果您正在使用 XSLT,那么就不必费心使用 XPath; htmltable:normalize 甚至可以处理 colspan 属性,而我不这样做(尽管添加它应该不会太难)。 //table/tbody/( let $tr_seq := *, $i_seq := 1 to count($tr_seq) return $i_seq => fold-left(array{$i_seq ! map{}}, function($arr, $i) { let $tr := $tr_seq[$i], $td_seq := $tr/*, $j_seq := 1 to count($td_seq) return $j_seq => fold-left($arr, function($arr, $j) { let $td := $td_seq[$j], $data := normalize-space($td), $rowspan := max((1, $td ! xs:integer(@rowspan))), $map := $arr($i), $j2 := ($j to max(($j, map:keys($map))) + 1) => filter(function($k){ not(map:contains($map, $k)) }) => head() return ($i to $i + $rowspan - 1) => fold-left($arr, function($arr,$i) { $arr => array:put($i, $arr($i) => map:put($j2, $data)) }) }) }) => array:for-each(function($m) { map:keys($m) => sort() => for-each($m) }) ) 这里你得到了一个代表 HTML 表的数组(行 x 列),每个原子元素都是对应的 <td> 或 <th> 的规范化字符串: [ ["A","B","C","D"], ["A1","B12","C1","D123"], ["A2","B12","C23","D123"], ["A3","B3","C23","D123"] ] 然后您可以根据需要格式化该矩阵: ! ( array:for-each(., string-join(?, codepoints-to-string(9))) => string-join(codepoints-to-string(10)) ) A B C D A1 B12 C1 D123 A2 B12 C23 D123 A3 B3 C23 D123 A B
eXist-db 如何将文件添加到多部分http请求(expath http请求)
我正在尝试使用 expath http 客户端在 eXist-db 6.2 中发送发布请求,以从我的数据库上传文件。该提供需要多部分。然而,提供商正在响应以下请求...