所以我的查询工作正常,现在我需要使用.dtd验证来验证生成的.xml。我的.xq以前是这样的:
...
...
现在看起来像这样:
<!DOCTYPE根系统'validation.dtd'>
...
...
但是,现在运行.xq会引发以下错误:
XPST0003 XQuery语法错误在#...附近,因为xs:integer external; <!D#:
在'<!'
之后应为'-'或'[CDATA ['查询中的静态错误
我不知道此错误是什么意思,也无法找到解决方法
预先感谢
答案 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-serialize上fn:serialize()
的功能文档以及XSLT和XQuery序列化3.1规范中doctype-system
和doctype-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>
)