24XML Schema
DTD 的局限性 –DTD不遵守XML语法(写XML文档实例时候用一种语法,写DTD的时候用另外一种语法) –DTD数据类型有限(与数据库数据类型不一致) –DTD不可扩展 –DTD不支持命名空间(命名冲突) ?Schema的新特性 –Schema基于XML语法 –Schema可以用能处理XML文档的工具处理 –Schema大大扩充了数据类型,可以自定义数据类型 –Schema支持元素的继承—Object-Oriented’ –Schema支持属性组
1. Schema(模式):其作用与dtd一样,也是用于验证XML文档的有效性,只不过它提供了比dtd更强大的功能和更细粒度的数据类型,另外Schema还可以自定义数据类型。此外,Schema也是一个XML文件,而dtd则不是。
schema的数据类型
Element
Group
attribute
<?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="name" type="xs:string" /> <xs:element name="author"> <xs:complexType> <xs:attribute name="male" use="required"/> </xs:complexType> </xs:element> <xs:element name="publish" type="myType"/> <xs:group name="book" > <xs:sequence > <xs:element ref="name" /> <xs:element ref="author"/> <xs:element ref="publish"/> </xs:sequence> </xs:group> <xs:element name="books" > <xs:complexType> <xs:sequence maxOccurs="unbounded"> <xs:group ref="book"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?> <books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="sch.xsd"> <name /> <author male="ni"></author> <publish>2012-10-02</publish> <name /> <author male="ni"></author> <publish>2012-10-02</publish> </books>
SimpleType 作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息?属性:name?内容:应用已经存在的简单类型,三种方式:–restrict→限定一个范围–list→从列表中选择–union→包含一个值的结合
1.子元素为:<xs:restriction>定义一个约束条件
<xs:simpleType name="freezeboilrangeInteger"> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> 2.子元素为:<xs:list>
<xs:simpleType name="listOfDates"> <xs:list itemType="xs:date“/> </xs:simpleType> 3子元素为:<xs:union> 从一个特定简单数据类型的集合中选择定义一个简单类型元素
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <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="46"/> <xs:enumeration value="52"/> <xs:enumeration value="55"/> </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:schema> 3. SimpleType与ComplexType的区别: 3)当需要基于内置的基本数据类型定义一个新的数据类型时,用simpleType。
chioce 作用:允许唯一的一个元素从一个组中被选择
<?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="1"> <xs:element name="apple" type="xs:string"/> <xs:element name="pear" type="xs:string"/> </xs:choice> </xs:complexType> <xs:element name="fruit" type="myType"/> </xs:schema> Sequence 作用:给一组元素一个特定的序列 整体 而且有序,下面代码表示 elephant bear giraffe 都必须至少出现一次,且顺序不能颠倒。当elephant出现第二次的时候,bear giraffe也必须出现
<xs:element name="zooAnimals"> <xs:complexType> <xs:sequence minOccurs="1" maxOccurs="2"> <xs:element name="elephant"/> <xs:element name="bear"/> <xs:element name="giraffe"/> </xs:sequence> </xs:complexType> </xs:element>
一个完整的schema文档
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/po.xsd" targetNamespace="http://tempuri.org/po.xsd"> <xs:element name="purchaSEOrder" type="PurchaSEOrderType"/> <xs:element name="comment" type="xs:string"/> <xs:complexType name="PurchaSEOrderType"> <xs:sequence> <xs:element name="shipTo" type="USAddress"/> <xs:element name="billTo" type="USAddress"/> <xs:element ref="comment" minOccurs="0"/> <xs:element name="items" type="Items"/> </xs:sequence> <xs:attribute name="orderDate" type="xs:date"/> </xs:complexType> <xs:complexType name="USAddress"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="street" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> </xs:sequence> <xs:attribute name="country" type="xs:NMTOKEN" fixed="US"/> </xs:complexType> <xs:complexType name="Items"> <xs:sequence> <xs:element name="item" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="productName" type="xs:string"/> <xs:element name="quantity"> <xs:simpleType> <xs:restriction base="xs:positiveInteger"> <xs:maxExclusive value="100"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="USPrice" type="xs:decimal"/> <xs:element ref="comment" minOccurs="0"/> <xs:element name="shipDate" type="xs:date" minOccurs="0"/> </xs:sequence> <xs:attribute name="partNum" type="SKU" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <!-- Stock Keeping Unit,a code for identifying products --> <xs:simpleType name="SKU"> <xs:restriction base="xs:integer"> <xs:minInclusive value="2"/> <xs:maxInclusive value="10"/> </xs:restriction> </xs:simpleType> </xs:schema> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |