我注定要用XML开发吗?

时间:2008-10-20 19:29:43

标签: xml oslo

根据我在奥斯陆看到的内容,声明性XML将起到关键作用。我可以期待围绕很多设计人员生成的XML来创建真实世界的应用程序吗?只知道我没有研究过这个。如果你已经检查了这个问题,我会说明你的观点。

一些背景......

每当我深入挖掘任何XML支持的声明性技术(例如Silverlight和WPF,ASP.NET或MSBuild)时,我似乎最终编辑了大量原始XML文本。设计师很少表达我的需求。

一方面,我无法真正看到人与机器可读性之间更好的折衷,而且公平地说,每次化身都会使XML编辑体验变得更好。

另一方面,我发现XML并不适合某些用法。特别是在表达逻辑,重构和可测试性方面。可能是设计师太弱了,或者XML过于表达,或者我太过脾气暴躁,被对象和方法所破坏。

2 个答案:

答案 0 :(得分:3)

我倾向于为一个有点可疑的XML支持者做出贡献。尽管我每天都使用它,并且基于XML的Web服务已经成为我职业生涯的重要部分(也是我写的书的基础),但我认为它被广泛使用。我倾向于属于思想学校,认为你应该在工具箱中有很多工具,你应该使用最好的工具来完成工作。 XML是一个很好的解决方案。但是有很多东西不是,而有些东西可能是一个糟糕的选择。

正如有些人在批评和避免使用XML时一样热心,有些人在赞美和使用XML时也同样热心(或更多)。在你上面随便提到的案例中,你大部分时间都在谈论基于网络的技术。在这些情况下,您通常已经拥有了一个XML解析器和/或DOM操纵器,因此使用它没有任何害处。你还没有增加复杂性,因为它已经存在了。 Flash& AIR大量使用XML来实现功能,但它们的目标是解析XML-ish标记(如果不是XML本身,然后是HTML或XHTML)是每个应用程序的核心部分。对于这些技术,引入不同类型的数据表达语言会增加复杂性。使用XML非常有意义。

这是一个例子......这里讨论的语言是Perl,因为这是我主要使用的,但它的Perl方面与要点无关:我一直在研究现有模块的扩展转储深层数据结构。适用于大量事物 - 序列化,跨平台的可移植性等。也是一种流行的调试工具。我想要扩展它的原因是真正庞大而复杂的结构(例如由ORM或MOP框架生成的结构)可能变得非常毛茸茸。所以我的第一个想法是只做一个扩展,让我以一种我可以控制的方式将数据转换为HTML。然后我认为如果我能创建显示各种元素的图表并且链接到哪个等等,那将是非常好的。然后我想到如果我选择了合理的中性格式,我应该是能够相当容易地得出这两者。

那个格式? XML。为什么在这种情况下它必然比本机Perl序列化结构更好,或者比使用不同的临时表示(例如YAML或JSON)更好?因为如果我有有效的,格式良好的XML,我可以轻松地使用XSLT将其转换为(X)HTML或SVG。如果我愿意的话,我也可以把它变成纯文本(我已经有XSLT样式表,根据用户选择选择发出HTML片段或干净的单词包装纯文本)。

有很多方法可以解决这个特殊问题,但XML在这种情况下给我的优势使它成为首选(至少,我的偏好和我的需求)。 XSLT是一个定义明确,文档齐全的(好的,你的意见可能会有所不同,关于W3C文档,但不乏关于这个主题的书籍)工具,用于将XML转换成几乎任何东西。对于这个特殊问题,XML的表现力与我的最终目标格式(XHTML和SVG)本身就是XML的事实相结合,使其成为明确的选择。另一方面,有很多次我向客户推荐(作为顾问)或(作为公司员工/团队成员)向老板/团队推荐XML 用于某些任务。有时原因很清楚 - 使用XML不会改善数据的(重新)可用性,他们还没有在项目中使用XML,这不是你应该引入依赖的东西等等。有时候原因更微妙;如果您正在尝试决定如何存储/检索应用程序的配置,它是否真的需要使用XML?任何其他应用程序都不太可能需要读取/解析它,因此数据的可移植性/重用不是问题。如果数据本质上相当平坦,您可以使用键/值对文件进行管理。如果数据更复杂和/或更复杂,您可能对YAML没问题。

通常,XML是数据表达的最差选择,除非它是最佳选择。对于JSON和YAML来说也是如此,充分利用这些方法的最佳方法是熟悉并熟悉所有这些方法,并且知道哪一个是您在面前工作的最佳工具。你。

答案 1 :(得分:2)

我认为问题中的神奇词是“陈述性的”。

具有任何灵活性的声明性技术需要声明格式。它必须有一种方法来验证声明在语法上是否正确。它需要能够将基础数据结构序列化和反序列化为这种格式。如果格式足够开放以便可以直接构建生成,修改或处理声明的工具,那将非常有用。

你可以看到它的发展方向。

我认为你看到的问题是真实的,但我不认为它们确实是XML问题。好吧,不是直接的。我认为真正的问题在于你说的另一件事:这些声明性技术的设计工具不够强大。

这就是为什么它是一个XML问题:没有开发人员使用JSON作为他的产品的序列化格式会让他自己思考“嘿,我不需要实现这个功能,用户只需编辑JSON。“

我认为就是那里的问题。并不是说XML是表示声明的错误格式。这就是XML的开放性非常诱人。它为工具开发人员提供了一种方法,可以将功能从他们的工具中移除。

我认为这是一个社会问题,而不是技术问题。这是一个棘手的问题。我们可能有更好的WPF工具,如果不是XAML,微软已经提出了封闭格式。但是我们从开放格式中得到太多的东西来放弃它们。