Xquery 从Marklogic中的主模块运行库模块?
更新代码 我的库模块是这样的Xquery 从Marklogic中的主模块运行库模块?,xquery,marklogic,Xquery,Marklogic,更新代码 我的库模块是这样的 module namespace test="http://try.marklogic.com/test"; declare function test:median( $map as map:map* ) as node()* { cts:search(fn:doc(), cts:and-query(( cts:element-word-query( xs:QName("College"),map:get($map,"College"
module namespace test="http://try.marklogic.com/test";
declare function test:median(
$map as map:map*
) as node()*
{
cts:search(fn:doc(),
cts:and-query((
cts:element-word-query(
xs:QName("College"),map:get($map,"College")),
cts:element-word-query(
xs:QName("Year"),map:get($map,"Year")),
cts:element-word-query(
xs:QName("Dep"),map:get($map,"Dep")),
cts:element-word-query(
xs:QName("Grade"),map:get($map,"Grade")),
cts:element-range-query(xs:QName("Date"), ">",
map:get($map,"StartDate")),
cts:element-range-query(xs:QName("Date"), "<",
map:get($map,"EndDate")))))
};
如何单独传递参数而不是在主模块中指定?将库中的“作为cts:search
”第4行去掉
如果需要定义返回类型(从语言的角度看不需要),那么使用实际返回的返回类型。
这将是cts:search()
,“作为节点()*
”的结果
请参阅:您正在以map:map的形式传入参数。这是故意的吗?如果传入map:map,则需要使用例如map:get($map,'College')获取映射条目。或者,您也可以声明所有参数,并分别传递它们。顺便说一句,JoiningDate上的范围查询可能不会返回结果,因为它们可能是互斥的。一个日期不能小于或大于某个值。。Thanks@grtjn正如你所建议的,我修改了代码,并且工作得很好。正如你所说的
你也可以声明所有的参数,并分别传递它们。
我该怎么做?声明函数test:median($College,$year,…)
,然后用调用它,test:median($College,$year,…)
…意味着你说的不是map,而是像$College,
一样单独使用它们,$Year,…
对吗?
import module namespace test = "http://try.marklogic.com/test" at "/lib1.xqy";
let $map := map:map()
let $College := "UCLA"
let $Year := "2000"
let $StartDate := xs:date("2017-01-06")
let $EndDate := xs:date("2018-01-06")
let $Dep := "CSE"
let $Grade := "A"
let $put := ( map:put($map, "College",$College),
map:put($map, "Year",$Year),
map:put($map, "Date",$StartDate),
map:put($map, "Date",$EndDate),
map:put($map, "Dep",$Dep),
map:put($map, "Grade",$Grade) )
return test:median($map)