XML是什么?
●XML 指可擴展標記語言(EXtensible Markup Language)
●XML 是一種標記語言,很類似 HTML
●XML 的設計宗旨是傳輸數(shù)據(jù),而非顯示數(shù)據(jù)
●XML 標簽沒有被預定義。您需要自行定義標簽。
●XML 被設計為具有自我描述性。
●XML 是 W3C 的推薦標準
XML與HTML的主要差異
XML 不是 HTML 的替代。
XML 和 HTML 為不同的目的而設計:
XML 被設計為傳輸和存儲數(shù)據(jù),其焦點是數(shù)據(jù)的內容。
HTML 被設計用來顯示數(shù)據(jù),其焦點是數(shù)據(jù)的外觀。
HTML 旨在顯示信息,而 XML 旨在傳輸信息。
一個簡單的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<body>
<school>
<teacher>Jack</teacher>
<student>Mark</student>
</school>
</body>
這是一個簡單的XML文件,文件的第一行是XML的聲明,version="1.0"指的是XML的版本,encoding="UTF-8"則是所使用的編碼方式。注意:<?之間不能有空格,否則則會出錯。
XML可以發(fā)明屬于自己的標簽
什么意思呢?在HTML中我們知道標簽這個概念,但是HTML當中的標簽是都是規(guī)定好的,標簽當中不能有中文字符出現(xiàn),但是在XML當中,我們可以使用中文標簽:<中文>。

XML 文檔形成一種樹結構
XML 文檔必須包含根元素。該元素是所有其他元素的父元素。
XML 文檔中的元素形成了一棵文檔樹。這棵樹從根部開始,并擴展到樹的最底端。
父、子以及同胞等術語用于描述元素之間的關系。父元素擁有子元素。相同層級上的子元素成為同胞(兄弟或姐妹)。
所有元素均可擁有文本內容和屬性(類似 HTML 中)。

圖片當中的根元素是 <bookstore>。文檔中的所有 <book> 元素都被包含在 <bookstore> 中。
<book> 元素有 4 個子元素:<title>、< author>、<year>、<price>。
XML的標簽必須是閉合的
在HTML當中,有些標簽是無需閉合的。就像<p>,<h>等等。但是在XML中,不閉合的標簽是非法的。


XML 標簽對大小寫敏感
在XML文檔中,我們的標簽是區(qū)分大小寫的,我們必須確保我們寫的標簽大小寫正確,不然也是會報錯的。
實體引用
在 XML 中,一些字符擁有特殊的意義。
如果你把字符 "<" 放在 XML 元素中,會發(fā)生錯誤,這是因為解析器會把它當作新元素的開始。
這樣會產(chǎn)生 XML 錯誤:

為了避免這個錯誤,用實體引用來代替 "<" 字符。
下面是5個預定義的實體引用:

XML 元素 vs. 屬性
請看下面的例子:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
在第一個例子中,sex 是一個屬性。在第二個例子中,sex 則是一個子元素。兩個例子均可提供相同的信息。沒有什么規(guī)矩可以告訴我們什么時候該使用屬性,而什么時候該使用子元素。但是在 HTML 中,屬性用起來很便利,但是在 XML 中,應該盡量避免使用屬性。如果信息感覺起來很像數(shù)據(jù),那么請使用子元素吧。
文檔類型定義(DTD)可定義合法的XML文檔構建模塊。它使用一系列合法的元素來定義文檔的結構。DTD 可被成行地聲明于 XML 文檔中,也可作為一個外部引用。
內部的 DOCTYPE 聲明
<!DOCTYPE 根元素 [元素聲明]>
請看下面的例子:


上面的例子報錯了,因為在DTD當中規(guī)定了標簽的順序,先是teacher接著是student最后才是classroom,但是在XML中先寫了classroom標簽,因此報錯了。
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
以上 DTD 解釋如下:
●!DOCTYPE note (第二行)定義此文檔是 note 類型的文檔。
●!ELEMENT note (第三行)定義 note 元素有四個元素:"to、from、heading,、body"
●!ELEMENT to (第四行)定義 to 元素為 "#PCDATA" 類型
●!ELEMENT from (第五行)定義 from 元素為 "#PCDATA" 類型
●!ELEMENT heading (第六行)定義 heading 元素為 "#PCDATA" 類型
●!ELEMENT body (第七行)定義 body 元素為 "#PCDATA" 類型
外部文檔聲明
假如 DTD 位于 XML 源文件的外部,那么它應通過下面的語法被封裝在一個 DOCTYPE 定義中:
<!DOCTYPE 根元素 SYSTEM "文件名">
這個 XML 文檔和上面的 XML 文檔相同,但是擁有一個外部的 DTD:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
這是包含 DTD 的 "note.dtd" 文件:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
為什么使用 DTD?
通過 DTD,您的每一個 XML 文件均可攜帶一個有關其自身格式的描述。
通過 DTD,獨立的團體可一致地使用某個標準的 DTD 來交換數(shù)據(jù)。
而您的應用程序也可使用某個標準的 DTD 來驗證從外部接收到的數(shù)據(jù)。
您還可以使用 DTD 來驗證您自身的數(shù)據(jù)。
未完待續(xù)。。。