zoukankan      html  css  js  c++  java
  • 说说Spring XML的头

    部分内容截取自(http://blog.csdn.net/zhch152/article/details/8191377,http://iswift.iteye.com/blog/1657537)

    在使用spring的时候遇到了挺多问题,有些问题很奇怪,比如提示下面的错误:

    org.xml.sax.SAXParseException: SchemaLocation: schemaLocation 值 '       
      http://www.springframework.org/schema/jdbc 
    http://www.springframework.org/schema/jdbc/spring-jdbc.xsd

    http://www.springframework.org/schema/aop ' 必须具有偶数个 URI。

     我第一次遇到这个问题,就有点蒙了,这到底是啥意思,最后对照别人的配置文件才发现少了

    http://www.springframework.org/schema/aop/spring-aop.xsd
    

     完整的应该是:

    xsi:schemaLocation="
    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd       
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"

    咱么下面就开始看看这些头文件都代表什么意思。

    完整的头文件应该是这样的:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:jdbc="http://www.springframework.org/schema/jdbc"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <aop:aspectj-autoproxy/> <tx:annotation-driven transaction-manager="transactionManager" order="2"/> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> </beans>

     说明:



    第一行就比较简单了,说明这是一个xml文件,相当于告诉解析器这是个XML文档,你需要用XML解析器来进行解析。


    第二行开头:beans —— xml文件的根节点。

    xmlns(XML Namespaces的缩写),叫做"名字空间"声明。名字空间是什么作用呢?我的理解是:

    由于xml允许你自己定义自己的标识,你定义的标识和其他人定义的标识有可能相同,但表示不同的意义。当文件交换或者共享的时候就容易产生错误。为了避免这种错误发生,XML采用名字空间声明,允许你通过一个网址指向来识别你的标识。

    比如在一个文档<table>wood table</table>中<table>表示桌子,而在另一个文档<table>namelist</table>中<table>表示表格。如果我需要同时处理这两个文档,就会发生名字冲突。为了解决这个问题,我们引进了namespaces这个概念。namespaces通过给标识名称加一个网址(URL)定位的方法来区别这些名称相同的标识。


    Namespaces同样需要在XML文档的开头部分声明,声明的语法如下:
    <document xmlns:yourname='URL'>

    其中yourname是由你定义的namespaces的名称,URL就是名字空间的网址。
    假设上面的"桌子<table>"文档来自http://www.zhuozi.com/,我们就可以声明为
    <document xmlns:zhuozi='http://www.zhuozi.com'>

    然后在后面的标识中使用定义好的名字空间:
    <zhuozi:table>wood table</table>
    这样就将这两个<table>区分开来。注意的是:设置URL并不是说这个标识真的要到那个网址去读取,仅仅作为一种区别的标志而已。但是我们用的一些名字空间确实存在很多信息,这些地址真实存在,包含了关于当前命名空间更详细的信息。

    其实xmlns就类似于java中的package。


    再往下读

    第三行:xmlns:xsi ——是指xml文件遵守xml规范,xsi全名:xml schema instance,是指具体用到的schema资源文件里定义的元素所准守的规范。

    本xml文件中要用到某些来自xsi代表的“http://www.w3.org/2001/XMLSchema-instance”这个命名空间的元素 ,表示遵守w3的xml schema规范,xml解析器解析xml文件时,就明白按照什么规范解析了。

    比如引入自带命名空间的schema文件的schemaLocation="XXX"这些元素。
    这些元素是包含在xsi命名空间中的,所有的xml文件只要引用这些元素 就要引入xsi这个命名空间。  
    xsi这三个字母不是硬性规定,只是大家都这么用,方便阅读而已。

    然后咱们看到了xsi:schemaLocation="“

    它是指是指具体用到的schema资源 ,是什么意思呢?用于声明了目标名称空间的模式文档

      http://www.springframework.org/schema/jdbc 
    http://www.springframework.org/schema/jdbc/spring-jdbc.xsd

    比如上面这个,引入了jdbc的schema。那么我们就可以用jdbc标签了。

    再来看下面这句话:

    xsi:schemaLocation属性的值由多个URI引用对组成,两个URI之间以空白符分隔。第一个URI是名称空间的名字,第二个URI给出模式文档的位置,模式处理器将从这个位置读取模式文档,该模式文档的目标名称空间必须与第一个URI相匹配。

    但是必须引入xsi命名空间!

    再来看之前提到的xsi:

    声明XML Schema实例名称空间(http://www.w3.org/2001/XMLSchema-instance),并将xsi前缀与该名称空间绑定,这样模式处理器就可以识别xsi:schemaLocation属性。XML Schema实例名称空间的前缀通常使用xsi。

    此外,要注意的是,XML Schema推荐标准并没有要求模式处理器必须要使用xsi:schemaLocation属性,某些模式处理器可以通过其他的方式来得到模式文档的位置,而忽略xsi:schemaLocation属性。

  • 相关阅读:
    JavaScript中的变量及数据类型
    EasyUI——常见用法总结
    MVC页面重定向'页面跳转
    window.location.href的用法
    MVC JsonResult的用法
    Knockoutjs快速入门(经典)
    Knockoutjs的环境搭建教程
    4位双扫描、8位单扫描
    存储周期(存取周期)
    c语言中static、extern、void的重载
  • 原文地址:https://www.cnblogs.com/haolnu/p/7367798.html
Copyright © 2011-2022 走看看