《XML入门经典》学习进程之第3章命名空间

在XML解析器把XML文档解析并将其中的数据传递给应用程序后,应用程序需要把来自不同文档的元素组合到同一个XML文档里。

无论是在同一个文档还是在不同的文档,为了解决命名冲突的问题,可以在每个元素前添加前缀。但这个方法也有缺点,就是在为HTML的XML版的元素前添加前缀时,浏览器可能无法正常读取XML文档中的XHTML内容。

命名空间只是起到“分装容器”的作用,除此之外,无任何意义。

命名空间的定义有了,但是由谁来管理这些命名空间?要使命名空间有效,命名空间前缀本身也必须是唯一的。这个问题的解决方法与因特网上域名管理方法相似,即在使用某个前缀前先向“前缀管理员”申请,如果这个前缀还没有被其他人或公司使用,那么就可以使用该前缀。

命名空间的运行机制:

当我们要在XML文档中使用命名空间时,元素名的概念就变成了所谓的限定名。它由两部分组成:本地部分,即我们之前称呼的元素名;命名空间前缀,它确定了这个名称所在的命名空间。

要特别注意书中讲述的声明XML命名空间的语法。

比如开始标签<pers:person xmlns:pers=”http://www.wiley.com/pers”>,表示person元素属于pers所指代的命名空间。

有了命名空间后,元素不能只根据它的名字来标识,而要根据它的限定名来标识。

当XML文档被解析时,解析器会把所有的命名空间前缀替换为命名空间即xmlns中的内容。

默认的命名空间:

标准的语法要求我们要在每个元素名前添加命名空间前缀,不过如此一来文档的形式就不太美观了。为解决这一问题,我们可以使用默认的命名空间。即在上面的开始标签中省去前缀的书写和声明,这样,就可以写成<person xmlns=”http://www.wiley.com/pers”>,此开始标签对应的结束标签和标签之间的所有元素名就不用再添加前缀了,它们的命名空间默认属于”http://www.wiley.com/pers”。当然,同一个标签里只能使用一个默认命名空间,要再使用一个命名空间那就得乖乖声明一个命名空间前缀了。

注意书上讲述的命名空间的更多用法。

命名空间和属性:

命名空间对元素的作用与它对属性的作用并不一样。虽然某元素属于某命名空间的一部分,但它的属性只是对所属的元素关联而已,要想使某属性隶属于某个命名空间,则该属性前也要有命名空间前缀。

 URI:

URI(统一资源标识符)是一个用来标识资源的字符串。它有两种形式:URL和URN。

URL第一部分使用了协议(scheme),通常是http协议。协议后面是冒号,冒号后面是资源的路径。

比如,http://www.google.com/intl/en/about.html是某个网页的URL。这个URL表示从Internet上的一个名为www.google.ca服务器上检索一个名为about.html的文件,该文件位于/intl/en目录里,并且这个文件必须要用HTTP协议读取。

通过URL能检索到的资源是有限的,因为它们只有在计算机里才能读取到。

URN不是很经常使用。它们的存在为资源提供了一个持久的、独立于位置的名字。

用URL而不是URN来表示XML的命名空间的原因:

URL本身保持了它的唯一性,所以用域名创建命名空间会更容易。

命名空间URI的真实含义:

根据XML命名空间规范,URI只是用来给命名空间一个名字而已,除此之外没有任何意义。XML解析器不会试图进入URL也不会检索任何东西。当然,对于具体的应用程序而言,它们可以根据自己的需要利用这些URL。

时间: 2024-10-12 18:51:08

《XML入门经典》学习进程之第3章命名空间的相关文章

《XML入门经典》学习进程之第2章良构的XML文档

XML解析器帮助应用程序解析XML文档,并为应用程序提供它所需要的信息.XML解析器读取XML文档中的每个字符,并判断哪些字符是文档的标签,哪些才是数据,并在应用程序处理这些数据之前对XML进行一些其他的必要的处理. XML文档中的全部标签组成了XML的标记语言. XML的标签用法与HTML的相同. 首末标签和标签之间的文本内容统称为元素. 标签之间的文本称为元素内容,该概念有专门的术语,即可解析的字符数据(PCDATA).这些术语都是XML从SGML那里继承过来的. 标签的写法除了传统的<XX

《Java开发手册》学习进程之第7章访问控制符

类的访问控制符: 虽然访问控制符有四种,但针对外部类来说,只需要公共的和默认的就够了. public表示任何类都可以使用该类. 当一个类被定义为public的时候,它就可以在任何类里被访问了. 成员的访问控制: 成员(即成员变量和方法)能被其他类访问主要取决于两个方面因素: 成员变量和方法所在类的可见性是其能被正常访问的前提条件: 其次是成员变量和方法的访问控制符直接决定了是否可以被访问. Static关键字:  Java中没有全局变量的概念. 若static修饰成员变量,当生成类的对象时,该类

《Java开发手册》学习进程之第9章接口

接口中的成员变量: 与类不同,在接口中只能定义常量属性,并且可以不必使用public.statict和final修饰,因为即使不使用这些修饰符,编译时也会为其加上,即接口中的成员变量隐含的是"public static final"的.另外,必须在声明的同时给出其值. 接口中的方法: 接口中的方法必须是抽象的,原因是接口只是代表了一个契约,表示实现它的类有什么样的功能,具体实现是由实现它的类完成的. 接口中的方法必须是public.abstract的,不能像接口中的成员变量一样使用fi

《Java开发手册》学习进程之第16章多线程

多线程编程可以使程序具有两条或两条以上的并发执行线索,就像日常工作中由多人同时合作完成一个任务一样.这在很多情况下可以改善程序的响应性能,提高资源的利用效率. 例如,开发一个网上购物时自动邮件通知的程序,在用户单击"提交"按钮确认订单时,一方面要显示信息提示用户订单已确认,一方面应该自动给用户发送一份电子邮件. 如果是单线程模式,则需要等待邮件发送完成之后,再显示提示信息,由于邮件发送的过程相对较慢,用户可能要经过漫长的等待才看到确认信息,界面响应性能不是很好. 而显示订单确认信息与发

《Java开发手册》学习进程之第6章对象和类

传统的过程化程序设计通过设计一系列的过程——算法来求解问题.这些过程一旦被确定,下一步就要开始寻找存储数据的方式,即“程序 = 算法 + 数据结构”.而面向对象的程序设计(即OOP,Object Oriented Programming)调换了这个次序,将数据放在第一位,之后再考虑操纵数据的算法. 在OOP中,程序被看作是相互协作的对象集合,每个对象都是某个类的实例.所有类构成了一个通过继承关系相联系的层次结构. 由于面向过程的编程模式是先将一系列过程(即函数)设计好再通过参数输入求解的,所以对

《Java开发手册》学习进程之第4章控制流程语句

在多重选择:switch语句中,switch(a)中的a可以为基本类型表达式,也可以为枚举类型表达式.而case后面所跟的表达式也是要满足以下条件的: 与a的表达式相兼容 自身应为不能有变量(即只能有字面值或者final的变量) 不能有两个相同的case 另外,要注意switch语句的根本执行流程:switch将判断表达式的值与case后面的表达式的值进行匹配,若找到匹配的case,则从此case开始执行,若没有匹配到相应的case,而遇到了default,则从default开始执行,直到遇到b

《Java开发手册》学习进程之第2章基本数据类型

2.1  数据类型 Java表示整数常量时,默认情况下为int型:若整数常量前面有个0,则表示八进制数:若整数常量前面有个‘0x’或’0X’,则表示十六进制. long型常量需在后面加个’l’或’L’.用System.out.println()方法输出时,其后缀名并不会输出. 如果某个浮点值没有使用float关键字(’f‘或’L‘)作为后缀名,则系统默认为double型.同long型常量一样,其后缀名也并不会输出. 注意:别把double型的常量赋值给float型的变量,把长度为8字节的doub

《Java开发手册》学习进程之第3章运算符详解

运算符重载是指同一个运算符在不同的情况下执行不同的操作. 例如,"+"运算符在Java中就有不同的功能: 加法运算 数值正号 字符串连接 特别要注意要在字符串连接的表达式中字符串与其他基本数据类型的变量的连接问题. 例如: (1)System.out.println(a + m + n)中,a为一String对象,m和n为int型变量(也可以是byte,short,float等其他基本数据类型).根据此表达式中的运算符优先级可知,a先与m相连接,其合并为一个字符串,然后再与n连接并以字

《Java开发手册》学习进程之第10章构造器应用

构造器与返回类型: 构造器没有返回类型,若将返回值类型(包括void)添加到构造器上,编译不会报错,但此时不再是构造器了,而只是一个与所在类同名的方法而已. 构造器与方法是两个不同的概念: 构造器不能像方法一样能被对象引用调用. 构造器是创建对象时需执行的代码,由new调用.方法是类或对象具有的行为,由引用调用. 无参数的构造器(资料来源:<Java核心技术卷1(中文第9版)>127页): 如果在编写一个类时没有编写构造器,那么系统就会提供一个无参数的构造器.这个构造器将所有实例域设置为默认值