Css 如何从主脚本向Xquery模块提供全局变量?
目前,我通过一个外部变量将两个数据库的名称输入到我的主xql文件中。我想将这些值传递给我的任何XQL模块 例如,我可以有一个主脚本导入模块“mylib” 然后我向主脚本提供dbName外部变量,它可以工作,但我想以某种方式将它传递给我的模块Css 如何从主脚本向Xquery模块提供全局变量?,css,xml,xpath,xquery,saxon,Css,Xml,Xpath,Xquery,Saxon,目前,我通过一个外部变量将两个数据库的名称输入到我的主xql文件中。我想将这些值传递给我的任何XQL模块 例如,我可以有一个主脚本导入模块“mylib” 然后我向主脚本提供dbName外部变量,它可以工作,但我想以某种方式将它传递给我的模块 module namespace mylib = "http://example.org/mylib"; declare variable $mylib:dbName external; declare function m
module namespace mylib = "http://example.org/mylib";
declare variable $mylib:dbName external;
declare function mymod:print() as xs:string {
$mymod:dbName
};
如何将本地dbName的值绑定到模块的实例$myLib:dbName
我试过:
- 将主文件中的变量设置为全局变量,以便任何导入的模块都可以读取这些变量
- 在模块中声明相同的变量,并尝试使用类似于声明变量$mylib:dbname:=$dbname的内容从主类分配它们
- 将模块变量唯一地声明为外部变量,在我的主脚本中从它们获取值,然后尝试从那里读取它
有什么简单的解决办法吗??或者我必须静态地为任何模块定义相同的值吗?为什么不将其作为参数传递给函数
mymod:print($dbname)
为什么不把它作为参数传递给函数呢
mymod:print($dbname)
如果XQuery处理器允许部分应用程序使用参数占位符,则可以在映射中返回一组方法,这些方法已绑定了
$dbname
参数
示例模块
xquery version "3.1";
module namespace mymod = "http://example.org/mymod";
declare function mymod:print ($dbname as xs:string) as xs:string {
$dbname
};
declare function mymod:items-by-name ($dbname as xs:string, $names as xs:string*) as xs:string {
collection($dbname)//item[@name = $names]
};
declare function mymod:get-bound-methods ($dbname as xs:string) as map(*) {
map {
(: return result of a function :)
"print": mymod:print($dbname),
(: return partially applied function:)
"items-by-name": mymod:items-by-name($dbname, ?)
}
};
import module namespace mymod = "http://example.org/mymod" at "mymod.xqm";
declare variable $dbName external;
declare variable $local:bound := mymod:get-bound-methods($dbName);
(: print evaluates to a xs:string :)
$local:bound?print,
(: items-by-name evaluates to a function with an arity of 1 :)
$local:bound?items-by-name("a"),
$local:bound?items-by-name(("a", "sequence", "of", "names"))
用法
xquery version "3.1";
module namespace mymod = "http://example.org/mymod";
declare function mymod:print ($dbname as xs:string) as xs:string {
$dbname
};
declare function mymod:items-by-name ($dbname as xs:string, $names as xs:string*) as xs:string {
collection($dbname)//item[@name = $names]
};
declare function mymod:get-bound-methods ($dbname as xs:string) as map(*) {
map {
(: return result of a function :)
"print": mymod:print($dbname),
(: return partially applied function:)
"items-by-name": mymod:items-by-name($dbname, ?)
}
};
import module namespace mymod = "http://example.org/mymod" at "mymod.xqm";
declare variable $dbName external;
declare variable $local:bound := mymod:get-bound-methods($dbName);
(: print evaluates to a xs:string :)
$local:bound?print,
(: items-by-name evaluates to a function with an arity of 1 :)
$local:bound?items-by-name("a"),
$local:bound?items-by-name(("a", "sequence", "of", "names"))
如果XQuery处理器允许部分应用程序使用参数占位符,则可以在映射中返回一组方法,这些方法已绑定了
$dbname
参数
示例模块
xquery version "3.1";
module namespace mymod = "http://example.org/mymod";
declare function mymod:print ($dbname as xs:string) as xs:string {
$dbname
};
declare function mymod:items-by-name ($dbname as xs:string, $names as xs:string*) as xs:string {
collection($dbname)//item[@name = $names]
};
declare function mymod:get-bound-methods ($dbname as xs:string) as map(*) {
map {
(: return result of a function :)
"print": mymod:print($dbname),
(: return partially applied function:)
"items-by-name": mymod:items-by-name($dbname, ?)
}
};
import module namespace mymod = "http://example.org/mymod" at "mymod.xqm";
declare variable $dbName external;
declare variable $local:bound := mymod:get-bound-methods($dbName);
(: print evaluates to a xs:string :)
$local:bound?print,
(: items-by-name evaluates to a function with an arity of 1 :)
$local:bound?items-by-name("a"),
$local:bound?items-by-name(("a", "sequence", "of", "names"))
用法
xquery version "3.1";
module namespace mymod = "http://example.org/mymod";
declare function mymod:print ($dbname as xs:string) as xs:string {
$dbname
};
declare function mymod:items-by-name ($dbname as xs:string, $names as xs:string*) as xs:string {
collection($dbname)//item[@name = $names]
};
declare function mymod:get-bound-methods ($dbname as xs:string) as map(*) {
map {
(: return result of a function :)
"print": mymod:print($dbname),
(: return partially applied function:)
"items-by-name": mymod:items-by-name($dbname, ?)
}
};
import module namespace mymod = "http://example.org/mymod" at "mymod.xqm";
declare variable $dbName external;
declare variable $local:bound := mymod:get-bound-methods($dbName);
(: print evaluates to a xs:string :)
$local:bound?print,
(: items-by-name evaluates to a function with an arity of 1 :)
$local:bound?items-by-name("a"),
$local:bound?items-by-name(("a", "sequence", "of", "names"))
因为我必须把它传给所有的Methods,我想知道是否有一个easz-waz,特别是如果我想要一些类似内部静态变量的Szncroniyation,因为我必须把它传给所有Methods,我想知道是否有一个easz-waz,特别是,如果我想要一些带有内部静态变量的szncroniyation,我也有类似的问题:我想将一个外部变量(称为“x”)从主模块传递到子模块。子模块使用此外部变量(“x”)构建全局变量,因此我无法将值(“x”)作为参数发送。这是一种方法吗?Xquery没有真正的全局变量。它们总是本地的。但如果这对于您的用例来说已经足够了,您可以修改
声明变量$local:bound:=mymod:get-bound方法($dbName)代码>只返回修改后的值而不是映射。我有一个类似的问题:我想将一个外部变量(称为“x”)从主模块传递到子模块。子模块使用此外部变量(“x”)构建全局变量,因此我无法将值(“x”)作为参数发送。这是一种方法吗?Xquery没有真正的全局变量。它们总是本地的。但如果这对于您的用例来说已经足够了,您可以修改声明变量$local:bound:=mymod:get-bound方法($dbName)
只返回修改后的值而不是映射。