XML笔记之Schema约束

XML Schema是基于XML的,可以看作是DTD的替代,用于描述XML的结构,保证XML没有被乱写,意思一致。在Java的开发过程中,它有更加重要的作用。

1.如何创建Schema约束文件?


    1).Schema也是属于xml文件所以还是开头必须要有文档声明格式内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    2).在schema标签中加入相应的命名空间:
  <schema xmlns="http://www.w3.org/2001/XMLSchema" //引入系统的命名空间
targetNamespace="http://www.xiaoyu.org/newSchema" //创建我们自己的命名空间
xmlns:tns="http://www.xiaoyu.org/newSchema" 
elementFormDefault="qualified">//是否严格按schema文档约束我们额XML文件

2.SimpleType(简易元素)

就是以<xs:element>包装的,只有name和type的纯文本的元素,不能有子元素,不能有属性(注意,Schema里面的子
元素和属性的包含是在xs:element标签里面添加新的xs:element或者xs:attribute标签),比如:
<xs:element name="xxx" type="xs:string" default="dc"></xs:element>
你可以添加限定,指定缺省值,也可以将值固定,但是不能再多,只能是一个元素名字,一个类型,然后可选的缺省值或
者固定值。通常的类型就是xs:string,xs:int等等,也可以自己定义
如:枚举约束 enumeration 
      对大小值的限定 mininclusive 设定最小值,这种包含最小值的
                minEnclusive 设定最小值,但是不包含最小值
  maxinclusive 设定最大值,包含最大值
maxEnclusive 设定最大值,但是不包含最大值
      样式约束
[a-zA-Z]这一位字符,在a-z的大小写中任选一个填入
male|female这里需要多选一来填入信息内容
([a-z][0-9])+  这里小写字母+一位数字的格式重复(可以1次可以多次)

3.attribute(属性)

简易元素是无法拥有属性的,一旦某个元素拥有属性,那么它就会被当作某种ComplexType,而属性自己是作为简易类
型被声明的。定义属性和定义简单元素的方式是一样的,比如
<xs.attribute name="lange" type="xs:string" default="EN" use="required" />
属性的定义还可以加上restriction条件(facet),比如use,表明这个属性是可选的还是必须的
如果你对一个element的类型,大小等等有限制的话,可以使用restriction,用来定义元素或者属性可以接受的值
<xs:restriction base="xs:xxx">
   <xs:yyy></xs:yyy>
</restriction>
其中base是用来限定类型的,而<xs:yyy>是用来限定具体的表达,比如数值的大小,字母按照什么样的顺序等等,这里
有很多发挥空间,也可以使用通配符。注意这个东西很有用,比如你要限制密码长度,大小写,很多东西都可以使用这个
来进行配置。

4.ComplexType(复合元素)

也就是一个元素包含了其它的元素或者属性
一共有4种:
    1) 空元素,
    2) 包含其它元素的元素,
    3) 仅包含文本的元素,
    4) 包含元素和文本的元素,这些元素都可以包含属性
也就是说,一旦简单元素有了属性或者内嵌元素,那么它就是复合元素
怎么定义呢?2种方法,一种是直接将某个元素声明为ComplexType,比如
<xs:element name="xxx">
     <xs:complexType>
           <xs:sequence>
               <xs:element         xxx           />
               <xs:element         yyy           />
           </xs:sequence>
     </xs:complexType>
</xs:element>
还有一种,可扩展性更好,就是单独定义complexType,定义完了以后,元素想要引用直接就把element的类型声明为该
type就行。这样的话,一次定义,可以多次使用,而且定义和使用分离,便于维护。
如:
<element name="reason" type="tns:type_reason"></element>
<simpleType name="type_reason">
<restriction base="string">
<enumeration value="查询成功"></enumeration>
<enumeration value="查询失败"></enumeration>
</restriction>

</simpleType>

5.指示器

一共有3类:
第一类,Order指示器,用来定义元素的顺序
a) All
意思就是元素可以按照任意顺序出现,但是每个元素最多出现一次
b) Choice
意思就是非此即彼,在元素中任选其一。
c) Sequence
按照顺序来

第二类,Occurence指示器,用来定义某个元素出现的频率(次数),一定记住,只有元素有出现次数,属性是没有的
maxOccurs和minOccurs,元素最多和至少出现的次数
默认情况下,它们的值都是1。如果想让某个元素出现的次数不受限制的话,那么就加上maxOccur="unbounded"

第三类,Group指示器,用于定义相关的数批元素
其实没什么,相当于将元素或者属性捆绑起来,将来引用的时候就可以一组一组的引用,咋用呢?
a) xs:group
b) xs:attributeGroup
要是你使用了group的话,必须在其内部定义一个all,choice,或者sequence的元素,需要引用的时候加一个
<xs:group ref="xxx" />就行了
attributeGroup一样的道理

6.如何在xml中使用Schema约束文件?

1).xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"要引入我们的shema文档需要使用这个命
名空间中的属性。
2).xsi:schemaLocation="http://www.xiaoyu.org/newSchema newSchema.xsd" //读取我们的Schema文
件(自定义的命名空间 自己的Schema文件注意一定要带后缀名)
3).xmlns="http://www.xiaoyu.org/newSchema"在通过引入命名空间的方法,将我们的schema文档的命名
空间引入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值