我将我的实体存储在eXist XML数据库中,并使用文件名(资源ID)作为实体的ID.
例:
String xquery = "for $movie in collection('/db/movie')//movie "
+ "return $movie";
Run Code Online (Sandbox Code Playgroud)
执行此查询后,我检索org.xmldb.api.base.Resource其内容用于创建实体的实例.当我想设置这个实体的id时,我这样做:
dvd.setId(rs.getId());
Run Code Online (Sandbox Code Playgroud)
问题是,如果我执行这样的查询:
String xquery = "for $dvd in collection('/db/dvd')//dvd "
+ "return <dvd>"
+ "{$dvd/title}"
+ "{$dvd/type}"
+ "{"
+ "<content>"
+ " {"
+ " for $movie in $dvd/content//movie"
+ " let $movieIn := doc(concat(\"/db/movie/\", $movie/@id))/movie"
+ " return "
+ " <movie id=\"{$movie/@id}\">"
+ " {$movieIn/name}"
+ " {$movieIn/director}"
+ " {$movieIn/year}"
+ " {$movieIn/country}"
+ " {$movieIn/actors}"
+ " {$movieIn/genres}" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用对eXist DB REST API(1)的ajax调用来检索XML响应.
谷歌浏览器为我提供了以下控制台错误:
XMLHttpRequest cannot load XMLHttpRequest cannot load http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies. Origin null is not allowed by Access-Control-Allow-Origin Origin null is not allowed by Access-Control-Allow-Origin
Run Code Online (Sandbox Code Playgroud)
虽然Firefox中的Firebug提供以下控制台错误:
GET http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies 200 OK X 35ms jquery.min.js(line 18)
Run Code Online (Sandbox Code Playgroud)
这是代码的ajax部分:
$.ajax({
type: 'GET',
dataType: 'xml',
url: 'http://localhost:8080/exist/rest/db/movies',
data: {
_query: _query_value,
_key: _key_value,
_indent: _indent_value,
_encoding: _encoding_value,
_howmany: _howmany_value,
_start: _start_value,
_wrap: _wrap_value,
_source: _source_value,
_cache: _cache_value
},
success: function(resp){
alert("Resp OK!");
console.log(resp);
},
error: function(hqXHR, textStatus, errorThrown){
var x=0;
alert("fail0 " + hqXHR …Run Code Online (Sandbox Code Playgroud) 我们正在从映像运行existdb (existdb/existdb:5.3.0-SNAPSHOT)。
我试图按照这里的信息来运行恢复: https ://github.com/eXist-db/docker-existdb/issues/40
但是,基于该映像的容器似乎不包含 start.jar 文件。因此 cmdlike 失败:
docker exec myexistdbconatinername java -jar start.jar client --no-gui --xpath "system:restore('/mylocationwithbackupsinsideconatiner', '', '')"
Run Code Online (Sandbox Code Playgroud)
与“无法访问start.jar”。我尝试搜索整个容器文件系统 -> 但 start.jar 不存在......
此外,该映像是无发行版的 - 因此没有 bash。所以我想这里的文档(使用 backup.sh)不相关......
http://exist-db.org/exist/apps/doc/backup.xml
从 docker 映像运行 exitdb 时,建议使用 cmd 行以自动方式运行恢复的方法是什么?您能给我指出文档或建议步骤吗?
非常感谢
考虑一个库模块ctx
xquery version "3.1";
module namespace ctx="module/ctx";
declare function ctx:resolve (
$ctx as function(xs:string) as xs:QName
) as function(xs:string, xs:integer) as function(*)? {
function ($name as xs:string, $arity as xs:integer) as function(*)? {
function-lookup($ctx($name), $arity)
}
};
Run Code Online (Sandbox Code Playgroud)
和一个库模块a
xquery version "3.1";
module namespace a="module/a";
declare function a:f () { "a:f" };
Run Code Online (Sandbox Code Playgroud)
和一个主模块
xquery version "3.1";
import module namespace a="module/a" at "a.xqm";
import module namespace ctx="module/ctx" at "ctx.xqm";
ctx:resolve(xs:QName(?))("a:f", 0)()
Run Code Online (Sandbox Code Playgroud)
是否可以安全地假设返回的函数引用xs:QName(?)将保留声明名称空间的上下文a,以便主模块输出“a:f”?
这在 eXist-db 中确实有效(在 5.3.0 …
在设计XML数据库的XForm接口(使用eXist和XSLTForms)时,我想为可选元素包含一个输入控件.XML数据记录已经存在,有些包含可选元素,有些则不包含.要更新记录,我使用现有的XML记录作为模型实例.问题是当可选元素不存在时不显示表单控件,这是合乎逻辑的,但是当用户想要将数据添加到可选元素时会出现问题.
更明确一点,这是一个示例数据记录data.xml:
<a>
<b>content</b>
</a>
Run Code Online (Sandbox Code Playgroud)
使用RNC架构:
start =
element a {
element b { text },
element notes { text }?
}
Run Code Online (Sandbox Code Playgroud)
XForms模型:
<xf:model>
<xf:instance xmlns="" src="data.xml"/>
<xf:submission id="save" method="post" action="update.xq" />
</xf:model>
Run Code Online (Sandbox Code Playgroud)
并控制:
<xf:input ref="/a/notes">
<xf:label>Notes (optional): </xf:label>
</xf:input>
Run Code Online (Sandbox Code Playgroud)
问题是"Notes"输入控件根本不显示.
一个明显的解决方案是添加一个触发按钮,允许用户在需要时插入元素,但最好只显示输入控件,并为空.
我的问题是:是否存在一些不太知名的属性/绑定/多个实例/ xpath表达式的微妙组合会导致控件始终显示?
有人能告诉我XQuery node()和element()类型之间的确切区别吗?文档说明这element()是一个元素节点,node()而是任何节点,所以如果我理解它element()是一个子集node().
问题是我有一个像这样的XQuery函数:
declare function local:myFunction($arg1 as element()) as element() {
let $value := data($arg1/subelement)
etc...
};
Run Code Online (Sandbox Code Playgroud)
现在我想用一个参数调用该函数,该参数由另一个函数获得,比如说functionX(我无法控制):
let $parameter := someNamespace:functionX()
return local:myFunction($parameter)
Run Code Online (Sandbox Code Playgroud)
问题是,functionX返回一个node()所以它不会让我$parameter直接通过.我尝试改变我的函数类型node()而不是一个element(),但后来我似乎无法读取它的任何数据.$value只是空的.
有没有办法将节点转换为元素,或者我应该错过什么?
编辑:据我所知,问题出在我尝试使用子元素的部分$arg1/subelement.显然你可以这样做,如果$arg1是,element()但不是如果它是node().
更新:我已经测试了下面Dimitre提供的示例,它确实工作正常,包括Saxon和eXist DB(我使用的是XQuery引擎).问题实际上发生在request:get-data()eXist DB 的功能上.当通过REST使用eXist时,此函数获取POST请求提供的数据,将其解析为XML并将其作为a返回node().但由于某种原因,当我将数据传递给另一个函数时,XQuery并不承认它是有效的element(),即使它是.如果我手动提取它(即复制输出并将其粘贴到我的源代码),将其分配给变量并将其传递给我的函数一切顺利.但是,如果我直接传递它,它会给我一个运行时错误(实际上instance of测试失败).
我需要能够让它忽略这种类型检查或"数据转换"数据到element().
我正在尝试制作一个搜索并返回xQuery中图形中两个节点之间路径的算法,到目前为止它只返回一个节点和它的邻接节点.
首先,我应该明确图形是一个有向图,每个节点可以有零个,一个或多个原点,在XML中,一个节点只有到它原点的链接但不是它的后续节点
这是一些节点及其XML的示例
<node>
<id> 123-456-789</id>
<name> something </name>
<Links>
<Link>
<origin></origin>
</Link>
<Links>
<node>
<id> 245-678-901</id>
<name> node 2</name>
<Links>
<Link>
<origin> 123-456-789 </origin>
</Link>
<Links>
<node>
<id> xxx-xxx-xxx</id>
<name> node 3</name>
<Links>
<Link>
<origin> 123-456-789 </origin>
</Link>
<Links>
<node>
<id> 234-546-768</id>
<name> node 4</name>
<Links>
<Link>
<origin> 245-678-901</origin>
</Link>
<Links>
Run Code Online (Sandbox Code Playgroud)
从那个XML我想得到从节点1到节点4(node1-> node2 - > node4)的路径,但无论我尝试做什么只会给我node1-node2和node3而不是node4另一件事是我想要的选择一个非直接的路径,我的意思是,如果我想要node5和node7之间的路径,但node5和node7都指向node6
我已经尝试将这个python代码改编为xquery
def BFS(graph,start,end,q):
temp_path = [start]
q.enqueue(temp_path)
while q.IsEmpty() == False:
tmp_path = q.dequeue()
last_node = tmp_path[len(tmp_path)-1]
print tmp_path
if last_node == end: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在XQuery中实现动态排序.我目前正在使用Saxon-PE 9.5进行开发,但是将在eXist和marklogic中使用XQuery(或xqueries复数),因此使用其模块/函数的任何答案都可以(并且希望其他数据库具有相应的模块/函数) .
排序基于包含一系列字符串的变量.序列中的每个字符串都是元素的名称和可选的"降序".
我已经尝试了多种方法,但无法按照预期的方式工作; 特别是对于二级种类.
在下面的示例中,排序是静态的,并且具有主要类型c(升序)和次要类型b(降序)...
so_xquery_question.xml
<doc>
<foo id="foo1">
<a>a1</a>
<b>b1</b>
<c>c0</c>
</foo>
<foo id="foo2">
<a>a2</a>
<b>b2</b>
<c>c0</c>
</foo>
<foo id="foo3">
<a>a3</a>
<b>b3</b>
<c>c3</c>
</foo>
</doc>
Run Code Online (Sandbox Code Playgroud)
XQuery的
let $xml := doc('file:///C:/SO/so_xquery_question.xml')
return
<test>{
for $foo in $xml/doc/foo
order by $foo/c, $foo/b descending
return
$foo
}</test>
Run Code Online (Sandbox Code Playgroud)
产量
<test>
<foo id="foo2">
<a>a2</a>
<b>b2</b>
<c>c0</c>
</foo>
<foo id="foo1">
<a>a1</a>
<b>b1</b>
<c>c0</c>
</foo>
<foo id="foo3">
<a>a3</a>
<b>b3</b>
<c>c3</c>
</foo>
</test>
Run Code Online (Sandbox Code Playgroud)
输出正确排序; 首先是c(升序)然后是b(降序).
我的最新尝试部分有效.(在Saxon和marklogic中.由于某些未知原因(!@#$),它在eXist中的工作方式不同.)
这里是: …
与XSLT和XPath 2.0及更高版本共享的XQuery支持各种数字数据类型,其中两种是xs:double和xs:decimal.如http://www.w3.org/TR/xquery-operators/#casting-to-numerics中所定义,可以转换xs:double为an .xs:decimal
在Java中完成的实现似乎xs:double使用Java double数据类型并xs:decimal使用java.math.BigDecimal类来实现.该类支持两种将a转换double为a的方式BigDecimal,即do BigDecimal.valueOf(doubleValue)和new BigDecimal(doubleValue).据/sf/answers/503040891/,前者给出了更直观的结果,而后者给出了更准确的结果,例如BigDecimal.valueOf(1.1)导致1.1而new BigDecimal(1.1)导致1.100000000000000088817841970012523233890533447265625.
当我尝试的演员xs:double到xs:decimal与撒克逊和存在,那么
xquery version "1.0";
let $d1 as xs:double := 1.1E0
return xs:decimal($d1)
Run Code Online (Sandbox Code Playgroud)
输出1.100000000000000088817841970012523233890533447265625,同时用BaseX它输出1.1.我认为差异来自不同的实现,BaseX做BigDecimal.valueOf(1.1),Saxon和Exist new BigDecimal(1.1).
我的问题是:根据http://www.w3.org/TR/xquery-operators/#casting-to-numerics,哪种方法是实施演员操作的正确方法?
我的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等等.
谢谢
索尼