XML与XSD

1 xml头部介绍 以spring.xml为例
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:jee="http://www.springframework.org/schema/jee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
      http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
      
 <bean></bean><!-- 引用默认命名空间1.1 -->     
 <jee:jndi-lookup jndi-name=""></jee:jndi-lookup><!-- 引用jee命名空间1.2 -->    
</beans>      
 1.1 xmlns="http://www.springframework.org/schema/beans":
  设置spring.xml的默认命名空间为http://www.springframework.org/schema/beans,一定不要把http://www.springframework.org/schema/beans当URL处理。
  xml的命名空间的作用就如同java里的包的作用差不多。默认命名空间的作用就是<bean>之类的,没有前缀的元素是引用的默认命名空间。
 1.2 xmlns:jee="http://www.springframework.org/schema/jee":
  设置spring.xml的以<jee:xxx/>引用的元素命名空间为http://www.springframework.org/schema/jee
 1.3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance":XML Schema 实例命名空间,表明这个xml改遵循那个W3C规范,一般情况下用xsi前缀表示,
  当拥有了实例命名空间之后,就可以使用xsi:schemaLocation来指定与命名空间有关的约束xsd文件的位置,
  用xsi:noNamespaceSchemaLocation指定无命名空间的约束xsd文件的位置。
 1.4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd":
  指定命名空间http://www.springframework.org/schema/beans的xsd的位置http://www.springframework.org/schema/beans/spring-beans-2.0.xsd,后半部分
  为URL。我的IDE为myeclipse,它会将xml有关的xsd存到本地myeclipse的configuration\org.eclipse.osgi\bundles\90\1\.cp\catalog-xsd目录下,这样在无法
  访问网络的时候也可以进行xml验证了。
  
2 xml与xsd
 2.1 xml与xsd的关系:
  xml可以不依赖于xsd,但是如果这个xml引用了xsd那么必须遵守这个xsd的规范。
 2.2 xml写法上与xsd的对应关系:
  示例xsd:
  来源http://www.w3school.com.cn/schema/schema_schema.asp
  note.xsd
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <xs:schema xmlns="http://www.w3school.com.cn" xmlns:xs="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified" targetNamespace="http://www.w3school.com.cn">
   <xs:element name="note">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="to" type="xs:string" />
      <xs:element name="from" type="xs:string" />
      <xs:element name="heading" type="xs:string" />
      <xs:element name="body" type="xs:string" />
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:schema>
  简单解释一下这个xsd
  xmlns="http://www.w3school.com.cn":默认命名空间为http://www.w3school.com.cn
  xmlns:xs="http://www.w3.org/2001/XMLSchema":用前缀xs表示的元素或属性来自命名空间http://www.w3.org/2001/XMLSchema
  targetNamespace="http://www.w3school.com.cn":显示被此schema定义的原属(to,from,heading,body,note)来自命名空间http://www.w3school.com.cn
  elementFormDefault="qualified":这个属性对xml的写法有很大的影响。参考这位同学的http://xinklabi.iteye.com/blog/753767
  
  note.xml
  <?xml version="1.0"?>
  <note xmlns="http://www.w3school.com.cn"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
   <to>George</to>
   <from>John</from>
   <heading>Reminder</heading>
   <body>Don't forget the meeting!</body>
  </note>
  note.xml与note.xsd对应关系:
   note.xml的xmlns节点与note.xsd的targetNamespace节点值是对应关系即:
    xmlns="http://www.w3school.com.cn"<------>targetNamespace="http://www.w3school.com.cn"
   note.xml的xmlns节点与note.xsd的xmlns节点的值是对应关系:
    xmlns="http://www.w3school.com.cn"<------>xmlns="http://www.w3school.com.cn"
  2.3 xml引用xsd的方法:
   2.3.1 xsi:schemaLocation="http://www.w3school.com.cn note.xsd" 命名空间引用
   2.3.2 无名命名空间
3 关于xsd的验证
 3.1 xml书写时xsd验证:
  3.1.1
   在xsi:schemaLocation中引用,写法xsi:schemaLocation="命名空间 xsd所在位置"
  3.1.2
   在xsi:noNamespaceSchemaLocation中引用,写法xsi:noNamespaceSchemaLocation="xsd所在位置"
  3.1.3
  如果希望Myeclipse在书写xml时候进行验证,如果不能联网的情况下,则需要手动添加xsd文件
  xml catalog ---> add ----> file System ----> 选择你的xsd文件位置
  key type 选择 Schema Location
  key 则填写你在xsi:schemaLocation中定义的命名空间引用的xsd位置作为key


 3.2 xml书写时DTD验证: 
  DTD是xsd的前辈,作用是一样的,引用方式如下
  3.2.1
   直接在xml头部定义
   <!DOCTYPE quotations [ 
   <!ELEMENT quotations (quote*)>   
    <!ELEMENT quote (saying, attribution, era)> 
    <!ATTLIST quote quoteid CDATA #REQUIRED> 
   ]>  
      
   <quotations>
      <quote quoteid="A42"/>
   </quotations>
  3.2.2
   <!DOCTYPE 根元素 SYSTEM "文件名">
  3.2.3
   Myeclipse的DTD验证
   xml catalog ---> add ----> file System ----> 选择你的DTD位置
   key type 选择 url
   key xml引用的DTD的位置
    如果选择的key type为Public ID则key要选择xml的公共标识符
 
 3.3 spring运行时xml验证
  http://blog.csdn.net/bluishglc/article/details/7596118的文章,
  总体的来说就是xsi:schemaLocation中定义的xsd URL位置对应到META-INF/spring.schemas文件下的xsd的物理位置。
  要把运行时验证和书写时验证分开对待。
  

你可能感兴趣的:(xml)