xquery - 如何将 .dtd 验证添加到由 .xq 查询创建的 .xml 文件?

标签 xquery

所以我的查询工作正常,我现在需要使用 .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-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>
)

关于xquery - 如何将 .dtd 验证添加到由 .xq 查询创建的 .xml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53347753/

相关文章:

xslt - XSL 中每组值的最大总和

java - 使用 Java 插入 ExistDB

sql-server - 在 MS SQL Server 的存储过程中使用 xQuery 时插入 XML 之外的值

xquery - 函数实现 "Element does not have this child"?

mysql - XQuery - "NOT IN"等效项未按预期工作

“”实体引用导致的XQuery Invalid entity reference错误

xml - MarkLogic 5 返回包含在 CDATA 中的元素

xslt - xsl 文本转换中的空格

recursion - 如何在 XQuery 中递归地列出集合/资源

sql - 使用 XQuery 替换 SQL Server 中的 xml 命名空间前缀