标签: exist-db

使用XQuery获取XML文件的文件名

我将我的实体存储在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)

java xquery exist-db

8
推荐指数
2
解决办法
6059
查看次数

XMLHttpRequest无法加载http:// localhost:8080/exists/rest/db/.... Access-Control-Allow-Origin不允许使用null

我正在尝试使用对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)

ajax rest jquery exist-db

6
推荐指数
1
解决办法
1万
查看次数

如何执行恢复 - 基于 docker 的存在 dB

我们正在从映像运行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 行以自动方式运行恢复的方法是什么?您能给我指出文档或建议步骤吗?

非常感谢

exist-db

6
推荐指数
1
解决办法
172
查看次数

XQuery 中的范围和静态已知名称空间

考虑一个库模块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 …

xquery exist-db

6
推荐指数
1
解决办法
114
查看次数

允许XForm控件用于可选的XML元素

在设计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表达式的微妙组合会导致控件始终显示?

xforms exist-db xsltforms

5
推荐指数
1
解决办法
276
查看次数

XQuery中的element()与node()

有人能告诉我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 exist-db

5
推荐指数
1
解决办法
1万
查看次数

在XQuery中搜索两个图节点之间的路径

我正在尝试制作一个搜索并返回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)

xml xslt xquery exist-db

5
推荐指数
1
解决办法
614
查看次数

XQuery中基于变量的动态排序(order by)

我正在尝试在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中的工作方式不同.)

这里是: …

xml sorting xquery marklogic exist-db

5
推荐指数
1
解决办法
2308
查看次数

是应该将xs:double转换为xs:decimal实现为BigDecimal.valueOf(double)还是new BigDecimal(double)?

与XSLT和XPath 2.0及更高版本共享的XQuery支持各种数字数据类型,其中两种是xs:doublexs: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.1new BigDecimal(1.1)导致1.100000000000000088817841970012523233890533447265625.

当我尝试的演员xs:doublexs: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,哪种方法是实施演员操作的正确方法?

java xquery saxon exist-db basex

5
推荐指数
1
解决办法
674
查看次数

现有db中混合内容节点上的范围索引

我的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但我发现abcxyz在监视和分析窗口中的索引链接下.还有搜索字符串

//compound[.="abca b c"] giving 0 results.
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助创建像化合物一样的全部内容的索引abca b c,xyz x y z等等.

谢谢

索尼

xquery exist-db

5
推荐指数
1
解决办法
88
查看次数

标签 统计

exist-db ×10

xquery ×7

java ×2

xml ×2

ajax ×1

basex ×1

jquery ×1

marklogic ×1

rest ×1

saxon ×1

sorting ×1

xforms ×1

xslt ×1

xsltforms ×1