XML介紹
前言
課程大綱
標籤(Tag)
XML文件由元素(Element)組成,每一個元素都是由一對標籤(Tag),標籤由角括號(<、>)包圍標籤名稱組成,例如:
<contact> <name>Aaron Ho</name> <phone>0968012345</phone> <country>Taiwan</country> </contact>
範例中,<name>
即為起始標籤,</name>
則為結束標籤(結束標籤的名字前面多一個『/』),name元素中間包圍的Aaron Ho
則為元素內容。
因為XML文件支援Unicode,所以標籤名稱可以使用中文或其它語言,但不可以有空白字元。
標籤命名規則:
- 可以使用A~Z與a~z,大小寫為不一樣的名稱。
- 可以使用數字0~9。
- 可以使用底線『_』、連字符號『-』、點符號『.』,其它符號皆不可使用。
- 不可使用『空白字元』及『換行』。
- 名稱第一個字元可以使用英文字、其它文字、底線,不可以使用數字、連字符號及句點當名稱第一個字元。
- 標籤名稱長度沒有限制。
- 可以使用中文及其它Unicode文字。
屬性(Attribute)
XML元素由標籤與屬性組成,屬性與標籤一起放在角括號內,屬性並含有屬性值,屬性值必須以『"』包圍住,如果屬性超過一個時,需要空白字元做分隔,例如:<book name="Android Bible" price="100">好書<book>
name與price為元素book的屬性,而Android Bible為name屬性值,100為price屬性值。
注意:同一個元素內多個屬性名稱不可以重複。
註解(Comment)
XML文件如果要加入註解,可以使用特殊標籤<!--
與-->
包圍要註解的內容,註解標籤內的內容不會被XML解析器(parser)處理。
<!-- 這是註解 --> <!-- 多行註解第1行 多行註解第2行 多行註解第3行 -->
注意:註解可以加在任何地方,但不能放在標籤內容之間,也不能放在標籤名稱內。
良好格式(Well-Format)
XML良好的格式的要求為:
1. XML文件宣告
在XML文件的第一行必須宣告XML版本及編碼格式,例如:<?xml version="1.0" encoding="utf-8" ?>
version說明此文件所用的XML版本,不可省略。 encoding則是編碼方式,省略時會用預設的unicode編碼方式。
2. 起始標籤予結束標籤必須成對,例如:<hello>...</hello>
,由起始標籤與結束標籤組成一個元素,且元素與元素不可交錯。元素內可以包含其它完整的元素,也就是XML文件可以為巢狀元素文件,被包圍的元素稱為子元素,而外層元素稱為父元素,例如上面範例裡,contact元素裡面包含了name、phone、country等三個標籤,但元素與元素之間不能交錯,也就是元素內只包含了某個元素的起始或結束標籤,而另一個標籤卻在元素外,例如:
錯誤,標籤互相交錯。 <item> <data>資料 </item> </data>
3. 空元素,當元素內沒有內容也沒有包含其它子標籤時,元素可以使用簡略的方式來表示:
<button/>
<item/>
button和item為空元素,其標籤內的斜線『/』在標籤名稱後面。
4. 英文字母大小名稱為不同名字(case sensitive)。
5. 屬性值一定要用雙引號『"』包圍,且同一元素屬性名稱不可重複。
6. XML文件必須有一個根元素(root element),也就是最外層的元素只能有一個,例如:
<-- root即為根元素 -->
<root>
<contact>
<name>Aaron Ho</name>
<phone>0968012345</phone>
<country>Taiwan</country>
</contact>
<contact>
<name>Xeon</name>
<phone>0968456789</phone>
<country>U.S.A.</country>
</contact>
<root>
W3C提供的XML良好格式驗證:http://validator.w3.org/
實際參照(Entity Reference)
6. XML文件必須有一個根元素(root element),也就是最外層的元素只能有一個,例如:
<-- root即為根元素 --> <root> <contact> <name>Aaron Ho</name> <phone>0968012345</phone> <country>Taiwan</country> </contact> <contact> <name>Xeon</name> <phone>0968456789</phone> <country>U.S.A.</country> </contact> <root>
W3C提供的XML良好格式驗證:http://validator.w3.org/
實際參照(Entity Reference)
XML有些符號有特殊意義,無法作為顯示用,為了在瀏覽器上顯示出就需要用Entity Reference來表示,例如XML保留字(Build-in Entity)。XML保留字為特殊字元,如果要顯示出來,在使用時即須以實體參照的方式來表示:
符號 | 表示的方式 |
< | < |
> | > |
& | & |
" | " |
' | ' |
另外,有些語言文字或是特殊符號無法使用鍵盤或輸入法數入時,也可以使用實體參照來表示,例如:ø
(十六進位)或ø
(十進位)即為ø
的Unicode碼。
Unicode字碼表:http://www.utf8-chartable.de/
字元資料(CDATA)
在XML文件內,角括號(<、>)代表的就是標籤,如果要顯示出來就是必須使用實體參照<
、>
,而且文件內一個空白、TAB、換行跟10個空白都會被表示為一個空白,如果不希望解析器(parser)處理這些文字,可以使用CDATA區塊標示這些資料<![CDATA[ 資料 ]]>
,例如:
<code> <![CDATA[ for(int i = 0 ; i < 10 ; i++) { total += i; } ]]> </code>
CDATA內的資料不管是保留字,特殊符號,空白字元甚至TAB及換行都會原封不動的被保留下來,解析器完全不會去處理CDATA內的內容。
名稱空間(Namespace)
因為XML的元素名稱是由使用者自訂,如果今天公司A的XML文件內定義了item
這個元素用來代表食品,而公司B也定義了item
代表文具,當兩家公司因為業務需求而交流XML文件時,將發生衝突的情況,一樣的元素名稱但是代表的意義卻不同,因此名稱空間(Namespace)用來解決這樣的問題。
<food:item>Cake</food:item> <stuff:item>Pencil</stuff:item>
上面的food和stuff就名稱空間前綴字(Namespace Prefix)。
建立名稱空間可以使用xmlns
關鍵字,而每個名稱空間則是使用一個URI(Uniform Resource Identifier,一個Internet標準)來定義,代表獨一無二的名稱空間,URI也就是目前常見的網址,不同的地方是,網址URL前端為更進一步標示出次網路資源所使用的通訊協定(如:http、ftp、file...等等)。
宣告與使用名稱空間
<!-- 明確宣告名稱空間 --> <food:company xmlns:food="http://uch.company.com.tw/food" xmlns:stuff="http://uch.company.com.tw/stuff"> <food:item>Fruit</food:item> <stuff:sale>good</stuff:sale> <food:company> <!-- 宣告預設名稱空間,裡面的元素名稱如果沒有前綴字,將自動使用為預設名稱空間 --> <company xmlns="http://uch.company.com.tw/xml/default/namespace"> <item>Fruit</item> <sale>good</sale> </company> <!-- 綜合使用 --> <company xmlns="http://uch.company.com.tw/xml/default/namespace " xmlns:food="http://uch.company.com.tw/food"> <food:item food:price="100">Fruit</food:item> <stuff price="1000">Table</stuff> </company> <!-- item會使用到food名稱空間,而stuff則是預設名稱空間,屬性也可以使用名稱空間 -->
注意:
- 任何名字都可以拿來當名稱空間前綴字,但namespace/prefix/xml在xml標準裡是被保留的,不可以拿來當名稱空間。
- 文件製作者通常會拿自己的URL來當名稱空間(例如:www.aaronlife.com),因為它是獨一無二的,不容易跟別人重複。
XML結構描述(XML Schema)
XML Schema為XML文件驗證規格,用來驗證有效性,通常符合XML格式的文件只能稱為良好格式(Well-Format),而用來做專門用途的XML文件有其特定的元素名稱,屬性名稱,以及元素之前的關聯等等資訊,用來描述這個XML的專有結構則可以使用XML Schema。
一個XML Schema通常包含:
- 字彙(元素與屬性名稱集)
- 內容模型(關聯與結構)
- 資料型別群
備註: 同樣用來描述XML結構的還有DTD,但XML Schema有本身就是XML Well-Format文件的優勢,DTD則是使用另外一種語法(EBNF)來描述。