gpt4 book ai didi

xquery - eXist-db - 包含模板导致基数不匹配,拒绝作为二进制资源

转载 作者:行者123 更新时间:2023-12-02 00:58:00 24 4
gpt4 key购买 nike

环境:eXist-db 4.2.1,XQuery 3.1

我在 eXist 中构建了一些函数,它们可以将 HTML 结果作为函数单独输出(当我直接传递参数时)。例如,这个小函数(/modules/document.xql 中的document:doc-sidebar-sub4):

module namespace document="/db/apps/fooapp/modules/document";
declare namespace templates="http://exist-db.org/xquery/templates";


import module namespace common="/db/apps/fooapp/modules/common" at "/db/apps/fooapp/modules/common.xql";

declare function document:doc-sidebar-sub4(
$node as node(),
$model as map(*),
$currentdoc as xs:string)

{
let $sidebar :=
(<div class="sidebar-sub-4">
<p><span class="en">To cite this document:</span></p>
<p>{common:cite-doc($currentdoc,"html")}</p>
</div>)
return $sidebar
};

从文档 foo-doc_0099.xml 中生成一小段 HTML(通过调用另一个函数):

<div class="sidebar-sub-4">
<p><span class="en">To cite this document:</span></p>
<p><span>Joe Smith. <i>Digital Edition of some old manuscript</i>.
http://www.foosite.fr/foo-doc_0099.xml. Retrieved 2018-10-14.</span>
</p>
</div>

我现在正尝试将这个片段包含在我的主要 document.html 中(在参数中硬编码文档 - 最终从 HTTP 请求中获取)和这个 div:

<div data-template="templates:include" 
data-template-with="document:doc-sidebar-sub4"
data-template-currentdoc="foo-doc_0099.xml"/>

但它会产生以下错误:

exerr:ERROR XPTY0004:参数 3 的实际基数与函数签名中声明的基数不匹配:templates:include($node as node(), $model as map, $path as xs:string ) 元素()*。预期基数:正好一个,得到 0。[在第 219 行,第 14 列,来源:/Users/foo/Library/Application Support/org.exist/expathrepo/shared-0.4.2/content/templates.xql]


同一模板调用的另一个版本会产生不同的错误:

<div data-template="templates:include" 
data-template-with="document:doc-sidebar-sub4"
data-template-path="modules/document.xql"
data-template-currentdoc="foo-doc_0099.xml"/>

错误:

err:FODC0005 exerr:ERROR 文档/db/apps/fooapp/modules/document.xql 是二进制资源,而不是 XML 文档。请考虑使用函数 util:binary-doc() 来检索对它的引用。 [第 436 行,第 27 列,来源:/Users/foou/Library/Application Support/org.exist/expathrepo/shared-0.4.2/content/templates.xql]

我尝试遵循演示、各种教程和答案,包括 this ,但似乎无法确定问题所在。


另一个版本,不同的错误。这个电话

<div data-template="document:doc-sidebar-sub4" data-template-path="modules/document.xql":>

产生:

templates:NotFound No template function found for call document:doc-sidebar-sub4 [第 189 行,第 85 列,来源:/Users/foo/Library/Application Support/org.exist/expathrepo/shared- 0.4.2/content/templates.xql]

非常感谢您为这位学习者提供的任何帮助。

编辑:添加来自@joewiz 的调整,返回其他错误

最佳答案

您通过 eXist 的 HTML 模板工具调用的函数必须有两个必需的参数:$node 作为 node(),$model 作为 map(*),在任何命名参数之前,例如您的 $ currentdoc 参数。要解决您的问题,您需要将这两个参数添加到函数签名中,如下所示:

declare function document:doc-sidebar-sub4(
$node as node(),
$model as map(*),
$currentdoc as xs:string
)
{
let $sidebar :=
(<div class="sidebar-sub-4">
<p><span class="en">To cite this document:</span></p>
<p>{common:cite-doc($currentdoc,"html")}</p>
</div>)
return $sidebar
};

模板文档中关于“模板函数”的部分位于 https://exist-db.org/exist/apps/doc/templating#D3.19解释这两个必需参数的作用。

关于xquery - eXist-db - 包含模板导致基数不匹配,拒绝作为二进制资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52807491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com