3

我们有一个接收 XML 字符串作为输入的 Web 服务。服务做(或应该做)的第一件事是根据预定义和商定的 XML 模式验证接收到的 XML 字符串。

存储和访问此模式的最佳方式是什么?

  1. 与 Web 服务位于同一位置的物理 .xsd 文件?
  2. Web服务的代码文件中的常量字符串?
  3. 项目资源文件中的字符串值?
  4. 在网络配置的某个地方?
  5. 在数据库中?

我认为选项 (2) 和 (3) 不是最好的,因为架构可能会更改,然后我们需要更改代码。再说一次,如果 XML 结构发生变化,我们无论如何都需要更改代码才能正确解析 XML。

谢谢!

4

2 回答 2

3

我将浏览您的选项,并就每个选项提供一些意见。

1.) 与 Web 服务位于同一位置的物理 .xsd 文件?

这是一个好主意,可能是您的最佳选择。为其提供 URI/URL 意味着外部人员可以轻松访问它,而且您可以轻松地对每个 XSD 进行版本控制并为每个 XSD 提供一个新 URL。

2.) Web 服务代码文件中的常量字符串?

这听起来并不有趣。一般来说,我喜欢将我的接口与我的实现分开,并且我的配置与其他任何东西分开。使用此选项,您可以将这些东西耦合在一起。我不会推荐这个。

3.) 项目资源文件中的字符串值?

4.)网络配置中的某个地方?

我不会推荐其中任何一个,因为您很难将其与项目的其余部分分开。只是看起来很尴尬。不过,这并不是一个可怕的想法。

5.) 在数据库中?

我以前不推荐这个,因为我认为它会弄乱你的<xsd:include />元素无法指向其他文件,从而限制你只使用最简单的模式,但是我直接在这个 StackOverflow 问题中学习了 URI 不是与 URL 相同。数据库是存储 XML 模式的合法场所,尽管我个人的偏好是将它们存储在文件系统上。

最后,我会说选择选项1。

于 2013-09-03T18:57:54.980 回答
1

如果您的代码经过仔细编写并且忽略了它不知道的属性和元素,那么正确设计的 XML 模式扩展将不需要重新编写您的代码。这意味着选项 2 和 3 不是最佳方式。

将模式包含到 Web 配置中可能有点困难 - 因为它可能涉及 XML 中的 XML,这是可能的,但维护起来可能有点麻烦。

在大多数项目中,数据库包含数据,但没有配置设置。

因此,对于大多数项目来说,最自然的位置是选项 1。

但是 YMMV,最好的建议是把它放在你项目中其他类似类型的配置信息的位置,因为这是管理员和维护人员会搜索它的位置,以防出现问题或需要更改。

于 2013-09-03T17:41:08.523 回答