所以我的查询工作正常,我现在需要使用 .dtd 验证来验证生成的 .xml。我的 .xq 之前看起来像这样:
< root>
...
...
< /root>
现在看起来像这样:
< !DOCTYPE root SYSTEM 'validation.dtd'>
< root>
...
...
< /root>
但是,现在运行 .xq 会抛出以下错误:
XPST0003 XQuery syntax error near #...as xs:integer external; < !D#:
Expected '--' or '[CDATA[' after '< !'
Static error(s) in query
我不知道这个错误是什么意思,也找不到解决方法
提前致谢
最佳答案
要序列化带有文档类型声明的 XML 文档,请使用带有 doctype-system
参数的 fn:serialize()
函数:
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>
)
关于xquery - 如何将 .dtd 验证添加到由 .xq 查询创建的 .xml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53347753/