我的xml文件带有结构
<root>
<compound>abc<parts>a b c</parts></compound>
<compound>xyz<parts>x y z</parts></compound>
</root>
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个范围索引
<range>
<create qname="compound" type="xs:string"/>
</range>
Run Code Online (Sandbox Code Playgroud)
我期望索引术语是abca b c,xyzx y z但我发现abc并xyz在监视和分析窗口中的索引链接下.还有搜索字符串
//compound[.="abca b c"] giving 0 results.
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助创建像化合物一样的全部内容的索引abca b c,xyz x y z等等.
谢谢
索尼
让我们采用我能想到的最简单的xquery函数:
declare function local:identityFunction($v as xs:integer)
{
return ($v)
};
Run Code Online (Sandbox Code Playgroud)
我在哪里申报?
我正在尝试使用exists-db和basex,但是如果我在查询处理器窗口中编写它,它们会给我一些错误(尽管正常的xqueries工作).
例如,basex抱怨以下消息:"Expecting expression".
我们正在寻找一种报告应用程序,该应用程序报告存储在大量XML文件中的数据.~3,000,000个文件,大小从7KB到5MB(每个文件符合相同的模式).我猜大约有200GB的XML.我正在研究一些开源XML数据库(Sedna,BaseX和eXist-db),我不确定这些系统的扩展程度,我在这里阅读了这三个数据库的比较.这是我对可伸缩性的关注源自哪里.
关于我们想要做的事情的一些细节是:我们不会更改任何XML文件中的数据,并且每天都会添加新文件.由于我们关注报告查询性能对我们很重要,因此添加和索引新文件所需的时间对我们来说不是一个高优先级.
我想知道是否有人有类似规模使用这些系统的经验?我查看了BaseX 统计信息页面,看到了一些相当大的XML实例,但没有提到性能.
我们不需要开源产品,MarkLogic系统看起来很适合这个账单,但我很好奇开源产品做了些什么.
我正在尝试构建简单的XML数据库(在BaseX或eXist-db中),但我无法确定如何修改文档中的值:
内容很简单,因为测试:
<p>
<pl>
<id>6></id>
</pl>
</p>
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建类似函数的东西,<pl>如果元素不存在则会插入元素,如果存在则替换它.但XQuery给了我麻烦:
当我尝试使用if-then-else逻辑时:
if (exists(/p/pl[id=6]/name)=false)
then insert node <name>thenname</name> into /p/pl[id=6]
else replace value of node /p/pl[id=6]/name with 'elsename'
Run Code Online (Sandbox Code Playgroud)
我收到错误Error: [XUDY0027] Replace target must not be empty.显然我很困惑,为什么在两种情况下评估else部分,因此错误.当我清空其他部分时:
if (exists(/p/pl[id=6]/name)=true)
then insert node <name>thenname</name> into /p/pl[id=6]
else <dummy/>
Run Code Online (Sandbox Code Playgroud)
然后我明白了Error: [XUST0001] If expression: no updating expression allowed.
当我尝试声明更新功能时,即使它报告错误:
declare namespace testa='test';
declare updating function testa:bid($a, $b)
{
if (exists(/p/pl[id=6]/name)=true)
then insert node <name>thenname</name> into /p/pl[id=6]
else <dummy/>
};
testa:bid(0,0)
Run Code Online (Sandbox Code Playgroud)
Error: …
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
Run Code Online (Sandbox Code Playgroud)
xmlstarlet sel -t -v"// @ category"books.xml
仅返回COOKING.如何获取所有属性命名类别?
奖励问题:我如何评估XML文件的XPath查询,而无需在编辑器或程序中打开它(我想要一个快速工具).问题是将大文件加载到内存会导致编辑器崩溃.不要告诉我eXist是我最好的选择吗?
我已经编写了 xquery 以正常方式返回结果。
let $results := //data:data
return
<result>
{
for $i in $results
return
<documentInformation>
<id>{data($i/DATA:ID)}</id>
<status>{data($i/@status)}</status>
<title>{data($i/data:title)}</title>
<displayName>{data($i/DATA:DISPLAYNAME)}</displayName>
</documentInformation>
}
</result>
Run Code Online (Sandbox Code Playgroud)
现在,我必须用一些条件过滤掉 for 循环中的结果,例如
(pseudo logic)
if id = 'abc' and status ="closed"
then skip the row
else add row.
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法。但无法运行查询..
我想知道如何让 eXide 返回超过 10 个结果。无论我如何查询数据库,都不可能获得更多。$EXIST_HOME 左右有什么特殊规则吗?
我使用 eXist-db 3.0.RC1。
所以,我正在优化我从SQL中继承的查询,与之前在sql中工作的方式相比,我遇到了一些性能问题.
基本上,我的PHP脚本发送2到5组两个(数字)值.
这些必须与我的集合元素中的id和doc进行比较.当然,谓词中的元素越少,带谓词的My for for现在看起来就越快:
for $p in collection("/db/col1")//set1/page[(id eq val1 and doc eq altval1) or (id eq val2 and doc eq altval2) or (id eq val3 and doc eq altval3) or (id eq val4 and doc eq altval4) or (id eq val5 and doc eq altval5)]
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式编写一个根据值的数量而变化的谓词.我尝试编写一个函数来编写条件并在谓词中调用它,具体取决于传递了多少个值,但这似乎不起作用.
如果有人知道解决方法,我真的很感激.
编辑:删除了代码中的拼写错误.
如何&在XQuery concat语句中使用(&符号)?我正在使用eXist DB,这有效:
concat("Marvin ", "and", " Peter")
Run Code Online (Sandbox Code Playgroud)
但这不是:
concat("Marvin ", "&", " Peter")
Run Code Online (Sandbox Code Playgroud)
我收到错误: expecting '"', found '&'
用a逃避&符\不起作用.
我有一个关于 eXistDB 的问题:升级到 eXistDB 5.2.0 后,出现以下错误:
HTTP ERROR 500 javax.servlet.ServletException:javax.servlet.ServletException:处理对/exist/apps/ediarum/的请求时出错:加载模块配置时发现错误:XPST0081错误:加载模块模块/config.xqm时出错:加载模块 ediarum 时发现错误:加载模块 ./ediarum.xql 时出错:qname httpclient:put 无效。没有为前缀 httpclient 定义命名空间。QName 无效:INVALID_PREFIX
在 eXistDB 4.4 版中,一切正常……关于“httpclient”,4.4 和 5.2.0 之间究竟有什么不同?
exist-db ×10
xquery ×6
basex ×3
xpath ×2
exide ×1
httpclient ×1
java ×1
marklogic ×1
namespaces ×1
sedna ×1
xml ×1
xml-database ×1
xmlstarlet ×1