2016-01-22 52 views
0

我试图在撒克逊运行下面的代码命名空间在地图撒克逊-EE

map:merge(for $mov in doc("movies.xml")/movies/movie return map:entry($mov/@id, avg($mov/ratings/child::node())))

不过,我得到的错误如下:

XPST0081: Namespace prefix 'map' has not been declared

我相信我需要在查询的开头设置名称空间。

所以我搜索了一点,找到了答案here和修改我的代码如下:

import module namespace map="http://www.w3.org/2005/xpath-functions/map"; 

map:merge(for $mov in doc("movies.xml")/movies/movie return map:entry($mov/@id, avg($mov/ratings/child::node()))) 

我得到另一个错误:XQST0059: Cannot locate module for namespace http://www.w3.org/2005/xpath-functions/map

我必须使用哪种命名空间?

UPDATE

我尝试了新的代码

declare namespace map = "http://www.w3.org/2005/xpath-functions/map"; 
map:merge(for $mov in doc("movies.xml")/movies/movie return map:entry($mov/@id, avg($mov/ratings/child::node()))) 

,并使用下面的命令

java -cp saxon9ee.jar net.sf.saxon.Query -qversion:3.1 -o:out mapq.xq

我得到一个新的错误如下

Error on line 2 at column 28 of file:mapq.xq 
    Cannot serialize a map using the xml method 
Query failed with dynamic error: Cannot serialize a map using the xml method 
+0

新[自适应](https://www.w3.org/TR/xslt-xquery-serialization-31/#自适应输出)方法将允许您输出地图。您可以将以下行添加到查询的序言中: declare namespace output =“http://www.w3.org/2010/xslt-xquery-serialization”; 声明选项输出:方法“自适应”; - 在单独的StackOverflow问题中讨论它可能会更有意义。 –

+0

亲爱的博士我使用下面的代码 'declare namespace map =“http://www.w3.org/2005/xpath-functions/map”; declare namespace output =“w3.org/2010/xslt-xquery-serialization”; 声明选项输出:方法“自适应”; map:merge(for $ mov in doc(“movies.xml”)/ movies/movie return map:entry($ mov/@ id,avg($ mov/ratings/child :: node())))'Still说错误 –

+0

你能否请开一个新的问题? –

回答

1

使用declare namespace map = "http://www.w3.org/2005/xpath-functions/map";。另请注意,直接输出地图需要输出方法adaptive!method=apaptive)或json我认为。

作为替代,基于基督教的格律恩的评论,请使用序言

declare namespace map = "http://www.w3.org/2005/xpath-functions/map"; 
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization"; 
declare option output:method "adaptive"; 
+0

嗨,请检查更新 –

+0

假设撒克逊9.7,添加'!method = adaptive'到命令行,以便您的地图结果可以序列化。 –

+0

'java -cp saxon9ee.jar net.sf.saxon.Query -qversion:3.1!method = adaptive mapq.xq' 'java -cp saxon9ee.jar net.sf.saxon.Query -qversion:3.1 method = adaptive mapq .xq' 这两个都不行,恐怕 –