XML(五)-Schema验证

来源:互联网 发布:易语言客户端发送数据 编辑:程序博客网 时间:2024/06/10 00:00
Schema

什么是Schema

Schema(模式) :其作用与DTD一样,也是用于验证XML文档的有效性,只不过它提供了比DTD更强大的功能和更细粒度的数据类型。另外,Schema可以自定义数据类型。

Schema也是一个XML文件,而DTD则不是。

Schema与DTD的比较

  

为何要Schema

Schema文档结构:

 

 

所有的Schema文档,其根元素必须叫schema。schema可以包含属性,比如:

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.w3school.com.cn"xmlns="http://www.w3school.com.cn"elementFormDefault="qualified">......</xs:schema>

一个Schema的例子

新建一个dtd文件

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">    <xs:element name="name" type="xs:string"></xs:element>    <xs:element name="health" type="xs:int"></xs:element>    <xs:element name="love" type="xs:int"></xs:element>    <xs:element name="strain" type="xs:string"></xs:element>    <xs:group name="mygroup" >        <xs:sequence>            <xs:element ref="name"></xs:element>            <xs:element ref="health"></xs:element>            <xs:element ref="love"></xs:element>            <xs:element ref="strain"></xs:element>        </xs:sequence>    </xs:group>
  <!--定义一个复合类型--> <xs:complexType name="dogType"> <xs:group ref="mygroup"></xs:group> </xs:complexType> <xs:element name="dog" type="dogType"></xs:element></xs:schema>

根据以上dtd写的xml文件

<?xml version="1.0" encoding="UTF-8"?><dog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\x\Desktop\schema\my3.xsd">    <name>安倍晋三</name>    <health>0</health>    <love>0</love>    <strain>草狗</strain></dog>

Schema的数据类型

基本数据类型

扩展数据类型

其它数据类型

数据类型的约束

 

规则

Schema的元素类型

schema元素:

作用:包含已经定义的schema
用法:<xs:schema>
属性:xmlns                targetNamespace             elementFormDefault           attributeFormDefault
 

Element元素

group元素

attribute元素

attributeGroup元素

综合案例:

Schema

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">    <xs:element name="name" type="xs:string"></xs:element>    <xs:element name="health" type="xs:int"></xs:element>    <xs:element name="love" type="xs:int"></xs:element>    <xs:element name="strain" type="xs:string"></xs:element>    <xs:group name="mygroup" >        <xs:sequence>            <xs:element ref="name"></xs:element>            <xs:element ref="health"></xs:element>            <xs:element ref="love"></xs:element>            <xs:element ref="strain"></xs:element>        </xs:sequence>    </xs:group>    <xs:attribute name="id" type="xs:string"></xs:attribute>    <xs:attribute name="color" type="xs:string"></xs:attribute>    <xs:attributeGroup name="myattr">        <xs:attribute ref="id"></xs:attribute>        <xs:attribute ref="color"></xs:attribute>    </xs:attributeGroup>    <xs:element name="dog">        <xs:complexType>                <xs:group ref="mygroup"></xs:group>                <xs:attributeGroup ref="myattr"></xs:attributeGroup>        </xs:complexType>            </xs:element></xs:schema>

xml

<?xml version="1.0" encoding="UTF-8"?><dog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\xx\Desktop\schema\my4.xsd" color="红色" id="id01">    <name/>    <health>10</health>    <love>10</love>    <strain/></dog>

 simpleType元素

 

 

 

综合例子1:schema文件

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">    <xs:element name="name" type="xs:string"></xs:element>        <xs:element name="love" type="xs:int"></xs:element>    <xs:element name="strain" type="xs:string"></xs:element>    <xs:element name="sex" type="xs:string"></xs:element>    <xs:element name="health" type="myhealth"></xs:element>    <xs:element name="birthday" type="listOfDates"></xs:element>    <!--应用在已有的数据类型上面,对已有的数据类型做限制-->    <xs:simpleType name="myhealth">        <xs:restriction base="xs:int">            <xs:minInclusive value="60"></xs:minInclusive>            <xs:maxInclusive value="100"></xs:maxInclusive>        </xs:restriction>    </xs:simpleType>    <xs:simpleType  name="listOfDates">      <xs:list  itemType="xs:date"/>    </xs:simpleType>        <xs:group name="myGroupElement">        <xs:sequence>            <xs:element ref="name"></xs:element>            <xs:element ref="health"></xs:element>            <xs:element ref="love"></xs:element>            <xs:element ref="sex"></xs:element>            <xs:element ref="birthday"></xs:element>        </xs:sequence>    </xs:group>    <xs:attributeGroup name="myattrGroup">        <xs:attribute name="id" type="xs:string" use="required"></xs:attribute>        <xs:attribute name="color" type="xs:string" use="optional"></xs:attribute>        <xs:attribute name="strain" type="xs:string" use="prohibited"></xs:attribute>    </xs:attributeGroup>    <xs:element name="penguin">        <!--匿名内部类-->        <xs:complexType>            <xs:group ref="myGroupElement"></xs:group>            <xs:attributeGroup ref="myattrGroup"></xs:attributeGroup>        </xs:complexType>    </xs:element></xs:schema>

对应的xml文件

<?xml version="1.0" encoding="UTF-8"?><penguin xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema2.xsd" id="p01" color="黑色">    <name>旺财</name>    <health>88</health>    <love>100</love>    <sex>黑狗</sex>    <birthday>2010-01-01 2010-01-01 2010-01-01 2010-01-02</birthday></penguin>

综合例子2

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"><xs:attribute name="allframesize">  <xs:simpleType>    <xs:union>      <xs:simpleType>        <xs:restriction base="roadbikesize"/>      </xs:simpleType>      <xs:simpleType>        <xs:restriction base="mountainbikesize"/>      </xs:simpleType>    </xs:union>  </xs:simpleType></xs:attribute><xs:simpleType name="roadbikesize">  <xs:restriction base="xs:positiveInteger">    <xs:enumeration value="16"/>    <xs:enumeration value="20"/>    <xs:enumeration value="28"/>  </xs:restriction></xs:simpleType><xs:simpleType name="mountainbikesize">  <xs:restriction base="xs:string">    <xs:enumeration value="small"/>    <xs:enumeration value="medium"/>    <xs:enumeration value="large"/>  </xs:restriction></xs:simpleType><xs:element name="myelement">    <xs:complexType>        <xs:sequence>            <xs:element name="name" type="xs:string"></xs:element>        </xs:sequence>        <xs:attribute ref="allframesize"></xs:attribute>    </xs:complexType></xs:element></xs:schema>

对应的xml文件

<?xml version="1.0" encoding="UTF-8"?><myelement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema3.xsd" allframesize="small">    <name/></myelement>

simpleContent元素

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

好了,关于Schema我就讲这么多了,更多的Schema的用法,大家可以参考W3chool,对于Schema文档大家只要能看懂约束即可。