XML语言基础
首先说明一下本文章的范围,因为XML在编程过程中以及数据传递的过程中会应用得非常的广泛,所以不可能一一介绍,本文只进行叙述作者对XML语言的理解,以及XML基础的知识。因为掌握了基础,关于XML的应用也就迎刃而解了。
本文章共分为以下几个部分:为什么,是什么和怎么用三部分。其实所有的语言或者是其他的问题都是这样三个部分,理解了这三个部分一门语言也就基本理解了,至于一些特别的应用,都不会离开语言的本质的。
首先是为什么?
XML语言为什么要出现呢?
在我们进行传递数据时往往会出现规格不统一的情况,虽然我们在互联网进行数据传递可以通过发送文本或者是文件进行传递,但是这样有很多弊端!
第一个弊端:文件太大。文件太大会导致多种问题,传输如果一次传不完就要重新开始这样不仅浪费时间而且会浪费很多的带宽(带宽就是网络传输的流量)这个互联网的理解可以在下次写一下。
第二个弊端:文件格式不统一。文本的内容格式不同会导致接口的混乱(interface就是接口,这个词在很多地方都会用到,其实他的本质意思都是相同的,就是规定使用同样的开关去开关不同的设备。这个打个比方:中国大陆和中国香港的插座标准时不同的,如果在香港买的电器产品想要在大陆使用是要使用一个插座转换器的设备,这里中国大陆和中国香港的接口就会不同,而在中国大陆买的电器呢,在中国任意的地方都可以使用,这就是接口的相同,省去转换的过程)。文件格式不统一会造成最大的问题就是沟通的问题!一旦沟通不好,就会付出很大的时间代价(在工作中会慢慢体会到沟通的问题以及理解的问题是导致工作延后的主要问题),在现实工作中我们就会专门以文档的方式来规定好一切问题的解决方法,这也就是接口的思想。现在世界上网络公司那么多,如果大家都使用不同的接口进行开发时就会出现进行合作时要沟通多次,这样大大的浪费了时间。这就好像货币一样,只有统一的货币才能够流通,而发行货币的单位一定要是具有权威性质的单位。
总而言之呢,XML语言就是为了在软件开发中进行传递数据而产生的!其实这个思想在生活中很多地方都能够用得到!
第二是XML语言是什么?
XML语言全称是EXtensible Markup Language 中文名是可拓展性标记语言,其实在英文里面只要能够理解名称的意思也就能够理解这个名称所代表的机制或者是概念(比如说Restful,这个我会在以后的文章中写的,这个已经预定了两周的东西了)。
从名称上我们就能看出来,XML有三点,第一点是可拓展性:可拓展性意味着数据的改变是友好的。在软件开发中,软件的可拓展性是一个十分重要的性能。主要的目的是为了以后的改变能够尽量的减少修改内容。XML的可拓展性就是可以任意的增加删除修改内容,这里看一下基本的语言代码,其实不要求理解过多,看看形势就知道了:
<?xml version="1.0" encoding="ISO-8859-1"?> <!--这个是注释的格式,上面一句代表xml的版本以及文本的编码--> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
这个是原来样子,如果要增加一条数据user
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <user>wangcan</user> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
这里note下面嵌套了to from等数据,在XML中数据可以进行嵌套可以用来表示复杂的数据类型。至于如何表示,上面的例子是简单的,到后面会进行详细的讲解。
第二点是标记性(markup),什么是标记性语言?维基百科上说是一种将文本(Text)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的计算机文字编码。这个解释很抽象,其实形象上的理解就是使用标记来显示不同的内容。比如在上面的代码中<user>就是标记,而wangcan就是内容,我们想要传递的数据时内容,而用标记来识别不同的内容。
最后一点就是语言,既然是一门语言肯定就会有语法,同我们日常生活中使用的自然语言不同,XML语言是计算机语言,是用来给计算机识别的,自然语言是用来给人识别的,这个是一个很大的区别(其实计算机的出现就是为了模拟人类的自然生活,只是自然界是连续的,而我们用来模拟的计算机世界只能是离散的,这里相关的有离散数学,以后需要的话再讲)。
第三是怎么用
怎么用也就是介绍语言的语法。首先我们来寻找在我们的日常使用中如何找到有关类似XML的东西,因为XML是用来传递数据的载体,是属于Datamodel(数据模型)而我们平时看到的是属于View(视图也就是界面)部分,所以我们在平时的使用中是接触不到XML的东西,但是我们可以找一下和XML类似的东西,生活中我们最常上网使用的就是浏览器了(浏览器是什么),然后用浏览器浏览网页什么的,网页其实本身的代码就是一种类似XML语言的代码(但是为什么网页为什么显示不是代码呢?因为浏览器对代码进行了编译解析等操作,然后显示成界面。其实浏览器在软件的角色就是一个特殊的客户端,只是这个客户端提供了统一的接口,又回到接口上了不是。因为这个接口十分的统一便把他从客户端中分离出来成为了特殊的存在。可以预见未来浏览器会取代各种客户端,比如说WebQQ可以取代QQ客户端等,因为这样能够更好的对用户友好,就像操作系统一样提供了各种软件使用,浏览器也慢慢开始成为一种操作系统了(chromeOS便是一个例子),其实万变不离其宗,都是统一的接口的发展趋势)。
首先我们使用谷歌浏览器吧,下载个谷歌浏览器并安装。
打开网页www.baidu.com,显示如下的图片
然后选项点击开发者工具
会得到下面的界面
可以看一下左边的代码,和前面的例子的代码是不是很像呢,只是其中多了一些东西,我们下面就来介绍下这些东西。
XML语言的语法介绍我从两点进行介绍,第一个是结构,第二个是节点。也许一看很难理解,打个比方就像是一座高楼,他有他的结构构造,这个是整体,具体到每一个房间就是节点。
结构:
讲到结构我们要学习一种数据结构叫做树(Tree),如下图所示(其实树在计算机与数学中的应用特别广泛,有时间可以去多了解一下)
树具有以下特点:
1、每个节点有零个或者多个子节点
2、没有父节点的节点被称为根节点
3、每一个节点除了根节点都有且只有一个父节点
4、除了根节点外,每个子节点可以分为多个不相交的子树
这里我们继续拿出前面的例子
<note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> <list> <element/> </list> </note>
这里note便是根节点,to from等便是根节点的子节点。element是list的子节点。
节点:
节点是XML语言的主要内容,但是实际上这个也是很简单的,由此可见其实计算机的世界最简单,不是错就是对,没有啥灰色地带(其实还是有的,在性能和绚丽UI的选择上我们往往会选择中间地带,这里的UI是user interface的缩写,这里又遇到interface,也是接口的意思,但是为了读的顺畅中文解释叫做用户界面。这里说一下很多时候英文很难用中文解释,中文也很难用英文解释,所以我们学习英语时或者任何其他的语言都要用该语言来进行思考吧。)。
第一点我们来介绍一下这个我们前面说过的markup,标记性。我们在前面的例子上在<>中的字段都是标记,标记(TAG),就是一个数据名称的记号。至于标记的名称是可以进行自定义的,在网页的HTML代码中<head><body>等都是固定的,这些标记以及标记之间的关系(比如note的子节点有to等,这些都是有固定的,毕竟to不能是note的父节点啊,这于理不合)是有一个特殊的文件进行定义,也有不同的定义方法,主要有DTD和XSD,这个在以后再说,毕竟这里只是基础部分。
第二点是内容,内容就像前面的结构中解释的,节点可以是节点的内容,但是追究到最终的原子(原子本身的意思是不可分割,而不是)节点内容的数据格式主要有两个:CDATA和PCDATA。
这里先解释一下CDATA,CDATA是character Data的缩写,字符数据,就是说这是由字符串组成的数据。PCDATA是parser CDATA,就是一个增加编译功能的CDATA。那么为什么要PCDATA和CDATA两个呢,因为在内容中可能会出现类似于<、>、/等符号,为了让这些符号不会影响到解析器的解析,使用特殊的字符串来表示这些符号,所以使用PCDATA。
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 单引号 |
" | " | 多引号 |
第三点是属性,attribute,每一个节点除了标记、内容还有一个就是属性举个例子
<file type="gif">computer.gif</file>
这里type就是一个属性,所有的属性都是要加“”进行表示,属性的作用是提供节点的额外附加的信息,属性的规定也都是由DTD或者是XSD来进行规定,由解析器解析。在这里说一下很多时候属性是可以用子节点进行代替的比如说上面的例子我们可以改写成:
<file>
<type>gif</type>
<content>computer.gif</content>
</file>
这里content是我们自定义的一个节点TAG,我们要明白在XML语言中没有预定的TAG,和HTML中不同,HTML是都规定好的。我们在这里放一个例子:
<CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> </CD> <CD> <TITLE>Greatest Hits</TITLE> <ARTIST>Dolly Parton</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>RCA</COMPANY> <PRICE>9.90</PRICE> <YEAR>1982</YEAR> </CD> <CD> <TITLE>Still got the blues</TITLE> <ARTIST>Gary Moore</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Virgin records</COMPANY> <PRICE>10.20</PRICE> <YEAR>1990</YEAR> </CD> <CD> <TITLE>Eros</TITLE> <ARTIST>Eros Ramazzotti</ARTIST> <COUNTRY>EU</COUNTRY> <COMPANY>BMG</COMPANY> <PRICE>9.90</PRICE> <YEAR>1997</YEAR> </CD> <CD> <TITLE>One night only</TITLE> <ARTIST>Bee Gees</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Polydor</COMPANY> <PRICE>10.90</PRICE> <YEAR>1998</YEAR> </CD> <CD> <TITLE>Sylvias Mother</TITLE> <ARTIST>Dr.Hook</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS</COMPANY> <PRICE>8.10</PRICE> <YEAR>1973</YEAR> </CD> <CD> <TITLE>Maggie May</TITLE> <ARTIST>Rod Stewart</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Pickwick</COMPANY> <PRICE>8.50</PRICE> <YEAR>1990</YEAR> </CD> <CD> <TITLE>Romanza</TITLE> <ARTIST>Andrea Bocelli</ARTIST> <COUNTRY>EU</COUNTRY> <COMPANY>Polydor</COMPANY> <PRICE>10.80</PRICE> <YEAR>1996</YEAR> </CD> <CD> <TITLE>When a man loves a woman</TITLE> <ARTIST>Percy Sledge</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Atlantic</COMPANY> <PRICE>8.70</PRICE> <YEAR>1987</YEAR> </CD> <CD> <TITLE>Black angel</TITLE> <ARTIST>Savage Rose</ARTIST> <COUNTRY>EU</COUNTRY> <COMPANY>Mega</COMPANY> <PRICE>10.90</PRICE> <YEAR>1995</YEAR> </CD> <CD> <TITLE>1999 Grammy Nominees</TITLE> <ARTIST>Many</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Grammy</COMPANY> <PRICE>10.20</PRICE> <YEAR>1999</YEAR> </CD> <CD> <TITLE>For the good times</TITLE> <ARTIST>Kenny Rogers</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Mucik Master</COMPANY> <PRICE>8.70</PRICE> <YEAR>1995</YEAR> </CD> <CD> <TITLE>Big Willie style</TITLE> <ARTIST>Will Smith</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>9.90</PRICE> <YEAR>1997</YEAR> </CD> <CD> <TITLE>Tupelo Honey</TITLE> <ARTIST>Van Morrison</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Polydor</COMPANY> <PRICE>8.20</PRICE> <YEAR>1971</YEAR> </CD> <CD> <TITLE>The very best of</TITLE> <ARTIST>Cat Stevens</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Island</COMPANY> <PRICE>8.90</PRICE> <YEAR>1990</YEAR> </CD> <CD> <TITLE>Stop</TITLE> <ARTIST>Sam Brown</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>A and M</COMPANY> <PRICE>8.90</PRICE> <YEAR>1988</YEAR> </CD> <CD> <TITLE>Bridge of Spies</TITLE> <ARTIST>T'Pau</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Siren</COMPANY> <PRICE>7.90</PRICE> <YEAR>1987</YEAR> </CD> <CD> <TITLE>Private Dancer</TITLE> <ARTIST>Tina Turner</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Capitol</COMPANY> <PRICE>8.90</PRICE> <YEAR>1983</YEAR> </CD> <CD> <TITLE>Midt om natten</TITLE> <ARTIST>Kim Larsen</ARTIST> <COUNTRY>EU</COUNTRY> <COMPANY>Medley</COMPANY> <PRICE>7.80</PRICE> <YEAR>1983</YEAR> </CD> <CD> <TITLE>Pavarotti Gala Concert</TITLE> <ARTIST>Luciano Pavarotti</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>DECCA</COMPANY> <PRICE>9.90</PRICE> <YEAR>1991</YEAR> </CD> <CD> <TITLE>The dock of the bay</TITLE> <ARTIST>Otis Redding</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Atlantic</COMPANY> <PRICE>7.90</PRICE> <YEAR>1987</YEAR> </CD> <CD> <TITLE>Picture book</TITLE> <ARTIST>Simply Red</ARTIST> <COUNTRY>EU</COUNTRY> <COMPANY>Elektra</COMPANY> <PRICE>7.20</PRICE> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Red</TITLE> <ARTIST>The Communards</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>London</COMPANY> <PRICE>7.80</PRICE> <YEAR>1987</YEAR> </CD> <CD> <TITLE>Unchain my heart</TITLE> <ARTIST>Joe Cocker</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>EMI</COMPANY> <PRICE>8.20</PRICE> <YEAR>1987</YEAR> </CD> </CATALOG>
文章的最后我们来说一下我们还需要去了解什么
1、XML同HTML语言的区别
2、XML与DTD、XSD之间的关系
3、XML与XSL、XSLT的关系
4、XML与CSS、Javascript的关系
…….
等等还有很多,一门语言的诞生必然会随着一系列东西的产生,这个我们只需要去了解一些常用到的,不常用的在需要使用时再去查询也会很快的,就好像很多单词不认识我们学会了语法与音标就可以去查询字典来明白单词的意思。
我在想下次些什么好呢???