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>