从 XQuery 到 XHTML

From XQuery to XHTML

我需要一些帮助。

我正在尝试编写一个 XQuery,其输出将是一个 XHTML 文件。问题是,"An XHTML document must have an XHTML DOCTYPE declaration" 并且我无法将 DOCTYPE 行放入我的 XQuery 文件中以生成有效的 XHTML 文件。

我可能误解了什么,非常感谢您的帮助。

更具体地说:

我有一个小的 XQuery 脚本:

for $book in doc("data.xml")//book
        where $book/copycount = max(
            for $count in doc("data.xml")//book/copycount
            return $count
            )
        return (data($book/title))

而且我想围绕这个显示返回字符串的脚本生成一个有效的 XHTML 文件。

一种通用的方法是将其作为文档节点的文本节点子节点插入:

document {
  text { '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' },
  xdmp:quote(
    **** your XQY ****
  )
  (: or in eXist, util:serialize(), etc.  :)
}

一些 XQuery 处理器有这样的选项标志,所以您可以使用它,让处理器为您序列化它。

如果您的 XQuery 处理器本身不序列化结果,您必须告诉我们更多关于您的平台以及您如何使用结果的信息。

如果您的处理器自己序列化结果并且是 1.0,您必须告诉我们您使用的是哪一个并查看其文档以了解依赖于实现的开关来执行此操作。

最后但同样重要的是,如果您使用 XQuery 3.0 并且您的处理器负责序列化,您可以使用以下命令将输出树序列化为 XHTML,使用正确的 DOCTYPE(请参阅相关定义http://w3.org/TR/xquery-30/#id-serialization and http://w3.org/TR/xslt-xquery-serialization-30/#xhtml-output 的规格):

xquery version "3.0";

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method         "xhtml";
declare option output:doctype-public "-//W3C//DTD XHTML 1.0 Transitional//EN";
declare option output:doctype-system "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";

/some/query/here