MDA之路

MDA,UML,XML,Eclipse及Java相关的Blog
posts - 53, comments - 494, trackbacks - 0, articles - 2
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

XML的本质讨论

Posted on 2005-02-28 11:44 wxb_nudt 阅读(4499) 评论(14)  编辑  收藏 所属分类: 技术杂谈

(这里的XML不仅仅指XML脚本语言,还包括XML的一系列技术,包括DTD,XSLT,XML SCHEMA,XPATH,DOM,SAX等等)

XML的本质是什么?这个问题对于很多XML的初学者来说都不容易回答。因为XML涉及的方面太多,有人是为了写出更漂亮的网页才从HTML进一步学到XML;有人是为了学JAVA才来了解XML;有人是从数据库到XML;有人是从UMLXML;当然还有一些人是从SOAP或者其他网络协议而了解到XML。那么到底如何解释XML的本质呢?

我认为XML的本质是数据,XML文档实际上是对数据的格式化存储,而XML的一系列技术都是围绕着数据来发展的。例如DTDSchema是对数据格式的定义和检验;XSLT是对数据的转换;DOMSAX是对数据的提取和操作。

既然XML只是数据,而且是用文本形式存储的数据,那么为什么不更简单的用普通文本来存储数据呢?早期的一些程序员确实是这么做的,但是这么做的缺点是对于每一组数据,都需要专用的数据格式定义、检验、转换和操作的程序。如果使用XML来存储数据,由于XML的一系列技术已经对以上的问题提供了工具,我们只需要使用那些技术即可快捷的达到自己的目的。有人可能会说,使用数据库不是更方便么?它也提供了以上的功能。确实如此,但是并不是每个地方都适用数据库的,如果说数据库是大而全的数据解决方案的话,XML可以用“举重若轻,大象无形”来形容,这一点后面再讨论。

XML的本质决定了它在网页制作方面比HTML更具有优越性。传统的网页包括HTML+CSS,在这种模式中,数据和数据的显示特性都包含在HTML中,CSS只是对显示特性的一种补充;而XML网页包括XML+XML Schema+XSL,其中XML存储数据,XML Schema定义了数据的存储格式,XSL定义了数据的显示特性(其实它定义了如何将XML转换为HTML,实际上就是定义了数据的显示特性)。使用XML制作的网页将数据、数据格式和显示特性清晰的分为三个部分,在添加或者修改网页的时候可以单独的修改每个部分,从而得到更好的维护性和更高的制作效率。当然动态网页可以由Database+脚本语言(JSPASPPHP+HTML+CSS组成;同样基于XML的动态网页可以由Database+中间程序(提取数据库内容形成XML文档)+XML+XML Schema+XSL组成。基于XML的解决方案同样保持了层次清晰的优点。

对于XML和数据库的比较,我的上一篇文章中有过讨论()。从本质上来说,XML和数据的本质差不多,都是围绕着数据来提供一系列的解决方案,但是它们之间存在几个显著的不同:1.XML是轻量级的数据解决方案,容易学习,可以用文本编辑器进行编辑,一般的浏览器都支持XSLT,适用于数据量小的各种环境;2.XML是完全平台无关的,不需要依赖于特定的操作系统、浏览器或者编程语言,而数据库不是完全平台无关的;3.XML是基于文本的,适合于网络传输,你不能指望每个EJB的配置文档都用数据库来表示吧;4.XML和数据库是可以互相结合和转换的。

对数据的不同理解可以将XML应用到不同的方面。你可以这样理解:XML是数据库中的数据;Schema是数据库的表;XSL是显示数据的程序;也可以这么理解:XML是网页素材;Schema是素材的数据结构;XSL是素材的显示特性。同样,在软件建模方面,也可以用XML来替代UML。这是基于这么一种理解:Schema代表类图,它如同UML一样存储了类的结构特性;XML代表对象,它存储了类的实例化对象的属性数据;而XSL是对类图的转换,即MDAModel Driven Architecture,模型驱动架构)中的提到的模型转换。在UML中没有模型转换技术,但是一些UML工具提供了代码生成的功能(例如RationalRose),这中功能可以理解为模型转换的一个特例。因此有人提出了用XSLT做代码生成的建议,事实上这种代码生成技术已经比较成熟。由于XML Schema并不是天生就用来刻划类图的,所以它在类的继承等方面存在一些不足之处,为了修正这些不足,OMGObject Manage Group,对象管理组)组织提出了XMIXML Metadata InterchangeXML元数据交换)标准,用来补充XML Schema在软件建模方面的不足。现在XMI已经变成了各种软件建模工具的通用存储方式,可以将不同建模工具建立的模型互相转换。

总的来说,XML是一种基于文本的、格式化的数据存储技术,它包括一系列的数据解决方案,它们是轻量级的、易于学习的、平台无关的数据解决方案。弄清楚了这个概念再去学习XML,也许更有帮助。

评论

# re: XML的本质讨论  回复  更多评论   

2005-03-13 22:25 by kenko
总的来说,XML是一种基于本文的、格式化的数据存储技术
上面是倒数第二句开头的一句话
是不是应该改为"总的来说,XML是一种基于文本的、格式化的数据存储技术"

# re: XML的本质讨论  回复  更多评论   

2005-03-13 22:26 by kenko
你真的很棒!!!向你学习!

# re: XML的本质讨论  回复  更多评论   

2005-03-14 18:52 by wxb_nudt
谢谢关注,已经修改!

# re: XML的本质讨论  回复  更多评论   

2005-03-28 17:10 by
十分感谢wxb_nudt ,让我思路清晰了很多!

# re: XML的本质讨论  回复  更多评论   

2005-07-15 21:32 by 雨雪霏霏
基于文本的结构化数据存储技术
没什么好讨论的啦

# re: XML的本质讨论  回复  更多评论   

2005-11-29 11:23 by 绿水
“XML是一种基于文本的、格式化的数据存储技术。”
原来XML只是一个数据存储格式。嗯,理解了,一语惊醒梦中人。

# re: XML的本质讨论  回复  更多评论   

2006-05-19 14:18 by robin
我不是什么高手或权威,不敢说文章的论点是正确的,但至少我现在很赞同你的理解!我也一直在思考XML本质的问题,你的文章给了我不少启示!Thanks!

# re: XML的本质讨论  回复  更多评论   

2006-08-09 20:45 by ww
抛砖引玉,“xml本质”让原子数据用另外一种思维方式得到了更自然的封装。

# 楼主对xml的本质讨论偏颇  回复  更多评论   

2007-06-28 22:51 by 小于
楼主对xml的总结性话语算不得错误,但起码是片面的。xml不仅仅是数据存储,数据存储只是它的一个方面,首先第一点:XML最重要的作用是数据交换,而不是存储。楼主应该不需要我解释数据交换和数据存储的区别吧。在更多的领域,XML是做为数据转化和传输的载体。
然后第二点,也是非常重要的一点:XML是一种语言,而非存储。 xml的含义是可扩展标记语言,它有自己的语法结构,并可以表达一定的语义。 xml可以表达一定的语义,从本质上说, xml可以存储的不仅仅是数据,而且可以是操作。xml语言的高明之处在于它不会区分数据和程序(或者说对数据的操作),程序本身是数据,数据也是程序。
这似乎有些难以理解, 举个例子, 假如你使用java写以下函数
int add(int a, int b)
{
return a +b
}

如果用xml来写是以下形式

<define-function return-type="int" name="add">
<arguments>
<argument type="int">a</argument>
<argument type="int">b</argument>
</arguments>
<body>
<return>
<add value1="a" value2="b" />
</return>
</body>
</define>

也许你可以会问 这段代码必须 由一个xml 解析器解析 才会有语义,而对于xml本身它仅仅只是数据。
我觉得你可以用这种方式去理解,但是换一个角度,定义操作的标签(例如body, arguments return )假如仅仅是解析器的一部分, 而真真的语义仍然是xml本身。(这个时候,你还非要说xml本身不具有语义,是解析器赋予它语义吗)。
有些人说, xml仅仅是txt,只是作为一种存储,语义都是解析器赋予的,那不尽要问:如果将C语言代码看成txt,难道C语言本身也只是群字符串的存储吗? 远远不是!
如果你从这个层面来理解xml, 那么就应该明白xml为什么被称为语言,而不是其他。 xml最重要的功能是能够定义可扩展的标记,并使用这些标记表达一定的语义。
XML语言最重要的一点是 语义可构造性。哈,如果你从语言的角度来理解xml,你会发现xml不仅仅是存储数据。

# re: XML的本质讨论  回复  更多评论   

2007-07-02 21:42 by wxb_nudt
非常感谢小于对我这篇文章的补充.时隔两年多,当初写这篇文章的本意我已经记不太清,不过现在看来,当时确实较为偏颇.谢谢!

# re: XML的本质讨论  回复  更多评论   

2008-04-14 17:38 by music
厉害,学习之

# re: XML的本质讨论[未登录]  回复  更多评论   

2010-01-18 16:37 by Stephen
学习!学习

# re: XML的本质讨论  回复  更多评论   

2011-05-13 23:25 by 老苏
XML的本质是数据没错,不过XML的设计目的是用于通信,而不是用于存储。它的数据定义和通信协议的定义其实非常相似!
用于存储,它的效率、功能和灵活性都不如数据库,因为数据库也有很多单机版、嵌入式数据等可以高效的存储。

# re: XML的本质讨论  回复  更多评论   

2011-05-13 23:31 by 老苏
应该说,XML的功能是数据交换,而其本质,是一门标记语言。

只有注册用户登录后才能发表评论。


网站导航: