XML--Schema

来源:互联网 发布:mac装flash player 编辑:程序博客网 时间:2024/05/21 01:27
XML Schema

XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。

XML Schema规定XML文档实例的结构和每个元素/属性的数据类型。

XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性

(did格式化Schema,Schema格式化xml)

1.Schema的新特性
      1) Schema基于XML语法

      2)Schema可以用能处理XML文档的工具处理

      3) Schema大大扩充了数据类型,可以自定义数据类型

      4) Schema支持元素的继承—Object-Oriented’

      5) Schema支持属性组

2.XML Schema VS DTD

      1)XML Schema符合XML语法结构。

      2) DOM、SAX等XML API很容易解析出XML Schema文档中的内容。

      3)XML Schema则采用与XML文档同样的合法性验证机制

      4) XML Schema对名称空间支持得非常好。

      5) XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。

      6) XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。

      7)XML Schema基本上满足了关系模式在数据描述上的需要。

      8) XML Schema不能像DTD一样定义实体,比DTD更复杂。


3.Schema 数据类型

1) 简单类型

        a) 内置的数据类型(built-in data types)
                            基本的数据类型
                            扩展的数据类型

        b)用户自定义数据类型(通过simpleType定义)
2)复杂类型(通过complexType定义)

a)基本的数据类型


b)扩展的数据类型


c)数据类型特征


4.Schema 元素类型

a)schema元素:作用:包含已经定义的schema用法:<xs:schema>

b)element元素: 作用:声明一个元素
属性:
– name
– type
– ref
– minOccurs
– maxOccurs
– substitutionGroup
– fixed
– default

例:

<xs:element name="cat" type="xs:string"/><xs:element name="dog" type="xs:string"/><xs:complexType name="myType"><xs:sequence minOccurs="0"maxOccurs="unbounded"><xs:element ref="cat"/><xs:element ref="dog"/></xs:sequence></xs:complexType><xs:element name="pets" type="myType"/>
c)group元素:作用:把一组元素声明组合在一起,以便它们能够一起被复合类型应用 . 属性:name/ref
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"><xs:group name="myGroup"><xs:sequence><xs:element name="name" type="xs:string"/><xs:element name="birthday" type="xs:date"/><xs:element name="age" type="xs:integer"/></xs:sequence></xs:group><xs:element name="person"><xs:complexType><xs:group ref="myGroup"/></xs:complexType></xs:element></xs:schema>
注:上述例子不用分组也可以实现效果,但即然三个属性描述一个人,就是让它要么出现要么不出现。用分组在好不过了。

d)attribute元素:作用:声明一个属性.属性:name/type/ref/use  必须放在sequence下面

:<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"><xs:attribute name="id" type="xs:int"/><xs:group name="myGroup"><xs:sequence><xs:element name="name" type="xs:string"/><xs:element name="birthday" type="xs:date"/><xs:element name="age" type="xs:integer"/></xs:sequence></xs:group><xs:element name="person" ><xs:complexType><xs:group ref="myGroup"/><xs:attribute ref="id"/></xs:complexType></xs:element></xs:schema>
e)attributeGroup元素 :作用:把一组属性声明组合在一起,以便可以被复合类型应用. 属性:name/ref
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"><xs:attributeGroup name="myAttributeGroup"><xs:attribute name="hello" type="xs:string"use="required"/><xs:attribute name="world" type="xs:string"use="optional"/></xs:attributeGroup><xs:element name="myElement"><xs:complexType><xs:attributeGroup ref="myAttributeGroup"/></xs:complexType></xs:element></xs:schema>
f)simpleType元素 作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息。属性:name
内容:应用已经存在的简单类型,三种方式:
1) restrict→限定一个范围
2)list→从列表中选择
3) union→包含一个值的结合

1. 子元素为:<xs:restriction>定义一个约束条件

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"><xs:simpleType name="myType"><xs:restriction base="xs:integer"><xs:enumeration value="1"/><xs:enumeration value="2"/><xs:enumeration value="3"/><!--<xs:minExclusive value="0"/><xs:maxInclusive value="100"/>--></xs:restriction></xs:simpleType><xs:element name="hello" type="myType"/></xs:schema>
2. 子元素为:<xs:list>从一个特定数据类型的集合中选择定义一个简单类型元素

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"><xs:simpleType name="myType"><xs:list itemType="xs:date"/></xs:simpleType><xs:element name="hello" type="myType"/></xs:schema>
3.子元素为:<xs:union>从一个特定简单数据类型的集合中选择定义一个简单类型元素
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"><xs:attribute name="myAttr"><xs:simpleType><xs:union memberTypes="value1 value2"/></xs:simpleType></xs:attribute><xs:simpleType name="value1"><xs:restriction base="xs:positiveInteger"><xs:enumeration value="46"/><xs:enumeration value="55"/><xs:enumeration value="60"/></xs:restriction></xs:simpleType><xs:simpleType name="value2"><xs:restriction base="xs:string"><xs:enumeration value="top"/><xs:enumeration value="middle"/><xs:enumeration value="bottom"/></xs:restriction></xs:simpleType><xs:element name="hello"><xs:complexType><xs:sequence><xs:element name="welcome" type="xs:string"/></xs:sequence><xs:attribute ref="myAttr" use="required"/></xs:complexType></xs:element></xs:schema>
g)complexType元素: 作用:定义一个复合类型,它决定了一组元素和属性值的约束和相关信息.属性:name
SimpleType与complexType区别

1)simpleType类型的元素中不能包含元素或者属性

2)当需要声明一个元素的子元素/或属性时,用complexType

3)当需要基于内置的基本数据类型定义一个新的数据类型时, 用simpleType。

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"><xs:element name="country"><xs:complexType><xs:simpleContent><xs:extension base="xs:int"><xs:attribute name="sizing" use="required"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="us"/><xs:enumeration value="de"/><xs:enumeration value="cn"/></xs:restriction></xs:simpleType></xs:attribute></xs:extension></xs:simpleContent></xs:complexType></xs:element></xs:schema>
注:simpleContent不能有子元素.也就是说一般用simpleContent定义的话我们就是不希望该元素下有子元素。但可以有属性。大多数情况下。Extension代表元素的类型
h)choice元素:作用:允许唯一的一个元素从一个组中被选择.属性:minOccurs/maxOccurs

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"><xs:complexType name="myType"><xs:choice minOccurs="1" maxOccurs="3"><xs:element name="hello" type="xs:string"/><xs:element name="world" type="xs:string"/></xs:choice></xs:complexType><xs:element name="helloworld" type="myType"/>
i)sequence元素作用:给一组元素一个特定的序列。属性:minOccurs/maxOccurs

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"><xs:complexType name="myType"><xs:sequence minOccurs="1" maxOccurs="3"><xs:element name="hello" type="xs:string"/><xs:element name="world" type="xs:string"/></xs:sequence></xs:complexType><xs:element name="helloworld" type="myType"/></xs:schema>
终结:
例:
<?xml version="1.0" encoding="utf-8"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="student.xsd">
<学生名册 >

<学生 学号="1">

<姓名>张三</姓名>

<性别>男</性别>

<年龄>20</年龄>

</学生>

<学生 学号="2">

<姓名>李四</姓名>

<性别>女</性别>

<年龄>19</年龄>

</学生>

<学生 学号="3">

<姓名>王五</姓名>

<性别>男</性别>

<年龄>21</年龄>

</学生>

</学生名册>

<xs:element name="学生名册"><xs:complexType><xs:sequence minOccurs="0" maxOccurs="unbounded"><xs:element name="学生"><xs:complexType><xs:sequence><xs:element name="姓名" type="xs:string"/><xs:element name="性别"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="男"/><xs:enumeration value="女"/></xs:restriction></xs:simpleType></xs:element><xs:element name="年龄"><xs:simpleType><xs:restriction base="xs:integer"><xs:minInclusive value="1"/><xs:maxInclusive value="150"/></xs:restriction></xs:simpleType></xs:element></xs:sequence><xs:attribute name="学号" type="xs:integer"/></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element>



0 0
原创粉丝点击