XML文件格式解析
博客轉(zhuǎn)載:
https://www.cnblogs.com/stroll/p/7064503.html
一、xml基礎(chǔ)詳解:
1、概述:
????xml:即可擴(kuò)展標(biāo)記語(yǔ)言,xml是互聯(lián)網(wǎng)數(shù)據(jù)傳輸?shù)闹匾ぞ?#xff0c;它可以跨越互聯(lián)網(wǎng)任何的平臺(tái),不受編程語(yǔ)言和操作系統(tǒng)的限制,可以說(shuō)它是一個(gè)擁有互聯(lián)網(wǎng)最高級(jí)別通行證的數(shù)據(jù)攜帶者。xml是當(dāng)前處理結(jié)構(gòu)化文檔信息中相當(dāng)給力的技術(shù),xml有助于在服務(wù)器之間穿梭結(jié)構(gòu)化數(shù)據(jù),這使得開發(fā)人員更加得心應(yīng)手的控制數(shù)據(jù)的存儲(chǔ)和傳輸。
Xml用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語(yǔ)言,可以用來(lái)標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對(duì)自己的標(biāo)記語(yǔ)言進(jìn)行定義的源語(yǔ)言。Xml是標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言(SGML)的子集,非常適合Web傳輸。XML提供統(tǒng)一的方法來(lái)描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。
2、xml的特點(diǎn)及作用:
特點(diǎn):
v?xml與操作系統(tǒng)、編程語(yǔ)言的開發(fā)平臺(tái)都無(wú)關(guān);
v?實(shí)現(xiàn)不同系統(tǒng)之間的數(shù)據(jù)交互。
作用:
v?配置應(yīng)用程序和網(wǎng)站;
v?數(shù)據(jù)交互;
v?Ajax基石。
在配置文件里邊所有的配置文件都是以XMl的格式來(lái)編寫的。
跨平臺(tái)進(jìn)行數(shù)據(jù)交互,它可以跨操作系統(tǒng),也可以跨編程語(yǔ)言的平臺(tái)。
Ajax是現(xiàn)在目前比較流行的一個(gè)網(wǎng)絡(luò)交互的技術(shù)。Ajax里面最后一個(gè)x實(shí)際上就是xml的縮寫。Xml(Extensible?Markup?Language)是可擴(kuò)展標(biāo)記語(yǔ)言
?
一個(gè)xml文檔必須要有第一行的聲明和它的文檔元素的描述信息就可以了。
3、xml聲明
?
例子:
注:xml聲明一般是xml文檔的第一行;xml聲明由以下幾個(gè)部分組成:
4、根元素
它是xml文檔里面唯一的;它的開始是放在最前面,結(jié)束是放在最后面。
5、元素:
(1)?所有的xml元素都必須有結(jié)束標(biāo)簽;
(2)?xml標(biāo)簽對(duì)大小寫敏感;
(3)??xml必須正確地嵌套;
(4)元素的命名規(guī)則:
名稱中可以包含字母、數(shù)字或者其他的字符;
名稱不能以數(shù)字或者標(biāo)點(diǎn)符號(hào)開始;
名稱中不能包含空格。
(5)空元素
6、屬性
(1)語(yǔ)法
<元素名?屬性名=“屬性值”/>
例:<Student?ID=“S100”>
???????<Name>Tom</Name>
</Student>
(2)注意:
屬性值用雙引號(hào)包裹;一個(gè)元素可以有多個(gè)屬性,它的基本格式為:
<元素名?屬性名=“屬性值”?屬性名=“屬性值”>;
屬性值中不能夠直接包含<.”,&。
7、實(shí)體:
在xml中,一些字符擁有特殊的意義。如果把字符“<”放在xml元素中,會(huì)發(fā)生錯(cuò)誤,這是因?yàn)榻馕銎鲿?huì)把它當(dāng)作新元素的開始,這樣會(huì)產(chǎn)生xml錯(cuò)誤:
為了避免這個(gè)錯(cuò)誤,請(qǐng)用實(shí)體引用來(lái)代替“<”字符:
xml中5個(gè)預(yù)定義實(shí)體
8、注釋
注:注釋內(nèi)容中不要出現(xiàn)”--”;不要把注釋放在標(biāo)簽中間;注釋不能嵌套。
9、總結(jié):
(1)xml描述的是文檔的內(nèi)容與語(yǔ)義,而不是文檔應(yīng)當(dāng)如何顯示;
(2)格式正規(guī)(well?formed)的xml文檔
遵循如下規(guī)則的xml文檔稱為格式正規(guī)的xml文檔:
v?必須有xml聲明語(yǔ)句;
v?必須有且僅有一個(gè)根元素;
v?標(biāo)簽大小寫敏感;
v?屬性值用雙引號(hào);
v?標(biāo)簽成對(duì);
v?空標(biāo)簽關(guān)閉;
v?元素正確嵌套。
(3)有效的(valid)xml文檔。首先xml文檔是個(gè)格式正規(guī)的xml文檔,然后又需要滿足DTD的要求,這樣的xml文檔稱為有效的xml文檔;
10、解析器
11、命名空間
11.1、xml命名空間(xml?Namespaces)
(1)xml命名空間提供避免元素命名沖突的方法。
(2)在xml中,元素名稱是由開發(fā)者定義的,當(dāng)兩個(gè)不同的文檔使用相同的元素名時(shí),就會(huì)發(fā)生命名沖突。
11.2、xml命名空間示例
(1)使用前綴示例
與僅僅使用前綴不同,我們?yōu)闃?biāo)簽添加了一個(gè)xmlns屬性,這樣就為前綴賦予了一個(gè)與某個(gè)命名空間相關(guān)聯(lián)的限定名稱。
二、DTD技術(shù)——xml文件的驗(yàn)證機(jī)制
1、DTD概述:
文檔類型定義——Document?Type?Definition
DTD用來(lái)描述xml文檔的結(jié)構(gòu),一個(gè)DTD文檔包含:??
元素的定義規(guī)則;元素之間的關(guān)系規(guī)則;屬性的定義規(guī)則。
2、為什么要用DTD呀
v?有了DTD,每個(gè)xml文件可以攜帶一個(gè)自身格式的描述,所謂格式描述就是我的xml文檔里面可以寫哪些東西,比如元素、屬性;
v?有了DTD,不同組織的人可以使用一個(gè)通用DTD用來(lái)交換數(shù)據(jù),xml是隨意定義的,有了DTD,我們可以限制多個(gè)公司之間按照這種DTD的規(guī)則來(lái)編寫xml文檔,由于DTD都是統(tǒng)一格式,所以不同的公司之間,不同的組織之間就可以用這種通用的xml文檔格式進(jìn)行交互數(shù)據(jù)了;
v?應(yīng)用程序可以使用一個(gè)標(biāo)準(zhǔn)DTD校檢從外部接收的xml數(shù)據(jù)是否有效。
3、如何編寫一個(gè)DTD
DTD分成三大類,第一是內(nèi)部DTD,第二是外部DTD,第三是內(nèi)外結(jié)合的DTD。
(1)內(nèi)部DTD文檔(Students.xml):
(2)就是說(shuō)這個(gè)xml文檔里面既包含xml定義,又包含DTD的定義。
這個(gè)[]里面是DTD的定義的內(nèi)容,就是第一個(gè)叫內(nèi)部DTD文檔。
(3)外部DTD文檔(Students.xml??Students.dtd):
所謂外部就是DTD的定義和我們的xml文檔是在不同的文件里面。
那么外部的DTD如何使用呢?那就需要在前面的xml文檔的根元素的上面這個(gè)位置跟剛才內(nèi)部的是一樣的,要寫上
這類年改革文檔在同一個(gè)文件夾下面,就可以了。
有內(nèi)部DTD了,為什么還要學(xué)習(xí)外部DTD呢??
內(nèi)部的DTD,它只能驗(yàn)證當(dāng)前的這個(gè)xml文檔。那假如說(shuō),我們有一個(gè)DTD需要驗(yàn)證多個(gè)xml文檔的話,那就直接使用外部DTD就行。
(4)內(nèi)外部DTD文檔結(jié)合
4、DTD的具體定義——元素的定義
元素名稱:是指xml文檔里面的元素名稱
元素類型:
(1)EMPTY
示例第一個(gè)是對(duì)的,第二個(gè)是錯(cuò)誤的,因?yàn)樗袃?nèi)容了。
(2)#PCDATA
第一個(gè)是對(duì)的,第二個(gè)是錯(cuò)誤的。
(3)純?cè)仡愋偷腄TD語(yǔ)法
(4)ANY
5、定義屬性的語(yǔ)法結(jié)構(gòu)
xml文檔攜帶數(shù)據(jù)的方式,不僅僅是xml的元素的內(nèi)容,還可以是元素的屬性。
所以說(shuō)在DTD里面我們有必要對(duì)屬性進(jìn)行限制。
(1)編寫屬性驗(yàn)證的語(yǔ)法規(guī)則:
(2)屬性類型——CDATA
CDATA是表示屬性的值,可以是任何字符,這里包括數(shù)字和中文。
問題一:屬性的CDATA與元素的CDATA節(jié)有何區(qū)別呢??
屬性的CDATA表示屬性值是任何的字符,元素里的CDATA節(jié)是表示在CDATA節(jié)里面的內(nèi)容不被xml文檔進(jìn)行解析。
問題二:#PCDATA與CDATA有何區(qū)別??
#PCDATA是限制元素里面的內(nèi)容是字符類型的,而這個(gè)CDATA是限制屬性里面的內(nèi)容是字符類型。
(3)屬性類型——ID
表明該屬性的取值必須是唯一的。
(4)屬性類型——IDREF/IDREFS
v?IDREF是指它的值要指向文檔當(dāng)中其它地方聲明的ID。把IDREF當(dāng)成數(shù)據(jù)庫(kù)的外鍵,把ID當(dāng)成主鍵理解就行;
v?IDREFS同IDREF,但是可以具有由空格分開的多個(gè)引用;
(5)屬性類型——Enumerated
預(yù)先定義了一些值,屬性的值必須在所列出的值的范圍內(nèi)
(6)屬性特點(diǎn)——#REQUIRED
它表示元素的所有的實(shí)例都必須有該屬性的值(NOT?NULL)
(7)屬性特點(diǎn)——#IMPLIED
這就表示該屬性的值是可以被忽略的。
(8)屬性特點(diǎn)——#FIXED
元素中該屬性的值必須為指定的固定值。
(9)屬性特點(diǎn)——Default
為屬性提供一個(gè)默認(rèn)的值。
三、實(shí)體
1、實(shí)體概述
實(shí)體,簡(jiǎn)單理解就是C#中的常量,我們?cè)贒TD里面定義,在xml文檔里面去使用。(實(shí)際上就是自定義實(shí)體,與前面的預(yù)定義實(shí)體差不多是一回事)。
2、實(shí)體的定義
四、xml之Schema技術(shù)
1、Schema概述:xml?Schema是用一套預(yù)先規(guī)定的xml元素和屬性創(chuàng)建的,這些元素和屬性定義了xml文檔的結(jié)構(gòu)和內(nèi)容模式。Xml?Shema規(guī)定xml文檔實(shí)例的結(jié)構(gòu)和每個(gè)元素/屬性的數(shù)據(jù)類型。
理解:對(duì)于Schema來(lái)講,我們可以將shema比喻成為是表結(jié)構(gòu)。在表結(jié)構(gòu)里,定義一些數(shù)據(jù)的限制要求。然后我們xml文檔呢就相當(dāng)于是數(shù)據(jù)表將來(lái)要存儲(chǔ)的數(shù)據(jù)u,也就是數(shù)據(jù)庫(kù)里面的數(shù)據(jù)表數(shù)據(jù)了,所以整體來(lái)講的話schema它就是用于驗(yàn)證xml文檔的。
2、有了DTD,為什么要用Schema呢?
(1)DTD的局限性
DTD不遵守xml語(yǔ)法(寫xml文檔實(shí)例時(shí)用一種語(yǔ)法,寫DTD的時(shí)候用另外一種語(yǔ)法);DTD數(shù)據(jù)類型有限(與數(shù)據(jù)庫(kù)數(shù)據(jù)類型不一致);DTD不可擴(kuò)展;DTD不支持命名空間(命名沖突)。
(2)Schema的新特性
Shema基于xml語(yǔ)法的;Shema可以用能處理xml文檔的工具處理;Schema大大擴(kuò)充了數(shù)據(jù)類型,可以自定義數(shù)據(jù)類型;Schema支持元素的繼承——Object-Oriented;Shema支持屬性組。
3、Shema(模式):其作用與DTD一樣,也是用于驗(yàn)證xml文檔的有效性,只不過它提供了比DTD更強(qiáng)大的功能和更細(xì)粒度的數(shù)據(jù)類型,另外Schema還可以自定義數(shù)據(jù)類型。此外,Schema也是一個(gè)xml文件,而DTD則不是。
4、所有的Schema文檔,其根元素必須為Schema。
5、Schema的文檔結(jié)構(gòu)
6、Schema的數(shù)據(jù)類型
6.1、Schema的數(shù)據(jù)類型概述
6.2、簡(jiǎn)單類型:
(1)內(nèi)置的數(shù)據(jù)類型:
基本的數(shù)據(jù)類型;
擴(kuò)展的數(shù)據(jù)類型;
(2)用戶自定義簡(jiǎn)單類型(通過simpleType定義)。
6.3、復(fù)合類型(通過complexType定義)
6.4、數(shù)據(jù)類型的特征
7、Schema的元素類型
7.1、Schema根元素
作用:包含已經(jīng)定義的Schema
用法:<xs:schema>
屬性:xmlns/targetNamespace/elementFormDefault
例子:
7.2、element元素
作用:聲明一個(gè)元素
屬性:name/type/ref/minOccurs/maxOccurs
例子:
7.3、group元素
作用:把一組元素聲明組合在一起
屬性:name
例子:
7.4、attribute元素
作用:聲明一個(gè)屬性
屬性:name/type/use/default/fixed
例子:
7.5、attributeGroup元素
作用:把一組屬性聲明組合在一起
屬性:name/ref
例子:
7.6、simpleType元素
作用:定義一個(gè)簡(jiǎn)單類型,它決定了元素和屬性值的約束和相關(guān)信息
屬性:name
常用的兩種方式:restriction——>一個(gè)約束;list——>從列表中選擇。
(1)simpleType元素的子元素——>restriction
子元素為:<xs:restriction>——>定義一個(gè)約束條件
例子:
(2)simpleType元素的子元素——>list
子元素為:<xs:list>——>從一個(gè)特定數(shù)據(jù)類型的集合中選擇定義一個(gè)簡(jiǎn)單類型元素。
例子:
7.7、complexType元素
作用:定義一個(gè)復(fù)合類型,它決定了一組元素和屬性值的約束和相關(guān)信息。
屬性:name
常用的兩種方式:sequence——>一個(gè)序列;choice——>設(shè)置選擇項(xiàng)。
(1)complexType元素——sequence
作用:給一組元素一個(gè)特定的序列
例子:
(2)complexType元素——choice
作用:把一組屬性聲明組合在一起,以便可以被復(fù)合類型應(yīng)用
屬性:name/ref
例子:
7.8、complexType與simpleType區(qū)別
simpleType類型的元素中不能包含元素或者屬性;
當(dāng)需要聲明一個(gè)元素的子元素和或?qū)傩詴r(shí),用complexType;
當(dāng)需要基于內(nèi)置的基本數(shù)據(jù)類型定義一個(gè)新的數(shù)據(jù)類型時(shí),用simpleType。
總結(jié)
- 上一篇: Zynq定时器系统(上)—全局和私有定时
- 下一篇: asp.net ajax控件工具集 Au