令我驚訝的是,我正在與一個非常基本的XQuery問題搏鬥,即在主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 .x: module namespace test2 =「test2」;
import module namespace global="global" at "global.xq"; declare function test2:echo() { $global:test };
這工作,但給我留下了一些問題:
這是做到這一點的方式:
- 定義全局變量(如$全球:測試)在一個單獨的庫模塊中(例如global.xq)
- 將模塊導入需要提供的任何模塊訪問其變量
?
- 有沒有辦法訪問導入的庫模塊(例如test2.xq)中的主XQuery模塊(例如$ test)中聲明的變量?
任何人都可以闡明這一點嗎?我想我發現自己在這個概念上掙扎的主要原因是因爲我習慣於eXist的行爲,這可能比它應該放鬆。在存在,test2.xq模塊可以直接參考$全局:測試變量,而不用導入global.xq模塊:
module namespace test2="test2";
declare namespace global="global";
declare function test2:echo() {
$global:test
};
由於這部作品中不存在,但不是在撒克遜人,我就開始琢磨什麼在(導入的)XQuery模塊中定義和使用全局變量的正確方法。
親切的問候,
羅恩
謝謝你的想法。我非常清楚,我可能會遇到基於非標準行爲的假設。然而,我在網上找不到關於這種設計模式的許多有用提示。我不喜歡針對這種基本需求的特定於供應商的擴展。你會推薦我的原始問題中的工作方法(即在專用庫模塊中定義全局變量並根據需要導入)作爲使所有(導入)XQuery模塊都可訪問全局變量的標準方法嗎?或者你看到其他(符合)的可能性? – rvdb 2012-03-06 15:01:07
@rvdb我建議通過參數傳遞這樣的值給每個調用。將大量的上下文信息收集到一個小的XML片段中非常容易,並且可以通過它。它是迄今爲止最可擴展和最乾淨的。 像你這樣導入一個共享的全局模塊是最明智的選擇,除非你有足夠的理由想要初始化我描述的行爲。 HTH! – grtjn 2012-03-06 16:21:50