第2章 規(guī)范的XML文件_第1頁
第2章 規(guī)范的XML文件_第2頁
第2章 規(guī)范的XML文件_第3頁
第2章 規(guī)范的XML文件_第4頁
第2章 規(guī)范的XML文件_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第二章規(guī)范的XML文件XML文件規(guī)范的XML文件有效的XML文件

規(guī)范的XML文件(Well-FormedXML):符合W3C指定的基本語法規(guī)則。有效的XML文件(ValidatedXML):規(guī)范的XML文件再符合額外的一些約束。XML的特點:

是一種能夠應(yīng)用在各個領(lǐng)域進行設(shè)計的標記語言。XML的標記是可自由定義,使得XML文件能夠很好地體現(xiàn)數(shù)據(jù)結(jié)構(gòu)和含義。XML文件必須符合一定的語法規(guī)則。

XML的特點:

XML文件必須符合一定的語法規(guī)則規(guī)范的XML文件必須要滿足W3C所指定的標準,比如:文件用“XML聲明”開始有且僅有一個根標記,其他文件必須封存在根標記中文件是樹狀結(jié)構(gòu)非空標記必須有“開始標記”和“結(jié)束標記”……規(guī)范的XML的組成:聲明可選的序言:注釋、處理指令文檔的主體由一個或多個元素組成,其形式為一個可能包含字符數(shù)據(jù)的文檔樹規(guī)范的XML的組成:<?xmlversion=“1.0”?><!--注釋--><員工><姓名>張三</姓名><性別>男</性別></員工><!--注釋-->序言主體尾部文檔XML的基本結(jié)構(gòu)1、序言碼:XML聲明<?xmlversion="1.0"encoding="UTF—8"?>2、處理指令:關(guān)聯(lián)DTD、XSL、CSS3、根標記4、標記5、屬性6、CDATA段:〈![CDATA[…………]]〉7、注釋:〈!--…………--〉<?xmlversion="1.0"encoding="UTF—8"?><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body></note><!--John給George便簽-->通過一個文檔實例看——XML

第一行是XML聲明。它定義XML的版本(1.0)和所使用的編碼(UTF——8)。下一行描述文檔的根元素

<note>

接下來4行描述根的4個子元素(to、from、heading以及body):

<to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body>

最后一行定義根元素的結(jié)尾:

</note>

注釋說明:該XML文檔包含了John給George的一張便簽。XML文檔形成一種樹結(jié)構(gòu)XML文檔必須有一個且只有一個根元素,該元素是所有其他元素的父元素。XML文檔中的元素形成了一棵文檔樹。這棵樹從根部開始,并擴展到樹的最底端。所有元素均可擁有子元素:<root><child><subchild>.....</subchild></child></root>父、子以及同胞等術(shù)語用于描述元素之間的關(guān)系。父元素擁有子元素。相同層級上的子元素成為同胞(兄弟或姐妹)。所有元素均可擁有文本內(nèi)容和屬性(類似HTML中)。2.1XML聲明一個規(guī)范的XML文檔通常以XML聲明開始。XML聲明是處理指令的一種,它告訴瀏覽器或其他處理程序這個文檔是XML文檔。聲明必須放在第一行,前面不能有空白、注釋或其它處理命令。XML聲明XML聲明中的版本屬性XML聲明中的編碼屬性XML聲明中的獨立屬性其格式如下:<?xml版本信息[編碼信息][文檔獨立性信息]?>例子:<?xmlversion=“1.0”encoding=“UTF-8”standalone=“yes”?>XML聲明中的版本屬性一個最基本的XML聲明:

<?xmlversion="1.0"?>標識開始XML版本標識結(jié)束注:version屬性不能省略且必須在屬性列表的第一位,指明所采用的XML的版本號,用來保證對XML未來版本的支持。XML聲明中的編碼屬性<?xmlversion="1.0"encoding=“UTF-8”?>編碼方式要和其xml的保存方式相一致

編碼屬性指定了文本的編碼系統(tǒng),即規(guī)定了XML文檔采用哪種字符集進行編碼。字符與編碼的發(fā)展ASCII:運行在英文DOS。計算機剛開始只支持英語,其它語言不能夠在計算機上存儲和顯示。ANSI編碼:運行在中文DOS,中文Windows95/98,日文Windows95/98。通常使用2個字節(jié)來表示1個字符。不同的國家和地區(qū)制定了不同的標準,由此產(chǎn)生了GB2312,BIG5,JIS等各自的編碼標準。不同ANSI編碼之間互不兼容,當信息在國際間交流時,無法將屬于兩種語言的文字,存儲在同一段ANSI編碼的文本中。字符與編碼的發(fā)展3.UNICODE(國際化)運行在WindowsNT/2000/XP,Linux,Java。為了使國際間信息交流更加方便,國際組織制定了UNICODE字符集。給各種語言中的每一個字符設(shè)定了統(tǒng)一并且唯一的數(shù)字編號,以滿足跨語言、跨平臺進行文本轉(zhuǎn)換、處理的要求。字符串在內(nèi)存中的存放方法ASCII階段,單字節(jié)字符串使用一個字節(jié)存放一個字符;ANSI編碼支持多種語言階段,每個字符使用一個字節(jié)或多個字節(jié)來表示;在UNICODE被采用之后,計算機存放字符串時,改為存放每個字符在UNICODE字符集中的序號。2個字節(jié)存放一個序號ABC123中國123中國12310個字節(jié)6個字節(jié)7個字節(jié)ASCIIANSIUNICODE使用哪些字符。也就是說哪些漢字,字母和符號會被收入標準中。所包含“字符”的集合就叫做“字符集”。規(guī)定每個“字符”分別用一個字節(jié)還是多個字節(jié)存儲,用哪些字節(jié)來存儲,這個規(guī)定就叫做“編碼”。字符集與編碼

在制定編碼標準的時候,“字符的集合”和“編碼”一般都是同時制定的。因此,平常我們所說的“字符集”,比如:GB2312,GBK,JIS等,除了有“字符的集合”這層含義外,同時也包含了“編碼”的含義。用來給UNICODE字符集編碼的標準有很多種,比如:UTF-8,UTF-16,UTF-32等。常用的編碼簡介分類編碼標準說明分類編碼標準說明分類編碼標準說明單字節(jié)字符編碼ISO-8859-1最簡單的編碼規(guī)則,每一個字節(jié)直接作為一個字符。常用的編碼簡介分類編碼標準說明分類編碼標準說明分類編碼標準說明ANSI編碼GB2312BIG5Shift_JIS,ISO-8859-2……這些“ANSI編碼標準”都只能處理各自語言范圍之內(nèi)的UNICODE字符。比如:漢字標準(GB2312)中沒有規(guī)定韓國語字符怎樣存儲。GB2312簡介GB2312(1980年)一共收錄了7445個字符,包括6763個漢字和682個其它符號。1995年的漢字擴展規(guī)范GBK1.0收錄了21886個符號,它分為漢字區(qū)和圖形符號區(qū)。漢字區(qū)包括21003個字符。2000年的GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數(shù)民族文字。

從ASCII、GB2312、GBK到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中總是有相同的編碼,后面的標準支持更多的字符。常用的編碼簡介分類編碼標準說明分類編碼標準說明分類編碼標準說明UNICODE編碼UTF-8UTF-16UTF-32……

給各種語言中的每一個字符設(shè)定了統(tǒng)一并且唯一的數(shù)字編號,以滿足跨語言、跨平臺進行文本轉(zhuǎn)換、處理的要求。XML聲明中的編碼屬性常用的編碼方式及其保存方式

UTF-8gb2312ISO-8859-1XML聲明中的編碼屬性ISO-8859-1ASCIIGB2312ASCII、中文UTF——8ASCII、中文、日文等多種文字XML文件默認使用的是UTF——8的編碼方式XML中可用的字符集編碼字符集名稱語言/國家US-ASCII英語UTF-8壓縮UnicodeUTF-16壓縮UCSISO-10646-UCS-2原始UnicodeISO-10646-UCS-4原始UCSISO-8859-1Latin-1,西歐ISO-8859-2Latin-2,東歐ISO-8859-3Latin-3,南歐ISO-8859-4Latin-4,北歐ISO-8859-5ASCII碼加古斯拉夫語ISO-8859-6ASCII碼加阿拉伯語ISO-8859-7ASCII碼加希臘語ISO-8859-8ASCII碼加希伯來語ISO-8859-9Latin-5,土耳其語ISO-8859-10Latin-6,ASCII碼加北歐語ISO-8859-11ASCII碼加泰國語ISO-8859-13Latin-7,ASCII碼加波羅地海周邊語言和獨特的拉托維亞語ISO-8859-14Latin-8,ASCII碼加蓋爾語和威爾式語ISO-8859-15Latin-9,Latin-0,西歐ISO-2022-JP日語Shift_JIS日文版WindowsEUC-JP日文版UnixBig5中國臺灣地區(qū),漢語GB2312中國大陸,漢語KOI6-R俄羅斯ISO-2022-KR韓語EUC-KR韓語版UnixISO-2022-CN漢語XML聲明中的獨立屬性<?xmlversion="1.0"encoding=“UTF-8”standalone=“yes”?>

如果我們的文檔不依賴于外部文檔,即所有必須的實體聲明都包含在文檔中。在XML聲明中,我們可以通過standalone=“yes”聲明這個文檔是獨立的文檔.

如果文檔依賴于外部文檔,即需要外部的DTD(文檔類型定義),可以通過standalone=“no”來聲明.

2.2XML的標記XML的標記分為非空標記與空標記.XML標記空標記非空標記開始標記結(jié)束標記XML是基于文本的標記語言,標記是XML文檔最基本的組成部分。

XML的空標記空標記的語法格式<空標記的名稱屬性列表/>或<空標記的名稱/>“<”與“標記名稱”之間不要含有空格“/>”前面可以有空格和換行XML中的空標記例子:<王菲age=“35”sex=“女”/><李亞鵬/><謝霆鋒age=“26”sex=“男”

/>XML中的非空標記非空標記必須由“開始標記”與“結(jié)束標記”組成,兩者之間是該“標記的內(nèi)容”。例子:<超級女生>我喜歡這個節(jié)目</超級女生>非空標記開始標記結(jié)束標記=+XML中的非空標記非空標記語法格式開始標記格式<標記名稱屬性列表>

或<標記名稱>結(jié)束標記</標記名稱>例子: <王菲sex=“女”> </王菲>“<”與標記名稱之間不要含有空格“>”前面可以有空格和換行非空標記的內(nèi)容開始標記與結(jié)束標記之間是標記的內(nèi)容。標記內(nèi)容是有兩部分組成:文本數(shù)據(jù)與標記。標記內(nèi)容子標記文本數(shù)據(jù)非空標記的內(nèi)容1.<goods>

電腦

</goods>2.<goods>電腦</goods>區(qū)別:標記文本:1個回行符、4個空格、“電腦”

和1個回行符標記文本:“電腦”標記的名稱規(guī)則:名稱可以由字母、數(shù)字、下劃線、點或連字符組成;但必須以字母或下劃線開頭。不能使用空白標記名稱區(qū)分大小寫<name>與<Name>是不同的“標記”和“標簽”是具有不同含義的詞。標記是指開始標簽、結(jié)束標簽以及之間的內(nèi)容,包括屬性、文本、注釋及子元素。標簽是一對尖括號〈〉和之間的內(nèi)容,包括標記名和屬性。例如:〈bookname=HarryPotter〉和〈/book〉是標簽〈bookname=HarryPotter〉Good〈/book〉則是一個標記?!皹擞洝焙汀皹撕灐眳^(qū)別XML的根標記XML文件必須有且僅能有一個根標記,其他標記都必須封裝在根標記中。最后XML文件的標記必須形成樹狀結(jié)構(gòu)。XML的根標記<root> <性別>

<出生日期> </性別> 1980年8月6日

</出生日期> </root>×XML文件中的特殊字符XML文件中有五種特殊字符:<、>、&、’、”XML標記內(nèi)容中的文本數(shù)據(jù)不能含有特殊字符XML特殊字符字符實體引用<<>>‘'“"&&十進制字符引用十六進制字符引用<<>>''""&&XML特殊字符<?xmlversion="1.0"encoding="UTF-8"?><?xml-stylesheethref="show.css"type="text/css"?><xml-body><entity>

這是實體引用的例子:李四是1980年出生&<大學畢業(yè)></entity><character>

這是字符引用的例子:李四是1980年出生&<大學畢業(yè)></character></xml-body>2.3XML文件中的特殊字符

還有一些無法從鍵盤鍵入到文檔中,如希臘字母。例如“β”就會被解析器換成希臘字母β.字符引用例題<?xmlversion="1.0"encoding="gb2312"?><書>我喜歡的書有<哈利波特>&"紅樓夢"</書>字符引用例題2.4XML中的CDATA段CDATA(characterData)段解決了要使用大量特殊字符的問題

<![CDATA[]]>

開始結(jié)束

只要用CDATA做了標識,解析器就不對它進行處理了,也就是你寫什么,解析器都原樣輸出。解析器不對CDATA段的內(nèi)容做分析處理。XML中的CDATA段

<![CDATA[

這是一個CDATA段

booleanboo=true&&false<你好>]]>不可以有空格字符注意:CDATA必須為大寫;CDATA不允許嵌套,不能再包含CDATA段。CDATA段保持標簽完整2.5標記的文本數(shù)據(jù)一個標記的文本數(shù)據(jù)可以有:普通字符CDATA段中的內(nèi)容字符引用實體引用標記的內(nèi)容:文本數(shù)據(jù)和子標記部分<?xmlversion="1.0"encoding="UTF-8"?><root><XML例子>

這是我寫的一個例子:

<![CDATA[<?xmlversion="1.0"encoding="UTF-8"?><employy><name>&張小三&</name><employy>]]><node>

我是子標記中的文本數(shù)據(jù)

</node></XML例子></root>標記的文本數(shù)據(jù)2.6XML標記的屬性

屬性的構(gòu)成屬性是一個名值對,名=“值”必須在非空標記的開始標記或空標記中聲明

屬性是標記數(shù)據(jù)的附加信息,可用于描述標記的一些特性。XML標記的屬性屬性的定義格式非空元素<標記名屬性名=“屬性值”屬性名=“屬性值”......>…</標記名>空元素<標記名屬性名=“屬性值”屬性名=“屬性值”......></標記名>或<標記名屬性名=“屬性值”屬性名=“屬性值”....../>XML標記的屬性屬性注意事項:

1、屬性名由字母、數(shù)字、下劃線(_)、點(.)、連字符(-)組成。

2、屬性名必須以字母或下劃線開頭。

3、屬性名區(qū)分大小寫

4、屬性名不能含有空格

5、同一標記不能有兩個相同的屬性

6、屬性值必須用單引號或雙引號括起來

7、屬性值不能含有特殊字符(5個),可以包含實體引用或字符引用XML標記的屬性屬性的使用原則:不要因為屬性的頻繁使用破壞XML的數(shù)據(jù)結(jié)構(gòu)。根據(jù)你描述事物的重要性,重要的信息用子標記去實現(xiàn),次要信息用屬性去描述。數(shù)據(jù)本身應(yīng)當存儲在標記中;而有關(guān)數(shù)據(jù)的信息存儲在屬性中

標記更具擴展性。2.7注釋<?xmlversion=“1.0”encoding=UTF-8?><!--簡單的XML文件--><root> <speak>

你好

</speak></root>與html相同“<!--”開始“-->”結(jié)束注釋規(guī)則注釋可以跨行使用注釋可以包括標記注釋要保持結(jié)構(gòu)完整性注釋不能放在第一行注釋不能包含在標記中注釋中不能包含“——”,不能包括注釋注釋與CDATACDATA只能出現(xiàn)在根元素之中。從邏輯上看兩者的意圖是不一樣的:在做數(shù)據(jù)轉(zhuǎn)換時,CDATA是輸出的(不被解析),它是數(shù)據(jù)的一部分。注釋是不輸出的,僅僅是顯示注釋。<?xmlversion=“1.0”encoding=“gb2312”?><book><title>紅樓夢</title><author>

曹雪芹

<title>大作家</title></author></book>2.8XML名稱空間名稱空間的目的就是為了有效區(qū)分名字相同的標記。名稱空間的聲明必須在標記的“開始標記”里面且必須放在開始標記中標記名字的后面。

<張三xmlns=“l(fā)iaoning”></張三><張三></張三>XML名稱空間規(guī)則名稱空間名字不同,即使前綴相同也是不同的名稱空間名稱空間區(qū)分大小寫在名稱空間的聲明中,名稱空間的前綴不能以“XML”開頭(大小寫都不可以)無前綴名稱空間的名字為空名稱空間公式:無前綴名稱空間:xmlns=“名稱空間的名字”有前綴名稱空間:xmlns:前綴=“名稱空間的名字”例:<前綴:標記名稱xmlns:前綴=“名稱空間的名字”>XML名稱空間名稱空間的作用域一個標記如果使用了名稱空間聲明,那么該名稱空間的作用域是該標記及其所有子孫標記。名稱空間作用域有前綴名稱空間對于有前綴名稱空間,如果想讓該標記及其子孫標記隸屬于這個名稱空間,則必須引用前綴。沒引用前綴的標記是不屬于該名稱空間的。語法:<前綴:標記名稱……></前綴:標記名稱>1<張三xmlns:p1=“l(fā)iaoning”>1976年出生,大學畢業(yè)

<小張三>

在小學讀書

<小張三></張三>2<張三xmlns:p1=“l(fā)iaoning”>1976年出生,大學畢業(yè)

<p1:小張三>

在小學讀書

</p1:小張三></張三>3<p1:張三xmlns:p1=“l(fā)iaoning”>1976年出生,大學畢業(yè)

<小張三>

在小學讀書

</小張三><p1:李四>1980年出生,高中畢業(yè)

</p1:李四></p1:張三>名稱空間作用域無前綴名稱空間如果標記中聲明的是無前綴名稱空間,那么該標記及其子孫標記都默認的隸屬于這個名稱空間。<bookxmlns=“”><java>Java基礎(chǔ)教程

</java><jsp>Jsp基礎(chǔ)教程

</jsp></book>名稱空間作用域子標記可以重新聲明名稱空間

對于子標記來說,可以通過引用父標記聲明的有前綴的名稱空間的前綴來隸屬于其名稱空間,也可以默認地隸屬于其父標記的無前綴名稱空間。同時可以聲明自己名稱空間。名稱空間作用域<p1:張三xmlns:p1=“l(fā)iaoning”>1976年出生,大學畢業(yè)

<p1:小張三xmlns:p1=“American”>

在小學讀書

</p1:小張三></p1:張三>名稱空間作用域<張三xmlns=“l(fā)iaoning”>1976年出生,大學畢業(yè)

<小張三xmlns=“Beijing”>

在小學讀書

</小張三><p1:小張三xmlns:p1=“American”>

在小學讀書

</p1:小張三></張三>名稱空間作用域<張三xmlns:p1=“l(fā)iaoning”xmlns=“china”>1976年出生,大學畢業(yè)

<p1:小張三>

在小學讀書

</p1:小張三><p2:小張三xmlns:p2=“American”>

在小學讀書

</p2:小張三><小張三xmlns=“Beijing”>

在小學讀書

</小張三></張三>名稱空間作用域稱空間的作用域是向下使用(其子標記),不能向上或同級使用。屏蔽上層名稱空間:標記名稱xmlns=“名稱空間的名字”(名稱空間的名字為空)<?xmlversion="1.0"encoding="gb2312"?><studentxmlns=“”> <namexmlns=“”>

周杰倫

<sex>

</sex> </name> <name>

蔡依林

<sex>

</sex> </name></student>名稱空間的名字名稱空間的目的是為了區(qū)分名字相同的標記。W3C推薦使用統(tǒng)一資源標識符(URI)作為名稱空間的名字。名稱空間的名字URI統(tǒng)一資源標識符

UR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論