第3章 命名空间

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XML
KMR
教程
3.1 定义命名空间
注意:
3.声明的位置,既可以在使用该前缀的元素的起始标记处, 也可以是引用处的父辈元素标记处。
4.命名空间存在合法性问题
如果编写的DTD没有命名空间前缀,则必须使用命名空间来 重新编写DTD,才能用于对使用该前缀的文档进行合法性检查 。
XML
KMR
教程
3.1 定义命名空间
XML语言基础
Fundamental of XML Language
中原工学院软件学院
Software College, Zhongyuan University of Technology
XML
KMR
教程
第3章 命名空间(NameSpace)
为什么需要命名空间?
• •
复杂、大型的XML文档中 多个XML文档组合使用时
刘柳?
XML
KMR
教程
取消默认的名称空间

如果一个默认名称空间声明的URI的属性值是空的,那么这个元素就不在任 何任名称空间内。既通过在默认的名称空间声明中使用一个空属性值,来取
消默认的名称空间。
【例3-6】取消默认名称空间。 <?xml version="1.0" encoding="gb2312"?> <!--文件名:例3-6.xml--> <教工资料 xmlns="http://www.aaa.com.cn/jgxx" xmlns:fam="http://www.aaa.com.cn/jsxx"> <教工> <姓名>苏青</姓名> <性别>男</性别> <电话>12345678</电话> <职称>副研究员</职称> <fam:家属 xmlns=""> <姓名>王静</姓名>ห้องสมุดไป่ตู้<电话>87654321</电话> </fam:家属> </教工> </教工资料>
XML
KMR
教程
3.3 命名空间的作用范围
命名空间的作用范围就是声明该命名空间的元素及该元素中 所有的子元素(树状的层次关系)。
所以,通常在根元素中声明命名空间。
<?xml version="1.0" encoding="GB2312"?> <学生信息 xmlns:学生="http://www.zjqf.net/student" xmlns:家长="http://www.zjqf.net/parents"> <学生:个人信息 学号="200120101"> <学生:姓名>张小花</学生:姓名> <学生:性别>女</学生:性别> <学生:出生年月>1985-1-2</学生:出生年月> <家长:个人信息> <家长:姓名>张富强</家长:姓名> <家长:性别>男</家长:性别> <家长:出生年月>1965-4-12</家长:出生年月> </家长:个人信息> </学生:个人信息> </学生信息>
2.网址一般都很长,输入、阅读、引用麻烦
XML
KMR
教程
3.1 命名空间— 3.1.1 定义命名空间
为解决上述问题,XML采用了“命名空间前缀(别名)”的 方法。 定义(声明)命名空间的语法格式(类似属性): <元素名称 xmlns:命名空间前缀=“对应的URI”>
• 元素名称:用户在XML文档中定义的标记名称 • xmlns: 定义命名空间的关键字 • 命名空间前缀:命名空间的别名
XML
KMR
教程
3.1 命名空间
为保证命名空间标识符的唯一性,采用URI。因为URI是唯一的, 同时XML文档可用于Web。 URL(Uniform Resource Locator,统一资源定位符) HTML用,属于URI的一部分 URI (Uniform Resource Identifier,统一资源标识符) 可以是Email、主机域名、文件路径 URI对于定位Internet上的资源是更为通用的架构,更为注重资源 而不太注重位置。 URL应该说是目前常用的一种URI。 问题: 1.网址中含有XML标记禁用的字符,如网址中都有“/”
将所定义的命名空间前缀作为标记的前缀,表示一类标记的 出处。
合法名称的形式应该是: 命名空间前缀:元素名称
XML
KMR
教程
3.1 定义命名空间
命名空间的使用
【例3-2】使用名称空间的教工资料信息。 <?xml version="1.0" encoding="gb2312"?> <!--文件名:例3-2.xml--> <教工资料 xmlns:tea ="http://www.aaa.com.cn/jgxx" xmlns:fam="http://www.aaa.com.cn/jsxx"> <tea:教工> <tea:姓名>苏青</tea:姓名> <tea:性别>男</tea:性别> <tea:电话>12345678</tea:电话> <tea:职称>副研究员</tea:职称> <fam:家属> <fam:姓名>王静</fam:姓名> <fam:电话>87654321</fam:电话> </fam:家属> </tea:教工> </教工资料>
默认命名空间是命名空间的特例,即不需要前置字符串
默认命名空间可以多次声明,但后面的声明会覆盖前面的 如果一个默认命名空间声明的URI为空值,则该元素就不在 任何命名空间中 注意:必须先声明默认命名空间,然后才能不使用显式前缀 应用到任何后面的元素。
XML
KMR
教程
3.2 默认命名空间
<?xml version="1.0" encoding="UTF-8"?> <items xmlns="3-2.dtd" xmlns:disc="3-3.dtd" > <item> <name> asp</name> <disc:price>12.3</disc:price> </item> </items>
XML
KMR
教程
3.1 定义命名空间
命名空间实例:学生信息XML、家长信息XML组合
<?xml version="1.0" encoding="GB2312"?> <学生信息 xmlns: 学生="http://www.zjqf.net/student" xmlns:家长="http://www.zjqf.net/parents"> <学生:个人信息 学号="200120101"> <学生:姓名>张小花</学生:姓名> <学生:性别>女</学生:性别> <学生:出生年月>1985-1-2</学生:出生年月> <家长:个人信息> <家长:姓名>张富强</家长:姓名> <家长:性别>男</家长:性别> <家长:出生年月>1965-4-12</家长:出生年月> </家长:个人信息> </学生:个人信息> </学生信息>
不可避免地会出现标记名称相同,但意义不同的情况。 例如:书P45 例3-1 教工 姓名,电话
家属 姓名,电话
命名空间是通过在元素前增加一个独特的标识符来标识元素 的活动域,则该标识符在XML文档中必须是唯一的。
XML
KMR
教程
第3章 命名空间(NameSpace)
例如:书P45 例3-1 教工 姓名,电话 家属 姓名,电话 <?xml version="1.0" encoding="gb2312"?> <!--文件名:例3-1.xml--> <教工资料> <教工> <姓名>苏青</姓名> <性别>男</性别> <电话>12345678</电话> <职称>副研究员</职称> <家属> <姓名>王静</姓名> <电话>87654321</电话> </家属> </教工> </教工资料>
XML
KMR
教程
3.1 定义命名空间
【例3-2】使用名称空间的教工资料信息dtd。 <?xml version="1.0" encoding="gb2312"?> <!--DTD 由 XMLSpy v2006 U 创建 (http://www.altova.com)--> <!ELEMENT 教工资料 (tea:教工)> <!ATTLIST 教工资料 xmlns:tea CDATA #IMPLIED xmlns:fam CDATA #IMPLIED> <!ELEMENT tea:教工 (tea:姓名, tea:性别, tea:电话, tea:职称, fam:家属)> <!ELEMENT tea:姓名 (#PCDATA)> <!ELEMENT tea:性别 (#PCDATA)> <!ELEMENT tea:电话 (#PCDATA)> <!ELEMENT tea:职称 (#PCDATA)> <!ELEMENT fam:家属 (fam:姓名, fam:电话)> <!ELEMENT fam:姓名 (#PCDATA)> <!ELEMENT fam:电话 (#PCDATA)>
在声明了名称空间之后,其中的属性也可以添加名称空间前缀进行限定。 【例3-3】修改例3-2,在其中添加“身份证号”和“单位”两个属性。 <?xml version="1.0" encoding="gb2312"?> <教工资料 xmlns:tea="http://www.aaa.com.cn/jgxx" xmlns:fam="http://www.aaa.com.cn/jsxx"> <tea:教工 tea:身份证号="410103197005082666"> <tea:姓名>苏青</tea:姓名> <tea:性别>男</tea:性别> <tea:电话>12345678</tea:电话> <tea:职称>副研究员</tea:职称> <fam:家属 单位="市民政局财务处"> <fam:姓名>王静</fam:姓名> <fam:电话>87654321</fam:电话> </fam:家属> </tea:教工> </教工资料>
XML
KMR
教程
3.2 定义命名空间
命名空间实例:学生信息XML、家长信息XML 补充例3-1.xml 补充例3-2.xml
<?xml version="1.0" encoding="GB2312"?> <学生信息> <个人信息 学号="200120101"> <姓名>张小花</姓名> <性别>女</性别> <出生年月>1985-1-2</出生年月> </个人信息> <个人信息 学号="200120102"> <姓名>李大为</姓名> <性别>男</性别> <出生年月>1983-6-20</出生年月> </个人信息> </学生信息> <?xml version="1.0" encoding="GB2312"?> <家长信息> <个人信息> <姓名>张富强</姓名> <性别>男</性别> <出生年月>1965-4-12</出生年月> </个人信息> <个人信息> <姓名>李成</姓名> <性别>男</性别> <出生年月>1963-3-1</出生年月> </个人信息> </家长信息>
实例:
注意:必须先声明默认命名空间,然后才能不使用显式前缀 应用到任何后面的元素。
XML
KMR
教程
3.2 默认命名空间
说明:如果一个标记中定义了默认命名空间,则在该标记的 子标记中还可再添加其他默认命名空间,且在该子标记声明该 默认命名空间的作用范围就在该子标记上。
【例3-5】在子元素中再声明默认名称空间。 <?xml version="1.0" encoding="gb2312"?> <!--文件名:例3-5.xml--> <教工资料 xmlns="http://www.aaa.com.cn/jgxx"> <教工> <姓名>苏青</姓名> <电话>12345678</电话> </教工> <教工 xmlns="http://www.aaa.com.cn/teshujgxx"> <姓名>赵宏</姓名> <电话>12345666</电话> </教工> <教工> <姓名>刘柳</姓名> <电话>12345888</电话> </教工> </教工资料>
XML
KMR
教程
注意:
1.命名空间前缀不能使用xml、xmlns,xml前缀被定义为用
来引用http://www.w3.org/XML/1998/namespace的。而xmlns是
用定义命名空间的。 2.定义命名空间的URI纯粹是形式上的,其唯一的目的就是 标识,并明确文档中的元素和特性。它无须指向任何对象。作 为例外的是xsl和html命名空间。
未限定的属性名称(例如,“单位”)不显式地属于任何名称空间。
XML
KMR
教程
3.2 默认命名空间
文档中的每个元素都要加上命名空间前缀,文档就会很长, 编写也麻烦。为了简洁,提供了默认命名空间机制。 默认命名空间中的元素的命名空间前缀都可以省略。 默认命名空间必须声明,其声明格式为: <元素名称 xmlns=“对应的URI”>
xmlns:book="http://www.w3.org/TR/WD-xsl"> book代表http://www.w3.org/TR/WD-xsl <book:name>asp</book:name> <book:name>和 <name>区分开了!
XML
KMR
教程
3.1 定义命名空间
命名空间的使用
相关文档
最新文档