论坛首页 入门技术论坛

关于一点XML的愚见

浏览 13391 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-04-22   最后修改:2009-04-22
   我想说说我自己对XML这门语言的看法,从自己以前的学习过程中,XML感觉就像是上帝的一点光,总是会引领着IT技术的发展。
    XML是当今十大软件技术之一,它是一种数据交换模式,并且具有跨语言,跨平台的强大功能,通过它不同系统和不同程序之间可以进行无二性的交互数据,另外它还能作为一种层次型数据库进行使用,有效的保存数据,并且能够存储其数据关系,它是把数据和格式相互分离的一种先进技术。
    概念其实也不用多讲了,在当今IT流中,XML起着举足轻重的作用,用推动IT流的前进这句话来形容它其实一点也不过分。无论是在数据交换,内容管理,WEB应用,WEB集成等领域都有着一席之地。
    XML其实本身就是一个文本文件,很多人用它与RDBMS做比较,为什么XML如此的流行,是因为在数据库的使用当中,如果的对数据库进行直接操作,是由厂商自己所完成,每个厂商都不一样,所以是具有保密性,要想访问到对应的数据库,那么就得拥有对应厂商的驱动程序。而XML不一样,它只是一个文本文件,任何人都可以通过解析技术对它进行解析,所以从另外一方面来说,XML得益于另类开源这个词。可以这样说,全世界任何一门高级语言都可能会用到XML。总之,在XML中,存储小量数据,并且能够表示非常复杂的数据之间的关系。
    提到XML,可能很多人都会联想到相关的5个技术::校验技术,解析技术,查询技术,链接技术,转换和显示技术。这5个技术中校验和解析是由为重要的,先说一说XML的校验技术,对应的两种检验语言,DTD和XML Schema,随着时代的不断更新,目前来说DTD已经逐渐退出历史舞台了,取而代之的则是schema,但是我想说的是,如果把校验技术学的很好,那么就要必须得学好DTD,而不是把schema放在重点上,因为现在来说schema已经可以用软件工具自动生成代码了,实际开发是相当方便的。为什么要学习DTD呢,为什么要学习一个已经快要退出IT舞台的语言呢,其实内容很简单,在schema中很多地方其实是只有学习过DTD的人才能看的懂的,非常重要的一点则是schema和DTD出现的错误信息都是DTD格式的,如果没有DTD的基础,是不可能看懂这些错误信息的,那么出现错误之后将对调试毫无办法。
    DTD和schema其实都是约束XML文档的一种约束模式语言,而现在之所以schema更好,是因为他对XML文档的约束能力更加强大,更加的精确,定义的数据类型更加的丰富,如果两者之间进行比较的话,就我个人而言,觉得DTD才是关键,因为原始,所以根本,当然schema也是非常优秀的,只是要学习schema,个人觉得首先应该掌握好DTD。
    一个很明显的事实:通过驱动程序去访问数据库,而通过解析技术去访问XML,如何做到这些,太多太多的高手写过相关的太多太多的技术了。对于JAVA来说,从JAXP的DOM,SAX到JDOM,再到DOM4J,小小的文本文件拥有了大量的技术来对其进行解析。其实不要看XML文件只是一个文本,正因为他存储的数据关系复杂,所以对它的解析是比较困难的。解析其实就是读取文件,然后将文本文件分解成可以解析的元素的过程。SUN公司在早期定义的DOM接口和SAX接口,虽然因为复杂,我们已经基本不使用他们了,但是我们应该去了解一下他们背后的故事。
DOM是一种树状模型的API,通过这个API我们可以对XML文档进行解析,DOM解析的方式是:一次性的把XML读入到内存当中,然后进行解析,这种解析方式对定位节点是非常方便的,因为在内存中整个XML文档都已经存在,所以某个节点与其他节点之间的关系就是相当明确的,并且可以进行数据的修改,但是这种解析方式有明显的缺陷,就是不能解析大型的XML文档,当XML文档过大,那么就会造成内存泄漏,因为DOM太消耗内存了。
    另外一个则是SAX,它是simple API for XML的简称,从名字上来说,其实SUN公司是把它定义成一种更为简单的访问XML的方式,但是其实一点也没能得到简化,同样的与DOM一样是属于非常复杂的解析方式,不同于DOM,它的解析方式则是一种事件驱动模型,在这种模式当中,通过回调机制来通知节点的位置,这个解析方式是按顺序一步一步的来读取XML文档,然后进行解析的,优点则是可以读取较大型的XML文档,内存占用率小,但是仍然具有明显的缺陷:只能按顺序来进行解析XML,不能进行随机访问,这个是非常不方便的,也就是定位节点不方便,另外存在只读的功能,也就是说我们不能通过SAX来进行数据修改,并且在解析过程中,我们对XML文档的每个元素的遍历也只有一次。
    因为DOM和SAX对XML的解析步骤是相当复杂的,所以才有了JDOM这种新型的解析技术,随后又出现了优秀的解析XML文档的技术:DOM4J。对这两种技术我感触颇深,简单的来说JDOM是面向过程的,而DOM4J则是面向对象的,这样说其实很抽象,我们可以来看一看这个例子:
    这里有2个节点,A和B,用JDOM的方式是我们开发人员用自己 的方式把A+B拼接起来,然后再放入XML文档中,而其实放入到文档当中的这个步骤是我们开发人员来完成,也就是A+B+XML。
    如果用DOM4J来干这件事情的话,则是调用元素的ADD方法,来进行添加,这个ADD并不是我们自己去完成的,而是对象本身自己去完成的,怎么完成的其实我们并不知道,也就是A.add(B),xml.add(A),所以这是一种面向对象的解析方式。
  相关的XML的东西太多太多,而且非常复杂又充满了神奇的力量,个人认为,XML是IT流中的一朵奇葩,就算以后会被一种新的技术所取代,但是它留下的那些脚印,永远是不可磨灭的。这只是我个人的一些对XML的看法,仅次而已。

   发表时间:2009-04-23  
效率奇低!!!能不用,绝不用!!
0 请登录后投票
   发表时间:2009-04-23   最后修改:2009-04-23
主要是文件太大了。 
0 请登录后投票
   发表时间:2009-04-23   最后修改:2009-04-23
XML 就像弱化的 lisp,不过它是确定性(decidable)的,适合表达文档,但没法表达程序。
XSL 就很像 lisp 了。

但是标签太冗长了,标签嵌套比括号嵌套啰嗦得多了……

现在的人连括号都懒得敲,以缩进代替括号的精简语法更加舒服(如 yaml,python)

有兴趣可以看看为什么当初选了树形文档表达网页
http://www.w3.org/History/1989/proposal.html

如果当初选了 lisp,现在 web 开发不知会简单多少 ……
0 请登录后投票
   发表时间:2009-04-23  
night_stalker 写道
XML 就像弱化的 lisp,不过它是确定性(decidable)的,适合表达文档,但没法表达程序。
XSL 就很像 lisp 了。

但是标签太冗长了,标签嵌套比括号嵌套啰嗦得多了……

现在的人连括号都懒得敲,以缩进代替括号的精简语法更加舒服(如 yaml,python)

有兴趣可以看看为什么当初选了树形文档表达网页
http://www.w3.org/History/1989/proposal.html

如果当初选了 lisp,现在 web 开发不知会简单多少 ……

lisper的口碑差。。。嗯。仅此而已。。。
0 请登录后投票
   发表时间:2009-04-23  
我讨厌XML
我讨厌XML
我讨厌XML
我讨厌XML
我讨厌XML
我讨厌XML
我讨厌XML
0 请登录后投票
   发表时间:2009-04-23  
mikeandmore 写道
night_stalker 写道
XML 就像弱化的 lisp,不过它是确定性(decidable)的,适合表达文档,但没法表达程序。
XSL 就很像 lisp 了。

但是标签太冗长了,标签嵌套比括号嵌套啰嗦得多了……

现在的人连括号都懒得敲,以缩进代替括号的精简语法更加舒服(如 yaml,python)

有兴趣可以看看为什么当初选了树形文档表达网页
http://www.w3.org/History/1989/proposal.html

如果当初选了 lisp,现在 web 开发不知会简单多少 ……

lisper的口碑差。。。嗯。仅此而已。。。

如果用lisp
你看到程序员写出恶心代码时
你会不会想去死?
动不动就递归

java的烂代码比较好懂一些吧.
0 请登录后投票
   发表时间:2009-04-23  
尽量不用XML。
网络数据传输:JSON
配置文件:YAML

0 请登录后投票
   发表时间:2009-04-23  
json 代替 xml 是程序员战胜学院派的伟大胜利
0 请登录后投票
   发表时间:2009-04-23  
Durian 写道
json 代替 xml 是程序员战胜学院派的伟大胜利

0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics