Преобразование eXist-DB / Query XSL: неопределенная контекстная последовательность - PullRequest
0 голосов
/ 19 октября 2018

Среда: eXist-db 4.2.1, XQuery 3.1, XSLT 2.0

Я пытаюсь преобразовать документ XML с помощью таблицы стилей XSLT 2.0, запускаемой eXist-DB / Query 3.1.Я получаю следующую ошибку

err:XPDY0002 Undefined context sequence for 'child::{}xinclude-path' 
[at line 271, column 48, source: /db/apps/deheresi/modules/document.xql]

Эта ошибка указывает на следующее XQuery в модуле document.xqm, строка 217: </parameters>),(),xinclude-path=$globalvar:URIdb):

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

{   
  let $currentdocnode := doc(concat($globalvar:URIdb,$currentdoc))

  let $xsltransform := transform:transform(
                        $currentdocnode, 
                        concat($globalvar:URIstyles,
                        "ms609__testxsl-withmodes.xsl"),
                        (<parameters>
                            <param name="paramPersonurl" value="{$globalvar:URLperson}"/>
                            <param name="paramPlaceurl" value="{$globalvar:URLplace}"/>
                            <param name="paramDocurl" value="{$globalvar:URLdoc}"/>
                         </parameters>),(),xinclude-path=$globalvar:URIdb)
return $xsltransform
 };

Чтобы объяснить вышеупомянутые переменные:

  • $currentdoc - это имя документа, которое я превращаю в узел eXist-DB при $currentdocnode.

  • XML-документы хранятсяв $globalvar:URIdb = / db / apps / deherei / data

  • XSLT-стили хранятся в $globalvar:URIstyles doc = / db / apps / deherei / styles

Я использую преобразование с сериализацией для xi: includes:

transform:transform($node-tree as node()*, $stylesheet as item(), 
                $parameters as node()?, $attributes as node()?, 
                $serialization-options as xs:string?) as node()?

Мне нужно передать xinclude-path = $ globalvar: URIdb, чтобы сообщитьeXist-DB, где обрабатывать xi:includes внутри моих документов XML.

Следует отметить, что $globalvar - это строки, а не узлы.Если мне нужны узлы, я «конвертирую» их локально в данный момент, как в $currentdocnode выше.

Заранее спасибо за помощь в разгадке этой ошибки.

1 Ответ

0 голосов
/ 19 октября 2018

Документы для transform:transform отмечают, что параметрами сериализации должна быть строка:

transform:transform($node-tree as node()*, $stylesheet as item(), 
                $parameters as node()?, $attributes as node()?, 
                $serialization-options as xs:string?) as node()?

Вам необходимо заключить в кавычки ваш параметр и объединить его с глобальной переменной:

concat(`xinclude-path=`, $globalvar:URIdb)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...