Spring 配置文件命名空间
1.xml文档的命名空间
XML文档可以创建自定义的元素和属性来描述数据,这样就很容易产生名称相同而含义不同的元素。
XML使用命名空间来加以区分。
命名空间使用统一资源定位符URI来识别。
URI必须是XML文档中唯一的。
1.1 XML文档中加入命名空间
为了引用一个命名空间,可以将其以属性的形式加入任何包含了属于该命名空间中元素的节点中。
比如:
这决定了命名空间wq指向/ns/furniture
1.2 添加默认命名空间
/ Copyright©2010吴青版权所有
一个XML文档大部分通常属于一个XML词汇。
在这种情况下,可以定义一个默认的命名空间,而不是为每一个元素重复地添加命名空间前缀。
可以使用xmlns关键字来定义默认的命名空间。
这样,就不用为默认的命名空间内的元素指定前缀了。
2.XML的约束模式
XML的约束模式定义了XML文档中允许出现的元素名,元素中的属性,内容类型,以及元素之间的嵌套关系和出现顺序。
如果把一个XML文件看做数据库中的一个表,那么XML约束模式就相当于数据库表结构的定义。
约束模式通常都是在一个单独的文件中进行定义,这个文件被称为模式文档。
模式文档采用某种约束模式语言编写,用于描述XML文档的结构。
模式语言应用最广泛的就是XML DTD和XML Schema。
Spring的配置文件中这两种模式浴盐都支持
/ Copyright©2010吴青版权所有
一个XML文档想说明自己是一个有效的XML文档,除了要严格遵循某个DTD文件定义的规则外,还必须指明其所遵循的是那个DTD文件,以便解析器程序能够对它进行有效性校验。
如何把XML文件和一个DTD文件联系起来?正如上面的代码:XML文档通过使用DOCTYPE声明语句(文档类型定义语句)来指明它所遵循的DTD文件。
DOCTYPE 声明语句紧跟在XML文档声明语句后面,有两种格式:
<!DOCTYPE 文档类型名称SYSTEM “DTD文件的URL”>
<!DOCTYPE 文档类型名称PUBLIC “DTD名称” ”DTD文件的URL”>
文档类型名称一般使用XML文件的根元素名称来作为文档类型名称。
SYSTEM:表明xml文件所遵循的是一个本地或者组织内部所编写和使用DTD文件
/ Copyright©2010吴青版权所有
PUBLIC:表明XML文件所遵循的是一个由权威机构制定的,公开提供给特定行业或者公众使用的DTD文件,而不是某个组织内部的规范文件
DTD名称:用于制定该DTD文件的标识名称(key),它映射到实际的 .dtd文件。
它只在使用关键字PUBLIC的DOCTYPE声明语句中出现。
DTD标识名称需要用双引号(”)括起来,如上面的:"-//SPRING//DTD BEAN 2.0//EN"
DTD文件URL:指定DTD文件所在的位置,也需要使用双引号(”)括起来。
如上面的: /dtd/spring-beans-2.0.dtd .
2.2 XML Schema
如同DTD一样,XML Schema也是一种用于定义和描述XML文档结构与内容的模式语言,其出现的目的是为了克服DTD的局限性,比如XML DTD并不能很好的实现应用程序的不同模块之间的相互协调,缺乏对文件结构,属性,数据类型等约束的足够描述等,并为XML文档提供了更加丰富的语法结构。
下面是Spring配置文档中将XML Schema 应用到xml文档的例子:
/ Copyright©2010吴青版权所有
/ Copyright©2010吴青版权所有
如果应用程序想要使用某个XML Schema 文档来校验一个XML 实例文档时,它首先必须获得该XML Schema 文档的内容信息。
声明XML 实例文档遵循某个XML Schema 文档的方式之一就是使用命名空间。
下面分别来解释:
① : 定义当前文档的默认的命名空间。
②:定义命名空间 xsi,这个命名空间是w3c 定义的。
为什么要在这里定义这个命名空
间呢?可以看到在③中我们使用了 一个属性 schemaLocation ,而这个属性正好是
/2001/XMLSchema-instance 定义的。
所以要想使用这个属性,就得引
入它所在的命名空间。
③: schemaLocation 属性的作用就是用于指定名称空间所对应的XMLSchema
模式文档在哪里,这个属性在前面定义的xsi 名称空间中,所以必须在其前面加上表示其名
称空间的前缀。
设置值包含两部分: 第一部分就是命名空间的URI,上面的是/schema/beans,第二部分就是该名称空间所标识的XML Schema文件的位置或者URL地址,这两个部分之间使用空格分隔.④标识的就是这一部分的内容
2.3 引入多个名称空间的名称。
一个XML实例文档可能引用多个名称空间的名称,对于这种情况,schemaLocation 属性的设置值中可以包含多对名称空间与他们所对应的XML Schema文档的存储位置,每一对名称空间的设置信息至今啊也采用空格分隔。
比如我们要在spring中做AOP的相关配置。
这就要引入对应的名称空间:
/ Copyright©2010吴青版权所有
与前面不一样的地方我将它标识出来了。
①名称空间的名字为aop,要想使用该名称空间中的元素,就必须添加前缀了,比如: <aop: config />. 引入了这个名称空间之后,还要指定这个名称空间的XML Schema 约束文件,②是该名称空间,③是对应的xsd文件
:
下面是Spring Security 3.0 命名空间的配置
/ Copyright©2010吴青版权所有。