跳转到内容

XForms/使用 WebDAV 和 Subversion 版本化表单数据

来自维基教科书,开放的书籍,为开放的世界

用户经常希望使用多版本表单。这意味着他们不仅希望保留表单实例数据的先前版本,而且还希望能够

  • 查看以前的版本
  • 比较当前版本和以前的版本
  • 查看谁在何时更改了表单上的哪些字段
  • 恢复到以前的版本

这个问题经常出现在具有配置文件的复杂计算机系统中。某些东西停止工作,但人们直到以后才注意到它。没有关于配置文件的先前版本是什么样子的信息,因此整个系统必须从备份中恢复。许多此类问题可以通过自动恢复到配置文件的先前版本来避免。

使用 XForms 标准,我们获得了 <submission> 元素以及少量 HTTP 操作符(GET、PUT、POST)可供使用,以及可以是任何 URL 的操作。如果我们希望允许用户将表单数据保存到版本控制系统或查看表单的先前版本,我们必须将这些操作转换为 Web 服务器将识别为版本控制数据库上的操作。

Subversion 是一个开源版本控制系统,具有客户端/服务器架构(与其他版本控制系统的基于文件的架构相反)。

与较早的基于文件的版本控制系统不同,Subversion 使用类似于可靠银行交易所使用的交易服务器模型。这使得 Subversion 非常可靠,并允许您签入(或提交)应一起签入的文件组。它们要么全部成功,要么全部失败,但版本控制系统保证始终处于一致状态。

Subversion 还符合(在可能的情况下)WebDAV WebDAV 代表 Web 分布式创作和版本控制规范。标准 Web HTTP 协议仅支持少数操作,例如获取、放置和发布。WebDAV 将这些简单操作扩展到包括我们可能期望在文件系统上进行的操作,例如删除、移动和复制。由于 WebDAV 更关注文件操作,而 Subversion 更关注事务,因此有时两者之间并不完全匹配。

Subversion 有两个主要概念

  • 更新 - 从服务器获取代码的最新版本。
  • 提交 - 将您从本地文件系统中更改的所有文件保存到服务器上的事务中。

为了允许表单数据保存到 Subversion,我们需要使提交元素执行提交。这不是一件难事,但我们要清楚地说明系统之间的差异。

Subversion,WebDAV

[编辑 | 编辑源代码]

Subversion 是一个版本控制数据库。在其核心,它不包含独立的访问控制系统。因为它通常作为 Web 服务器的一部分安装,所以它通常使用运行它的 Web 服务器的访问控制系统。Apache 还支持 WebDAV HTTP 扩展,这些扩展允许进行超出基本 HTTP 获取、放置和发布的复杂操作。将 XForms 保持持久性的最佳方法之一是将 Apache 配置为使用 WebDAV 和

自动版本控制和 Apache

[编辑 | 编辑源代码]

要使用 Apache2 服务器配置自动版本控制,您必须修改配置文件。此文件应配置为支持您的 XForms 工作。

警告!:每当您允许公开访问写入您的服务器时,您都在处理安全问题。在对 Web 服务器的配置文件进行任何更改之前,您应始终考虑所有安全隐患。确保您组织中的安全专业人员审查所有具有公共 Web 访问权限的系统。

您将希望拥有类似于以下半 XML 格式的 Apache 配置

 <Location /repos>
    DAV svn
    SVNPath /var/svnrepos
    SVNAutoversioning on
    <LimitExcept GET PUT POST PROPFIND OPTIONS REPORT>
        Require valid-user
    </LimitExcept>
 </Location>

另请参阅 Subversion 红皮书 的写得很好的章节,或者相应的 Gentoo 的 Apache-SVN-WebDAV-HOWTO 部分,以获取包含示例的详细配置帮助。

将 HTTP PUT 转换为 Subversion 提交

[编辑 | 编辑源代码]

最后一步是将 HTTP PUT 转换为 Subversion COMMIT。这可以通过使用 Jetty 等程序来完成。

(我们很快就会发布一个示例程序)。

ViewCV 和 ReST

[编辑 | 编辑源代码]

您还可以开始向 Apache 和 Subversion 添加工具,以获取显示先前文件之间差异的彩色输出。一种选择是在 Apache 服务器中添加 ViewVC(查看版本控制)系统。ViewVC 允许您查看版本历史记录,只需向 URL 添加参数即可比较以前的版本。这种使用 URL 向服务器程序传递参数的方法通常称为 REST 接口。几乎所有 REST 接口都易于与 XForms <submission> 接口,因为 XForms 可以直接在 URL 上对提交实例进行编码。

Subversion REST URL 接口

[编辑 | 编辑源代码]

Subversion 允许您通过向 URL 添加额外的路径来访问资源的版本历史记录。请参阅 [1]

例如,如果您的文件名是

http://www.example.com/my-repository/myfile.xml

如果要获取文件的第 47 个版本,则可能是

http://www.example.com/my-repository/!svn/ver/47/myfile.xml

调试技巧

[编辑 | 编辑源代码]

Subversion 常见问题解答 建议您运行 Wireshark 数据包嗅探器并查看 HTTP 消息中的数据。您还可以使用 Charles Web 调试代理,该代理还具有一个不错的 Firefox 插件。请确保您知道如何通过转到 Firefox 工具/选项/常规/连接设置并单击指向 Internet 的直接连接来禁用代理。如果您没有这样做,您的 Web 浏览器在 Charles 关闭时将不再起作用。

参考资料

[编辑 | 编辑源代码]

使用 WebDAV 和 Subversion 的草案

Subversion 源代码存储在 Subversion 中

下一页: IIS | 上一页: Apache
首页: XForms
华夏公益教科书