0

我使用并编写使用各种模式以 XML 编写的技术文档。我开发了一个相当简单的 Windows 窗体应用程序,我们现在在办公室将其用作工作流系统。该程序可以签入、签出和移动验证过程。该程序使用一个通用的“data.xml”文件来读取和写入,从该文件中跟踪笔记、作者、状态和各种其他内容。

但是,目前应用程序指向共享驱动器上的文件夹结构,其中包含每个项目中的所有 xml 文件,以及保存程序项目数据的 data.xml 文件。因此,当有人签出文件时,应用程序只需将文件从一个文件夹移动到另一个文件夹(用户不可见),更新 data.xml 文件,然后更新 UI 中的 listViews。

这可以正常工作,除非当然有几个人在处理同一个项目,并且客户端应用程序尝试同时写入 data.xml 文件。

所以我想我想做的是将整个系统迁移到数据库。因此,它不是将 XML 文件存储在文件夹中,而是将它们存储在 SQL 等数据库中。现在我完全没有数据库经验,因此希望有一个指针可以让我朝着正确的方向前进。理想情况下,我需要能够查询数据库中的 xml 文档,所以我希望能够使用 Xquery,并在理想情况下对所有文件运行进程。例如,目前我可以在整个项目上运行 XSLT,因为它们只是放在一个文件夹中。

所以我的问题是,为了保留这种功能,我应该查看哪种类型的数据库?像 SQL 一样的关系,或者可能是 xml 数据库?

注意:每个 xml 文件最大为几百 Kbs。

4

3 回答 3

0

你能找到一个源代码控制系统,而不是所有的猴子业务,一次只允许一个人签出一个文件。或者只是使用某种文件锁定机制来限制一次只能访问一个人。

于 2013-04-24T13:23:03.920 回答
0

我会说将数据库用于项目和客户特定数据,而不是将 xml 文档存储在数据库中。如果您的大多数 xml 文件不会延迟太多,您可以使用 xml 模板并回到您使用 XSLT 更新这些模板之前呈现有用数据的观点。我的 xml 模板去哪里了?它可以在您的文件系统或数据库中。这样就避免了存储大量的xml文档,也避免了数据库中xml代码的重复。

于 2013-04-24T11:34:51.543 回答
-1

“......为了保留这种功能,我应该查看哪种类型的数据库?”

实际上只有一种数据库类型——RDBM。所有类型的关系数据库都支持 XML、文本或二进制存储,例如文件和文档。

对我来说,更大的问题是,通过普通编程和 SQL 数据库,您是否能够支持多用户环境中的文档存储。简短的回答是,我不这么认为,至少在你没有大量工作的情况下是这样。

问题是这样的:假设你和我在同一个办公室工作。我转到文档数据库并下载文档 XYZ.xml 的副本并开始进行更改。同时,您还将获得该文档的副本并开始进行更改。完成后,我将检查我的更改(sql 中的正常更新函数)。然后,当您签入更改时,您的更改将覆盖我的更改。大问题。

但是,如果您可以将文档签出过程限制为“独占”使用(即,一次只有一个人可以签出和签入一个文档),那么在 SQL 上存储 XML 文档是可能的,而无需大量工作。这可以通过简单地在文档存储表中设置一个标志来完成,例如 DocInUse=True。如果 DocInUse=True,则在重新签入且 DocINUse 字段 = False 之前无法再次下载该文档。我确定你会跟随。

顺便说一句,有一些应用程序可以为您执行此操作。有来自 Microsoft 的 Team Foundation Server 和 Source Safe,以及其他允许这种存储和签出/签入处理的程序……但这些程序并不便宜。

我希望这有帮助。

于 2013-04-24T13:06:20.250 回答