schema概述

来源:互联网 发布:股票交易记录软件 编辑:程序博客网 时间:2024/06/16 22:07

Schema

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

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

Schema基本格式及与DTD区别

区别

l       DTD 的局限性

§         DTD不遵守XML语法(写XML文档实例时候用一种语法,写DTD的时候用另外一种语法)

§         DTD数据类型有限(与数据库数据类型不一致)

§         DTD不可扩展

§         DTD不支持命名空间(命名冲突)

l       Schema的新特性

§         Schema基于XML语法

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

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

§         Schema支持元素的继承—Object-Oriented’ish

§         Schema支持属性组

schema元素

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

元素

<xs:element name="cat" type="xs:string"/>

<xs:element name="dog" type="xs:string"/>

<xs:element name="pets">

  <xs:complexType>

    <xs:choice minOccurs="0" maxOccurs="unbounded">

      <xs:element ref="cat"/>

      <xs:element ref="dog"/>

    </xs:choice>

  </xs:complexType>

</xs:element>

group元素

  • 作用:把一组元素声明组合在一起,以便它们能够一起被复合类型应用
  • 属性:name/ref
  • 示例:

<xs:element name="thing1" type="xs:string"/>

<xs:element name="thing2" type="xs:string"/>

<xs:attribute name="myAttribute" type="xs:decimal"/>

<xs:group name="myGroupOfThings">

 <xs:sequence>

  <xs:element ref="thing1"/>

  <xs:element ref="thing2"/>

</xs:sequence>

</xs:group>

<xs:complexType name="myComplexType">

  <xs:group ref="myGroupOfThings"/>

  <xs:attribute ref="myAttribute"/>

</xs:complexType>

attribute元素

  • 作用:声明一个属性
  • 属性:name/type/ref/use
  • 示例:

<xs:complexType name="myComplexType">

  <xs:attribute name="mybaseattribute" type="xs:string" use="required"/>

</xs:complexType>

attributeGroup元素

  • 作用:把一组属性声明组合在一起,以便可以被复合类型应用
  • 属性:name/ref
  • 示例:

<xs:attributeGroup name="myAttributeGroup">

    <xs:attribute name="someattribute1" type="xs:integer"/>

    <xs:attribute name="someattribute2" type="xs:string"/>

</xs:attributeGroup>

<xs:complexType name="myElementType">

    <xs:attributeGroup ref="myAttributeGroup"/>

</xs:complexType>

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>

complexType元素

  • 作用:定义一个复合类型,它决定了一组元素和属性值的约束和相关信息
  • 属性:name
  • 示例:

<xs:complexType name="internationalShoeSize">

 <xs:simpleContent>

  <xs:extension base="xs:decimal">

   <xs:attribute name="sizing" type="xs:string" />

  </xs:extension>

 </xs:simpleContent>

</xs:complexType>

<xs:element name="myShoeSize" type="internationalShoeSize"/>

complexTypesimpleType区别

  • simpleType类型的元素中不能包含元素或者属性。
  • 当需要声明一个元素的子元素和/或属性时,用complexType
  • 当需要基于内置的基本数据类型定义一个新的数据类型时,用simpleType

simpleContent元素

  • 作用:应用于complexType,对它的内容进行约束和扩展。
  • 示例:

<xs:element name="shoeSize">

  <xs:complexType>

    <xs:simpleContent>

      <xs:extension base="xs:decimal">

        <xs:attribute name="sizing">

         <xs:simpleType>

          <xs:restriction base="xs:string">

            <xs:enumeration value="US"/>

            <xs:enumeration value="European"/>

            <xs:enumeration value="UK"/>

          </xs:restriction>

         </xs:simpleType>

        </xs:attribute>

      </xs:extension>

    </xs:simpleContent>

  </xs:complexType>

</xs:element>

choice元素

  • 作用:允许唯一的一个元素从一个组中被选择
  • 属性:minOccurs/maxOccurs
  • 示例:

<xs:complexType name="chadState">

 <xs:choice minOccurs="1" maxOccurs="1">

  <xs:element ref="selected"/>

  <xs:element ref="unselected"/>

  <xs:element ref="dimpled"/>

  <xs:element ref="perforated"/>

 </xs:choice>

 <xs:attribute name="candidate" type="candidateType"/>

</xs:complexType>

unique元素

  • 作用:定义一个属性或元素值,它必须在一个特定范围内。
  • 示例:

xs:complexType name="customerOrderType">

 <xs:sequence>

  <xs:element name="item" minOccurs="0" maxOccurs="unbounded">

    <xs:complexType>

    <xs:attribute name="itemID" type="xs:string"/>

    </xs:complexType>

  </xs:element>

 </xs:sequence>

 <xs:attribute name="CustomerID" type="xs:string"/>

</xs:complexType>

<xs:element name="ordersByCustomer">

 <xs:complexType>

    <xs:sequence>

     <xs:element name="customerOrders" type="customerOrderType"

       minOccurs="0" maxOccurs="unbounded"/>

    </xs:sequence>

 </xs:complexType>

 <xs:unique name="oneCustomerOrdersforEachCustomerID">

  <xs:selector xpath="mstns:customerOrders"/>

  <xs:field xpath="@customerID"/>

 </xs:unique>

</xs:element>

sequence元素

  • 作用:给一组元素一个特定的序列
  • 示例:

 <xs:element name="zooAnimals">

      <xs:complexType>

            <xs:sequence minOccurs="0" maxOccurs="unbounded">

               <xs:element name="elephant"/>

               <xs:element name="bear"/>

               <xs:element name="giraffe"/>

            </xs:sequence>

      </xs:complexType>

</xs:element>

schema的数据及元素类型声明XML文档的元素和属性

  • 声明元素
    • <xs:element>
  • 声明属性
    • <xs:attribute>

声明元素的实例

声明第一个元素

<xs:element name="cat" type="xs:string"/>

<xs:element name="dog" type="xs:string"/>

<xs:element name="redDog" type="xs:string" substitutionGroup="dog" />

<xs:element name="brownDog" type="xs:string" substitutionGroup ="dog" />

<xs:element name="pets">

  <xs:complexType>

    <xs:choice minOccurs="0" maxOccurs="unbounded">

      <xs:element ref="cat"/>

      <xs:element ref="dog"/>

    </xs:choice>

  </xs:complexType>

</xs:element>

声明元素的方法

使用内置的数据类型

<xs:element name="cat" type="xs:string"/>

<xs:element name="dog" type="xs:string"/>

<xs:element name="redDog" type="xs:string" substitutionGroup="dog" />

<xs:element name="brownDog" type="xs:string" substitutionGroup ="dog" />

声明元素的方法

使用用户定义的simpleType

<xs:simpleType name="shapes">

  <xs:restriction base="xs:string">

    <xs:enumeration value="triangle"/>

    <xs:enumeration value="rectangle"/>

    <xs:enumeration value="square"/>

  </xs:restriction>

</xs:simpleType>

<xs:element name="geometry" type="shapes"/>

<xs:element name="geometry">

  <xs:simpleType>

    <xs:restriction base="xs:string">

      <xs:enumeration value="triangle"/>

      <xs:enumeration value="rectangle"/>

      <xs:enumeration value="square"/>

    </xs:restriction>

  </xs:simpleType>

</xs:element>

声明元素的方法

引用已经定义的元素

      <xs:complexType name="PersonType">

            <xs:sequence>

                <xs:element name="Title" type="xs:string"/>

                <xs:element name="FirstName" type="xs:string"/>

                <xs:element name="Surname" type="xs:string"/>

            </xsd:sequence>

      </xs:complexType>

      <xs:element ref="PersonType"/>

声明元素的方法

使用complexType

<xs:element name="pets">

  <xs:complexType>

    <xs:choice minOccurs="0" maxOccurs="unbounded">

      <xs:element ref="cat"/>

      <xs:element ref="dog"/>

    </xs:choice>

  </xs:complexType>

</xs:element>

Schema样例详解

<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema

     targetNamespace="http://tempuri.org/po.xsd"

     xmlns="http://tempuri.org/po.xsd" elementFormDefault="qualified"(根元素)>

<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>

子元素

shipTo    billTo   coment   items

属性orderDate

Schema样例详解

<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>

Schema样例详解

<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>

Schema样例详解

</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:string">

   <xs:pattern value="/d{3}-[A-Z]{2}"/>

  </xs:restriction>

 </xs:simpleType>

</xs:schema>

总结

l       Schema是另一种文档类型定义,它遵循XML的语言规范。

l       Schema是可扩展的,支持命名空间;

l       Schema支持更多的数据类型与元素类型;

l       Schemaelement元素声明元素,用attribute声明元素的属性;

l       SchemasimpleType定义简单类型,用complexType定义复杂类型。

 

 

 

原创粉丝点击