Schema简介
基于XML的DTD替代者 描述XML文档的结构 也称作XML Schema定义(XML Schema Definition,XSD) 在2001,5,2成为W3C标准
Schema作用
定义XML文档的合法构建,类似 DTD 定义可出现在文档中的元素 定义可出现在文档中的属性 定义哪个元素是子元素 定义子元素的次序 定义子元素的数目 定义元素是否为空,或者是否可包含文本 定义元素和属性的数据类型 定义元素和属性的默认值以及固定值
Schema取代DTD理由
基于XML编写 扩充了数据类型,还支持自定义类型 功能更强大(比如支持继承extends的概念,支持属性组Group的概念) 支持命名空间
Schema文档结构
<?xml version="1.0" encoding="UTF-8"?> <!-- xs:schema是Schema的根元素 xmlns:xs 这个地址不能变,这个是定义schema本身的 用于构造schema元素和数据类型 来自http://www.w3.org/2001/XMLSchema命名空间 targetNamespace 这个是定义本schema 用于构造本schema元素和数据类型 属于http://www.example.org/XMLSchema命名空间 --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/XMLSchema"> <!-- 存放实际内容 --> </xs:schema>
Schema数据类型
简单类型 内置数据类型 string 表示字符串 boolean 布尔型 decimal 代表特定精度的数字 float 表示单精度32位浮点数 double 表示双精度64位浮点数 duration 表示持续时间 dateTime 代表特定的时间 time 代表特定的时间,但是是每天重复的 date 代表日期 hexBinary 代表十六进制数 anyURI 代表一个URI,用来定位文件 NOTATION 代表 NOTATION类型 ID 用于唯一标识元素 IDREF 参考ID类型的元素或属性 ENTITY 实体类型 NMTOKEN NMTOKEN类型 NMTOKENS NMTOKEN类型集 long 表示整型数 int 表示整型数 short 表示整型数 byte 表示整型数 用户自定义类型 通过simpleType定义 复杂类型 通过complexType定义
Schema的元素类型详解
schema 作用:包含已经定义的schema 属性:xmlns/targetNamespace element 作用:声明一个元素 属性:name/type/ref/minOccurs/maxOccurs/substitutionGroup/fixed/default group 作用:把一组元素声明组合在一起,以便它们能够一起被复合类型应用 属性:name/ref attribute 作用:声明一个属性 属性:name/type/ref/use 备注:use的使用方式有三种required必须,optional不是必须的,prohibited禁止的 attributeGroup 作用:把一组属性声明组合在一起,以便可以被复合类型应用 属性:name/ref simpleType 作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息 属性:name 内容:restrict/list/union complexType 作用:定义一个复合类型,它决定了一组元素和属性值的约束和相关信息 属性:name simpleContent 作用:应用于complexType,对它的内容进行约束和扩展 choice 作用:允许唯一的一个元素从一个组中被选择 属性:minOccurs/maxOccurs sequence 作用:给一组元素一个特定的序列 list 作用:从列表中选择多个,中间用空格隔开 union 作用:多个取一个 restriction 作用:约束,限定一个范围
simpleType与complexType的区别
simpleType类型的元素不能有子元素和属性 complexType类型的元素可以有子元素和属性 当需要基于内置基本数据类型定义一个新的数据类型时使用simpleType(一般这是做限制)
Schema简单元素
简易元素指那些只包含文本的元素,它不会包含任何其他的元素或属性 定义简单元素: <xs:element name="author" type="xs:string"/> 简单元素默认值或者固定值 <xs:element name="font" type="xs:string" default="red"/> <xs:element name="font" type="xs:string" fixed="red"/>
Schema复杂元素
复合元素指包含其他元素或属性的XML元素 有四种类型的复合元素: 空元素 包含其他元素的元素 仅包含文本的元素 包含元素和文本的元素 两种方式定义复合元素 直接声明 <xs:element name="employee"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> 引用声明 <xs:element name="employee" type="personinfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType>
Schema属性
简易元素无法拥有属性,假如某个元素拥有属性,它就会被当作某种复合类型 但是属性本身总是作为简易类型被声明的 声明: <xs:attribute name="style" type="xs:string"/> 属性默认值和固定值 <xs:attribute name="style" type="xs:string" default="bold"/> <xs:attribute name="style" type="xs:string" fixed="bold"/> 属性可选和必选 <xs:attribute name="style" type="xs:string" fixed="bold" use="required"/>
Schema数据类型的限定
minInclusive 定义数值的下限,所允许的值必需大于或等于此值 maxInclusive 定义数值的上限,所允许的值必须小于或等于此值 enumeration 定义可接受值的一个列表 pattern 定义可接受的字符的精确序列 whiteSpace 定义空白字符(换行,回车,空格,制表符)的处理方式 length 定义所允许的字符或者列表项目的精确数目,必须大于或等于0 minLength 定义所允许的字符或者列表项目的最小数目,必须大于或等于0 maxLength 定义所允许的字符或者列表项目的最大数目,必须大于或等于0 fractionDigits 定义所允许的最大的小数位数,必须大于等于0 minExclusive 定义数值的下限,所允许的值必需大于此值 maxExclusive 定义数值的上限,所允许的值必须小于此值 totalDigits 定义所允许的阿拉伯数字的精确位数,必须大于0
Schema几个元素的使用方法
group <xs:complexType name="myComplexType"> <xs:group ref="myGroup"/> </xs:complexType> <xs:group name="myGroup"> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:element name="cat" type="xs:string"/> <xs:element name="dog" type="xs:string"/> </xs:sequence> </xs:group> attributeGroup <xs:complexType name="myElementType"> <xs:attributeGroup ref="myAttributeGroup"/> </xs:complexType> <xs:attributeGroup name="myAttributeGroup"> <xs:attribute name="someattribute1" type="xs:integer"/> <xs:attribute name="someattribute2" type="xs:string"/> </xs:attributeGroup> choice <xs:complexType name="myComplexType"> <xs:choice minOccurs="1" maxOccurs="1"> <xs:element name="cat" type="xs:string"/> <xs:element name="dog" type="xs:string"/> </xs:choice> </xs:complexType> sequence <xs:element name="myElement"> <xs:complexType> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:element name="cat" type="xs:string"/> <xs:element name="dog" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> list <xs:simpleType name="abc"> <xs:list itemType="xs:date"/> </xs:simpleType> union <xs:complexType name="myComplexType"> <xs:union> <xs:element name="cat" type="xs:string"/> <xs:element name="dog" type="xs:string"/> </xs:union> </xs:complexType> restriction <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="100"/> </xs:restriction> enumeration <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="US"/> <xs:enumeration value="European"/> <xs:enumeration value="UK"/> </xs:restriction> </xs:simpleType>