【问题标题】:XSLT vs. XQueryXSLT 与 XQuery
【发布时间】:2013-05-02 22:24:08
【问题描述】:
我是这两种技术的新手,按照我在这些步骤中的理解,我概述了它们在从原始 XML 文件生成 HTML 中的作用(如果我错了,请纠正我):
- XML 数据源(数据库、RSS、...)
- XQuery(数据操作 FLWR)
- XSLT(通过模板表示数据)
- 最终要交付的 XHTML 文档
我想知道使用它们的技术细节,具体来说,这里有一些问题:
- 如何在 PHP Web 服务器中实现 XQuery(我正在使用 WAMP 套件)。
- 我如何请求 .xq 页面(我可以直接执行此操作,还是应该使用 CGI 执行此操作?)
- 如何将生成的 XML 页面从 XQuery 调用传递到 XSLT 以进行模板化?
您能给我一些使用这些技术创建网站的开发环境的指点吗,谢谢。
-- 更新:我现在明白 XQuery 和 XSLT 之间的区别在于观点上的不同,因为两个不同的工作组正在维护它们,尽管它们都将以不同的方法完成工作。
我仅将 XSLT 用于数据操作和表示,我正在实现结构化模板方法,可以在此处找到 XSLT Abstractions 以便稍微组织工作。
【问题讨论】:
标签:
development-environment
xslt
xquery
【解决方案1】:
我有一个按照您描述的方式工作的系统。它是这样运行的;
输入
- XML 数据是纯文本文件,例如。 “数据.xml”。
- XSL 样式表是一个纯文本文件,例如。 “style.xsl”。
- xquery 是一个纯文本文件,例如。 “test.xq”。
- xquery 处理器作为服务在端口 2409 上运行。(更多信息请参见下文。)
流程
-
一个 PHP 脚本,例如。 “index.php”运行。它像这样联系 xquery 处理器;
$xml = file_get_contents("http://localhost:2409/test.xq");
-
test.xq 查询由 xquery 处理器执行。 test.xq查询使用doc函数加载数据;
declare variable $root := doc("data.xml");
test.xq 完成后,xquery 处理器将结果返回给 index.php。
-
回到 index.php,$xml 现在包含 test.xq xquery 的结果。调用 XSLT 处理器将 XML 转换为 XHTML。 PHP 代码类似于;
$doc = 新的 DOMDocument();
$doc->loadXML($xml);
$stylesheet = new DOMDocument();
$stylesheet->load("style.xsl");
$处理器 = 新 XSLTProcessor();
$processor->importStylesheet($stylesheet);
$xhtml = $processor->transformToXML($doc);
回声 $xhtml;
使用标准组件无法实现的唯一部分是 xquery 处理器。我必须使用 Java servlet 编写该位来调用 Saxon xquery 处理器。 Java 和 Saxon 都是免费的,但仍然需要大量学习才能使其正常工作。
你可以看到它在工作here。
我喜欢这种技术,因为 a) 它将逻辑与表示分离,b) 运行速度很快。