これは確かに可能です。それを渡すか、「グローバル」変数として宣言することができます: 宣言された変数:
declare variable $forumUrl := "http://www.abc.com";
declare variable $rootNode := doc('abc');
declare function local:topic(){
for $topic in $rootNode//td[@class="alt1Active"]//a
return
<page>{concat($forumUrl, $topic/@href, '')}</page>
};
declare function local:thread(){
for $thread in $rootNode//td[@class="alt2"]//a
return
<thread>{concat($forumUrl, $thread/@href, '')}</thread>
};
または、URL を引数として渡します。
declare variable $rootNode := doc('abc');
declare function local:topic($forumUrl){
for $topic in $rootNode//td[@class="alt1Active"]//a
return
<page>{concat($forumUrl, $topic/@href, '')}</page>
};
declare function local:thread($forumUrl){
for $thread in $rootNode//td[@class="alt2"]//a
return
<thread>{concat($forumUrl, $thread/@href, '')}</thread>
};
local:topic("http://www.abc.de")
NB私はあなたの例から「h:」名前空間を取り除き、$rootNode
変数を追加しました。
これが役に立ったことを願っています。
一般に、XQuery 関数への引数は次のように指定できます。
local:foo($arg1 as type) as type
type の例:
xs:string
文字列
xs:string+
少なくとも 1 つの文字列のシーケンス
xs:string*
任意の数の文字列
xs:string?
長さ 0 または文字列の 1 つのシーケンス
関数は必要な数の引数を持つことができ、引数の型は省略できます。
関数の戻り値を入力することもできます。例のコンテキストでは、署名は次のようになります。
declare function local:thread($forumUrl as xs:string) as element(thread)+
local:thread が正確に 1 つの文字列を受け入れ、スレッド要素の空でないシーケンスを返すことを定義します。
マイケル