XML系列:命名空間 一,什麼是命名空間? 命名空間是唯一標識XML文檔中的元素和實體的信息集合,通過特定URL關聯XML,解決命名衝突。 DTD不支持命名空間的所有功能。但XML Schema支持。 二,命名空間的使用
1,聲明和使用命名空間:將前綴和URL關聯,使用xmls屬性定義命名空間別名。 語法: xmls:前綴名 = “命名空間的URL” 名字空間的前綴名可以是不包含冒號的任何合法XML名稱。 把同一命名空間的URL關聯到不同前綴是毫無意義的事情~! 解析器並不解析URL真正的內容,比方http://type.com和http://www.type.com指向同一頁面,解析器不會做檢查! (1),在根元素中聲明命名空間 例子: <?xml version = "1.0" encoding = "gb2321"?> <student xmls = "http://www.type.com" xmls:i = "http://www.Info.com" xmls:g = "http://www.grade.com"> <i:info > <i:name>張三</i:name> <i:sex>男</i:sex> </i:info> <g:grade> <g:chinese>88</g:chinese> <g:math>90</g:math> </grade> </student> (2),在元素中聲明命名空間 <?xml version = "1.0" encoding = "gb2321"?> <type:student xmls:type = "http://www.type.com"> <i:info xmls:i = "http://www.Info.com"> <i:name>張三</i:name> <i:sex>男</i:sex> </i:info> <g:grade xmls:g = "http://www.grade.com"> <g:chinese>88</g:chinese> <g:math>90</g:math> </grade> </type:student> 2,屬性和命名空間 (1),屬性是屬於特定的元素,除非加前綴,否則屬性屬於他們的元素的命名空間。 (2),一個元素不可以具有相同名稱的屬性,但可以包含2個名稱相同但屬於不同命名空間的屬性。 例子: <?xml version = "1.0" encoding = "gb2321"?> <student xmls = "http://type.com" xmls:i = "http://Info.com" xmls:g = "http:grade.com"> <i:info id = 1001, g:id = 2001> <i:name>張三</i:name> <i:sex>男</i:sex> </i:info> <g:grade id=2001> <g:chinese>88</g:chinese> <g:math>90</g:math> </grade> </student> 3,默認命名空間 可以爲元素和其子元素指定一個默認的命名空間,使用沒有前綴的xmls屬性將默認空間附加給元素和子元素。 則默認元素及其子元素在默認空間中。 屬性不在默認命名空間中,必須明確添加前綴。即使擁有屬性的元素在某個命名空間中,沒有前綴的屬性也不在該命名空間中。 例子:假設type元素定義在http://type.com中, student元素定義在http://student.com中 teacher元素定義在http://teacher.com中。 使用默認命名空間 <?xml version = "1.0" encoding = "gb2321"?> <type xmls ="www.type.com"> <student xmls = "http://student.com"> <info> <name>張三</name> <sex>男</sex> </info> <grade> <chinese>88</chinese> <math>90</math> </grade> </student> <teacher xmls = "http://teacher.com"> <name>李四</name> <sex>男</sex> </teacher> </type> 不使用默認命名空間 <?xml version = "1.0" encoding = "gb2321"?> <ty:type xmls:ty ="www.type.com" xmls:s= "http://student.com" xmls:t = "http://teacher.com"> <s:student > <s:info> <s:name>張三</s:name> <s:sex>男</s:sex> </s:info> <s:grade> <s:chinese>88</s:chinese> <s:math>90</s:math> </s:grade> </s:student> <t:teacher> <t:name>李四</t:name> <t:sex>男</t:sex> </t:teacher> </ty:type> 例子:假設student元素和teacher元素定義在http://type.com中。 <?xml version = "1.0" encoding = "gb2321"?> <type xmls ="www.type.com"> <student> <info> <name>張三</name> <sex>男</sex> </info> <grade> <chinese>88</chinese> <math>90</math> </grade> </student> <teacher> <name>李四</name> <sex>男</sex> </teacher> </type> 例子:假設student元素定義在http://type.com中,而teacher元素在http://www.teacher.com中定義。 <?xml version = "1.0" encoding = "gb2321"?> <type xmls ="www.type.com" xmls:t="http://www.teacher.com"> <student> <info> <name>張三</name> <sex>男</sex> </info> <grade> <chinese>88</chinese> <math>90</math> </grade> </student> <t:teacher> <t:name>李四</t:name> <t:sex>男</t:sex> </t:teacher> </type> 或 <?xml version = "1.0" encoding = "gb2321"?> <type xmls ="www.type.com"> <student> <info> <name>張三</name> <sex>男</sex> </info> <grade> <chinese>88</chinese> <math>90</math> </grade> </student> <teacher xmls ="http://www.teacher.com"> <name>李四</name> <sex>男</sex> </teacher> </type>