1、Schema

1.1、什么是Schema

Schema:原称为XSD(XML Schema Definition),是由微软提出的规范,现成为W3C规范
XML Schema是用一套内置的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。
XML Schema规定XML文档实例的结构和每个元素/属性的数据类型

1.2、体验dtd和schema的不同之处

首先创建一个xml文档



    貂蝉
    20

先使用内部的dtd对xml文档做约束





]>

    貂蝉
    20

那么如果采用schema如何来编写呢?



    
    
    
    
        
            
            
        
    
    

编写一个xml引用此schema



    关羽
    20

1.3、dtd与Schema的比较

dtd的语法的局限性:

1、dtd使用的是一种语法,而xml使用的是另外一种语法

2、dtd的数据类型是有限的,与我们讲的数据库中数据类型不一致

3、dtd不可以扩展,并且不支持命令空间

Schema的好处:

1、Schema也是遵守xml的语法

2、schema大大扩充了数据类型,也可以自定义自己的数据类型

3、它也支持元素的继承,支持元素组合属性组的概念

4、开发性,多个schema的声明可以应用到一个xml文档中。

1.4、Schema文档的结构

schema文档的结构

引用schema的文档

1.5、Schema中的数据类型(知道即可)

数据类型分类:

简单类型

​ 内置的数据类型(built-in data types)

​ l基本的数据类型(Primitive Data Types)

​ l扩展的数据类型(Deriverd Data Types)

​ 用户自定义数据类型(通过simpleType定义)

复杂类型(通过complexType定义)

基本数据类型

数据类型 描述
string 表示字符串
boolean 布尔型
decimal 代表特定精度的数字
float 表示单精度32位浮点数
double 表示双精度64位浮点数
duration 表示持续时间
dateTime 代表特定的时间
time 代表特定的时间,但是是每天重复的
date 代表日期
hexBinary 代表十六进制数
anyURI 代表一个URI,用来定位文件
QName 代表限定(qualified)名称,即有前缀的字符串

扩展的数据类型

数据类型 描述
ID 用于唯一标识元素
IDREF/ IDREFS 参考ID类型的元素或属性
ENTITY/ENTITIES 实体类型
NMTOKEN NMTOKEN类型
NMTOKENS NMTOKEN类型集
long 表示整型数,大小介于-9223372036854775808 和9223372036854775807之间
int 表示整型数,大小介于-2147483648和 2147483647之间
short 表示整型数,大小介于-32768和32767之间
byte 表示整型数,大小介于-128和127之间
NOTATION 代表 NOTATION类型,QName的派生类型

其他数据类型

数据类型 描述
gYear/gYearMonth 指定格式的日期
gMonth/gMonthDay 指定格式的日期
gDay 指定格式的日期
base64Binary 使用base64-encoded编码的2进制数据
language 语言字符,string的派生
Name 有效的XML字符串,string的派生
NCName Name的派生,字符串中不允许“:”
negativeInteger 表示负整数,<= -1
positiveInteger 表示正整数,>=1
nonNegativeInteger >=0,另有nonPositiveInteger表示<=0
unsignedLong 无符号数,还有un…Int、Short、Byte

数据类型的约束

特性 描述
enumeration 在指定的数据集中选择,限定用户的选值
fractionDigits 限定最大的小数位,用于控制精度
length 指定数据的长度
maxExclusive / minExclusive 指定数据的最大/小值(小于/大于)
maxInclusive / minInclusive 指定数据的最大/小值(小于等于/大于等于)
maxLength / minLength 指定长度的最大/小值
pattern 指定数据的显示规范,具体规则见下页
whiteSpace 空白字符的处理:preserve/replace/collapse
precision 十进制数据允许的位数
scale 小数部分的位数

正则描述

规范 描述
\d 任意一个数字,如:Chap\dàChap1、Chap9……
* 前的字符任意重复,如:abàb、ab、aaaaab……
[ ] [ ]内的字符集中任意一个,如:[xyz]aàxa、ya、za
?前的字符出现0或1次
+ + 前的字符至少出现1次
- 指定范围,如:[a-d]yàay、by、cy、dy
{n} { }前的字符出现n次,如:a{3}xàaaax
{min,max} { }前的字符至少出现min次,至多max次,如:a{1,3}xàax、aax、aaax

1.5、Schema中的元素类型

•schema、element、attribute、group、attributeGroup

•simpleType

•simpleContent

•complexType

1.5.1、element

案例:xsd02.xsd








    
        
        
    





    
        
    





xml文件引用



    
        关羽
        战士
    
    
        曹操
        战士
    
    
        亚瑟
        战士
    
    
        安其拉
        法师
    

1.5.2、group元素

把一组元素声明组合在一起,以便它们能够一起被复合类型应用

案例,使用group组来进行改写代码









    
        
        
    



    





    
        
    





实际上xml文件并不需要发生任何的改变

1.5.3、attribute和attributeGroup

案例1:直接定义属性


    
    
    
    

然后我们在使用attributeGroup来定义属性组









    
        
        
    


    
    
    



    
    





    
        
    


1.5.4、simpleType

•作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息

•属性:name

•内容:应用已经存在的简单类型,三种方式:

restriction:限定一个范围

list:从列表中选择

union:包含一个值的结合

案例1:schema文件定义:



    
        
            
            
        
    
    
    
    
        
            
            
        
    

      
    

引用



    貂蝉
    
    100

案例2:


        

引用



    貂蝉
    
    100
    2012-01-22 2018-02-22

案例3:





  
    
    
      
        
      
      
        
      
    
  




  
    
    
    
  




  
    
    
    
  




    
        
    
    




引用文件




    

1.5.5、complexType和simpleContent元素

complexType:定义一个复合类型,它决定了一组元素和属性值的约束和相关信息

simpleContent:应用于complexType,对它的内容进行约束和扩展。

案例:



    

        
            
         
             
            
                
                
                 
                    
                    
                    
                 
                
            
         
        

    

    

引用schema文件



    10.1

总结一下:

SimpleType:基于已有数据类型的扩展

ComplexType:定义一个复合类型

SimpleContent:对ComplexType的内容做限定,这个复合类型没有子元素,只能存在文本或者属性