1、什么是Schema
Schema是新的XML文档约束;
Schema要比DTD强大很多,是DTD替代者:
Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml。
Schema功能更强大,数据类型更完善
Schema支持名称空间
2、Schema重点要求
与DTD-样,要求可以通过schema约束文档编写xml文档。常见框架使用schema的有: Spring
通过提供"web-app_2_ 5.xsd" 编写xml文档:
<?xml version="1.0" encoding="UTF-8"?>
<!--
模拟servlet2.5规范,如果开发人员需要在xml使用当前Schema约束,必须包括指定命名空间。
格式如下:
<web-app xmlns="http://www.example.org/web-app_2_5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
version="2.5">
-->
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/web-app_2_5"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org/web-app_2_5"
elementFormDefault="qualified">
<xsd:element name="web-app">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="servlet">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="servlet-name"></xsd:element>
<xsd:element name="servlet-class"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="servlet-mapping">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="servlet-name"></xsd:element>
<xsd:element name="url-pattern" maxOccurs="unbounded"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="welcome-file-list">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="welcome-file" maxOccurs="unbounded"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
<xsd:attribute name="version" type="double" use="optional"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
案例文档中同一个“命名空间”分别使用“默认命名空间”和“显示命名空间”进行引入,所以文档中<schema>和<xsd:schema>作用一样。
3、案例实现
4、命名空间(语法)
(1)什么是命名空间
如果一个XML文档中使用多个Schema文件,而这些Schema文件中定义了相同名称的元素时就会出现名字冲突。这就像一个Java文件中使用了import javautil."和import java.sq.*时,在使用Date类时,那么就不明确Date是哪个包下的Date了。
总之名称空间就是用来处理元素和属性的名称冲突问题,与Java中的包是同一用途。如果每个元素和属性都有自己的名称空间, 那么就不会出现名字冲突问题,就像是每个类都有自己所在的包一样,那么类名就不会出现冲突。
(2)约束文档和XMl关系
当W3C提出Schema约束规范时,就提供“官方约束文档”。我们通过官方文档,必须“自定义schema约束文档”,开发中“自定义文档”由框架编写者提供。我们提供“自定义文档”限定,编写出自己的xml文档。
(3)声明命名空间
默认命名空间: SXXX xmIns='>,使用<标茎>
显式命名空间: <XXX xmlns: 别名=种”>,使用<别 名:标签>
实例: web-app_ 2. _5.xsd:
<xsd:schema xmins:xsd="http://ww.w3.org/2001/ XMLSchema"
表示自定又schema约東文档引用官方文档作为显示命名空间。如果要使用官方提供的元素或属性,必须使用xsd前缀《自定义,此处表示官方文档,所以使用xad)
<zsd:schema>标签就有官方文档提供,默认命名空间直接使用。
实例: web.xml:
<web-app xmIns=http:/ /www. example.org/web-app_2_5
表示xml文档引用“自定义约束文档”作为默认命名空间因为使用默认命名空间,<web app>直接使用
(4)其他介绍
自定义约束: web-app 2. 5.xsd
<xsd: schema targetNamespace-http:/ /wWH example. orgl web-app25
表示给当前自定义约束文档进行起名,提供给xml文档使用。
xml文档: web.xml
<web- app
xmIns:xsi-"http://www. w3. org/ 2001/XMLschema- instance"
xsi: schemaLocat ion=http:// Www. exanple. org/web-app 2_5 web-app 2.5.xed
xmlns:xsi=""固定写法
表示是一个schema实例文档,就是被schema文档约束的xm1文档。xsi:schemaLocat ion="名称路径 名称路径 名称路径”
表示用于确定当前xml文档使用到的schema文档的位置。“名称路径”是成对出现,与xmIns引用命名空间对应。