Schema约束简单入门

Schema约束简单入门

创建的schema文件的后缀名为.xsd

Schema元素

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
		targetNamespace="http://www.example.org/Person"
		elementFormDefault="qualified" attributeFormDefault="qualified">
	<element name="Person">
		<complexType>
			<sequence>
				<element name="name" type="string"></element>
				<element name="age" type="int"></element>
			</sequence>
		</complexType>
	</element>
</schema>
  • xmlns="http://www.w3.org/2001/XMLSchema"表示当前xml文件是一个约束文件,指定默认的命名空间
  • targetNamespace="http://www.example.org/Person"说明当前xsd文件约束的文件的命名空间
  • elementFormDefault="qualified" 说明元素是否严格使用命名空间
  • attributeFormDefault="qualified" 说明属性是否严格使用命名空间

引入Schema

在xml的根文件里面添加一系列特殊的属性

<?xml version="1.0" encoding="UTF-8"?>
<psn:Person 
	xmlns:psn="http://www.example.org/Person"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.example.org/Person Person.xsd">
	<psn:name>Hari</psn:name>	
	<psn:age>19</psn:age>
</psn:Person>
	
  • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 表示当前的xml文件是一个被约束文件
  • xmlns:psn="http://www.example.org/Person" 相当于schema文件里面的targetNamespace,在这里我们给这个命名空间取了别名psn
  • xsi:schemaLocation="http://www.example.org/Person Person.xsd" targetNamespace 空格 约束文档的地址路径

简单的元素

<element name="xxx" type="xxx"></element>
  • name:元素的名称
  • type:元素的数据类型

元素默认值或固定值

<element name="xxx" type="xxx" default="默认值"></element>
<element name="xxx" type="xxx" fixed="固定值"></element>
  • 默认值是在没有填写值的情况下默认的值
  • 固定值是固定内容为fixed里面的内容不可更改

元素属性

  1. 简单元素没有元素属性
  2. 只有复杂元素才有元素属性
  3. 写在</complexType> 之前
<attribute name="ID" type="int" use="required"></attribute> 
  • name:属性名称
  • int:属性数据类型
  • use=“required”:属性必须出现

而且属性还能够设置默认值和固定值,参考元素的默认值和固定值

内容限定

限定(restriction)用于为 XML 元素或者属性定义可接受的值。对 XML 元素的限定被称为 facet

对于某些可以被正则表达式限定取代的限定,这里就不多做描述了

值的上限下限

下面例子定义了一个叫age的元素,限制其值在0-120之间

<element name="age">
	<simpleType>
    	<restriction base="integer">
        	<minInclusive value="0"></minInclusive>
            <maxInclusive value="12"></maxInclusive>
        </restriction>
    </simpleType>
</element>

枚举限定

<element name="foodType">
	<simpleType>
    	<restriction base="string">
        	<enumeration value="apple"></enumeration>
            <enumeration value="banana"></enumeration>
            <enumeration value="orange"></enumeration>
        </restriction>
    </simpleType>
</element>

正则表达式约束

<element name="telephoneNumber">
	<simpleType>
    	<restriction base="string">
        	<pattern value="[\d]{11}"></pattern>
        </restriction>
    </simpleType>
</element>

对空白字符的限定

如需规定对空白字符(whitespace characters)的处理方式,我们需要使用 whiteSpace 限定。

下面的例子定义了带有一个限定的名为 “address” 的元素。这个 whiteSpace 限定被设置为 “preserve”,这意味着 XML 处理器不会移除任何空白字符:

 <element name="address">
  <simpleType>
     <restriction base="string">
       <whiteSpace value="preserve"/>
     </restriction>
   </simpleType>
</element> 

这个例子也定义了带有一个限定的名为 “address” 的元素。这个 whiteSpace 限定被设置为 “replace”,这意味着 XML 处理器将移除所有空白字符(换行、回车、空格以及制表符):

 <element name="address">
  <simpleType>
     <restriction base="string">
       <whiteSpace value="replace"/>
      </restriction>
   </simpleType>
</element> 

复合类型

可以使用已有的元素组成复合类型

只继承不扩展

<element name="person" type="personInfo"></element>

<complexType name="personInfo">
	<sequence>
        <element name="name" type="string"></element>
        <element name="age" type="int"></element>
    </sequence>
</complexType>

下面那一部分的内容就是复合类型

<complexType name="personInfo">说明复合类型的名称为personInfo

<element name="person" type="personInfo"> 表示映入复合类型personInfo

继承且扩展

<element name="employee" type="supPersonInfo"></element>

<complexType name="personInfo">
	<sequence>
        <element name="name" type="string"></element>
        <element name="age" type="int"></element>
    </sequence>
</complexType>

<!--继承扩展内容-->
<complexType name="supPersonInfo">
<complexContent>
	<extension base="personInfo">
        <!--扩展内容-->
		<element name="address" type="string"></element>
        <element name="telephoneNumber" type="string"></element>
    </extension>
</complexContent>
</complexType>

<complexType name="supPersonInfo"> 说明复合类型名称

<extension base="personInfo"> 说明所继承的复合类型

定义空元素的三种方法

第一种

<element name="emptyElement">
<complexType>
	<attibute name="ID" type="string"></attibute>    
</complexType>
</element>

复杂元素需要定义内含的元素

但是complexType标签下没有定义元素

所以这个元素内容只能为空

第二种

<element name="emptyElement">
	<complexType>
    	<complexContent>
        	<restriction base="integer">
            	<attribute name="ID"></attribute>
            </restriction>
        </complexContent>
    </complexType>
</element>

complexContent表明下面将要对元素进行限制

restriction把元素限制成只能为integer类型

complex元素不能有内容,限制成integer不能有标签

两者叠加则为空元素

第三种

<element name="emptyElement" type="extendElement"></element>

<complexType name="extendElement"></complexType>

参考第一种和第二种就能够理解的了了

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值