【发布时间】:2026-01-07 09:45:02
【问题描述】:
我是 Marklogic XSLT 转换的新手,我有以下问题。
Marklogic 使用什么 XSLT 引擎来使用xdmp:xslt-invoke() 函数转换文档?有没有办法可以在 Marklogic 中支持 XSLT 3.0 版本?
我正在尝试使用具有以下变量的 XSLT 3.0 版本进行转换
<xsl:variable name="format-map" as="map(xs:string,xs:string)">
在 Marklogic 中使用 xdmp:xslt-invoke() 函数时出现以下错误
XSLT-BADSEQTYPE: (err:XTSE0020) /*:stylesheet/*:variable[1] -- Invalid sequence type: /*:stylesheet/*:variable[1]/@as (XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected Lpar_, expecting $end)
请告诉我如何解决这个问题
【问题讨论】:
-
根据docs.marklogic.com/guide/xquery/xslt 的文档,他们支持 XSLT 2.0,而不是 3.0。似乎允许在 XQuery 和 XSLT 中使用他们自己的 W3C XDM 数据模型扩展,在 XSLT 中使用例如
xdmp:dialect="1.0-ml"在样式表的根元素上,这样您就可以使用他们提供的地图扩展名,然而,这不是 W3C 指定的。 -
@MartinHonnen 我通过在样式表中声明 xdmp:dialect="1.0-ml" 尝试了您的建议,但仍然遇到相同的错误。
-
正如我所说,它们的地图语法和类型系统不是 W3C 指定的,所以我认为
as="map(xs:string,xs:string)"不会起作用,它更像是<xsl:variable name="map" select="map:new() => map:with('foo', 'bar')"/>然后你可以使用<xsl:value-of select="map:get($map, 'foo')"/>。我认为你需要声明xmlns:map="http://marklogic.com/xdmp/map"。我目前无法访问 Marklogic,因此您可能想自己进行试验或等到您从更有洞察力的人那里得到答案。
标签: xml xquery marklogic xslt-3.0 marklogic-10