2016-01-22 1 views
0

Я пытаюсь запустить следующий код в саксонскомпространства имен для отображения в Saxon-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 (для $ 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 Я думаю.

В качестве альтернативы, на основе комментария Christian Grůň, используйте прологе

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

Предположим, что Saxon 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' Оба не работают, я боюсь –

Смежные вопросы