經(jīng)過兩天的奮戰(zhàn),終于把xml簡(jiǎn)略的過了一遍。
1.1XML介紹
xml是Extensible Markup language的簡(jiǎn)寫,是可擴(kuò)展的標(biāo)識(shí)語言。xml實(shí)際上就是一種定義語言姑躲,用戶可以自己定義數(shù)據(jù)的類型睡扬,也可以創(chuàng)建結(jié)構(gòu)化數(shù)據(jù)庫,還可以對(duì)其中的數(shù)據(jù)進(jìn)行篩選和排序黍析。
1.1.1 什么是XML
xml與html十分相似卖怜,都是標(biāo)記性語言,都是使用標(biāo)簽來描述數(shù)據(jù)阐枣,但是XML的標(biāo)簽可以自己定義马靠。
1.1.2 XML的作用
xml的主要作用是建立數(shù)據(jù)和管理數(shù)據(jù)。xml也可以看成是一個(gè)小型的數(shù)據(jù)庫侮繁,甚至在對(duì)數(shù)據(jù)的處理在某些方面比某些數(shù)據(jù)庫里的數(shù)據(jù)處理更加靈活虑粥。簡(jiǎn)單點(diǎn)說,xml是一種標(biāo)記性語言宪哩,是一個(gè)跨平臺(tái)的娩贷,獨(dú)立于硬件與軟件的描述數(shù)據(jù)的工具,其作用是存儲(chǔ)锁孟、傳遞和交換數(shù)據(jù)彬祖。
1.1.3簡(jiǎn)單的xml文件
xml是由根元素和樹形結(jié)構(gòu)來描述數(shù)據(jù),而一個(gè)完整的xml文件還必須加上一個(gè)xml聲明品抽,其它軟件就可以根據(jù)這個(gè)聲明判斷得到這個(gè)文件是一個(gè)XML文件储笑。聲明的格式如下:
<?xml version = "1.0" encoding = "gb2312" ?>這就是一個(gè)最基礎(chǔ)的聲明,這里我們需要注意的是encoding編碼圆恤。這里一般我們所使用的都是UTF-8這里需要注意突倍,如果你是在用記事本編寫這個(gè)代碼的時(shí)候,你必須將他的編碼格式進(jìn)行變化盆昙。
1.1.4瀏覽XML文件
我們所使用的主流瀏覽器都支持XML文件羽历,當(dāng)我們使用IE 或者是 火狐 打開這個(gè)文檔的時(shí)候,我們能夠看得到樹形數(shù)據(jù)結(jié)構(gòu)淡喜,而當(dāng)我們使用Netscape 和 Opera瀏覽器打開這個(gè)文件時(shí)秕磷, 就會(huì)只能看得到其中的數(shù)據(jù),而不能比較直觀的看得到里面的結(jié)構(gòu)炼团。
1.2設(shè)計(jì)XML
xml雖然沒有規(guī)定標(biāo)簽澎嚣,可以由用戶自己創(chuàng)建標(biāo)簽,但是XML對(duì)結(jié)構(gòu)的要求十分嚴(yán)謹(jǐn)瘟芝,在設(shè)計(jì)XML文件時(shí)一定要遵守其結(jié)構(gòu)規(guī)則易桃。
1.2.1XML文件結(jié)構(gòu)
一個(gè)完整的XML文件可以分為聲明區(qū)、定義區(qū)與數(shù)據(jù)區(qū)3個(gè)部分锌俱。
1.2.2聲明區(qū)
聲明區(qū)必須是整個(gè)XML文件的第一行颈抚,聲明區(qū)使用的是<??>標(biāo)簽,該標(biāo)簽沒有結(jié)束標(biāo)簽嚼鹉。而對(duì)這個(gè)聲明區(qū)的組成部分這里有一個(gè)分解:
xml:表示這是一個(gè)XMl文件贩汉,其中xml一定要用小寫來表示。
version = "1.0": 指定該XML文件是遵守XML1.0的規(guī)范來進(jìn)行制作锚赤,其中version也必須使用小寫字母匹舞,并且XMl的版本號(hào)"1.0"也必須放在引號(hào)內(nèi)。
encoding="gb2312": 聲明XML文件是使用gb2312編碼編寫的线脚,即簡(jiǎn)體中文赐稽。但是一般我所使用的更多的貌似是UTF-8,所以這里我們能根據(jù)自己的需求進(jìn)行更改浑侥。
1.2.3數(shù)據(jù)區(qū)
即數(shù)據(jù)存放的區(qū)域姊舵。
1.2.4 定義區(qū)
在XML文件的聲明區(qū)與數(shù)據(jù)區(qū)之間的是定義區(qū),定義區(qū)也叫做DTD(Document Type Definition),定義區(qū)的作用是設(shè)置文件的格式或標(biāo)簽的相關(guān)性寓落。定義區(qū)必須包含在<!DOCTYPE[]>區(qū)域內(nèi)括丁。DTD可以直接寫在XML文件內(nèi)部,也可以通過引用放在XML文件的外部伶选,與CSS和HTML相類似史飞,DTD中聲明的標(biāo)簽與數(shù)據(jù)區(qū)的標(biāo)簽都是相互對(duì)應(yīng)的,當(dāng)然仰税,XML文件使用了DTD之后构资,該文件中的標(biāo)簽就必須遵守DTD中的規(guī)范,這個(gè)規(guī)范包括標(biāo)簽出現(xiàn)按的次序陨簇、標(biāo)簽的大小寫和標(biāo)簽的數(shù)據(jù)類型等吐绵。另外還有XML Schema 這個(gè)也是正在逐年的取代DTD的趨勢(shì),這個(gè)比DTD更難河绽,但是更加的精確己单。
1.3XML語法
XML對(duì)語法的要求很嚴(yán)格,在學(xué)習(xí)XML之前必須先了解XML的語法規(guī)則葵姥,只有了解了XML語法規(guī)則之后荷鼠,才能創(chuàng)建正確的XML文件。
1.3.1標(biāo)簽與空標(biāo)簽
首先榔幸,XML的標(biāo)簽必須是成對(duì)出現(xiàn)的允乐,有開始標(biāo)簽就必須有結(jié)束標(biāo)簽,否則瀏覽器就會(huì)不能正常的解析這個(gè)XML文檔削咆。當(dāng)然牍疏,在XML文件中當(dāng)然少不了空標(biāo)簽的存在。
1.3.2區(qū)分大小寫
這一點(diǎn)和HTML中有一些不同拨齐,XML是一種區(qū)分大小寫的語言鳞陨,也就是對(duì)大小寫敏感。
1.3.3設(shè)置屬性
在HTML里,很多元素都有自己的屬性厦滤,在XML中當(dāng)然也是少不了這么一個(gè)功能了援岩,在XML中,也可以為自己定義的標(biāo)簽設(shè)定屬性掏导,而且設(shè)定屬性的方法和HTML中是一樣的享怀。
1.3.4特殊字符
在XML里,由于標(biāo)簽里常用到"<"趟咆、">"添瓷、" ' ' "等含有特殊含義和作用的字符,所以這里我們引入了特殊字符值纱。例如:空格 : <? :? <? >? :? > 這一些帶有一些特殊意義的字符來進(jìn)行使用鳞贷。
1.3.5CDATA標(biāo)簽
在xml里有一個(gè)特殊的標(biāo)簽,任何軟件都會(huì)把放在這個(gè)標(biāo)簽里的內(nèi)容當(dāng)成是純文字虐唠,對(duì)這個(gè)標(biāo)簽的內(nèi)容不做任何分析和處理搀愧,因此在這里可以放置任何的元素都不用進(jìn)行轉(zhuǎn)義。CDATA 部分由 "<![CDATA[" 開始凿滤,由 "]]>" 結(jié)束:這也就是CDATA的語法使用規(guī)則妈橄。
1.3.6標(biāo)簽嵌套
與HTML相似,XML中的標(biāo)簽也是可以進(jìn)行嵌套的翁脆,XML的嵌套必須是有層次的嵌套眷蚓,不可以重疊交叉嵌套。
1.3.7注釋
一個(gè)良好的程序反番,都會(huì)有比較詳細(xì)的注釋沙热,詳細(xì)的注釋可以增加程序的可讀性,也便于日后的修改罢缸。<!--和-->標(biāo)簽來插入注釋內(nèi)容篙贸。當(dāng)然注釋可以是單獨(dú)的一行,也可以是一個(gè)區(qū)域枫疆,這樣也就很明顯的實(shí)現(xiàn)了注釋內(nèi)容爵川。
1.4數(shù)據(jù)結(jié)構(gòu)定義
數(shù)據(jù)結(jié)構(gòu)定義又稱之為DTD(Document Type Definition)。DTD是用來定義XML中標(biāo)簽息楔、屬性以及標(biāo)簽之間的關(guān)系寝贡。DTD可以寫在XML文檔的內(nèi)部,此時(shí)DTD是寫在XML的定義區(qū)值依,DTD也可以獨(dú)立于XML文件作為一個(gè)DTD文件存在圃泡,此時(shí)XML可以通過指向DTD的鏈接來指定使用哪個(gè)DTD文件,但是這里只能使用一個(gè)DTD文件愿险,而Schema則可以使用多個(gè)這也是DTD的一個(gè)比較重要的一個(gè)缺陷颇蜡。通過DTD可以檢測(cè)XML的結(jié)構(gòu)是否正確,但是創(chuàng)建一個(gè)XML文件時(shí)并不一定需要DTD。
1.4.1內(nèi)部DTD聲明方法
內(nèi)部DTD是將DTD的內(nèi)容寫在XML文件內(nèi)部风秤,DTD的定義方法如下:
<!DOCTYPE 根元素名稱 [定義內(nèi)容]>
其中定義內(nèi)容通常有兩種方法鳖目,第一種用于定義有子節(jié)點(diǎn)的標(biāo)簽,定義方法如下:
<!ELEMENT 標(biāo)簽名 (子標(biāo)簽名唁情,子標(biāo)簽名疑苔,......)>
第二種用于定義只有內(nèi)容的節(jié)點(diǎn)的標(biāo)簽,即沒有子節(jié)點(diǎn)的標(biāo)簽甸鸟,定義方法如下:
<!ELEMENT 標(biāo)簽名 (數(shù)據(jù)類型) >
這是DTD的內(nèi)部聲明方法。
1.4.2外部DTD聲明方法
DTD除了可以在XML文件內(nèi)部使用之外兵迅,還可以獨(dú)立于XML而存在抢韭,如果XML需要引用該DTD文件,只需要使用以下代碼就可以將外部DTD文件包含到XML文件內(nèi)部恍箭。
<!DOCTYPE 根元素名稱 SYSTEM "DTD 文件URL" >
不過由于外部DTD文件是獨(dú)立于XML文件而存在的刻恭,所以使用外部DTD時(shí)會(huì)有兩個(gè)文件,一個(gè)是XML文件扯夭,另一個(gè)是DTD文件鳍贾。
注意:DTD文件的擴(kuò)展名不一定要用.dtd,可以是任何形式的擴(kuò)展名交洗,但是為了標(biāo)準(zhǔn)的統(tǒng)一骑科,筆者還是建議統(tǒng)一使用.dtd 為擴(kuò)展名。
1.4.3內(nèi)外部DTD結(jié)合聲明方法
?使用外部DTD聲明方法可以讓多個(gè)XML文件使用同一個(gè)DTD文件构拳。但是咆爽,處理使用外部DTD聲明方法之外,XML文件還支持外部DTD與內(nèi)部DTD文件結(jié)合使用的生命方法置森。注意:使用內(nèi)外部DTD結(jié)合的生命方法可以在原有的外部DTD文件標(biāo)簽之外追加標(biāo)簽斗埂,但是不能重復(fù)定義外部DTD文件里已有的標(biāo)簽。
1.4.4格式正確的XML文件
在文章的一開始凫海,筆者就不斷的強(qiáng)調(diào)呛凶,XML文件的格式與結(jié)構(gòu)都是十分嚴(yán)謹(jǐn)?shù)摹D敲葱刑埃粋€(gè)格式正確的XML文件必須滿足以下的幾個(gè)條件:
1) XML文件的第一行必須是類似于"<?xml version = " 1.0" encoding = " gb2312" ?>"的XML聲明漾稀。
2)XML文件里有且只有一個(gè)根元素。
3)XML文件里的所有標(biāo)簽都必須成對(duì)出現(xiàn)瓮顽,有開始標(biāo)簽就必須要有結(jié)束標(biāo)簽县好。
4)如果開始標(biāo)簽與結(jié)束標(biāo)簽之間沒有任何文字,可以簡(jiǎn)寫為" <標(biāo)簽名 /> " 形式暖混。
5)標(biāo)簽可以有屬性缕贡,所有屬性值必須用引號(hào)括起來。
6)XML文件是區(qū)分大小寫的。
7)在XML文件里如果出現(xiàn)特殊文字晾咪,必須轉(zhuǎn)義之后再放在XML文件中收擦。
8)XML文件里的標(biāo)簽可以嵌套使用,但不能交叉重疊谍倦。
1.4.5有效的XML文件
如果一個(gè)XML文件中包含DTD聲明塞赂,那么這個(gè)XML文件稱之為Validating XML 文件,即有法可依昼蛀、有效的XML文件宴猾。一個(gè)Validating XML文件必須滿足的條件如下所示:
1)Validating XML文件必須 是一個(gè)Well-Formed XML 文件。
2)Validating XML文件必須包括DTD聲明叼旋。
3)Validating XML文件只能使用DTD聲明中的標(biāo)簽仇哆,標(biāo)簽的出現(xiàn)次序也必須與DTD中聲明的一樣。
滿足這些條件的話夫植,就是一個(gè)有效的XML文件讹剔。
1.5 標(biāo)簽類型
在DTD定義區(qū)里定義XML文件里的標(biāo)簽時(shí)常用到類似于" <!ELEMENT 書名(#RCDATA) "的語句,在該語句里的 "#PCDATA " 就是一個(gè)標(biāo)簽類型详民,不同的標(biāo)簽可以設(shè)為不同的標(biāo)簽類型延欠。
1.5.1#PCDATA類型
#PCDATA 類型可以說是在XML里使用得最多的數(shù)據(jù)類型,該數(shù)據(jù)類型代表文字?jǐn)?shù)據(jù)沈跨。將標(biāo)簽設(shè)置為#PCDATA 類型的代碼如下:
<!ELEMENT 標(biāo)簽名稱 (#PCDATA)>
如果一個(gè)標(biāo)簽的數(shù)據(jù)類型為#PCDATA 類型由捎,那么這個(gè)標(biāo)簽則不能再包含其他標(biāo)簽,只能包括文字谒出。例如:
<!ELEMENT 計(jì)算機(jī)系列? (書名隅俘,出版社,作者笤喳,價(jià)格 )>這就是這么一個(gè)帶類型的標(biāo)簽實(shí)例为居。
1.5.2EMPTY類型
EMPTY類型的標(biāo)簽是空標(biāo)簽,將標(biāo)簽設(shè)置為EMPTY類型的方法如下:
<!ELEMENT 標(biāo)簽名稱? EMPTY>
注意:將標(biāo)簽設(shè)置為#PCDATA 類型時(shí)杀狡," #PCDATA " 要用圓括號(hào)括起來蒙畴,而將標(biāo)簽設(shè)置為EMPTY 類型時(shí),不需用圓括號(hào)括起來呜象。當(dāng)一個(gè)標(biāo)簽被設(shè)置為EMPTY類型之后膳凝,可以使用 " <標(biāo)簽名 /> " 的簡(jiǎn)寫方式來替代 " <標(biāo)簽名> </標(biāo)簽名>? " 的寫法。
1.5.3 ANY類型
ANY類型的標(biāo)簽是一個(gè)自由的標(biāo)簽恭陡,在這個(gè)標(biāo)簽內(nèi)部的子標(biāo)簽可以任意的排放位置蹬音,不用再按規(guī)定的次序出現(xiàn),通常ANY 類型 都用在根元素標(biāo)簽上休玩。
注意:即使將根元素設(shè)為ANY類型著淆,在數(shù)據(jù)區(qū)里也不能出現(xiàn)在定義區(qū)中沒有定義的標(biāo)簽劫狠,否則只能是Well-Formed文件而不是Validating 文件。
使用方法同上面的類型相同永部。
1.5.4嵌套的標(biāo)簽聲明
XML文件是以樹形結(jié)構(gòu)為基礎(chǔ)來描述數(shù)據(jù)的独泞,除了根元素可以包含子標(biāo)簽之外,任何一個(gè)標(biāo)簽都有可能會(huì)包含其他的子標(biāo)簽苔埋,這就是XML標(biāo)簽的嵌套懦砂。既然XML標(biāo)簽都可以嵌套,那么用于聲明XML標(biāo)簽的DTD组橄,應(yīng)該也能嵌套使用荞膘。例如:
首先,聲明一個(gè)包含了4個(gè)子標(biāo)簽的根元素晨炕,
<!ELEMENT 計(jì)算機(jī)系列 (書名,出版社,作者,價(jià)格) >
這就是一個(gè)基本的嵌套生成衫画,那么如果他的子標(biāo)簽還會(huì)有著嵌套呢?
這個(gè)時(shí)候瓮栗,我們就能直接寫出它的子標(biāo)簽所嵌套的標(biāo)簽。
<!ELEMENT 出版社 (出版社名瞄勾,郵編费奸,地址) >
這樣在DTD文檔中就能比較完善的把這個(gè)XML文檔所需要的一些東西進(jìn)行定義約束。
后面我們就是只需要將這個(gè)文檔里面的其他子標(biāo)簽進(jìn)行定義之后即可进陡。
1.5.5混合標(biāo)簽的聲明
在XML的標(biāo)簽嵌套里允許文字獄標(biāo)簽的混合使用愿阐。也就是在一個(gè)標(biāo)簽里面,既含有文字趾疚,又含有子標(biāo)簽的類型缨历。另外在標(biāo)簽的定義的時(shí)候我們也是有著屬性次數(shù)的出現(xiàn)。
| : 多選其一
* : 出現(xiàn)零次或者是多次
+: 一次或者是多次
無: 必須出現(xiàn)而且只能出現(xiàn)一次
1.6實(shí)體
在XML文件中的實(shí)體類似于很多程序中的常數(shù)糙麦,可以用來代表一些常用的數(shù)據(jù)辛孵,定義了實(shí)體之后,在XML文件中就可以通過實(shí)體名來引用這個(gè)常數(shù)赡磅,使用實(shí)體的好處是一次設(shè)定多處使用魄缚,一旦實(shí)體的值需要修改,也只要修改定義實(shí)體的部分即可焚廊,不需要逐個(gè)文件去修改冶匹。
1.6.1內(nèi)部實(shí)體
實(shí)體的聲明也是在XML文件的定義區(qū)聲明,如果實(shí)體是在內(nèi)部DTD中聲明的咆瘟,就稱為內(nèi)部實(shí)體嚼隘,實(shí)體聲明的語法如下所示:
<!ENTITY 實(shí)體名 " 實(shí)體值 ">而在XML文件中引用實(shí)體的方法如下所示:
&實(shí)體名稱;
1.6.2外部實(shí)體
當(dāng)XML文件使用的是外部DTD聲明方法袒餐,那么在外部DTD里聲明的實(shí)體就是外部實(shí)體飞蛹,
大概的調(diào)用以及使用方法與內(nèi)部實(shí)體大體上是相同的谤狡。
1.6.3 在DTD聲明中使用實(shí)體
在DTD中聲明的實(shí)體不但可以在數(shù)據(jù)區(qū)里使用,還可以在DTD中使用桩皿,其調(diào)用方法與在數(shù)據(jù)區(qū)中調(diào)用方法一樣豌汇。
注意:在聲明區(qū)不能循環(huán)引用實(shí)體,既不能存在實(shí)體A引用實(shí)體B泄隔,實(shí)體B反過來引用實(shí)體A的現(xiàn)象拒贱。
1.6.4參數(shù)型實(shí)體
前面介紹的實(shí)體,都是在數(shù)據(jù)區(qū)里引用佛嬉,或在聲明實(shí)體時(shí)引用另一個(gè)實(shí)體逻澳,那么在定義標(biāo)簽時(shí),能不能使用實(shí)體呢暖呕?答案是可以的斜做。在定義標(biāo)簽時(shí)引用實(shí)體,這種方式稱為參數(shù)型實(shí)體湾揽。使用參數(shù)型實(shí)體與使用普通實(shí)體有些不同瓤逼,普通實(shí)體可以在內(nèi)部DTD中使用,也可以在外部DTD中使用库物,而參數(shù)型實(shí)體只能在外部DTD中使用霸旗。
參數(shù)型實(shí)體定義方式為:
<!ELEMENT % 實(shí)體名稱 " 實(shí)體值 " >
而引用的方式為:
%實(shí)體名稱;
注意:參數(shù)型實(shí)體只能在外部DTD文件里戚揭,作為標(biāo)簽的參數(shù)被引用诱告,不能在XML的數(shù)據(jù)區(qū)里引用。
1.6.5 實(shí)體的混合使用
實(shí)體既可以在內(nèi)部DTD里聲明民晒,也可以在外部DTD里聲明精居,由于內(nèi)外部DTD可以混合使用,所以實(shí)體也可以混合使用潜必。同樣靴姿,和CSS一樣,內(nèi)部的使用優(yōu)先級(jí)大于外部的使用優(yōu)先級(jí)。
1.7標(biāo)簽屬性
與HTML代碼一樣,XML代碼中的標(biāo)簽也可以設(shè)置屬性功偿,屬性是標(biāo)簽的附加說明,通常使用程序或軟件來讀取辈毯。
1.7.1 標(biāo)簽屬性的介紹
在XML文件里的標(biāo)簽都是由開發(fā)者根據(jù)需要自己創(chuàng)建的,但這些標(biāo)簽也可以擁有自己的屬性以及屬性值搜贤,當(dāng)然谆沃,這些屬性與值也是開發(fā)者根據(jù)自己的需要而創(chuàng)建的。
1.7.2設(shè)置標(biāo)簽屬性
如果一個(gè)標(biāo)簽里還包含了屬性仪芒,那么在使用DTD設(shè)置標(biāo)簽類型時(shí)唁影,還必須為該標(biāo)簽生命屬性耕陷,否則就不是一個(gè)Validating 文件了,設(shè)置標(biāo)簽屬性的語法為:
<!ATTLIST 標(biāo)簽名 屬性名 類型 " 默認(rèn)值 ">
1.7.3標(biāo)簽屬性的類型
標(biāo)簽屬性擁有三個(gè)不同的類型据沈,分別為:#REQUIRED哟沫、#IMPLIED 和 #FIXED, 這三個(gè)類型說明了標(biāo)簽的不同用法锌介。標(biāo)簽屬性類型在定義標(biāo)簽屬性時(shí)使用嗜诀,通常放在標(biāo)簽屬性定義的最后。
#REQUIRED 類型說明的該標(biāo)簽屬性是一個(gè)不能省略的屬性孔祸,只要標(biāo)簽存在隆敢,該屬性就一定要出現(xiàn)。不過將一個(gè)屬性類型設(shè)為#REQUIRED時(shí)崔慧,就不能再為其設(shè)置默認(rèn)值拂蝎,
#IMPLIED 類型說明該標(biāo)簽屬性是一個(gè)可有可無的屬性,需要時(shí)可以制定該標(biāo)簽的屬性惶室,不需要時(shí)温自,也可以將其省略。將一個(gè)屬性類型設(shè)為#IMPLIED類型的屬性皇钞,就不能再為其設(shè)置默認(rèn)值捣作。
#FIXED 類型說明該標(biāo)簽屬性是一個(gè)固定值,設(shè)置該屬性類型之后鹅士,就不需要在標(biāo)簽里再設(shè)置該屬性了,在瀏覽器中打開的時(shí)候會(huì)將里面的屬性打印出來 惩坑。
1.7.4標(biāo)簽屬性值的數(shù)據(jù)類型
在前面例子中所有標(biāo)簽屬性值的類型都是CDATA , CDATA類型是文字類型掉盅,設(shè)為CDATA類型的屬性可以是任何文字,包括英文以舒、中文和數(shù)字趾痘。
而標(biāo)簽的屬性類型不僅僅可以為CDATA,還可以是NMTOKEN 蔓钟,NMTOKENS 永票,ID,IDREF滥沫,IDREFS侣集,ENTITY,ENTITES 幾種類型兰绣。標(biāo)簽屬性的類型的具體含義如下所示:
1)CDATA: 文字類型世分,可以為任何文字,包括英文缀辩、中文臭埋、數(shù)字踪央、空格、標(biāo)點(diǎn)等瓢阴〕澹‘
2)NMYOKEN : 文字類型,但只能是英文字母荣恐、數(shù)字或者是幾種常用符號(hào)液斜,文字之間不能包括空格。
3)NMYOKENS:文字類型募胃,可以包含的文字與NMYOKEN相同旗唁,除此之外,還可以包括空格痹束。
4)ID : 文字類型检疫,與CDATA的用法相同,但是在同一個(gè)XML文件中祷嘶,不能同時(shí)出現(xiàn)相同的屬性值屎媳。
5)IDREF : 文字類型,不過這種數(shù)據(jù)類型比較特殊论巍,只能用同一個(gè)XML文件中的其他ID類型的標(biāo)簽屬性的屬性值作為自己的屬性值烛谊。
6)IDREFS : 文字類型,與IDREF類型類似嘉汰,不過IDREF類型只能引用一個(gè)ID標(biāo)簽屬性值作為自己的屬性值丹禀,而IDREF可以引用多個(gè)ID標(biāo)簽屬性值作為自己的屬性值。
7)ENTITY:外部實(shí)體類型鞋怀,使用該類型的標(biāo)簽屬性必須用一個(gè)外部實(shí)體來當(dāng)作屬性值双泪。通常用來處理二進(jìn)制文件。
8) ENTITYS:同樣密似,是ENTITY的復(fù)數(shù)形式而已焙矛。
1.7.5 指定標(biāo)簽屬性值范圍
在聲明標(biāo)簽屬性時(shí),可以指定標(biāo)簽屬性值的范圍残腌,當(dāng)在XML數(shù)據(jù)區(qū)里使用標(biāo)簽屬性時(shí)村斟,就只能在這個(gè)范圍內(nèi)選擇屬性值,其語法代碼如下:
<!ATTLIST 標(biāo)簽名 屬性名? (屬性值1 | 屬性值 2| 抛猫。蟆盹。。 " 默認(rèn)值 ">
1.7.6處理XML文件中的空格
XML文件中經(jīng)常會(huì)出現(xiàn)一些如空格邑滨、Tab鍵日缨、空白行等特殊字符,在一些應(yīng)用程序中不能很好的處理這個(gè)地方掖看。
所以在XML中匣距,有一個(gè)特定的屬性:" xml:space " , 該屬性用來控制XML文件中的空格的處理方式面哥。 當(dāng) 其屬性值 為 " default " 是,XML文件中的空格由應(yīng)用程序控制如何處理毅待,這也是該屬性的默認(rèn)值尚卫。當(dāng)屬性值為preserve 時(shí),XML文件中的空格將會(huì)成為文件中的文字尸红。
1.8命名空間
由于XML可以由開發(fā)者隨意定義標(biāo)簽名稱吱涉,在多人聯(lián)合開發(fā)時(shí),有可能會(huì)出現(xiàn)標(biāo)簽的命名沖突外里,命名空間就是用來解決命名沖突的一種方法怎爵。
1.8.1使用標(biāo)簽前綴解決命名沖突
即在標(biāo)簽的前面加上一個(gè)命名空間。
1.8.2命名空間
W3C的命名規(guī)范聲明命名空間本身就是一個(gè)統(tǒng)一資源標(biāo)識(shí)符(URI)盅蝗,URI是一個(gè)標(biāo)識(shí)網(wǎng)絡(luò)資源的字符串鳖链,最常用的URI就是URL。URL用于標(biāo)識(shí)網(wǎng)絡(luò)主機(jī)的地址墩莫,可以說是在網(wǎng)絡(luò)上唯一的命名方式芙委,通常都使用URL來標(biāo)識(shí)命名空間,另外還有一個(gè)不常用的URI狂秦,稱之為URN 也可以用來標(biāo)識(shí)命名空間灌侣。
聲明命名空間的語法如下:
<標(biāo)簽名? xmlns: 前綴名 = " 命名空間 " >
當(dāng)然,一個(gè)標(biāo)簽中可以有多個(gè)命名空間前綴聲明裂问。
由于命名空間是以屬性的形式出現(xiàn)在標(biāo)簽里侧啼,因此在xml的定義區(qū)里,還要對(duì)這個(gè)屬性進(jìn)行聲明堪簿。
1.8.3 內(nèi)定命名空間
在XML里還可以使用內(nèi)定聲明方式來聲明命名空間慨菱。
1.9小結(jié)
XML是可擴(kuò)展的標(biāo)識(shí)語言,主要作用是數(shù)據(jù)的建立和管理戴甩,可以當(dāng)作一種通用的數(shù)據(jù)庫來使用,也能使用不同的應(yīng)用程序來讀取XML里的數(shù)據(jù)闪彼,一個(gè)完整的XML文件可以分為聲明區(qū)甜孤、定義區(qū)和數(shù)據(jù)區(qū)3個(gè)部分。聲明區(qū)的作用是聲明該文件為XML文件畏腕,數(shù)據(jù)區(qū)是數(shù)據(jù)存放的區(qū)域缴川,定義區(qū)的作用是設(shè)置文件的格式或標(biāo)簽的相關(guān)性。
好了描馅,XML的一些比較基礎(chǔ)的就談到這里把夸,下一節(jié)筆者覺得更難,更需要懂的铭污。