К моему удивлению, я борюсь с довольно простым вопросом XQuery, а именно, как правильно распределить глобальные переменные между основным модулем XQuery и импортированными библиотечными модулями. Проще говоря, я хотел бы определить глобальную переменную где-нибудь, которую можно повторно использовать где угодно (то есть во всех (импортированных) модулях XQuery), и я изо всех сил пытаюсь найти лучшее место для объявления такой переменной.
Предположим, у меня есть следующий основной XQuery (test.xq):
import module namespace global="global" at "global.xq";
import module namespace test2="test2" at "test2.xq";
declare variable $test := 'test!';
test2:echo()
Этот модуль импортирует следующие библиотечные модули:
global.xq:
module namespace global="global";
declare variable $global:test := 'global!';
test2.xq:
пространство имен модуля test2 = "test2";
import module namespace global="global" at "global.xq";
declare function test2:echo() {
$global:test
};
Это работает, но оставляет мне несколько вопросов:
Это способ сделать это:
- определить глобальные переменные (например, $ global: test) в отдельном модуле библиотеки (например, global.xq)
- импортировать этот модуль туда, где он необходим для обеспечения доступа к его переменным
?
- Есть ли способ доступа к переменным, объявленным в основном модуле XQuery (например, $ test) в импортированных библиотечных модулях (например, test2.xq)?
Может кто-нибудь пролить свет на это? Я предполагаю, что главная причина, почему я сталкиваюсь с этой концепцией, заключается в том, что я привык к поведению eXist , которое, вероятно, слабее, чем следовало бы. В eXist модуль test2.xq может просто ссылаться на переменную $ global: test без импорта модуля global.xq:
module namespace test2="test2";
declare namespace global="global";
declare function test2:echo() {
$global:test
};
Поскольку это работает в eXist, но не в Saxon, я начал задаваться вопросом, как правильно определить и использовать глобальные переменные в (импортированных) модулях XQuery.
С уважением,
Рон