XML - 数据交换管理/Cocoon
上一章 | 下一章 |
← XSLT 和样式表 | 解析 XML 文件 → |
学习目标
|
赞助商 佐治亚大学
|
Cocoon 是 Apache 软件基金会的产品。它是一个强大的服务器,大量依赖于 Java 和 XML 技术。虽然它确实有一个命令行界面,但大多数用户只需仔细编辑几个配置文件(格式为 XML 文档),就可以完成所有需要做的操作。如果你想看看 Cocoon 可以做什么,请访问 http://MIST5730.terry.uga.edu:8080/cocoon/.
本教程是在用户有权访问 Terry 的 Blaze 服务器上的 Cocoon 安装的情况下设置的。如果你没有此权限,只需将文件位置和访问方法替换为服务器管理员提供的那些方法即可。描述的一些程序可能仅限于 Windows;如果你使用的是 Macintosh 或 Linux,则需要找到合适的替代程序,尽管这些实用程序通常包含在操作系统中。JEdit 是一个免费的文本编辑器,可以像在硬盘上一样轻松地在 FTP 或 SFTP 服务器上读取和保存文件,并使用合适的插件正确地操作多种类型的文件。它可以在 Windows、Macintosh、某些 Linux 发行版以及作为平台无关的 Java 应用程序在 http://www.jedit.org/ 上获得。
需要关注的主要 Cocoon 文件是 sitemap.xmap,它位于根 Cocoon 目录中。它使用 XML 标签来定义各种事物,例如呈现数据的不同方式、重要文件的位置、浏览器的识别,以及最重要的方面,即管道。默认的 xmap 适用于我们的目的,我们只需要查看它的最后几行,其中定义了管道匹配。本节从标签 <map:pipeline>
开始。管道匹配如下所示
<map:match pattern=”test”>
<map:generate type=”file” src=”content/test.xml”/>
<map:transform type=”xslt” src=”stylesheets/test.xslt”/>
<map:serialize type=”html”/>
</map:match>
让我们看看每一行都做了什么。第一行告诉 Cocoon 监视有人浏览到 http://blaze.terry.uga.edu:8080/cocoon/otc/test。当这种情况发生时,接下来的三行的操作将执行。Cocoon 将从内容目录中的文件 test.xml 中获取信息,并应用来自样式表目录的样式表 test.xslt。它将此结果格式化为 html 页面,如第四行指定的那样。Cocoon 可以使用不同的序列化器将数据格式化为 html 或 xhtml 页面、flash 对象、pdf,甚至 OpenOffice 文档。与为其他目的使用 XML 时不同,不需要 XSD 模式 - 只需根据需要创建和填充 XML 文件中的字段即可。
Cocoon 表单,或 CForms,是一种使用 XML 结构创建验证表单字段对象,然后将它们排列在模板中以供使用的方式。CForms 与使用 HTML 表单相比的主要优势是,字段可以使用内置功能或简单的 XML 属性进行验证。这需要几个元素。一个定义 XML 文件,其中包含称为“小部件”的字段
<fd:field id="email" required="true">
<fd:label>Email address:</fd:label>
<fd:datatype base="string"/>
<fd:validation>
<fd:email/>
</fd:validation>
</fd:field>
一个模板 XML 文件调用这些小部件,添加 HTML 代码以帮助实现外观和感觉
<br/>
<ft:widget-label id="email"/>
<ft:widget id="email"/>
一个控制数据从一个文件流向另一个文件的 Javascript 文件
function registration() {
var form = new Form("registration_definition.xml");
form.showForm("registration-display-pipeline");
var viewData = { "username" : form.getChild("name").getValue() }
cocoon.sendPage("registration-success-pipeline", viewData);
}
站点地图中的管道,也控制流
<map:match pattern="registration">
<map:call function="registration"/>
</map:match>
...
<map:match pattern="registration-display-pipeline">
<map:generate type="jx" src="registration_template.xml"/>
<map:transform type="i18n">
<map:parameter name="locale" value="en-US"/>
</map:transform>
<map:transform src="forms-samples-styling.xsl"/>
<map:serialize/>
</map:match>
...
<map:match pattern="registration-success-pipeline">
<map:generate type="jx" src="registration_success.jx"/>
<map:serialize/>
</map:match>
XSP 可以用于此流中,以便将提交传递到数据库。
XSP 的功能类似于 JSP 和 servlet - 它们是服务器端应用程序,可以同时支持许多用户。与 JSP 和 servlet 不同,XSP 可以使用 XML 标签来完成其大部分功能,尽管它们也可以在 <xsp:logic></xsp:logic>
标签之间使用 Java 代码。XSP 的一个很好的用途是将信息传递到数据库或调用和显示存储的数据。虽然 JSP 和 servlet 必须要么调用特定数据库连接器,要么在其内部包含连接的所有代码,但 Cocoon 具有一个配置文件,其中包含此信息,而 XSP 只调用 WEB-INF/cocoon.xconf 中指定的数据库名称
<esql:pool>dbname</esql:pool>
从表单输入数据的 XSP 代码可能如下所示
<esql:execute-query>
<esql:query>
INSERT into otc_users (name,email,password,age,spam) values ('<xsp:expr>esc_name</xsp:expr>','<xsp-request:get-parameter name="email"/>','<xsp-request:get-parameter name="password"/>','<xsp-request:get-parameter name="age"/>','<xsp-request:get-parameter name="spam"/>')
</esql:query>
</esql:execute-query>
- 创建一个基本的 XML 文件和相应的 html 样式表。将它们上传到 Blaze 服务器上的相应文件夹(分别为内容和样式表),并编写一个管道匹配,使你能够在浏览器中查看应用了样式表的 XML 内容。文件和匹配模式应以你自己的姓名命名,例如,Bob Jones 将使用“bjones”。不必上传管道代码 - 只需浏览到 http://blaze.terry.uga.edu:8080/cocoon/otc/yourname,它应该可见。
- 按照位于 http://cocoon.apache.org/2.1/userdocs/basics/sample.html 的 CForms 示例进行操作。至少创建一个你自己的小部件。你可以通过浏览到 http://blaze.terry.uga.edu:8080/cocoon/cforms/registration 来查看它的工作原理。
- 浏览到 Blaze 上的 opt/tomcat5/webapps/cocoon/cforms。检查 sitemap-modified.xmap,以了解如何修改管道以将 CForm 数据传递到 XSP。Test.xsp 显示如何将该数据插入数据库或从数据库中调用该数据。
当你设置了 Blaze 服务器上的帐户后,你需要采取几个步骤才能使用 Cocoon 目录中的文件。通常,新用户帐户使用用户的 UGA MyId 作为用户名,并使用社会安全号码作为密码。此密码必须在用户首次登录时更改,这需要使用 SSH 客户端才能完成。UGA 学生可以在 http://sitesoft.uga.edu/ 上下载 Secure Shell Utilities 3.1。此下载将安装两个程序:Secure Shell Client 和 Secure File Transfer Client。
打开安全壳客户端,点击窗口顶部附近的“快速连接”按钮。在弹出的窗口中,输入“blaze.terry.uga.edu”作为主机名,输入您指定的用户名作为用户名。端口号应设置为“22”,身份验证方法应设置为“密码”。点击“连接”。在弹出的窗口中,输入您的密码并点击“确定”。您可能会看到一个询问是否保存新主机密钥的窗口,点击“是”。您现在将看到一个文本框,它会通知您您的密码已过期,必须更改。您需要输入您的旧密码一次,按回车键,输入您想要的新密码,按回车键,再次输入您想要的新密码并按回车键。请注意,出于安全原因,您输入的任何内容都不会显示,并且您无法删除任何错误输入 - 如果您出错,您必须重新登录并重新开始。这就是我们使用安全壳客户端应用程序的全部内容;您可以点击屏幕顶部的一排小按钮中的“断开连接”按钮,然后退出程序。
为了真正访问Blaze服务器上的文件,需要使用安全文件传输客户端。打开它并点击窗口顶部附近的“快速连接”按钮,输入与安全壳客户端相同的主机名,您的新密码,并确保其他设置相同。点击“连接”。您将看到一个类似于Windows资源管理器的屏幕,您可以在其中浏览Blaze服务器上的文件。要访问我们的Cocoon安装,请转到“opt”文件夹,然后是“tomcat5”文件夹,然后是“webapps”文件夹,然后是cocoon文件夹。我们大部分工作将在其中的“otc”文件夹中完成。要下载文件以进行编辑,只需突出显示它并点击屏幕顶部的一排小按钮中的“下载”按钮。选择下载位置并点击“下载”后,您可以在您选择的编辑器中打开它。要将文件上传到服务器,只需反过来 - 点击屏幕顶部的一排小按钮中的“上传”按钮,选择要上传的文件,然后点击“上传”,这会将文件放到您当前在Blaze服务器上查看的文件夹中。