XML 和 HTML 的根本區別在於:HTML 中的各類標記是已經定義好的、固定的,而 XML 的標記是自定義的、可擴充的。在大型而複雜的 XML 文檔中,極可能會出現標記名稱相同,然而其所表明的元素意義卻各不相同的現象。尤爲是將多個 XML 文檔組合使用時,出現這種標記名混亂的現象幾乎是不可避免的。html
一個命名空間一般是和一個特定的 DTD 對應起來的,某個 DTD 中定義的元素名稱集合就是其對應的命名空間中的元素名稱集合。在 XML 文檔中,對於不一樣命名空間的區分很是簡單,即對於每一套特定應用的 DTD,賦予它一個獨一無二的標識符來表明,若是在文檔中使用某個 DTD 中定義的元素,就將該 DTD 的標識符做爲元素名或屬性名的前導符,這就至關於指明瞭這些元素的標記名稱來自什麼地方,或者說歸屬於哪一個命名空間。編程
因爲是經過在元素的標記名前添加一個獨特的標識符來代表該標記的歸屬,於是這個標識符在 XML 文檔中應該是惟一的。固然,每個命名空間自己也應該是惟一的。在 XML 規範中,對命名空間的定義採用了一種至關巧妙的方法,即採用 Web 上某個惟一的 URI 來定義不一樣的命名空間。這個 URI 能夠是 URL,也能夠是 URN,並將其與某個特定的命名空間標識符對應起來。網絡
定義命名空間spa
命名空間經過給標識名加一個網址(URL)定位的方法來區分這些名稱相同的標識。命名空間的定義通常放在元素的開始標記處,其使用的語法格式:code
<標記名 xmlns:標識符="URI">
對上面代碼中各名詞的含義說明以下:xml
須要注意的是,命名空間的標識符不容許使用 xml、html、xsl、xmlns 等保留字。此外,定義語句中的 URI 一般只起一個標識的做用,並非真的要從該網絡資源獲得什麼,因此它的精確性並不重要,甚至根本就不存在。htm
示例:blog
<?xml version="1.0" encoding="GB2312"?> <Films xmlns:films="http:www.bb.com" xmlns:director="http:www.dd.com"> <Film> <films:NAME>鋼鐵俠</films:NAME> <director:NAME>沙恩•布萊克</firector:NAME> <Starring>小羅伯特•唐尼</Starring> </Film> </Films>
默認命名空間教程
在實際編程的過程當中,對於一個很長的 XML 文檔來講,若是須要爲文檔中的每個元素都添加命名空間標識將會是一個很麻煩的事,因此,能夠將文檔中使用較多的命名空間定義爲默認命名空間,並設法使這個默認命名空間與某個元素及其子元素相關聯。這樣的話,在 XML 文檔中爲某個元素定義了默認命名空間後,該元素及其全部未加命名空間標識符的子元素都歸屬於這個默認命名空間,除非它們另外擁有指定的命名空間標識符。資源
默認命名空間也是在元素的起始標記內進行定義的,與定義通常命名空間不一樣的是,默認命名空間的定義不使用標識符,具體的定義語法格式以下:
<標記名 xmlns="URI">
示例:
<?xml version="1.0" encoding="GB2312"?> <Films xmlns="http:www.bb.com" xmlns:director="http:www.dd.com"> <Film> <NAME>鋼鐵俠</NAME> <director:NAME>沙恩•布萊克</firector:NAME> <Starring>小羅伯特•唐尼</Starring> </Film> </Films>
一個默認命名空間的做用範圍僅限於定義這個命名空間的元素,及其子元素。須要指出的是,定義默認命名空間以後,能夠做用到有關的元素,但沒法做用到元素所包含的屬性。換句話說,對元素的屬性來講是不存在默認命名空間的。
本文節選自:《XML 實用教程》 陳做聰、蘇靜、王龍等編著