我试图从出版商O‘’Reilly的"XQuery:跨XMLData2Edition多样性搜索“一书中运行一个不变的代码示例。
(: 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-节元素元素,代码运行。无论是XQuery实现问题还是代码问题?
发布于 2020-04-02 16:50:11
我认为3.1函数规范https://www.w3.org/TR/xpath-functions/#func-serialize清楚地将cdata-section-elements映射值定义为xs:QName*,即作为xs:QName的序列,因此本书中的示例是正确的。
http://docs.basex.org/wiki/Serialization给出了一个示例"cdata-section-elements": "div"和文档“要作为CDATA输出的元素列表,由空格分隔”,因此它们可能有一个已知的区别,这可能是因为允许的第一种方式是在序列化参数节点/文档的单个属性值中列出QNames的cdata-section-elements属性。
在过去,当我遇到这样的差异时,我认为他们说规范和/或BaseX的早期版本允许采用当前支持的方式,并且实现规范会破坏向后兼容性。
我想你可以在BaseX邮件列表上询问,甚至在GitHub上提出一个问题
https://stackoverflow.com/questions/60996529
复制相似问题