我正在编写一个Web应用程序,它具有用于编辑文档的用户界面。实现维基百科等历史记录功能的最佳方法是什么?可以查看对文档的编辑?
答案 0 :(得分:3)
您必须存储当前文档和存档更改以进行比较。通常,主文档是数据库中的文档,然后保存的旧版本保存到另一个存档数据库或服务。
然后,您可以提取最新和最新的存档版本,并将其与差异算法进行比较。
Python有一个diff算法工具difflib:http://docs.python.org/library/difflib.html 还有一个目录和文件比较工具:http://docs.python.org/library/filecmp.html#module-filecmp
许多其他语言也有差异算法实现。
你可以只在变化中存储增量,并像Subversion一样重建Berkley数据库,但我建议为了简单起见,只需保存内容的副本,然后比较最新的或用户选择的每个。
答案 1 :(得分:1)
使用版本控制系统作为基础(将每个版本保存到vcs中),它们将更改存储在增量中。然后,您可以使用它们的diff功能来获取差异,但是您必须解析输出。例如,在git中,只需将哈希作为参数提供给git-diff,就可以从两个不同的修订版中获得输出。
也就是说,如果您不愿意使用现有系统。
答案 2 :(得分:0)
如果不知道你使用什么框架和什么,这是一个很难回答的难题。
您是否在使用数据库存储?假设您的数据库中有一个pages
表,为什么不创建一个用于保存旧版本的pages_versions
表?
将任何内容保存到pages
表时,请先将副本插入pages_versions
。因此,检索旧版本并不比通过任何其他一对多关系加载数据困难。您可以使用colourised diff或whatnot来美化数据。
我相信一些框架现在支持使用版本控制系统作为存储后端,因此也值得研究。
答案 3 :(得分:0)
您是指后端设置,还是前端突出显示各个更改?
我无法帮助你使用前端位,但是......
如果它是后端,你需要的是:
(我想我可能没有很好地解释这一点,很抱歉!)
顺便说一句,如果您使用的是Rails,那么有几个插件可以为您完成大部分工作。 Acts_As_Versioned是我想到的第一个。