没有架构的令人厌恶的XML配置 - 为什么?

时间:2010-07-20 22:55:09

标签: xml open-source configuration xsd log4net

这不是关于为什么XML用于配置文件的问题。我的问题是为什么,当XML用于配置文件时,没有附带架构

log4net是一个很好的案例。您可以通过编程方式对其进行配置,但最好使用XML。很好,但为什么它必须这么难?

在Visual Studio中,当我用模式键入XML时,我得到了很好的Intellisense。没有一个,我不得不猜测每个元素和属性,因为似乎从来没有一个全面的列表。 XML变成了令人厌恶的XML,这种类型容易出错且输入繁琐。

那些曾参与此类项目的人:为什么要使用文档和XML注释和示例发布它们,但是没有XML模式可以使配置更容易?是懒惰吗?背后有真正的动机吗?没有人想到它吗?

3 个答案:

答案 0 :(得分:3)

我相信虽然大多数开发人员都非常了解XML,并且凭借这些知识,他们可以构建读取XML配置文件的程序,但XML模式并不是很清楚。

由于大多数用于编写XML模式的工具要么花费很多钱,要么可以免费获得,但这些工具可能不太好或不适合,这可能会变得更糟。然后,认真尝试XML模式变得有点困难。

(我知道,当然文本编辑器应该足以编写XML和XSD。但是,无论专业工具是否可用,恕我直言,这通常会产生重大影响。)

答案 1 :(得分:2)

我认为主要原因是,在大多数情况下,您已经在评估xml的代码中对文档中的预期表达了期望。因此,架构可以被视为额外的工作。即使在开源工作中也不是免费的......; D

答案 2 :(得分:1)

不,我不打算使用XSchema,因为标准很笨拙,不灵活,并且除了基本的类型语法验证之外没有提供任何东西。

因此,它允许我为文件定义语法,以及值的基本数据类型,但我仍然必须为任何非平凡的参数编写我自己的验证例程。即使这样,无法定义我自己的词法形式,或者定义我自己的基本xsd数据类型的限制或扩展超出基本范围约束,使得规范无法表达我需要的语法形式,即使对于语法验证也是如此。

考虑一下如何声明元素的text()应该是有效的ISBN?还是一个有效的文件名/目录路径?还是素数?还是闰年?等等?等等?等?

如果你幸运的话,我个人可能会为你提供一个DTD(即一种奇怪格式的无类型EBNF)。我甚至可以在它上面运行一个自动DTD到RelaxNG转换器并为你清理结果。但是不要指望我写一个架构。如果我想提供真正的验证支持,那么无论如何你都不会得到XSchema;相反,我将把你的GRDDL + OWL交给你,在XSLT和声明性FOL约束语言的力量之间,我实际上可以声明值得做的验证。