why xml sucks
2000年以来,这是一个xml大行其道的年代。xml无所不能,我们如同崇拜x战警的强悍战斗力一般崇拜这个x开头的万能者。我们用它来传输数据(soap),定义数据(xsd),存储数据(xml数据库),配置文件(web.config或者web.xml),做网页(xhtml)......换一句二战的名言:如果xml能够做饭我就娶她做老婆。
但是神话就是用来打破的。现在是到了打破这个顶在x字头顶上的光圈了。
why xml sucks?
当然没有一个全无能的废人正如没有一个全能超人一样,xml并不是在所有的时候都sucks,我的确将题目夸大了。但是我的目的还是很明确的,我们将xml神话了,然后滥用了,之后xml就在很多自己并不擅长的地方sucks了。
fisrt sucks:存储数据
xml天然的不适合存储数据。第一是冗余数据太多,xml文件本身就够浪费的了,然而一个xml树在内存中会扩大将近10倍的体积,也就是说1M的xml文件在内存中会占据大约10M的空间。所以用xml来存储数据非常的suck,除非是非常小的存储量的情况。
second sucks:传输数据(比如ajax)
在Web上远程获取数据使用xml这个庞然大物简直是太浪费了,所以很快用ajax远程调用WS的方式很快就从xml的序列化改成了json这种轻量级的方式。群众的眼睛是雪亮的。
third sucks:配置文件
如果用过hibernate,或者spring,或者任何java的传统的类库,大概会严重同意xml的配置文件极大的伤害了我们的视力。确实xml的配置包含了太多的无用内容,不容易阅读(起码我就觉得还不如ini来得容易看)。而且就用途来说,类似hibernate或者spring的配置来说,与其说配置倒不如说是一种外置的DSL,特别是spring。也可能是java或者c#的死板和强硬造就了xml,所以yaml这类看着易懂,写起来哈皮的配置方式一直很难看到,还是IronPython的同学比较有福气。
老实说其实我很赞同程序也就是配置的思想(修改web.config会导致重新编译WebSite,那么我们修改了.cs文件导致重新编译有什么区别呢?特指WebSite的情况)。
归根结底,计算机语言 写的是人,看的是机器,而xml所标榜的语义在很多时候就毫无意义,为了人看着能明白,结果是牺牲了机器处理的效率,结果最后我们发现,其实如果没有很好的工具的话纯粹书写也绝对是一种酷刑。
so that's why xml sucks
say no to xml:当然暂时还做不到,除非.net支持yaml。
.net和java这对难兄难弟中xml的流毒很深,所以如果要对xml say no,还是投奔动态语言的怀抱吧。
【引用】
yaml:
和GNU一样,YAML是一个递归着说“不”的名字。不同的是,GNU对UNIX说不,YAML说不的对象是XML。
YAML不是XML。
介绍yaml的page:http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/