【发布时间】:2017-06-19 10:40:22
【问题描述】:
我想根据存储在 BaseX DB 中的 RelaxNG 模式验证 XML。
我还在 DB 中存储了 RelaxNG 架构,但是当我验证它时会抛出以下错误。
验证代码:
let $binary := db:retrieve('onix','/relaxng/publishers-51cr.rnc')
let $schema := bin:decode-string($binary)
return
let $input := db:open('onix')
return validate:rng($input, $schema)
当我运行查询时,它会抛出错误:
无效的 XML 字符(20)
所以它在解码二进制时出错。
【问题讨论】:
-
您的紧凑型 RelaxNG 架构似乎包含在 XML 1.0 中无效的字符。
-
架构看起来像:====================================== ==============命名空间 a = "relaxng.org/ns/compatibility/annotations/1.0" 命名空间 ctrl = "nwalsh.com/xmlns/schema-control" 默认命名空间 db = "docbook.org/ns/docbook" 命名空间 dcmitype = "purl.org/dc/dcmitype" 命名空间 dcterms = "purl.org/dc/terms" 命名空间 html = "w3.org/1999/xhtml" 命名空间 mml = "w3.org/1998/Math/MathML" 命名空间 rng = "relaxng.org/ns/structure/1.0"
-
div { db._any.attribute = ## 任何属性,包括任何命名空间中的任何属性。属性 * { text } db._any = ## 来自几乎任何命名空间元素的任何元素 * - (db:* | html:*) { (db._any.attribute | text | db._any)* } }
-
它不是 XML 我在 BaseX 中使用函数 db:store 将架构存储为二进制文件,因为 RelaxNG 架构不是 XML,之后我将其解码为字符串以验证 XML。
-
能否请您提供我如何实现此目标的示例
标签: basex