Один из элементов карты вызывает ошибку SEPM0017 - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь запустить один из примеров кода без изменений из книги «XQuery: поиск по множеству XML Data 2nd Edition» от издателя O'Reilly Media.

(: XQuery by Priscilla Walmsley (c) 2016 Priscilla Walmsley:)
(:Example 13-4 Serialization parameters in a map :)
xquery version "3.1";
declare namespace prod = "http://datypic.com/prod"; 
let $map := map {
   "method": "xml",
   "version": "1.0",
   "indent": true(),
   "cdata-section-elements": (xs:QName("prod:desc"),xs:QName("prod:name")),
   "use-character-maps": map {
                           "«":"<%",
                           "»":">%"
                         }
}
let $element := <prod:name>Fleece Pullover</prod:name>
return serialize($element,$map)

Я использую BaseX 9.3.2 для этого. Но когда я пытаюсь запустить код, я получаю сообщение об ошибке:

Stopped at C:/Users/Arek/AppData/Local/Temp/example1304.xqy, 16/17:
[SEPM0017] item() expected, xs:QName+ found: (Q{http://datypic.com/prod}desc, Q{http://datypic.com/prod}name).

Когда я удаляю 9-ю строку с элементом cdata-section-elements , код запускается. Это проблема с реализацией XQuery или с кодом?

1 Ответ

0 голосов
/ 02 апреля 2020

Я думаю, что функция 3.1 spe c https://www.w3.org/TR/xpath-functions/#func -serialize четко определяет, что cdata-section-elements отображает значение как xs:QName*, то есть как последовательность xs:QName s, поэтому пример в книга права.

http://docs.basex.org/wiki/Serialization приводит пример "cdata-section-elements": "div" и документы "Список элементов, которые должны быть выведены в виде CDATA, разделенных пробелами", чтобы они могли иметь там известную разницу, возможно, мотивировано, что первым разрешенным способом был атрибут cdata-section-elements, перечисляющий QNames в единственном значении атрибута узла / документа параметра сериализации.

В прошлом, когда я сталкивался с такими различиями, я думаю, что они говорили, что раньше версии spe c и / или BaseX допускают поддерживаемый в настоящее время способ, и что реализация spe c нарушит обратную совместимость.

Полагаю, вы можете задать вопрос в списке рассылки BaseX или даже поднять проблему на GitHub

...