如何在 XQuery 中填充地图?
How to populate a map in XQuery?
我在下面有一个XML文件link
我想用电影 ID 及其相应评分的平均值填充地图。我正在尝试从此 site
中执行以下命令
for $doc in db:open("movies","movies.xml")/movies/movie
let $map:= map:map()
let $key := map:put($map, $doc/@id, avg($doc/ratings/child::node()))
return $map
然而,它没有 运行。我得到一个例外,Expecting variable declaration
。我做错了什么?
编辑:
我正在尝试以下命令
let $map:=map{}
for $doc in db:open("movies","movies.xml")/movies/movie
return
map:put($map,
$doc/@id,avg($doc/ratings/child::node())
)
我得到单独的地图
如我的评论所述,MarkLogic 使用的映射语法与 XQuery 3.1 术语 map
无关。 MarkLogic 在官方 XQuery 规范定义它之前实现了这个映射结构(这个结构相当新)。因此,只有当您使用 MarkLogic 时,您才能使用 MarkLogic 文档中记录的地图,它是专有扩展。
另一方面,BaseX 支持 XQuery 3.1 构造 map
。因此你应该遵循什么是documented at the BaseX documentation。这使得它实际上更短并且没有副作用。你可以例如做:
map:merge(for $movie in db:open("movies","movies.xml")/movies/movie return map:entry($movie/@id, avg($movie/ratings/child::node())))
您也可以使用 map:put
,但对于此用例来说意义不大,因为每次调用 map:put()
函数时都会创建一个新地图。
我在下面有一个XML文件link
我想用电影 ID 及其相应评分的平均值填充地图。我正在尝试从此 site
中执行以下命令for $doc in db:open("movies","movies.xml")/movies/movie
let $map:= map:map()
let $key := map:put($map, $doc/@id, avg($doc/ratings/child::node()))
return $map
然而,它没有 运行。我得到一个例外,Expecting variable declaration
。我做错了什么?
编辑:
我正在尝试以下命令
let $map:=map{}
for $doc in db:open("movies","movies.xml")/movies/movie
return
map:put($map,
$doc/@id,avg($doc/ratings/child::node())
)
我得到单独的地图
如我的评论所述,MarkLogic 使用的映射语法与 XQuery 3.1 术语 map
无关。 MarkLogic 在官方 XQuery 规范定义它之前实现了这个映射结构(这个结构相当新)。因此,只有当您使用 MarkLogic 时,您才能使用 MarkLogic 文档中记录的地图,它是专有扩展。
另一方面,BaseX 支持 XQuery 3.1 构造 map
。因此你应该遵循什么是documented at the BaseX documentation。这使得它实际上更短并且没有副作用。你可以例如做:
map:merge(for $movie in db:open("movies","movies.xml")/movies/movie return map:entry($movie/@id, avg($movie/ratings/child::node())))
您也可以使用 map:put
,但对于此用例来说意义不大,因为每次调用 map:put()
函数时都会创建一个新地图。