如何在.xq查询创建的.xml文件中添加.dtd验证?

时间:2018-11-17 02:50:14

标签: xquery

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

  

     

...

     

...

     

现在看起来像这样:

  

<!DOCTYPE根系统'validation.dtd'>

     

     

...

     

...

     

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

  

XPST0003 XQuery语法错误在#...附近,因为xs:integer external; <!D#:

     

在'<!'

之后应为'-'或'[CDATA ['      

查询中的静态错误

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

预先感谢

1 个答案:

答案 0 :(得分:3)

要使用文档类型声明来序列化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-serializefn:serialize()的功能文档以及XSLT和XQuery序列化3.1规范中doctype-systemdoctype-public参数的说明,网址为https://www.w3.org/TR/xslt-xquery-serialization-31/#XML_DOCTYPE

对于仅支持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>
)