Поддержка XSLT 3.0 в преобразовании Marklogic xml

Я новичок в преобразованиях Marklogic XSLT, и у меня есть следующие вопросы.

Какой механизм XSLT использует Marklogic для преобразования документа с помощью xdmp:xslt-invoke() Есть ли способ, которым мы можем поддерживать версию XSLT 3.0 в Marklogic?

Я пытаюсь использовать версию XSLT 3.0 с переменной ниже для преобразования

<xsl:variable name="format-map" as="map(xs:string,xs:string)">

и я получаю ошибку ниже при использовании функции xdmp:xslt-invoke() в Marklogic

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)

Пожалуйста, дайте мне знать, как решить эту проблему

1 ответ

MarkLogic поддерживает XSLT 2.0, но это не мешает вам использовать карты стилей в памяти.

Просто объявите пространство имен карты MarkLogic в таблице стилей, и тогда вы получите доступ к функциям карты MarkLogic. Просто обратите внимание на одно ключевое отличие: карты MarkLogic изменяемы, тогда как карты в XSLT 3.0 неизменны.

Другими словами, если вы добавляете / изменяете / удаляете контент на карту MarkLogic, скажем, map:put($map, "a", "b"), map $map изменяется напрямую, на месте - и когда вы пытаетесь сделать map:get($map, "a") позже вы получите самую последнюю версию того, что a есть, то есть "б".

Если вы попытаетесь обновить карту в XSLT 3.0, вы получите совершенно новую обновленную неизменяемую копию.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:map="http://marklogic.com/xdmp/map"
  exclude-result-prefixes="map"                                                                                                                                                                         
  version="2.0">

  <xsl:variable name="my-map" as="map:map" select="map:map()" />

  <xsl:template match="/">
    <xsl:sequence select="map:put($my-map, 'a', 'b')"/>
    <xsl:value-of select="map:get($my-map, 'a')"/>
  </xsl:template>

</xsl:stylesheet>
Другие вопросы по тегам