使用XML模式的优点和缺点是什么?

问题描述:

我们正在使用Microsoft SQL Server 2005中的XML数据类型作为项目。团队中的一些成员和我觉得我们也应该使用XSD,而另一个阵营的成员则认为我们应该保持XML特殊,而不是将它们视为“类型”。使用XML模式的优点和缺点是什么?

这些XML旨在为许多维护噩梦的文本配置文件带来结构和中心性。

我们正在使用.NET 3.5/C#,并且我们的表格被设计为具有适当的数据类型。 我的观点是,我们在思维中已经“面向类型”,为什么打破这种方法,因为它是XML。这是因为缺少原始问题发生的文本文件类型。不使用“类型”方法会让我们面临同样的问题。

可能是我对XML模式的好处的理解不正确。 那么使用XML模式的优点和缺点是什么?

不幸的是,即使是XSD(W3C)的创作机构也知道XSD是一项非常糟糕的技术。这就是说,它的意图不一定是坏事。 C#的主要优点之一是它是静态类型的。静态输入您的XML文档给他们相同的好处。这里最好的方法是使用XML序列化属性对您的类进行逆向工程以生成Schema。当你这样做时,C#将为你的XML文件创建一个自定义数据读取器,这将显着提高性能。

XML的最大成本之一是它必须被字符串解析。关于XML文件的更多假设(例如,它们的结构),您的性能可能会更好。

因此,最终像许多事情一样,他们对于性能优势的需求足以证明开发人员时间的成本。或者是否有足够强烈的愿望来使用静态类型系统来证明编写XSD的成本。

最终,您的项目需求将决定您应该做什么,但静态打字和性能是需要考虑的主要好处。

在没有XSD的情况下保存XML的存储库与我所认为的是有一个数据库,其中所有类型都声明为VARCHAR(n)。你不关心你得到什么样的输入,你只是想输入。

XSD确保您的XML具有您所期望的输入类型。他们给你的模型结构,你正在寻找的东西。

+2

如果你没说,我打算去。没有Schema的XML,只是纯文本! – leppie 2008-09-26 15:56:59

使用模式的一大优势是它有助于确保项目中的每个人都同意如何布置XML文档。此外,通过使用模式,您可以在XML解析器中启用验证,从而更轻松地判断某段代码何时失败,因为它提供了一些错误的XML。

不利的一面是,维护模式可能很痛苦,根据您的项目,这可能不值得付出努力。

如果你没有一个模式,你最终会自己重新实现所有的验证(或者根本不验证,并在无效输入时崩溃)。 XSD解析器/验证器可以为您工作,并且由其专业领域的专家进行优化和调试。你为什么要重做所有这些工作?

那么,在其他职位,并在提问时说,XSD将确保你使用正确的类型在你的XML正确的地方,并且你必须改变其结构之前要三思而后行。

但是,如果我可以这样说,XSD真的过于冗长了。它有时真的是一个混乱的描述一个复杂的结构,有条件的内容。

希望XSD不是验证XML的唯一方法,更简单的方法是使用RelaxNG,尤其是它的紧凑语法,它比您想象的XSD更具可读性。

XSD不是唯一可用的XML架构。改用http://relaxng.org/。 RelaxNG允许您用XML表达模式,而不是像XSD那样需要学习另一种数据“语言”。对于XML的发展

重要的原因是,它允许使用来自多个来源的数据,并以更多的方式,因为它已经成为任何数量的计算机系统之间交换数据的广泛接受的标准。