【问题标题】:XQuery syntax to declare a namespace: [XPST0081] No namespace declared for 'text:p'用于声明命名空间的 XQuery 语法:[XPST0081] 没有为 'text:p' 声明命名空间
【发布时间】:2020-02-14 08:21:26
【问题描述】:

Libre Office声明命名空间的语法是什么,具体需要声明什么命名空间?

thufir@dur:~/fods/flwor$ 
thufir@dur:~/fods/flwor$ basex text.xq 
Stopped at /home/thufir/fods/flwor/text.xq, 3/14:
[XPST0081] No namespace declared for 'text:p'.
thufir@dur:~/fods/flwor$ 
thufir@dur:~/fods/flwor$ cat text.xq 

for $foo  in db:open("foo")
return $foo//text:p

thufir@dur:~/fods/flwor$ 

当然,返回 $foo 本身可以很好地返回整个文档。

我还需要将命名空间存储在本地文件中吗?或者,只是add 类似的东西:

declare namespace type4="http:///de/tudarmstadt/ukp/dkpro/core/api/segmentation/type.ecore";

【问题讨论】:

    标签: xml xpath xquery exist-db basex


    【解决方案1】:

    您在查询中使用的每个命名空间前缀也必须在查询中声明。在您的情况下,您可以添加一行

    declare namespace text="urn:oasis:names:tc:opendocument:xmlns:text:1.0";
    

    在顶部修复您的查询。

    由于命名空间前缀(在您的情况下为text)只是对关联命名空间URI 的引用,因此它不必与XML 文档中的前缀匹配。以下查询是 100% 等效的:

    declare namespace whatever="urn:oasis:names:tc:opendocument:xmlns:text:1.0";
    
    for $foo in db:open("foo")
    return $foo//whatever:p
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-10
      • 2011-01-31
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      相关资源
      最近更新 更多