schema规范中:
    1. namespace : schema文件的标识属性,相当于id,每个schema文件需要有一个唯一的namespace值;
    2. targetNameSpace :指定当前schema文件的namespace值,它的值是一个url(很有可能不存在);
    3. xmlns :引入一个schema约束,它的值为一个schema的namespace值
            属性? : 用xmlns属性
            属性值: 对应的schema文件的id(namespace值)
    4.schemaLocation:如果引入的schema不是w3c组织定义,必须指定schema文件的位置;
    5.element :定义标签(常用类型:string,decimal,integer,boolean,date,time)

    6.elementFormDefault:控制元素。有两个取值:"qualified"-在XML文档中使用局部元素时,必须使用限定短名作为前缀;unqualified-在XML文档中使用局部元素时,可以省略限定短名;

    7.attributeFormDefault:控制属性的。用法与elementFormDefault一样;

    8.如果引入了N个约束, 需要给n-1个取别名(如下:xsd为w3c约束的别名);

复杂类型:一个元素如有属性或者包含子元素,那么这个元素就是复杂类型。复杂类型使xsd:complexType定义。复杂类型要么具有简单内容,要么具有复杂内容。内容是指在开始标签和结束标签之间的字符数据和子元素。简单内容是指内容只具有字符数据没有子元素,简单内容是用xsd:simpleContent元素来定义(简单内容要有属性,否则等同于简单类型)。除此之外的就是复杂内容,使用xsd:complexContent来定义。

      xsd:attribute元素的use、default、fixed属性

     use属性指示xsd:attribute元素是否需要出现,其有效值为:optional(可选的,use属性的默认值)、prohibited(禁止使用属性)、required(属性是必须的)。对全局声明的属性不能使用use属性。

 例子:book.xsd

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   targetNamespace="http://www.ciyo.com/bookSchema"
   elementFormDefault="qualified">
   <xsd:element name="bookrack">
      <xsd:complexType>
         <xsd:sequence>
            <!--maxOccurs :限定元素个数,一个书架最多基本书-->
            <xsd:element name="book" maxOccurs="3">
               <!--complexType:复杂类型-->
               <xsd:complexType>
                  <!--sequence:有顺序-->
                  <xsd:sequence>
                     <xsd:element name="name" type="xsd:string" />
                     <xsd:element name="author">
                        <xsd:complexType>
                           <xsd:sequence>
                              <xsd:element name="firstname" type="xsd:string"/>
                              <xsd:element name="lastname" type="xsd:string" />
                           </xsd:sequence>
                        </xsd:complexType>
                     </xsd:element>
                     <xsd:element name="price">
                        <!--simpleType:简单类型-->
                        <xsd:simpleType>
                           <!--restriction:限定-->
                           <xsd:restriction base="xsd:integer">
                              <!--minInclusive:最小值;pattern :正则;length:长度;enumeration:枚举;-->
                              <xsd:minInclusive value="0"/>
                              <!--maxInclusive:最大值-->
                              <xsd:maxInclusive value="120"/>
                           </xsd:restriction>
                        </xsd:simpleType>
                     </xsd:element>
                     <xsd:element name="desc" type="remark"/>
                  </xsd:sequence>
               </xsd:complexType>
            </xsd:element>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
   <!--具有简单内容的复杂类型扩展-->
   <!--complexType:复杂类型-->
   <xsd:complexType name="remark">
      <!--simpleContent:简单内容-->
      <xsd:simpleContent>
         <xsd:extension base="xsd:string">
            <!--use属性: optional:可选; required:必填;prohibited:禁用属性-->
            <!--default属性:默认值 EN;-->
            <!--fixed属性:指示固定值,不管该属性出现不出现,该属性的值都是EN-->
            <xsd:attribute name="lang" use="required" default="EN"/>
         </xsd:extension>
      </xsd:simpleContent>
   </xsd:complexType>
</xsd:schema>

  book.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--书架-->
<bookrack xmlns="http://www.ciyo.com/bookSchema"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
   xsd:schemaLocation="http://www.ciyo.com/bookSchema book.xsd">
   <!--书-->
   <book>
      <!--书名-->
      <name>JavaScript开发</name>
      <!--作者-->
      <author>
         <firstname>John</firstname>
         <lastname>Smith</lastname>
      </author>
      <!--价格-->
      <price>100</price>
      <!--描述-->
      <desc lang="EN">EN</desc>
   </book>
</bookrack>

派生复杂类型--扩展

      当从简单类型或具有简单内容的复杂类型派生复杂类型时(注意:简单内容直接或间接派生出来的复杂类型也必须是简单内容,简单内容不能派生复杂内容),使用xs:simpleContent元素,如果是扩展派生,使用xs:extension元素,如果是限制派生,使用xs:restriction元素。

 1.扩展简单内容

        扩展简单内容可以从简单类型或具有简单内容的复杂类型扩展。由于不能通过扩展简单内容来得到复杂内容,因此对简单内容的扩展只能是添加新的属性

 employee.xsd (标签employee属性number扩展了属性birthdate)

 (1).从具有简单内容的复杂类型扩展

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   targetNamespace="http://www.ciyo.com/employeeSchema"
   elementFormDefault="qualified">
   <xsd:element name="employee" type="expandEmpType"/>
   <xsd:complexType name="empType">
      <xsd:simpleContent>
         <xsd:extension base="xsd:token">
            <xsd:attribute name="number" type="xsd:token" use="required"/>
         </xsd:extension>
      </xsd:simpleContent>
   </xsd:complexType>
   <xsd:complexType name="expandEmpType">
      <xsd:simpleContent>
         <xsd:extension base="empType">
            <xsd:attribute name="birthdate" type="xsd:date" use="required"/>
         </xsd:extension>
      </xsd:simpleContent>
   </xsd:complexType>
</xsd:schema>

  (2).从简单类型扩展

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   targetNamespace="http://www.ciyo.com/employeeSchema"
   elementFormDefault="qualified">
   <xsd:element name="employee" type="expandEmpType"/>
   <xsd:complexType name="expandEmpType">
      <xsd:simpleContent>
         <xsd:extension base="xsd:string">
            <xsd:attribute name="number" type="xsd:string" use="required"/>
            <xsd:attribute name="birthdate" type="xsd:date" use="required"/>
         </xsd:extension>
      </xsd:simpleContent>
   </xsd:complexType>
</xsd:schema>

  employee.xml

<?xml version="1.0" encoding="UTF-8"?>
<employee xmlns="http://www.ciyo.com/employeeSchema"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
   xsd:schemaLocation="http://www.ciyo.com/employeeSchema employee.xsd"

        number="100" birthdate="2017-12-25"/>

2.扩展纯元素内容

       从纯元素内容的复杂类型扩展,我们可以在基类型的内容模型最后添加新的与元素或属性。模式处理器会把基类型的内容模型和新增的内容模型合并到一个sequence中。注意不能对一个all组的基类型进行扩展添加新的元素(添加属性是可以的)。

 fruit.xsd

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   targetNamespace="http://www.ciyo.com/fruitSchema"
   elementFormDefault="qualified">
   <xsd:element name="fruit" type="expandedFruitType"/>
   <xsd:complexType name="fruitType">
      <xsd:complexContent>
         <xsd:restriction base="xsd:anyType">
            <xsd:sequence>
               <xsd:element name="Apple" type="xsd:string"/>
               <xsd:element name="Pear" type="xsd:string"/>
            </xsd:sequence>
         </xsd:restriction>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="expandedFruitType">
      <xsd:complexContent>
         <xsd:extension base="fruitType">
            <xsd:sequence>
               <xsd:element name="Banane" type="xsd:string"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
</xsd:schema>

  fruit.xml

<?xml version="1.0" encoding="UTF-8"?>
<fruit xmlns="http://www.ciyo.com/fruitSchema"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
   xsd:schemaLocation="http://www.ciyo.com/fruitSchema fruit.xsd">
   <Apple>apple</Apple>
   <Banane>banane</Banane>
   <Pear>pear</Pear>
</fruit>

3.扩展混合内容

     混合内容的扩展跟纯元素的扩展类似,唯一的要求是派生类型也必须具有混合内容,也就是mixed=true。

 employee.xsd

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   targetNamespace="http://www.ciyo.com/employeeSchema"
   elementFormDefault="qualified">
   <xsd:element name="employee" type="expandedEmpType"/>
   <xsd:complexType name="empType" mixed="true">
      <xsd:sequence>
         <xsd:element name="name" type="xsd:string"/>
         <xsd:element name="age" type="xsd:string"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="expandedEmpType" mixed="true">
      <xsd:complexContent>
         <xsd:extension base="empType">
            <xsd:sequence>
               <xsd:element name="salary" type="xsd:integer"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
</xsd:schema>

  employee.xml

<?xml version="1.0" encoding="UTF-8"?>
<employee xmlns="http://www.ciyo.com/employeeSchema"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
   xsd:schemaLocation="http://www.ciyo.com/employeeSchema employee.xsd">
   <name>Jon</name>
   <age>28</age>
   <salary>15</salary>
</employee>

4.扩展空内容

   从空内容类型扩展,派生类型可以具有纯元素内容,也可以就混合内容。

  employee.xsd

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   targetNamespace="http://www.ciyo.com/employeeSchema"
   elementFormDefault="qualified">
   <xsd:element name="employee" type="extendedEmpType"/>
   <xsd:complexType name="empType">
      <xsd:attribute name="number" type="xsd:string" use="required"/>
   </xsd:complexType>
   <xsd:complexType name="extendedEmpType" mixed="true">
      <xsd:complexContent>
         <xsd:extension base="empType">
            <xsd:sequence>
               <xsd:element name="name" type="xsd:string"/>
               <xsd:element name="age" type="xsd:integer"/>
            </xsd:sequence>
            <xsd:attribute name="remark" use="required"/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
</xsd:schema>

  employee.xml

<?xml version="1.0" encoding="UTF-8"?>
<employee xmlns="http://www.ciyo.com/employeeSchema"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
   xsd:schemaLocation="http://www.ciyo.com/employeeSchema employee.xsd"

        number="1" remark="普通员工">
   <name>Tom</name>
   <age>27</age>
</employee>

restriction数据类型的限定:


 参考:http://blog.csdn.net/tuolingss/article/details/8541687