XQuery 3.0 и карты в Саксонии - PullRequest
       31

XQuery 3.0 и карты в Саксонии

0 голосов
/ 28 января 2012

Я бы хотел поэкспериментировать с элементами карты в Саксонии (http://www.saxonica.com/documentation/expressions/xpath30maps.xml),, но я не могу получить компиляцию запросов в прошлом. Возможно, мне не хватает какого-либо параметра или я использую неправильное пространство имен, но я просто не могу найти правильный ответ Это мой код запроса:

xquery version "3.0";

(: i have also tried http://www.w3.org/2005/xpath-functions/map, no difference :)
import module namespace map = "http://ns.saxonica.com/map";

map:get(map { 1 := 'aaa'}, 1)

вызывается из командной строки:

"c:\Program Files\Saxonica\SaxonEE9.4N\bin\Query.exe" -s:play.xml -q:play2.xq" -qversion:3.0

Команды заканчиваются ошибкой. Не удается найти модуль для пространства имен "http://ns.saxonica.com/map" Когда я опускаю объявление карты пространства имен модуля, появляется ошибка: карта префикса не была объявлена, поэтому я предполагаю, что так и должно быть.

Ответы [ 3 ]

3 голосов
/ 30 января 2012

Майкл Кей только что опубликовал новую запись в блоге с подробностями о реализации Saxon Map: http://dev.saxonica.com/blog/mike/2012/01/#000188

2 голосов
/ 29 января 2012

Вы должны использовать declare namespace вместо import module namespace для доступа к встроенным функциям.Насколько я понимаю, импорт модуля предназначен только для пользовательских модулей.

Файл map.xq:

declare namespace map="http://www.w3.org/2005/xpath-functions/map";
map:get(map { 1 := 'aaa'}, 1)

Работает просто отлично:

> "C:\Program Files\Saxonica\SaxonEE9.4N\bin\Query.exe" -qversion:3.0 map.xq
<?xml version="1.0" encoding="UTF-8"?>aaa

Я тоже попробовал это с Saxon-EE 9.4.0.2J (версия Java), с тем же эффектом.

0 голосов
/ 28 января 2012

Не знаю, если это поможет, но процессор BaseX XQuery также предлагает реализацию предложения карты Майкла Кея (еще не завершено W3): http://docs.basex.org/wiki/Map_Module

...