SCHEMA约束

WHAT.什么是Schema?

Schema,即XML SchemaXSD (XML Schema Definition)W3C于2001年5月发布的推荐标准,指出如何形式描述XML文档的元素。

XSD是许多XML Schema 语言中的一支。XSD是首先分离于XML本身的schema语言,故获取W3C的推荐地位。

像所有XML Schema 语言一样,XSD用来描述一组规则──一个XML文件必须遵守这些规则,才能根据该schema‘合法(Valid)’。

HOW.怎么样使用Schema?

  • 1.填写xml文档的根元素
  • 2.引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  • 3.引入xsd文件命名空间.  xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
  • 4.为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.itcast.cn/xml"

 

实例:

student.xsd

<?xml version="1.0"?>
<xsd:schema xmlns="http://www.itcast.cn/xml"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.itcast.cn/xml"
            elementFormDefault="qualified">
    
    <!--从下面开始看-->
    <xsd:element name="students" type="studentsType"/>
    <xsd:complexType name="studentsType">
        <xsd:sequence>
            <xsd:element name="student" type="studentType" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="studentType">
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="age" type="ageType" />
            <xsd:element name="sex" type="sexType" />
        </xsd:sequence>
        <xsd:attribute name="number" type="numberType" use="required"/>
    </xsd:complexType>
    <xsd:simpleType name="sexType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="male"/>
            <xsd:enumeration value="female"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="ageType">
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="256"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="numberType">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="heima_\d{4}"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema> 

对应的student.xml实例:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 
	1.填写xml文档的根元素
	2.引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	3.引入xsd文件命名空间.  xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
	4.为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.itcast.cn/xml" 
 -->
<students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
			xmlns="http://www.itcast.cn/xml">
	<!--在根标签里面引用xsd后,下面是正文-->
	<student number="heima_0001">
		<name>tom</name>
		<age>18</age>
		<sex>female</sex>
	</student>

</students>

命名空间别名

可以在一个xml中引入多个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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

但是xsd中的标签名称可能会冲突,就像是java中的同名类的解决方法类似,我们引入一个命名空间的概念,来区分不同xsd中的标签,使用xmlns:命名空间别名

在使用标签的时候,需要先写别名
 

<context:annotation-config />


<context:component-scan base-package="cn.cisol.mvcdemo">
	<context:include-filter type="annotation"
		expression="org.springframework.stereotype.Controller" />
</context:component-scan>


<mvc:annotation-driven />


<mvc:resources mapping="/resources/**" location="/resources/" />

WHERE.在哪里学习Schema?

简要语法:

<xsd:element name="students" type="studentsType"/>:定义元素,类型是另外一个元素
<xsd:element name="name" type="xsd:string"/>定义元素,类型是字符串

<xsd:complexType name="studentsType">:定义复杂类型,可以包含其他标签
<xsd:simpleType name="sexType">:定义简单类型,不包含其他标签

<xsd:attribute name="number" type="numberType" use="required"/>:定义属性


复杂元素如:
<xsd:complexType name="studentType">
	<xsd:sequence>
		<xsd:element name="name" type="xsd:string"/>
		<xsd:element name="age" type="ageType" />
		<xsd:element name="sex" type="sexType" />
	</xsd:sequence>
	<xsd:attribute name="number" type="numberType" use="required"/>
</xsd:complexType>
<xsd:simpleType name="sexType">

简单元素如:
<xsd:simpleType name="ageType">
	<xsd:restriction base="xsd:integer">
		<xsd:minInclusive value="0"/>
		<xsd:maxInclusive value="256"/>
	</xsd:restriction>
</xsd:simpleType>

详细的语法规则可以参考W3CSCHOOL上的规范。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值