首页 > 解决方案 > 如何向 .xq 查询创建的 .xml 文件添加 .dtd 验证?

问题描述

所以我的查询工作正常,我现在需要使用 .dtd 验证来验证生成的 .xml。我的 .xq 以前看起来像这样:

<根>

...

...

</根>

现在看起来像这样:

< !DOCTYPE root SYSTEM 'validation.dtd'>

<根>

...

...

</根>

但是,现在运行 .xq 会引发以下错误:

XPST0003 #...as xs:integer external; 附近的 XQuery 语法错误;< !D#:

在 '< !' 之后应为 '--' 或 '[CDATA['

查询中的静态错误

我不知道这个错误是什么意思,也找不到解决方法

提前致谢

标签: xquery

解决方案


要使用文档类型声明序列化 XML 文档,请使用fn:serialize()doctype-system参数的函数:

xquery version "3.1";

fn:serialize(<root/>, map { "doctype-system": "validation.dtd" })

这会产生以下字符串:

<!DOCTYPE root SYSTEM "validation.dtd">
<root/>

有关此技术的更多信息,请参阅 https://www.w3.org/TR/xpath-functions-31/#func-serialize 上的函数文档以及httpsfn:serialize()XSLT 和 XQuery 序列化 3.1 规范中的doctype-system和参数的描述://www.w3.org/TR/xslt-xquery-serialization-31/#XML_DOCTYPEdoctype-public

对于只支持 XPath 3.0 或者还没有实现map(*)指定序列化参数的方法的处理器,可以使用这种形式:

xquery version "3.0";

declare namespace output="http://www.w3.org/2010/xslt-xquery-serialization";

fn:serialize(
    <root/>, 
    <output:serialization-parameters>
        <output:doctype-system value="validation.dtd"/>
    </output:serialization-parameters>
)

推荐阅读