为XML辩护

2020-09-29 11:09:55

当我开始我的职业生涯时,XML还无处不在。Java JAR文件中的元信息-清单-遵循专有格式。但是JavaEE设计人员从头开始建立在XML之上:所有工件的元信息都是XML格式的,例如web.xml、ejb-jar.xml、application.xml等。

JavaEE是我亲身经历的一个例子。但是,XML在当时的企业界无处不在。它的流行表现在两个方面:配置和数据传输。

从那时起,可以委婉地说XML已经不再流行了。其他格式,如JSON和YAML,已经在开发人员心中取代了它。在这篇文章中,我想:

我认为有几个原因导致了XML的衰落。它不是单一的,而是它们的结合导致了现在的状态。

XML最大的缺陷恐怕是它与企业世界的紧密关联。众所周知,进取号是出了名的糟糕--根据定义:臃肿、笨重、不灵活等等。是的,如果你想知道的话,这是一种讽刺。

一般说来,感知胜过真相。在这方面,开发人员也没有什么不同。归根结底,这就是当今受炒作驱动的开发人员--以及大多数开发人员--对XML的看法。

XML的主要用法之一是在SOAP Web服务领域。让我们坦率地说:从JavaScript和/或浏览器使用这些Web服务的简易性并不引人注目。

难怪JavaScript对象表示法(又名JSON)成为事实上的标准。Json随身带来了休息。顾名思义,JSON是JavaScript原生的,而XML不是。

JSON非常容易入门,YAML更是如此。即使使用纯XML,也会有名称空间的概念,这对初学者并不友好。XML允许一个文档使用来自不同名称空间的元素。另一方面,它使设计简单文档变得更加复杂。

XML有很多强大的特性,但是所有这些功能可能会让初学者感到困惑。我心甘情愿地承认,他们让简单的事情变得比他们应该做的更复杂。

我有几次无意中看到了这场演出。这通常是通过使用一个用XML、JSON和YAML描述的示例来验证的。由于XML的开始标记和结束标记,作者显示XML与其他两个相比相当嘈杂。

IMHO,这个参数很浅,因为所有3种格式都是基于文本的。因此,您可以(也应该)压缩文件。解析可能会慢一点,但这在很大程度上取决于确切的解析器(以及相关的技术堆栈)。最后,与整个用例中的总时间相比,使用XML传输和解析的开销(如果有的话)可以忽略不计。

以上原因与XML或多或少是一致的。然而,我非常愿意承认架构师一直在滥用XML。我亲眼看到过有效负载为几兆字节的SOAP Web服务。当时,你可能会认为这样的设计表现并不出色。

JSON,YAML&Amp;al.。每个人都有自己的缺点。以下是其中的一个示例:

任何使用YAML足够长的人在试图缩写挪威时最终都会被烧死。

YAML用于配置语法,就像Python用于编程语言一样。说真的,重要的空格?享受500行YAML来配置您的Kubernetes部署的乐趣,然后回来解释为什么“您”讨厌它。

-尼古拉斯·弗兰克尔(@Home for Long Time I Believe)(@Nicolas_Frankel)2020年6月19日。

不管格式是什么,不管它们自己的具体缺点是什么,最重要的问题之一是客户决定读取的数据是否正确。

在使用JSON和YAML时,不同的客户端需要提供即席验证。提供程序更改数据格式时会出现问题:

XML通过提供语法从一开始就解决了这个问题。语法在XML文档中的作用与SQL数据库中的约束和类型相同。最重要的区别是您可以将语法外部化。

有几种XML语法实现可用:文档类型定义、XML Schema、RELAX NG等。最广泛的是XML Schema。由于XML Schema也是以XML格式编写的,因此Web服务器可以托管它。然后,您可以通过可公开访问的URL引用它。

这种方法解决了上面的问题:当客户端收到XML文档时,前者查看XML Schema URL。然后,它可以获取它,并检查数据是否符合架构。

更改数据格式非常简单,只需对XML Schema文件进行版本控制,然后将其发布到新的URL下即可。

在本节中,我想列出使用XML的几个好处。

XML不是由单个人或公司管理的,而是由一个非政府组织(即W3C)管理的。W3C规范有一个公开记录的流程和定义的生命周期。

XML不是炒作,而是受益于大量可用的文档、博客文章和常见问题解答。

虽然XML不严格执行名称空间,但它被认为是一种很好的实践。这样,在不同名称空间中定义的名称相似的实体可以共存于同一文档中,而不会混淆语义。

基于事件的解析,即简单的XML API。它使解析大型文档成为可能。请注意,SAX不是W3C规范。

行业中的每种常用语言都至少提供一种XML解析实现。这要么是在该语言附带的标准库中烘焙的,要么是在第三方库中提供的。以下是其中的几个:

XSLT是W3C规范。它允许以声明方式将一个XML文档转换为另一个文档。目标文档可以是XML本身,也可以不是。

XPath是另一个W3C规范。它定义了如何查询XML文档,类似于CSS选择器。

与其他更多替代技术相比,XML有很多优势。除了我上面描述的,它还受益于丰富的生态系统。

很多年轻(和不那么年轻)的开发人员并不认为这是炒作。我相信,如果我们的行业重视更多经过战斗验证的技术,而不是新的闪亮的技术,那将是有益的。