Многократные операторные переменные в ML8

Я пытаюсь выполнить транзакцию с несколькими операторами с точкой с запятой в качестве разделителя операторов. У меня есть внешние переменные в моем скрипте, и они доступны только в первом операторе в многоступенчатом... для второго оператора xdmp:document-add-properties я получил XDMP-UNEXPECTED.. Следующий мой код

      let $sub-query := 'xquery version "1.0-ml";
                         declare option xdmp:transaction-mode "update";
                         declare variable $newDocUri  external;
                        declare variable $transformed_annotations external;
                        declare variable $uri external;
                        declare variable $app  external;
                        declare variable $id external;

                        xdmp:document-insert($newDocUri, $transformed_annotations,(xdmp:default-permissions()), ("annotated", "termite", $app));
                        xdmp:document-add-properties($newDocUri, (<document-parent-location>{$uri}</document-parent-location>,
                                                                        <context>{$app}</context>,
                                                                        <id>{$id}</id>))
                        xdmp:commit()
                    '

                    let $_ := xdmp:eval($sub-query, (
                                                    xs:QName("newDocUri"),$newDocUri,
                                                    xs:QName("transformed_annotations"), $transformed_annotations,
                                                    xs:QName("uri"), $uri,
                                                    xs:QName("app"), $app,
                                                    xs:QName("id"), $id
                                                    ), <options xmlns="xdmp:eval">
                                                            <isolation>different-transaction</isolation>
                                                        </options>)

2 ответа

Решение

В ваших вторых (и будущих последующих) операторах вам необходимо переобъявить пролог XQuery, включая любые объявления внешних переменных, которые вам понадобятся в этом запросе.

Вы можете рассмотреть возможность помещения каждого оператора в отдельный модуль и вызова операторов из вашего основного модуля, передавая внешние переменные с помощью xdmp:invoke().

Надеюсь, что это помогает,

Другие вопросы по тегам